Skip to main content
Glama

update_post

DestructiveIdempotent

Change a scheduled or draft post. DESTRUCTIVE WRITE: show the user a side-by-side of CURRENT vs PROPOSED and pass confirm=true only after explicit confirmation. Edit (default): caption, media, schedule, post_type, settings, account_id, or thread_posts; cannot edit published or currently publishing posts. account_id moves it to another account in the same workspace and brand (the platform follows). thread_posts replaces an X or Threads reply chain (2+ non-empty parts; the first is the caption). If a client already approved the post, a caption edit reopens caption approval, a media or thumbnail edit reopens asset approval, and a reschedule, account change, thread edit, or settings change reopens both. status (scheduled, paused, or draft, with scheduled_at when scheduling a draft): pause, resume, or move back to draft; send it on its own. release_id (with optional group_id): set or repair external release/group IDs; send it on its own. approval_action (request, approve, request_changes, or reject): change client approval. Owner or admin only; the actor is the API key user, never a brand guest. request emails the brand reviewers; the others are team-side decisions. request_changes needs approval_note. Optional approval_axis is asset or caption; omit it for both. Send approval_action on its own. Pass the Version from get_post as expected_version and send only changed fields; a stale edit is refused.

Input Schema

NameRequiredDescriptionDefault
statusNoChange the post status instead of editing it. Send with post_id (and scheduled_at when scheduling a draft) only.
captionNo
confirmYesMust be true after the user explicitly confirms the proposed change.
post_idYes
group_idNoWith release_id only: an external group/campaign ID.
metadataNo
settingsNoPost settings. Instagram and X Article fields work here or in platform_settings: first_comment, user_tags, collaborators, is_trial_reel, caption_addon (poll or comment prompt; Facebook Login only, not Stories), article ({ title, cover }). Call list_platforms with view=schema and account_id for fields.
media_urlNoMedia URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first.
post_typeNoOptional post type. Omit for auto-detection from media.
account_idNoMove this unpublished post to another account you can use in the same workspace. The account must belong to the post brand. The platform follows the new account.
media_urlsNoMedia URLs, handled like media_url.
release_idNoSet an external release ID instead of editing the post. Send with post_id and optional group_id only.
scheduled_atNoISO 8601 UTC. With status, required when scheduling a draft.
thread_postsNoReplace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption.
approval_axisNoWith approval_action approve, request_changes, or reject: which axis to decide. Omit for both. Not allowed with request.
approval_noteNoNote stored with the approval change. Required for request_changes.
reel_cover_urlNo
approval_actionNoChange client approval instead of editing the post. Send on its own.
expected_versionNo
platform_settingsNoPlatform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples.
reel_cover_methodNo
reel_thumb_offsetNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / expected_version
      Added value: +{
      +  "minimum": 1,
      +  "type": "integer"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / platform_settings / properties / post_mode / description
      Previous value: -"TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit."New value: +"TikTok delivery: auto (default, unless the account is set to Finish in TikTok app) or inbox. With no privacy_level, auto uses the saved default or public."
  3. Changed2 schema fields changed
    • addedInput schema / properties / platform_settings / properties / post_mode
      Added value: +{
      +  "description": "TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit.",
      +  "enum": [
      +    "auto",
      +    "inbox"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / platform_settings / properties / privacy_level / description
      Previous value: -"TikTok privacy level."New value: +"TikTok audience for auto: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY."
  4. Changed2 schema fields changed
    • addedInput schema / properties / account_id
      Added value: +{
      +  "description": "Move this unpublished post to another account you can use in the same workspace. The account must belong to the post brand. The platform follows the new account.",
      +  "type": "string"
      +}
    • addedInput schema / properties / thread_posts
      Added value: +{
      +  "description": "Replace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "minItems": 2,
      +  "type": "array"
      +}
  5. Changed5 schema fields changed
    • changedInput schema / properties / approval_action / description
      Previous value: -"Change client approval instead of editing the post. Owner or admin only. The actor is the API key user, never a brand guest. Send on its own."New value: +"Change client approval instead of editing the post. Send on its own."
    • changedInput schema / properties / media_url / description
      Previous value: -"Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first."
    • changedInput schema / properties / media_urls / description
      Previous value: -"Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URLs, handled like media_url."
    • changedInput schema / properties / platform_settings / description
      Previous value: -"Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples."New value: +"Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples."
    • changedInput schema / properties / settings / description
      Previous value: -"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings. For an X Article put article ({ title, cover }) here or in platform_settings. Call list_platforms with view=schema and account_id for the field list."New value: +"Post settings. Instagram and X Article fields work here or in platform_settings: first_comment, user_tags, collaborators, is_trial_reel, caption_addon (poll or comment prompt; Facebook Login only, not Stories), article ({ title, cover }). Call list_platforms with view=schema and account_id for fields."
  6. Changed2 schema fields changed
    • addedInput schema / properties / platform_settings / properties / article
      Added value: +{
      +  "description": "X Article (needs an X Premium account): publish the caption as an Article. Pass null to turn Article mode off. The caption is the Markdown body (headings, bold, italic, lists, quotes, code blocks, tables, dividers); reference attached images with ![caption](media:1). Cannot be combined with poll, thread_posts, paid_partnership, video, or GIF.",
      +  "properties": {
      +    "cover": {
      +      "description": "Use the first attached image as the Article cover (default) or none.",
      +      "enum": [
      +        "first_image",
      +        "none"
      +      ],
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Article title (required).",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "title"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedInput schema / properties / settings / description
      Previous value: -"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings; call list_platforms with view=schema and account_id for the field list."New value: +"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings. For an X Article put article ({ title, cover }) here or in platform_settings. Call list_platforms with view=schema and account_id for the field list."
  7. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations already marking the tool destructive, the description adds critical operational context: side-by-side confirmation workflow, published-post restriction, approval re-opening rules, owner/admin permission requirement, API-key actor identity, email behavior for request, and stale-edit refusal via expected_version.

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

Conciseness5/5

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

The most safety-critical information is front-loaded ('DESTRUCTIVE WRITE... confirm=true only after explicit confirmation'), followed by default edit behavior and then mode-specific rules. The density is appropriate for a destructive, multi-mode tool with 22 parameters, and every sentence carries operational value.

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 complex destructive mutation with nested objects and no output schema, the description covers the necessary invocation context: permissions, confirmation, allowed states, mode exclusivity, approval effects, and optimistic concurrency. An agent can call this correctly without needing return-value documentation.

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?

With 68% schema coverage, the description compensates well by explaining mode-exclusive parameters, account_id movement, thread_posts replacement semantics, status scheduling behavior, approval_action/approval_axis/approval_note rules, and expected_version. It still does not fully clarify the distinction between settings and platform_settings or all 22 params, but it adds substantial meaning beyond 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?

The description opens with a specific verb and resource: 'Change a scheduled or draft post.' It then distinguishes the default edit path from separate status, release_id, and approval_action modes, making the tool's scope clear without needing sibling comparison.

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?

It states explicit usage rules: show CURRENT vs PROPOSED and pass confirm=true only after user confirmation, cannot edit published or currently publishing posts, and send status/release_id/approval_action on their own. It also names the alternative priming tool (get_post) for expected_version.

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.

Resources