Skip to main content
Glama

Update Scheduled Post

postnitro_update_scheduled_post
DestructiveIdempotent

Update an existing scheduled post or draft. The body and validation mirror postnitro_create_scheduled_post exactly.

The update REPLACES the post's captions and selected accounts with what you send — send the full intended state, not just changed fields. Tip: call postnitro_get_scheduled_post first to read the current values.

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": {
      "scheduledPostId": "<scheduledPostId>",
      "status": "<status>",
      "scheduledAt": "<scheduledAt>"
    },
    "name": "postnitro_update_scheduled_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
statusYes'DRAFT' or 'SCHEDULED'
designIdNoID of a design in your workspace to attach. This is the design ID (the `designId` field from a carousel's output / postnitro_get_output), NOT the generation job's embedPostId — passing an embedPostId here fails with 'Design not found.' A post must have either a designId or non-empty postContent. May only be null/omitted for DRAFT.
postContentNoCaption text keyed by platform. Required unless a designId is set; at least one key must be non-empty. Hashtags are extracted automatically.
scheduledAtYesISO-8601 datetime string. Must be in the future (for both drafts and scheduled posts).
postSettingsNoA reel's audio, used when any resolved postType is 'reel'. Optional: when omitted, the API takes the audio the attached design was generated with, else none. A reel runs as long as its design's motion.
scheduledPostIdYesThe scheduled-post ID to update (get from postnitro_list_scheduled_posts)
selectedAccountsNoSocial-account IDs to publish to (from postnitro_list_social_accounts). The platforms among these determine which *PostSettings are required.
tiktokPostSettingsNoRequired when a TikTok account is selected AND a designId is set. When SCHEDULED: if isBrandedContent is true, at least one of isYourBrand/isThirdPartyBrand must be true, and isBrandedContent cannot be true with privacyLevel SELF_ONLY.
threadsPostSettingsNoRequired when a Threads account is selected AND a designId is set
facebookPostSettingsNoRequired when a Facebook Page is selected AND a designId is set. A designId is required when status is SCHEDULED (Facebook Pages can't take text-only posts from PostNitro).
linkedinPostSettingsNoRequired when a LinkedIn account is selected. A designId is required when status is SCHEDULED (text-only LinkedIn posts can only be drafts).
instagramPostSettingsNoRequired when an Instagram account is selected AND a designId is set
pinterestPostSettingsNoRequired when a Pinterest board is selected AND a designId is set. A designId is required when status is SCHEDULED (Pinterest can't take text-only Pins). Each board is its own connected account, so there is no board field here — pick boards via selectedAccounts.

Output Schema

NameRequiredDescriptionDefault
postYesA scheduled post or draft
messageYesConfirmation message
successYes
warningsNoNon-fatal issues worth surfacing to the user (e.g. AI image generation did not complete)
scheduledPostIdYesID of the scheduled post — pass to get/update/delete

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / postSettings / description
      Previous value: -"Video render settings, used when any resolved postType is 'reel'. Optional: when omitted, the API fills each field from the videoSettings the attached design was generated with, falling back to 30 seconds with no audio. Same shape as a VIDEO post's videoSettings."New value: +"A reel's audio, used when any resolved postType is 'reel'. Optional: when omitted, the API takes the audio the attached design was generated with, else none. A reel runs as long as its design's motion."
    • changedInput schema / properties / postSettings / properties / audioId / description
      Previous value: -"Media ID of an audio track — an ID, NOT a URL. Get it from postnitro_list_audio; must be an audio file in this workspace."New value: +"The older name of backgroundMusicId, still taken. Give one or the other, not both."
    • addedInput schema / properties / postSettings / properties / backgroundMusicId
      Added value: +{
      +  "description": "Media ID of an audio track — an ID, NOT a URL. Get it from postnitro_list_audio; must be an audio file in this workspace.",
      +  "type": "string"
      +}
    • removedInput schema / properties / postSettings / properties / videoDuration
      Removed value: -{
      -  "description": "Video duration in seconds — at least 5 and under 60",
      -  "exclusiveMaximum": 60,
      -  "minimum": 5,
      -  "type": "number"
      -}
    • removedInput schema / properties / postSettings / required
      Removed value: -[
      -  "videoDuration"
      -]
  2. Changed3 schema fields changed
    • addedInput schema / properties / pinterestPostSettings
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Required when a Pinterest board is selected AND a designId is set. A designId is required when status is SCHEDULED (Pinterest can't take text-only Pins). Each board is its own connected account, so there is no board field here — pick boards via selectedAccounts.",
      +  "properties": {
      +    "link": {
      +      "description": "Destination URL the Pin links to. Optional, but must be an absolute http(s) URL, e.g. https://example.com.",
      +      "type": "string"
      +    },
      +    "postType": {
      +      "description": "'carousel' = a carousel Pin (2-5 slides; a 1-slide design publishes as an image Pin, more than 5 slides fails); 'image' = a single image Pin; 'reel' = a video Pin (uses postSettings like other platforms' reels). Any design size works except ultra-wide (wider than 21:9); 2:3 is recommended.",
      +      "enum": [
      +        "carousel",
      +        "image",
      +        "reel"
      +      ],
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Pin title, up to 100 characters. Optional.",
      +      "maxLength": 100,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "postType"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / postContent / properties / pinterest
      Added value: +{
      +  "description": "Pinterest Pin description. Only the first 800 characters are published.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / post / properties / pinterestPostSettings
      Added value: +{
      +  "$ref": "#/properties/post/properties/instagramPostSettings"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / facebookPostSettings
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Required when a Facebook Page is selected AND a designId is set. A designId is required when status is SCHEDULED (Facebook Pages can't take text-only posts from PostNitro).",
      +  "properties": {
      +    "callToAction": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "BOOK_TRAVEL",
      +            "BUY_NOW",
      +            "CALL_NOW",
      +            "DOWNLOAD",
      +            "GET_DIRECTIONS",
      +            "GET_QUOTE",
      +            "INSTALL_APP",
      +            "INSTALL_MOBILE_APP",
      +            "LEARN_MORE",
      +            "LIKE_PAGE",
      +            "LISTEN_MUSIC",
      +            "MESSAGE_PAGE",
      +            "NO_BUTTON",
      +            "OPEN_LINK",
      +            "PLAY_GAME",
      +            "SHOP_NOW",
      +            "SIGN_UP",
      +            "SUBSCRIBE",
      +            "USE_APP",
      +            "USE_MOBILE_APP",
      +            "WATCH_MORE",
      +            "WATCH_VIDEO"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "'link_carousel' only. Button shown on the carousel, e.g. 'LEARN_MORE' or 'SHOP_NOW'. Omit or null for no button. Some types are meant for ads and Facebook may reject them on organic posts."
      +    },
      +    "linkUrl": {
      +      "description": "'link_carousel' only. The absolute http(s) URL every card links to, e.g. https://example.com. Required when status is SCHEDULED. Facebook only accepts custom card images for links on a domain the Page's business has verified in Meta Business Settings.",
      +      "type": "string"
      +    },
      +    "postType": {
      +      "description": "'carousel' = every slide in one multi-photo post; 'link_carousel' = swipeable link cards (2-10 slides; Facebook shows up to 5 and picks which); 'image' = a single-slide design; 'reel' = a video, published as a Reel (any aspect ratio from 16:9 to 9:16).",
      +      "enum": [
      +        "carousel",
      +        "link_carousel",
      +        "image",
      +        "reel"
      +      ],
      +      "type": "string"
      +    },
      +    "showEndCard": {
      +      "description": "'link_carousel' only. Show Facebook's end card linking to the Page. Defaults to true.",
      +      "type": "boolean"
      +    },
      +    "useSlideDescriptions": {
      +      "description": "'link_carousel' only. Use each slide's description as its card description. Defaults to false.",
      +      "type": "boolean"
      +    },
      +    "useSlideTitles": {
      +      "description": "'link_carousel' only. Use each slide's title as its card headline. Defaults to false (Facebook uses the link's own title).",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "postType"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / postContent / properties / facebook / description
      Added value: +"Facebook Page caption (the post message)"
    • addedOutput schema / properties / post / properties / facebookPostSettings
      Added value: +{
      +  "$ref": "#/properties/post/properties/instagramPostSettings"
      +}
  4. First observed

TDQS

A4/5.0
Behavior4/5

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

Adds real behavioral information beyond the annotations: the call REPLACES captions and selected accounts rather than merging, which is the single most important thing to know and is not derivable from destructiveHint/idempotentHint. It also points out validation parity with create. It doesn't cover consequences of a partially wrong payload (e.g. whether a failed update leaves the post intact).

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?

Three short sentences, zero filler, and the replacement semantics — the most dangerous detail — are front-loaded before the tip. Nothing repeats the title or annotations verbatim.

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

Completeness4/5

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

For a 13-parameter, deeply nested mutation tool with an output schema, the description supplies the two things the structured fields can't: full-replacement semantics and where to get the current state. Slightly incomplete in not addressing what happens on partial account/caption mismatch or the relationship to the edit_post siblings.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 13 parameters including the per-platform settings blocks, so the baseline of 3 applies. The description adds only the meta-point that the body mirrors create_scheduled_post, rather than explaining any individual parameter's meaning or interactions.

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

Purpose4/5

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

States a specific verb and resource: 'Update an existing scheduled post or draft.' It also clarifies its relationship to a sibling by saying the body/validation 'mirror postnitro_create_scheduled_post exactly'. It does not distinguish itself from the other edit-looking siblings (postnitro_edit_post, postnitro_edit_post_and_wait), so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite workflow ('call postnitro_get_scheduled_post first to read the current values') and a clear usage rule — send the full intended state, not a diff. What it lacks is any statement of when to prefer this over the near-name-collision siblings edit_post/edit_post_and_wait, or when not to use it.

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