Skip to main content
Glama

create_posts_batch

Create 1-25 scheduled or immediate social posts in one API request. DESTRUCTIVE WRITE: show the user every post's account/platform, caption or thread text, scheduled time, media, settings, and workspace, then get explicit confirmation for the whole batch before calling. Third-party media URLs are copied into posterly storage before each post is saved. Partial success is possible; failed items return their array index. On an error or lost reply, retry with the same keys; a repeat within 10 minutes returns the original posts (deduplicated: true). TikTok items without privacy_level post directly using the saved default or public (tiktok_audience_defaulted); post_mode inbox sends to the app.

Input Schema

NameRequiredDescriptionDefault
postsYes
confirmYesMust be true after the user explicitly confirms every post in the batch.
idempotency_keyNoOptional batch retry key. Reuse it if the response is lost. A per-item idempotency_key wins.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / posts / items / 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."
  2. Changed4 schema fields changed
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "description": "Optional batch retry key. Reuse it if the response is lost. A per-item idempotency_key wins.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • addedInput schema / properties / posts / items / properties / idempotency_key
      Added value: +{
      +  "description": "Optional retry key. Reuse the same value if this create errors or the response is lost.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • addedInput schema / properties / posts / items / 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 / posts / items / 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."
  3. Changed1 schema field changed
    • changedInput schema / properties / posts / items / properties / caption / description
      Previous value: -"Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided."New value: +"Post caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided."
  4. Changed4 schema fields changed
    • changedInput schema / properties / posts / items / properties / instagram_settings / description
      Previous value: -"Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."New value: +"Instagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."
    • changedInput schema / properties / posts / items / 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. Short-lived signed URLs must still be live when this tool runs."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs."
    • changedInput schema / properties / posts / items / 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 / posts / items / 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."
  5. Changed1 schema field changed
    • addedInput schema / properties / posts / items / 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"
      +  ]
      +}
  6. First observed

TDQS

A3.6/5.0
Behavior1/5

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

The description contains useful behavioral detail: confirmation requirements, media copying, partial success with failed indices, and retry deduplication. But it directly contradicts the annotations by calling this a 'DESTRUCTIVE WRITE' while destructiveHint is false, and by describing idempotent retry behavior while idempotentHint is false. That is an annotation contradiction.

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 description is dense but front-loaded: scope first, then the destructive/confirmation warning, then operational edge cases. Given the complexity and risk of a 25-post batch, every sentence earns its place.

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 complex batch write with no output schema, it covers the critical behavior an agent needs: explicit confirmation, partial success, failed item indices, retry semantics, media copying, and TikTok defaults. The main gap is that it does not explicitly route the agent to single-post or validation alternatives.

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 67%, so the description should add meaning. It does so for confirm (explicit user confirmation for the whole batch) and idempotency_key (reuse on lost response, 10-minute dedupe), and it frames what must be shown per post before calling. It does not explain the full posts schema, but the schema itself carries substantial per-field detail.

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 states a specific verb and resource: 'Create 1-25 scheduled or immediate social posts in one API request.' The 1-25 batch scope clearly distinguishes it from the single-post sibling create_post, even without naming that sibling.

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

Usage Guidelines3/5

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

It gives an important operational prerequisite—show every post's details and get explicit confirmation for the whole batch—and implies batch use. However, it never explicitly says when to use this tool versus create_post or validate_post, nor when a batch is inappropriate.

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