Skip to main content
Glama

Create Post

create_post
Destructive

Publish or schedule a social media post to Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Pinterest, Threads, Bluesky, and Google Business Profile. One call can cross-post the same text, image, or video to multiple accounts and platforms at once. Use list_social_accounts first to get account IDs. Omit scheduled_at to post immediately. Pass public media URLs via media_urls (the API downloads them). IMPORTANT for X/Twitter: links are automatically removed from the text before posting to X — this includes full URLs (http://, https://, www.) AND bare domains like foo.com or foo.io/path. X charges far more for posts that contain links. Other platforms keep their links. To share a link on X, put it in platform_configurations.twitter.first_comment (a reply) or the account bio. To post a multi-tweet thread on X, or a multi-post thread on Threads, put the follow-up posts in platform_configurations.twitter.thread / platform_configurations.threads.thread (an array of strings, chained in order under the main post). To make a Threads post a native quote of another Threads post, set platform_configurations.threads.quote_post_id (a post id or the post's threads.com URL); a Threads link pasted in the caption only shows as a plain link. To publish a Threads post as a reply under an existing post, set platform_configurations.threads.reply_to_id. Note: is_draft saves the post in Post Bridge only — it does not create a draft on any platform. All platforms will publish immediately when the draft is later sent. TikTok's platform_configurations.tiktok.draft is a separate option that creates an actual draft on TikTok. TikTok photo carousels: pass several images (media or media_urls) to a TikTok account and it publishes as a photo carousel. Caption limits: Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500, Instagram 2,200, TikTok 2,200 for videos and 4,000 for photo posts, LinkedIn 3,000 characters. When the shared caption is longer than a platform allows, write a shorter platform-specific caption in platform_configurations..caption in the same call, without being asked. X allows 280 characters, or up to 25,000 when the account has X Premium: check has_x_premium on that account from list_social_accounts, keep the full caption if it is true, and write a shorter X caption if it is false.

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": {
      "caption": "<caption>",
      "social_accounts": "<social_accounts>"
    },
    "name": "create_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
mediaNoArray of media IDs from previously uploaded media (use list_media to find IDs). Media files are automatically deleted after all posts using them have published — IDs become invalid after that. Media shared across multiple scheduled/draft posts is safe until the last one publishes. MEDIA REQUIRED (the post fails on these platforms with no media): youtube (exactly 1 video), tiktok (1 video, or one+ images), instagram (1-10 images/videos; a story is exactly 1; PDFs are dropped), pinterest (1-5 images — 2+ publishes as a carousel pin and ALL images must share the same width/height ratio or Pinterest rejects the pin — or 1 video). MEDIA OPTIONAL (text-only allowed): twitter/X (up to 4 images, or 1 video), facebook, linkedin (up to 20 images, or 1 video, or 1 PDF document), threads (up to 20 images/videos), bluesky (up to 4 images, or 1 video), google_business (text or a single image; no video). A post may be created with no media and have media added later via update_post — but it will not publish to a media-required platform until media exists.
captionYesThe post caption/text content
is_draftNoIf true, saves as a draft in Post Bridge only — not a draft on any platform. All platforms will publish immediately when the draft is later sent. The response includes a warning confirming this.
use_queueNoAutomatically schedule the post to the next available queue slot. Cannot be used with scheduled_at. Pass true to use your saved timezone, or { timezone: '...' } to override.
media_urlsNoArray of publicly accessible media URLs (images/videos). The API will download them.
scheduled_atNoISO 8601 datetime to schedule the post (e.g. 2025-12-31T09:00:00Z). Omit to post immediately.
social_accountsYesArray of social account IDs to post to (get these from list_social_accounts)
account_configurationsNoPer-account overrides for caption and media
platform_configurationsNoOptional per-platform overrides. Keyed by platform name (pinterest, instagram, tiktok, twitter, youtube, facebook, linkedin, bluesky, threads, google_business). Only include a key for a platform you are actually posting to, and only the fields you want to override — everything else falls back to the top-level caption/media. Each platform exposes different extra fields (e.g. tiktok.draft, instagram.placement, youtube.thumbnail, google_business.cta_action_type); see each field's description for accepted values.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / platform_configurations / properties / instagram / properties / is_ai_generated
      Added value: +{
      +  "description": "true adds Instagram's \"AI info\" label, disclosing the photo, carousel or reel was made or edited with AI. Set at publish time, cannot be changed afterwards. Ignored for stories.",
      +  "type": "boolean"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / threads / description
      Previous value: -"Threads overrides. Supports location, first_comment and thread (multi-post thread chains)."New value: +"Threads overrides. Supports location, first_comment, thread (multi-post thread chains), quote_post_id (native quote post) and reply_to_id (reply under an existing post)."
    • addedInput schema / properties / platform_configurations / properties / threads / properties / quote_post_id
      Added value: +{
      +  "description": "Makes this a native Threads quote post (the quoted post shows as a card). Use this instead of pasting a Threads post link in the caption, which only shows as a plain link. A numeric post id (platform_id from an earlier result) or a threads.com post URL; URLs only resolve for the account's own recent posts, so use the id for someone else's post. Works with text, image, carousel and video. Fails the post if the quoted post is deleted, private or can't be quoted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platform_configurations / properties / threads / properties / reply_to_id
      Added value: +{
      +  "description": "Publishes the post as a reply under an existing Threads post (e.g. adding to a launch thread after it went out). A numeric post id or a threads.com post URL of the account's own post or reply. Fails the post if the target can't be found or replied to.",
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / twitter / description
      Previous value: -"Twitter/X overrides. Put links in first_comment or thread (they are stripped from the main tweet). thread posts a multi-tweet thread."New value: +"Twitter/X overrides. Put links in first_comment or thread (they are stripped from the main tweet unless the user has the Links in X posts add-on; the response warns when a link will be stripped). thread posts a multi-tweet thread."
    • changedInput schema / properties / platform_configurations / properties / twitter / properties / first_comment / description
      Previous value: -"Optional reply posted to the tweet immediately after it publishes (a 'first comment'). Links ARE allowed here, unlike the main tweet/caption where X strips URLs to avoid its ~13x surcharge — so put any link/CTA in first_comment. Trimmed to 280 chars (2200 for premium accounts). A failed reply won't fail the post."New value: +"Optional reply posted to the tweet immediately after it publishes (a 'first comment'). Links ARE allowed here, unlike the main tweet/caption where X strips URLs to avoid its ~13x surcharge (unless the user has the $10/month Links in X posts add-on) — so put any link/CTA in first_comment. Trimmed to 280 chars (2200 for premium accounts). A failed reply won't fail the post."
  4. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / youtube / description
      Previous value: -"YouTube overrides. title sets the video title; thumbnail sets a custom thumbnail (Shorts and long-form)."New value: +"YouTube overrides. title sets the video title; thumbnail sets a custom thumbnail (Shorts and long-form); publish_at uploads early as private and lets YouTube make it public at that time."
    • addedInput schema / properties / platform_configurations / properties / youtube / properties / publish_at
      Added value: +{
      +  "description": "ISO 8601 datetime when the video goes public on YouTube. The video uploads at the post time (now, or scheduled_at) as private, YouTube processes it, and YouTube makes it public at publish_at (native YouTube scheduling). Use it to upload early so the video is processed and ready before launch. Must be after the upload time. Members-first / early access is not in YouTube's API; the user sets that in YouTube Studio after the upload.",
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / youtube / description
      Previous value: -"YouTube overrides. title sets the video title; thumbnail applies to long-form videos only."New value: +"YouTube overrides. title sets the video title; thumbnail sets a custom thumbnail (Shorts and long-form)."
    • changedInput schema / properties / platform_configurations / properties / youtube / properties / thumbnail / description
      Previous value: -"Media ID of an uploaded image to use as the video thumbnail. Upload the image first (upload_media), then pass its ID here. Regular/long-form videos only — YouTube ignores custom thumbnails on Shorts. The channel must be verified; image should be JPEG/PNG, 1280x720, under 2MB. A thumbnail that fails to apply won't fail the post."New value: +"Media ID of an uploaded image to use as the video thumbnail. Upload the image first (upload_media), then pass its ID here. Works on Shorts and long-form videos. The channel must be verified; image should be JPEG/PNG, 1280x720, under 2MB. A thumbnail that fails to apply won't fail the post."
  6. Changed3 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / threads / properties / thread / description
      Previous value: -"Turns the post into a multi-post thread: each string is published as a reply to the one before it, in order, under the main post. Text only, up to 25 entries, each trimmed to 500 chars. Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes."New value: +"Turns the post into a multi-post thread: each entry is published as a reply to the one before it, in order, under the main post. An entry is a string, or { text, media } to attach media IDs (up to 20 images or videos) to that post. Up to 25 entries, each trimmed to 500 chars. Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes."
    • addedInput schema / properties / platform_configurations / properties / threads / properties / thread / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "media": {
      +        "description": "Media IDs for this post: up to 20 images or videos (2+ post as a carousel).",
      +        "items": {
      +          "type": "string"
      +        },
      +        "maxItems": 20,
      +        "type": "array"
      +      },
      +      "text": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / platform_configurations / properties / threads / properties / thread / items / type
      Removed value: -"string"
  7. Changed3 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / twitter / properties / thread / description
      Previous value: -"Turns the post into a multi-post thread: each string is published as a reply to the one before it, in order, under the main post. Text only, up to 25 entries, each trimmed to 280 chars (25,000 for X Premium accounts). Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes."New value: +"Turns the post into a multi-post thread: each entry is published as a reply to the one before it, in order, under the main post. An entry is a string, or { text, media } to attach media IDs (up to 4 images or 1 video) to that tweet. Up to 25 entries, each trimmed to 280 chars (25,000 for X Premium accounts). Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes."
    • addedInput schema / properties / platform_configurations / properties / twitter / properties / thread / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "media": {
      +        "description": "Media IDs for this tweet: up to 4 images, or 1 video.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "maxItems": 4,
      +        "type": "array"
      +      },
      +      "text": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / platform_configurations / properties / twitter / properties / thread / items / type
      Removed value: -"string"
  8. Changed1 schema field changed
    • changedInput schema / properties / platform_configurations / properties / instagram / properties / audio_id / description
      Previous value: -"Reels only. Attach a track from Instagram's music library (or an original sound) to the reel: an audio_id from search_instagram_audio. ONLY works for Instagram accounts connected through Facebook login (supports_instagram_music: true in list_social_accounts); accounts connected with Instagram login are rejected with a clear error, because Meta only offers music on the Facebook-login API. Ignored for photos, carousels and stories. Reels with music cannot be previewed before they publish."New value: +"Reels only. Attach a track from Instagram's music library (or an original sound) to the reel: an audio_id from search_instagram_audio. ONLY works for Instagram accounts connected through Facebook login (supports_instagram_music: true in list_social_accounts); accounts connected with Instagram login are rejected with a clear error, because Meta only offers music on the Facebook-login API. Reels only (exactly one video): photos and carousels/slideshows are rejected, because Meta does not allow music on them through the API. For a slideshow with music, turn the slides into one video and post it as a reel. Ignored for stories. Reels with music cannot be previewed before they publish."
  9. Changed3 schema fields changed
    • addedInput schema / properties / platform_configurations / properties / instagram / properties / audio_id
      Added value: +{
      +  "description": "Reels only. Attach a track from Instagram's music library (or an original sound) to the reel: an audio_id from search_instagram_audio. ONLY works for Instagram accounts connected through Facebook login (supports_instagram_music: true in list_social_accounts); accounts connected with Instagram login are rejected with a clear error, because Meta only offers music on the Facebook-login API. Ignored for photos, carousels and stories. Reels with music cannot be previewed before they publish.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platform_configurations / properties / instagram / properties / audio_volume
      Added value: +{
      +  "description": "Volume of the audio_id track, 0-100 (default 100). Only with audio_id.",
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / platform_configurations / properties / instagram / properties / video_volume
      Added value: +{
      +  "description": "Volume of the video's own sound under the track, 0-100 (default 100). 0 = music only. Only with audio_id.",
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "integer"
      +}
  10. Changed6 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / facebook / description
      Previous value: -"Facebook overrides. Supports feed posts, Page Stories (placement), and first_comment."New value: +"Facebook overrides. Supports feed posts, Page Stories (placement), first_comment and a custom video thumbnail."
    • addedInput schema / properties / platform_configurations / properties / facebook / properties / thumbnail
      Added value: +{
      +  "description": "Media ID of an uploaded image to use as the video thumbnail. Upload the image first (upload_media), then pass its ID here. Single-video feed posts only (ignored for stories). JPEG or PNG. A thumbnail that fails to apply won't fail the post.",
      +  "type": "string"
      +}
    • changedInput schema / properties / platform_configurations / properties / threads / description
      Previous value: -"Threads overrides. Supports location and first_comment."New value: +"Threads overrides. Supports location, first_comment and thread (multi-post thread chains)."
    • addedInput schema / properties / platform_configurations / properties / threads / properties / thread
      Added value: +{
      +  "description": "Turns the post into a multi-post thread: each string is published as a reply to the one before it, in order, under the main post. Text only, up to 25 entries, each trimmed to 500 chars. Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • changedInput schema / properties / platform_configurations / properties / twitter / description
      Previous value: -"Twitter/X overrides. Put links in first_comment (they are stripped from the main tweet)."New value: +"Twitter/X overrides. Put links in first_comment or thread (they are stripped from the main tweet). thread posts a multi-tweet thread."
    • addedInput schema / properties / platform_configurations / properties / twitter / properties / thread
      Added value: +{
      +  "description": "Turns the post into a multi-post thread: each string is published as a reply to the one before it, in order, under the main post. Text only, up to 25 entries, each trimmed to 280 chars (25,000 for X Premium accounts). Links are allowed in thread entries. If an entry fails the chain stops there; the main post still publishes.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
  11. Changed1 schema field changed
    • addedInput schema / properties / platform_configurations / properties / instagram / properties / share_to_feed
      Added value: +{
      +  "description": "Reels only. false keeps the reel off the profile grid: it still publishes and shows in the Reels tab, just not in the main grid. Omit for Instagram's default (grid and Reels tab). Ignored for photos, carousels and stories.",
      +  "type": "boolean"
      +}
  12. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / linkedin / description
      Previous value: -"LinkedIn overrides. document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts."
    • addedInput schema / properties / platform_configurations / properties / linkedin / properties / first_comment
      Added value: +{
      +  "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.",
      +  "type": "string"
      +}
  13. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / linkedin / description
      Previous value: -"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. document_title only matters for PDF (document) posts."
    • removedInput schema / properties / platform_configurations / properties / linkedin / properties / first_comment
      Removed value: -{
      -  "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.",
      -  "type": "string"
      -}
  14. Changed2 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / linkedin / description
      Previous value: -"LinkedIn overrides. document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts."
    • addedInput schema / properties / platform_configurations / properties / linkedin / properties / first_comment
      Added value: +{
      +  "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.",
      +  "type": "string"
      +}
  15. Changed1 schema field changed
    • addedInput schema / properties / platform_configurations / properties / youtube / properties / has_paid_product_placement
      Added value: +{
      +  "description": "Set true when the video includes paid product placement, a sponsorship or an endorsement. YouTube shows viewers an \"Includes paid promotion\" label. Maps to the YouTube Data API paidProductPlacementDetails.hasPaidProductPlacement field.",
      +  "type": "boolean"
      +}
  16. Changed10 schema fields changed
    • changedInput schema / properties / platform_configurations / properties / bluesky / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / facebook / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / google_business / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / instagram / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / linkedin / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / pinterest / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / threads / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / tiktok / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / twitter / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
    • changedInput schema / properties / platform_configurations / properties / youtube / properties / caption / description
      Previous value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
  17. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare only destructiveHint=true, openWorldHint=true, readOnlyHint=false, but the description goes far beyond: it discloses that X silently strips URLs and bare domains from captions (and why), which failures are non-fatal (first_comment, thumbnail, thread chain stops but main post publishes), and that media IDs self-destruct after publishing. These are exactly the side effects an agent must know before a destructive publish.

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?

Purpose and the list_social_accounts prerequisite are correctly front-loaded, but the body is a single dense paragraph where the X link-stripping rules dominate disproportionate space relative to the main flow. Several sentences (caption limits, thread arrays, quote/reply IDs, media requirements) duplicate the schema field descriptions, which the scoring rules say earns no credit.

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 9-parameter tool with deeply nested per-platform objects and no output schema, the description covers the missing pieces an agent needs: cross-posting defaults, the immediate-vs-queued-vs-scheduled decision, partial-failure semantics, and platform capability constraints. Nothing critical to a correct first call is absent.

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 already 100%, so the baseline is 3, but the description adds real decision semantics on top: it tells the agent to check has_x_premium before writing an X caption and to proactively write platform-specific captions when the shared caption exceeds a platform limit — behavior not derivable from the schema. It does, however, restate caption limits and thread configuration that the schema already documents per-field.

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?

Opens with a specific verb+resource ('Publish or schedule a social media post'), enumerates the ten supported platforms, and states the defining capability ('One call can cross-post the same text, image, or video to multiple accounts and platforms at once'). This makes it unmistakable from siblings like update_post or list_posts.

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?

Gives explicit prerequisite routing ('Use list_social_accounts first to get account IDs'), conditionals for scheduling ('Omit scheduled_at to post immediately'), and disambiguates confusing option pairs — is_draft vs platform_configurations.tiktok.draft, and quote_post_id vs pasting a Threads link. It also names the sibling needed for music (search_instagram_audio on the account side) and the media-ID source (list_media).

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.