MCPMCP Tools/Post Ideas
Post Ideas
Generate, review, and publish AI-drafted post ideas.
- 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.
- 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_postPublish 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.