MCPHerramientas MCP/Publicaciones

Publicaciones

Crea, publica y analiza publicaciones en redes sociales, incluidas las publicaciones promocionadas.

create_post

Writeposts:write

Create a post for a location (or client) and submit it to the selected platforms. Publishes immediately unless scheduledFor is set or draft is true. A requested platform with no active connection never fails this call — the post is still created (as a draft if nothing resolved), and the response is `{ status: "no_connection", missingPlatforms, scope, post: { id, status } }` instead of the usual `{ id, status }` for whichever platforms couldn't resolve a connection. Compose what to tell the user from that data; do not assume the call failed just because `status` is "no_connection" — the content was saved. Likewise a post that cannot go live yet because a REQUIRED FIELD is absent (an event with no start/end date, a caption-less announcement, Instagram with no image) is saved as a draft and answers `{ status: "incomplete", missingFields, scope, post }`. Both gaps can appear together, in which case `status` is "no_connection" and `missingFields` rides alongside it — tell the user about BOTH at once rather than letting them discover the second after fixing the first. In every one of these cases the content EXISTS as a draft: say what was saved, name what it needs, point at where to fix it, and never report it as a failure. PLATFORM RULES (enforced — violations rejected): Post types: `announcement` works on every platform; `event` and `offer` are Google-only (any social platform ⇒ must be announcement). Caption char limits: google 1500, facebook 30000, instagram 2200, x 280 (X thread mode is exempt from the 280 limit), linkedin 2000, pinterest 500, mastodon 500, bluesky 300. Media (per platform, using each item's `platform`): facebook ≤10 images OR ≤1 video, no mix (carousel = 2–10 images only, per-card headline ≤80 / description ≤200); instagram requires ≥1 media, ≤10 images OR ≤1 video, no image/video mix; x ≤4 images OR ≤1 video, no mix; linkedin ≤5 images OR ≤1 video, no mix; pinterest image-only, exactly 1, required; mastodon ≤4 images OR ≤1 video, no mix. Google event ⇒ eventTitle (≤58 chars) + eventStartAt + eventEndAt (end after start) required. Google offer ⇒ ctaType + ctaUrl required. scheduledFor must be in the future. Drafts (draft=true) skip required-field checks but still enforce all structural checks above.

Parámetros
locationIdstringopcional
The location's id (from list_locations).
clientIdstringopcional
Client id (for brand-level posts), from list_clients.
namestringobligatorio
Internal post name/label. Required, non-empty, ≤255 characters.
postType"announcement" | "event" | "offer"obligatorio
Post type. `announcement` is supported by all platforms. `event` and `offer` are GOOGLE-ONLY — if any social platform (facebook, instagram, x, linkedin, pinterest, mastodon, bluesky) is selected, postType must be `announcement`.
platforms("google" | "facebook" | "instagram" | "x" | "linkedin" | "pinterest" | "mastodon" | "bluesky" | "threads" | "tiktok")[]obligatorio
Target platforms. Valid values: google, facebook, instagram, x, linkedin, pinterest, mastodon, bluesky. At least one is required; unknown values are rejected. e.g. ["google","facebook","instagram"].
messageGooglestringopcional
Caption for Google. Required when `google` is selected (unless draft). Max 1500 characters.
messageFacebookstringopcional
Shared social caption — used by facebook, instagram, x, linkedin, pinterest, mastodon, bluesky. Required when any of those is selected, unless draft. It is validated against EACH selected platform's character limit: facebook 30000, instagram 2200, x 280 (X thread mode is exempt from the 280 limit), linkedin 2000, pinterest 500, mastodon 500, bluesky 300. The message must fit the smallest limit among the selected social platforms.
ctaType"learn_more" | "sign_up" | "order_online" | "book" | "buy" | "call_now"opcional
Call-to-action type. For a Google `offer`, ctaType AND ctaUrl are both required. learn_more/sign_up/order_online/book/buy all require ctaUrl; call_now does not.
ctaUrlstringopcional
Call-to-action URL. Required for a Google offer and for CTA types other than call_now.
mediaUrlsobject[]opcional
Media items, one entry per platform attachment: [{ "url", "platform", "type": "image"|"video" }]. The `platform` on each item must be one of the target platforms and controls which per-platform media rules apply. Per-platform limits (violations are rejected): google = no media constraints enforced here; facebook = ≤10 images OR ≤1 video, no mix (carousel: 2–10 image cards, images only); instagram = requires ≥1 item, ≤10 images OR ≤1 video, images and video cannot be mixed; x = ≤4 images OR ≤1 video, no mix; linkedin = ≤5 images OR ≤1 video, no mix; pinterest = image only (no video), exactly 1 image, required; mastodon = ≤4 images OR ≤1 video, no mix.
urlstringopcional
Publicly reachable media URL (http/https).
platform"google" | "facebook" | "instagram" | "x" | "linkedin" | "pinterest" | "mastodon" | "bluesky"opcional
Which target platform this media attaches to.
type"image" | "video"opcional
Media kind.
eventTitlestringopcional
Event/offer title. For a Google event or offer this is required (unless draft) and must be ≤58 characters.
eventStartAtstringopcional
Event/offer start (ISO timestamp). Required for Google event/offer posts (unless draft).
eventEndAtstringopcional
Event/offer end (ISO timestamp). Required for Google event/offer posts (unless draft); must be after the start.
offerTermsstringopcional
Offer terms (offer posts).
offerCouponCodestringopcional
Offer coupon code.
offerRedeemUrlstringopcional
Offer redemption URL.
scheduledForstringopcional
Schedule for this ISO timestamp (must be in the future; omit to publish now).
draftbooleanopcional
Save as draft without publishing. Drafts skip publish-gating 'required' checks (required message, required media, required event/offer fields) but STILL enforce structural checks: character limits, media counts, media mixing, valid enums, carousel bounds, and date ordering.
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_post",
    "arguments": {
      "name": "string",
      "postType": "announcement",
      "platforms": [
        "google"
      ]
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/update_post

update_post

Writeposts:write

Update an editable post (draft/scheduled/error/active). Reconciles platform submissions. A requested platform with no active connection never fails this call either (same as create_post) and the response is `{ status: "no_connection", missingPlatforms, scope, post: { id, status } }` instead of the usual `{ id, status }`. PLATFORM RULES (enforced — violations rejected): Post types: `announcement` works on every platform; `event` and `offer` are Google-only (any social platform ⇒ must be announcement). Caption char limits: google 1500, facebook 30000, instagram 2200, x 280 (X thread mode is exempt from the 280 limit), linkedin 2000, pinterest 500, mastodon 500, bluesky 300. Media (per platform, using each item's `platform`): facebook ≤10 images OR ≤1 video, no mix (carousel = 2–10 images only, per-card headline ≤80 / description ≤200); instagram requires ≥1 media, ≤10 images OR ≤1 video, no image/video mix; x ≤4 images OR ≤1 video, no mix; linkedin ≤5 images OR ≤1 video, no mix; pinterest image-only, exactly 1, required; mastodon ≤4 images OR ≤1 video, no mix. Google event ⇒ eventTitle (≤58 chars) + eventStartAt + eventEndAt (end after start) required. Google offer ⇒ ctaType + ctaUrl required. scheduledFor must be in the future. Drafts (draft=true) skip required-field checks but still enforce all structural checks above.

Parámetros
postIdstringobligatorio
Post id (from list_posts or get_post).
namestringopcional
Internal post name/label. Required, non-empty, ≤255 characters.
postType"announcement" | "event" | "offer"opcional
Post type. `announcement` is supported by all platforms. `event` and `offer` are GOOGLE-ONLY — if any social platform (facebook, instagram, x, linkedin, pinterest, mastodon, bluesky) is selected, postType must be `announcement`.
platforms("google" | "facebook" | "instagram" | "x" | "linkedin" | "pinterest" | "mastodon" | "bluesky" | "threads" | "tiktok")[]opcional
Target platforms. Valid values: google, facebook, instagram, x, linkedin, pinterest, mastodon, bluesky. At least one is required; unknown values are rejected. e.g. ["google","facebook","instagram"].
messageGooglestringopcional
Caption for Google. Required when `google` is selected (unless draft). Max 1500 characters.
messageFacebookstringopcional
Shared social caption — used by facebook, instagram, x, linkedin, pinterest, mastodon, bluesky. Required when any of those is selected, unless draft. It is validated against EACH selected platform's character limit: facebook 30000, instagram 2200, x 280 (X thread mode is exempt from the 280 limit), linkedin 2000, pinterest 500, mastodon 500, bluesky 300. The message must fit the smallest limit among the selected social platforms.
ctaType"learn_more" | "sign_up" | "order_online" | "book" | "buy" | "call_now"opcional
Call-to-action type. For a Google `offer`, ctaType AND ctaUrl are both required. learn_more/sign_up/order_online/book/buy all require ctaUrl; call_now does not.
ctaUrlstringopcional
Call-to-action URL. Required for a Google offer and for CTA types other than call_now.
mediaUrlsobject[]opcional
Media items, one entry per platform attachment: [{ "url", "platform", "type": "image"|"video" }]. The `platform` on each item must be one of the target platforms and controls which per-platform media rules apply. Per-platform limits (violations are rejected): google = no media constraints enforced here; facebook = ≤10 images OR ≤1 video, no mix (carousel: 2–10 image cards, images only); instagram = requires ≥1 item, ≤10 images OR ≤1 video, images and video cannot be mixed; x = ≤4 images OR ≤1 video, no mix; linkedin = ≤5 images OR ≤1 video, no mix; pinterest = image only (no video), exactly 1 image, required; mastodon = ≤4 images OR ≤1 video, no mix.
urlstringopcional
Publicly reachable media URL (http/https).
platform"google" | "facebook" | "instagram" | "x" | "linkedin" | "pinterest" | "mastodon" | "bluesky"opcional
Which target platform this media attaches to.
type"image" | "video"opcional
Media kind.
eventTitlestringopcional
Event/offer title. For a Google event or offer this is required (unless draft) and must be ≤58 characters.
eventStartAtstringopcional
Event/offer start (ISO timestamp). Required for Google event/offer posts (unless draft).
eventEndAtstringopcional
Event/offer end (ISO timestamp). Required for Google event/offer posts (unless draft); must be after the start.
offerTermsstringopcional
Offer terms (offer posts).
offerCouponCodestringopcional
Offer coupon code.
offerRedeemUrlstringopcional
Offer redemption URL.
scheduledForstringopcional
Schedule for this ISO timestamp (must be in the future; omit to publish now).
draftbooleanopcional
Save as draft without publishing. Drafts skip publish-gating 'required' checks (required message, required media, required event/offer fields) but STILL enforce structural checks: character limits, media counts, media mixing, valid enums, carousel bounds, and date ordering.
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "update_post",
    "arguments": {
      "postId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/get_post

get_post

Readposts:read

Get a post with per-platform submission performance (agency-scoped).

Parámetros
postIdstringobligatorio
Post id (from list_posts).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_post",
    "arguments": {
      "postId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/list_posts

list_posts

Readposts:read

List posts for a location with per-platform state and aggregate stats (agency-scoped).

Parámetros
locationIdstringobligatorio
The location's id (from list_locations).
platform"google" | "facebook" | "instagram" | "x" | "linkedin" | "pinterest" | "mastodon" | "bluesky" | "threads" | "tiktok"opcional
Filter by platform.
type"announcement" | "event" | "offer"opcional
Filter by post type.
status"draft" | "scheduled" | "error" | "active" | "incomplete"opcional
Filter by status.
fromstringopcional
Created from (ISO).
tostringopcional
Created to (ISO).
searchstringopcional
Name contains (case-insensitive).
limitnumberopcional
Max rows to return (1–200, default 50).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_posts",
    "arguments": {
      "locationId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/delete_post

delete_post

Writeposts:write

Delete a post and unpublish it from its platforms. Unpublishes every platform first, then archives the post ONLY IF every platform unpublish succeeded — this never permanently deletes the row; it just stops appearing anywhere in the API. If even one platform fails to unpublish, nothing is archived — the call still succeeds (no throw) but returns `ok: false` with a `failed` list; check `ok` rather than assuming the post is gone.

Parámetros
postIdstringobligatorio
Post id (from list_posts).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "delete_post",
    "arguments": {
      "postId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/publish_post_now

publish_post_now

Writeposts:write

Force-submit a draft/errored post now (retries pending/errored platform submissions). Throws if the post is scheduled for a future time — cancel or wait for the schedule instead. A no-op (no error, nothing retried) if there's nothing pending or errored to retry.

Parámetros
postIdstringobligatorio
Post id (from list_posts).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "publish_post_now",
    "arguments": {
      "postId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/get_post_analytics

get_post_analytics

Readposts:read

See how posts are performing — engagement, views, clicks, impressions over time. Read-only analytics rollup across a client's brand connections (summary, byPlatform, trends, top posts).

Parámetros
clientIdstringobligatorio
Client id (from list_clients).
fromstringopcional
From (ISO).
tostringopcional
To (ISO).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_post_analytics",
    "arguments": {
      "clientId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/get_posts_client_rollup

get_posts_client_rollup

Readposts:read

Posts "All locations" rollup for a client — the stat cards + location health breakdown shown when a client is selected with no specific location. Returns locationCount, healthCounts (errors / notSetUp / new / silent / quiet / active — mutually exclusive per-location classification based on connection errors, posting recency, and engagement), stats for the last 30 days (totalPosts, totalEngagement, totalImpressions, totalClicks, avgPostsPerWeek) with prevStats for the prior 30 days (for delta display), and missingBrandPlatforms (brand-level social platforms not yet connected for this client). Pass locationId to narrow the stat cards to one location while still reporting health counts for the whole client. Distinct from get_post_analytics (that one is trend charts/top posts); this is the health/rollup view.

Parámetros
clientIdstringobligatorio
The client to roll up (required, from list_clients).
locationIdstringopcional
Narrow the stat cards to one location (from list_locations), while healthCounts still covers the whole client.
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_posts_client_rollup",
    "arguments": {
      "clientId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/create_post_boost

create_post_boost

Writeposts:write

Boost a post with paid ad spend through a connected ad account — this spends real money. dailyBudget (minor currency units, e.g. cents) and durationDays are ALWAYS required, regardless of whether you also pass boostConfigId; if boostConfigId is given, only its adAccountId/targeting/publisherPlatforms/delayHours are used as defaults for whatever you don't specify — its own saved budget is never used silently. Pass postSubmissionId to boost an ALREADY-PUBLISHED post's live submission (spends immediately). Pass postId (+ platform or connectionId) instead to pre-configure a boost on a post that hasn't published yet — it stays queued (no spend) and only starts once that post's submission goes live. adAccountId must belong to a connected account (see list_ad_accounts); use select_ad_account first if none is selected.

Parámetros
postSubmissionIdstringopcional
An already-published post's submission id — boosts it immediately. Use this OR postId, not both.
postIdstringopcional
A not-yet-published post's id — pre-configures a deferred boost. Requires platform or connectionId.
platformstringopcional
Which platform submission to boost, when using postId (e.g. "facebook").
connectionIdstringopcional
The exact connection to boost, when using postId. Preferred over platform when the post has multiple submissions on the same platform.
boostConfigIdstringopcional
A saved boost config (from list_boost_configs) to source adAccountId/targeting/publisherPlatforms/delayHours defaults from. Its budget/duration are NOT used — pass dailyBudget/durationDays explicitly regardless.
adAccountIdstringopcional
The ad account to spend from (from list_ad_accounts). Required unless boostConfigId supplies one.
targetingobjectopcional
Ad targeting. All fields optional — omitted ones use the platform's defaults / broad targeting.
ageMinnumberopcional
Minimum age.
ageMaxnumberopcional
Maximum age.
gendersnumber[]opcional
Platform gender codes to target.
geoLocationsobjectopcional
Geographic targeting.
countriesstring[]opcional
ISO country codes.
regionsstring[]opcional
Region/state names or ids.
citiesstring[]opcional
City names or ids.
zipsstring[]opcional
Postal/ZIP codes.
interestsobject[]opcional
Interest targeting.
idstringopcional
namestringopcional
publisherPlatformsstring[]opcional
Platform surfaces to run on, e.g. ["facebook", "instagram"].
dailyBudgetnumberobligatorio
Daily budget in minor currency units (cents), e.g. 2500 for $25.00/day. REQUIRED. Must be positive and no more than 500000 (this MCP tool's own safety cap — not enforced anywhere else in the app, including the dashboard UI).
durationDaysnumberobligatorio
How many days the boost runs for. REQUIRED. Must be between 1 and 90.
delayHoursnumberopcional
Hours to wait after the post goes live before spend starts. Defaults to 0 (or the boostConfig's, if given).
publisherPlatformsstring[]opcional
Platform surfaces to run on, e.g. ["facebook", "instagram"].
scheduledStartstringopcional
An exact ISO datetime to start spend at, instead of delayHours from publish time.
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_post_boost",
    "arguments": {
      "dailyBudget": 0,
      "durationDays": 0
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/stop_post_boost

stop_post_boost

Writeposts:write

Stop a LIVE boost that's already spending on the platform — halts real in-flight ad spend. This cannot be resumed; a new boost would need to be created. To cancel a boost that hasn't gone live yet (still queued, awaiting the post to publish, no spend yet), use cancel_deferred_boost instead. Identify the boost by its adRunId — there is currently no tool to list/look one up; the only way to learn it is from create_post_boost's own response when the boost was created.

Parámetros
adRunIdstringobligatorio
The id of the live ad run to stop (required).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "stop_post_boost",
    "arguments": {
      "adRunId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.

MCPHerramientas MCP/Publicaciones/cancel_deferred_boost

cancel_deferred_boost

Writeposts:write

Cancel a deferred boost that hasn't gone live yet (its post hasn't published, so no money has been spent). To stop a boost that's already live and spending, use stop_post_boost instead. Identify it by its adCampaignId — there is currently no tool to list/look one up; the only way to learn it is from create_post_boost's own response when the deferred boost was created.

Parámetros
adCampaignIdstringobligatorio
The id of the deferred boost's ad campaign to cancel (required).
Solicitud de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cancel_deferred_boost",
    "arguments": {
      "adCampaignId": "string"
    }
  }
}
Respuesta de ejemplo
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

La forma de la respuesta se muestra a modo ilustrativo — el contenido real depende de la herramienta y de tus datos.