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). 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.

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. 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."
  2. 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"
  3. 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"
  4. 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."
  5. 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"
      +}
  6. 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"
      +}
  7. 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"
      +}
  8. 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"
      +}
  9. 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"
      -}
  10. 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"
      +}
  11. 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"
      +}
  12. 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."
  13. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag it as a destructive, open-world write. The description goes well beyond that with genuinely non-obvious behavior: X silently strips URLs (including bare domains) and surcharges for links, oversized captions get cut, media IDs are invalidated after the last post publishes, is_draft is Post-Bridge-only rather than a native draft, and TikTok's platform_configurations.tiktok.draft is the real native draft. These are exactly the surprises an agent must know before invoking.

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

Conciseness4/5

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

Long (~350 words), but for a 9-parameter cross-platform tool essentially every sentence carries a platform-specific constraint, and the most consequential warning (X link stripping) is called out with an 'IMPORTANT' marker. The only waste is minor duplication of caption limits that also appear in nearly every platform schema field.

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 nested, destructive, multi-platform write with no output schema, the description covers the hard parts: platform-specific media requirements, caption ceilings, X premium branching, draft semantics, and threads. It does not describe what a successful response contains (post IDs, per-platform results) nor how to inspect partial failures, which an agent would need after creating.

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 meaning the schema alone does not surface: media_urls are downloaded by the API, has_x_premium on the account determines whether the 280 or 25,000 X limit applies, and platform_configurations should be populated proactively with a shorter caption when the shared one overflows. It explains the intent behind the override structure rather than restating fields.

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 (publish/schedule) and resource (social media post) across an enumerated platform list, and immediately establishes the key capability differentiator: one call can cross-post to multiple accounts. An agent can distinguish this from update_post or preview_media without opening a schema.

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 clear conditional routing inside the tool: 'Use list_social_accounts first to get account IDs', 'Omit scheduled_at to post immediately', and use platform_configurations.<platform>.caption when the shared caption exceeds a limit. It does not contrast against sibling alternatives for an already-created post (update_post, delete_post, preview_media), so it stops short of full when-not guidance.

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.