Skip to main content
Glama

Edit a post

update_post
Destructive

Edit an existing post (draft or scheduled) — caption, hashtags, format, media or target accounts. A published/publishing post can no longer be edited. IMPORTANT: editing resets the post to a DRAFT. To keep it going out, also send action="schedule" + scheduledAt (or action="now" to publish it). Omit action to leave it as a draft (i.e. to unschedule). action "now", and a schedule less than 15 minutes ahead, do NOT publish by themselves: the edit is saved and the post waits as a draft for the user to confirm it, with the Publish button on the post card or on Ravenpost (the result says where). A schedule further ahead, and the queue, go out at their time with no further step. The edit overwrites the stored post — no earlier version is kept — and any publish that was waiting for the user lapses with it. Once the post goes out it is public on its networks. The schedule is the only thing an edit drops on its own: anything else you leave out stays exactly as it was, so to REMOVE something pass its empty form ("", [], null or {} — each argument says which) rather than leaving it out. tiktok and board belong to specific accounts, so when accountIds adds a TikTok or Pinterest account, pass them again for it — a new TikTok target without options publishes privately, and a new Pinterest target without a board fails to publish. caption replaces the whole caption; use hashtags to append them. Telegram targets render a markdown subset in the caption (text, bold, italic, code, strikethrough); other platforms publish it as plain text. replySettings (who may reply) and community (the Community it posts into) are X only, like replyTo and quote; use "" to either to go back to X’s default — everyone may reply, and the post goes to the timeline. audio replaces the Instagram reel track (see list_audio); use null to remove it. reelCover replaces the Instagram reel cover; use null to go back to the first frame. trialReel changes how a trial reel graduates; use "" to make it a normal reel. firstComment replaces the Instagram first comment; use "" to remove it. It reaches Instagram only, never a STORY, and the result warns when none of the post’s accounts would get it. collaborators replaces the Instagram co-authors; use [] to remove them. They reach only an Instagram account whose connection is "FACEBOOK_LOGIN" (see list_accounts) and never a STORY — anywhere else they are dropped and the post publishes without them. tiktok replaces TikTok’s per-account posting options (privacyLevel, allow*, brand toggles); use {} to clear them, which makes TikTok targets publish privately again. board moves a Pinterest pin to another board (name or id from list_boards); title replaces the pin title. link replaces the URL the post points at — Facebook’s link preview card, Pinterest’s pin destination; use "" to remove it.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "postId": "<postId>"
    },
    "name": "update_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
linkNoReplace the URL this post points at. Facebook publishes it as a link preview card (used when the post has no media); Pinterest makes it the pin's destination, which is the whole point of a pin. Every other platform ignores it. Use "" to remove it.
typeNoInstagram format
audioNoInstagram reel audio — a catalog track from list_audio. Requires type="REEL" and an Instagram account connected via Facebook; ignored otherwise. Use null to remove the track.
boardNoPinterest only: move the pin to another board — its name (matched case-insensitively) or an id from list_boards. Applied to every Pinterest target on the post.
quoteNoReplace the X quoted tweet (tweet id or tweet URL; use "" to remove the quote). X only takes a quote of the account's own post or one that @mentions it
titleNoPinterest only: replace the pin title (max 100 chars); use "" to fall back to the caption’s first line.
actionNonow = publish once the user confirms it (on the post card or on Ravenpost), schedule = re-schedule (needs scheduledAt; less than 15 minutes ahead waits for their confirmation too), queue = next free posting-queue slot, draft = keep as draft
postIdYesThe post id (from list_posts / create_post)
threadNoReplace the thread (follow-up posts; limits come from the strictest selected platform — at most 25 entries, each ≤280 chars on X, or 25,000 on X Premium. Use [] to remove the thread)
tiktokNoTikTok posting options, keyed by TikTok account id. Omit and TikTok targets publish privately (SELF_ONLY) — TikTok requires the creator to choose a visibility per post, so nothing wider is assumed on their behalf.
captionNoNew caption (replaces the existing one)
replyToNoReplace the X reply target (tweet id or tweet URL; use "" to make it a standalone tweet again). X only takes a reply to the account's own post or one that @mentions it
hashtagsNoHashtags to append to the caption
mediaIdsNoReplace the media set (ordered asset ids)
timezoneNoIANA timezone for the schedule
communityNoX only: replace the Community this posts into — its id or URL (x.com/i/communities/<id>). Use "" to post to the timeline again.
reelCoverNoInstagram reel cover — an image OR a frame of the video, not both. Only for type="REEL" on an Instagram account, either connection; other types and platforms ignore it and it is dropped there. Leave it out for Instagram’s default, the first frame. Use null to go back to the first frame.
trialReelNoInstagram trial reel: shown to non-followers first, and to followers only once it graduates — MANUAL means the user graduates it by hand in the Instagram app, SS_PERFORMANCE that Instagram graduates it if it performs well. Only for type="REEL" on an Instagram account; other types and platforms ignore it. Instagram decides which accounts may post one (public professional accounts it can recommend) and answers only when the reel is published: if it refuses, the post fails — it is never sent as a normal reel instead. Set it only when the user asks for a trial. Use "" to make it a normal reel again.
accountIdsNoReplace the target accounts
scheduledAtNoISO 8601 datetime — required when action is "schedule"
firstCommentNoInstagram only: a comment posted on the Instagram post from the same account right after it goes out — hashtags, or a link the caption should not carry. Feed posts, carousels and reels only: Instagram takes no comment on a STORY, and no other network gets one, so anything X, Threads, LinkedIn or the others should carry belongs in their caption. If Instagram refuses the comment, the post stays published without it and nothing reports that afterwards. preview_post takes the same argument and warns where it would not be posted. Replaces the one the post has; use "" to remove it.
collaboratorsNoInstagram only: replace the co-author usernames (max 3); use [] to remove them. They get an invite, and once they accept the post appears on their profile too. Feed posts and reels only — never a STORY — and ONLY on an Instagram account whose connection is "FACEBOOK_LOGIN" (see list_accounts). On any other Instagram account they are dropped: the post still publishes, without them, and nothing reports it afterwards — so check the connection before promising the user co-authors.
replySettingsNoX only: replace who may reply to this post. Use "" to go back to X's default (everyone).

Output Schema

NameRequiredDescriptionDefault
okNo
postNo
previewNo
awaitingConfirmationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / firstComment
      Added value: +{
      +  "description": "Instagram only: a comment posted on the Instagram post from the same account right after it goes out — hashtags, or a link the caption should not carry. Feed posts, carousels and reels only: Instagram takes no comment on a STORY, and no other network gets one, so anything X, Threads, LinkedIn or the others should carry belongs in their caption. If Instagram refuses the comment, the post stays published without it and nothing reports that afterwards. preview_post takes the same argument and warns where it would not be posted. Replaces the one the post has; use \"\" to remove it.",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true; the description adds real context beyond that: the edit resets the post to a DRAFT and overwrites the stored post with no earlier version kept, any pending publish lapses, and several side effects fail silently (dropped collaborators, refused firstComment). It falls just short of 5 by not stating auth/permission prerequisites and by burying some of these warnings mid-paragraph.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical behavior (edit resets to DRAFT, confirmation rules) is front-loaded correctly, but the second half is a dense run-on that re-explains each argument (audio, reelCover, trialReel, firstComment, collaborators, tiktok, board, link) already fully documented in a 100%-covered schema. It is a wall of text with no list structure, forcing the agent to re-read to separate new constraints from duplicated ones.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter destructive mutation with nested objects, the definition covers the failure modes that matter: reset-to-draft on every edit, the omitted-vs-empty-form rule, per-platform gating (X-only, Instagram-only, Pinterest-only), silent drops on collaborators and firstComment, and the one-shot warning that a published post becomes public. With an output schema present, it does not need to describe return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: only the schedule is dropped when omitted while every other omitted field stays as-is, and removal therefore requires passing an empty form ("", [], null, {}). It also explains that caption replaces while hashtags append, and that adding a TikTok or Pinterest target requires re-passing tiktok/board. The gain is partly offset by restating per-parameter details already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Edit an existing post') and immediately scopes the editable fields (caption, hashtags, format, media, target accounts), plus a hard constraint (a published/publishing post can no longer be edited). An agent can separate it from create_post, publish_post, schedule_post and preview_post without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: to keep a post going out send action="schedule" + scheduledAt, or action="now" to publish; omit action to unschedule; a schedule under 15 minutes ahead does not publish by itself and waits for user confirmation. It also names the escape hatches (preview_post, list_boards, list_audio, list_accounts) and the conditions that select them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.