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, post it in a reply or put it in the account bio. 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

TableJSON 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 / 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"
      -}
  2. 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"
      +}
  3. 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"
      +}
  4. 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."
  5. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare a mutating, destructive, open-world operation, and the description adds substantial context beyond them: X strips URLs (including bare domains) to avoid surcharges, is_draft is Post-Bridge-only vs TikTok's real draft, media is auto-deleted after publishing, and per-platform caption caps. This is exactly the behavioral detail annotations cannot carry.

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?

It is long, but length is justified by ten platforms and several genuine gotchas. It is front-loaded with purpose, then routing, then critical caveats. Minor redundancy: caption limits are restated in both the description and the per-platform schema fields.

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 9-parameter tool with nested per-platform objects, no output schema, and 100% schema coverage, the description supplies the missing cross-platform judgment (link stripping, draft semantics, caption overflow handling). It does not describe the response shape, though no output schema exists to defer to.

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 description coverage is 100%, so the baseline is 3, but the description adds cross-cutting meaning: media_urls are downloaded by the API from public URLs, is_draft semantics, and the platform caption-limit strategy that ties caption/platform_configurations together. It largely restates rather than extends a few fields, keeping it below a 5.

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 precise verb (publish/schedule) and resource (social media post) and enumerates the supported platforms plus cross-posting capability. An agent can immediately distinguish this from siblings like update_post or list_posts 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 Guidelines5/5

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

Gives explicit operational routing: call list_social_accounts first for IDs, omit scheduled_at to post immediately, write platform-specific captions without being asked, and check has_x_premium before writing an X caption. When-to-do-X conditions are spelled out rather than implied.

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.