MCPOutils MCP/Idées de publication
Idées de publication
Générer, réviser et publier des idées de publication rédigées par IA.
- Writecreate_post_ideaCreate (or idempotently upsert) a post idea generated by the agent for a location. Use the same `externalId` on retries to avoid duplicates. `origin` decides review: channel/routine ideas land pending (inbox review); os_button ideas are immediate drafts.
- Writeupdate_post_ideaUpdate fields of an existing post idea (agency-scoped).
- Writearchive_post_ideaSoft-delete (archive) a post idea. Keeps the externalId reference valid.
- Readlist_post_ideasList post ideas for a location (agency-scoped). Excludes archived and rejected ideas. Newest first, up to 50 per page: `count` is the total across all pages; request `page` 2, 3… until hasMore is false to see every idea once.
- Readlist_client_post_ideasList location-tied post ideas across EVERY location of a client in one call (the Posts → Ideas "All locations" view). Only the "idea" bucket (not holiday/calendar/series ideas) — matches what the rollup page shows. Excludes archived ideas; excludes rejected ones unless includeRejected is set. Each idea carries locationName for display. Use list_post_ideas instead when you already know which single location you want.
- Readlist_brand_post_ideasList brand-level post ideas for a client — ideas not tied to any single location (the Posts → Ideas "Brand Ideas" section), e.g. company-wide announcements meant to post across every channel at once. Excludes archived ideas; excludes rejected ones unless includeRejected is set.
- Readget_post_ideaGet a single post idea by id (agency-scoped).
- Writepublish_post_ideaPublish a post idea: create a real post from it (+ platform submissions) and submit through the single OS publish pipeline, then mark the idea published. The one common path to go live — do not post elsewhere directly. Location ideas publish at location scope; brand ideas (no location) publish at their client's scope. A 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, postId, ideaId }` instead of the usual `{ postId, status, ideaId }` 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, postId, ideaId }`. Both gaps can appear together, in which case `status` is "no_connection" and `missingFields` rides alongside it — tell the user about BOTH in one message 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, and point at where to fix it. Never report it as a failure and never silently retry.
- Writepublish_postDeprecated — use publish_post_idea (same arguments, same result). Publishes a post IDEA; to publish an existing POST use publish_post_now. Publish a post idea: create a real post from it (+ platform submissions) and submit through the single OS publish pipeline, then mark the idea published. The one common path to go live — do not post elsewhere directly. Location ideas publish at location scope; brand ideas (no location) publish at their client's scope. A 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, postId, ideaId }` instead of the usual `{ postId, status, ideaId }` 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, postId, ideaId }`. Both gaps can appear together, in which case `status` is "no_connection" and `missingFields` rides alongside it — tell the user about BOTH in one message 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, and point at where to fix it. Never report it as a failure and never silently retry.
- Writeregenerate_post_ideaRewrite an existing post idea's title/content/image prompt with a fresh angle, generated by the agency's Sydekick. Rewrites in place (same idea id) rather than creating a new one. Optionally pass a topic to steer the new angle. If the idea is already linked to a pending approval, its caption is updated there too.
- Writegenerate_post_ideas_for_dateGenerate one new post idea for a location, targeted at a specific calendar date or observance (e.g. a holiday), via the agency's Sydekick. Creates a new draft idea in the "calendar" bucket by default, targeting google + facebook. Pass observanceName for a holiday/occasion tie-in, or hint for other creative direction.
- Readget_month_plan_briefEverything needed to plan a month of social posts for ONE location: the business context, the dates worth posting around, the seasonal angles this kind of business runs, the social profiles the posts will publish to, and the HARD limits those profiles impose (caption length, which post types they accept, whether a picture is required). Call this BEFORE writing any post, then write to the limits it reports, then call save_month_plan once. Costs nothing: no model, no credits.
- Writesave_month_planWrite a whole month of planned posts for one location in a single call, after get_month_plan_brief. Each post lands as a dated IDEA for the agency to review on the Social calendar, never as a scheduled post, so nothing publishes until a human adds it. Captions over the limit and post types the chosen profiles cannot carry are trimmed and coerced rather than rejected. Refuses if the window already holds a plan, unless replace is true.
- Readprepare_post_ideaRead composer fields from an idea without creating, scheduling or publishing a post. Returns copy, media, destinations and CTA. Requires an active agency user with Social and owning-client access. Use publish_post_idea only when actually authorized to publish.
- Writeset_post_idea_connectionsChoose the exact publishing destinations for an idea; [] clears the choice and restores automatic resolution. Only active publishable connections belonging to the idea's client/location are accepted. Preserves other idea metadata and refuses concurrent edits or another person's import-review lock. Requires Social and owning-client access.
- Writegenerate_post_idea_visualGenerate an image for a location-level idea using the agency's configured content generator and one monthly image credit. Optional replaceUrl selects the image to replace; otherwise replaces the cover. Preserves other images. referenceIntents are text guidance, not reference images. Does not publish. If the idea changes during generation, status:not_attached returns the paid imageUrl without overwriting edits; do not automatically regenerate. Requires Social and owning-client access.