Skip to main content
Glama

Schedule Post

schedule_post

Schedule a post on X at a specific date and time. Optionally cross-post to LinkedIn, Threads, BlueSky, Instagram, and/or TikTok.

IMAGES AND VIDEO:

  • This tool cannot accept image bytes. images takes a public https URL only. Do not encode a chat photo into the arguments.

  • ChatGPT: if the user attached a photo or video, set chat_files and schedule in this call. ChatGPT fills download_url and file_id. Do not call create_image_upload or create_video_upload first. Do not fill a local /mnt path.

  • chat_files is an array of up to 4 file objects. At most one item may be an MP4 or MOV.

  • Any attached image or video is the post media. Do not describe the picture or reject it as a screenshot. Grok: POST the file to upload_url, then call this tool with upload_id. Claude: show upload_url and wait. Claude cannot POST from its sandbox. Do not put the file in images, content, or chat_files.

  • Show upload_url when this tool returns status "needs_upload_link" or "inline_image_rejected".

  • A public image URL can still go in images[].url.

  • Video posts to X, Threads, BlueSky, Instagram, and TikTok. LinkedIn skips video. BlueSky video must be 100MB or smaller. TikTok accepts one video or JPEG/WebP photos, not GIFs or PNGs.

  • If this tool returns status "pending" or "expired", show the link again and do not claim the post was scheduled.

CROSS-POSTING:

  • Default is X only. Do NOT add also_post_to unless the user asked to post on other networks.

  • Call get_connected_socials first when the user says "everywhere", "all connected", or names a network.

  • also_post_to accepts: linkedin, threads, bluesky, instagram, tiktok, or "all" (every connected+ready network).

  • YouTube, Facebook, and Pinterest are coming soon — never claim they posted.

  • Instagram requires an image or video. TikTok requires one video or JPEG/WebP photos. Do not claim either posted without that media. Neither supports thread posts.

  • TikTok: before posting there, ASK the user who can see it (everyone, friends, followers, or only them) and whether it promotes their brand or is a paid partnership, and tell them "By posting, you agree to TikTok's Music Usage Confirmation". Pass their answers in tiktok. Never choose the visibility for them. TikTok can take a few minutes to process before the post shows on their profile.

  • If a network is disconnected or needs reconnect, tell the user to open Account → My Socials. MCP cannot connect accounts.

  • X community posts still cross-post the same text (without the community) — warn the user.

  • BlueSky over 300 characters publishes as a thread. LinkedIn max 3000, Threads max 500, Instagram max 2200, TikTok max 2200.

  • Use platform_texts to send a shorter/adapted caption per network.

  • After a successful publish, ALWAYS show published_urls to the user as clickable links. If waiting_for_url is set (common on Threads), immediately call get_published_urls with the post _id.

  • To cancel later, use unschedule_post (cancels X and other networks).

SOCIAL SETS:

  • social_set: the set (brand) to post as, e.g. "Business", or several to post the same text to each. Only when the user has more than one set (see list_social_sets).

  • With a set, the post goes to that set's X account and to its other socials that are on for new posts, unless the user named networks (then pass also_post_to; pass also_post_to: [] for X only).

  • Several sets and no set named: this tool returns status "choose_set" and shows a "Post as" card. Ask which set, then call again with social_set. Don't claim it was scheduled.

  • status "set_paused": that set can't post (payment failed or plan ended). Tell the user and offer another set.

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": {
      "content": "<content>",
      "scheduled_date": "<scheduled_date>"
    },
    "name": "schedule_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
imagesNoPublic image URLs only, max 4. Chat attachments use chat_files on ChatGPT, or create_image_upload on Claude and Grok.
tiktokNoRequired when TikTok is in also_post_to. Ask the user first; without it TikTok is skipped.
contentYesThe text content of the post to schedule. This is the tweet body.
post_to_xNoPost to X. Defaults to true. Set false only when the user wants other networks and explicitly not X.
upload_idNoId returned by create_image_upload or create_video_upload after the user has uploaded on the link. Omit when chat_files already has the attachment. Do not invent this.
chat_filesNoPhotos or videos attached in this ChatGPT message. Include this whenever the user attached a file. ChatGPT fills each item. Do not put base64, a local path, or an upload link here.
social_setNoThe social set to post as: its name (e.g. 'Business'), id, or one of its handles. A list posts one copy per set. Omit when the user has one set.
also_post_toNoExtra networks besides X: 'linkedin', 'threads', 'bluesky', 'instagram', 'tiktok', and/or 'all'. Omit for X-only. Only set this when the user asked to cross-post. Instagram requires an image or video. TikTok requires a video or photo.
community_idNoOptional X community ID. Other networks still get the text without the community.
platform_textsNoOptional per-network captions when the main content is too long or should differ.
scheduled_dateYesISO 8601 date-time string for when the post should be published (e.g. '2026-03-05T14:30:00.000Z'). Must be a future date.
threads_topic_tagNoOptional Threads topic tag (without #). Ignored unless Threads is in also_post_to.
share_with_followersNoWhether to share this post with followers. Defaults to false.

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare it is a non-idempotent open-world write; the description goes far beyond by enumerating return statuses ("needs_upload_link", "pending", "expired", "choose_set", "set_paused") and prescribing the follow-up action for each. It also discloses per-platform limits (BlueSky 100MB video, LinkedIn 3000 chars), the Threads waiting_for_url path, and that accounts cannot be connected via MCP.

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?

Front-loaded with the core action, then organized under clear headers (IMAGES AND VIDEO, CROSS-POSTING, SOCIAL SETS) so an agent can jump to the relevant block. It is long and repeats a few points ("do not claim it was scheduled", the upload_url instruction), which costs it the top score.

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 13-parameter tool with nested objects and no output schema, the description covers the failure modes, per-platform media rules, TikTok consent flow, and multi-brand set resolution. Nothing an agent needs to invoke it correctly or interpret its status appears to be missing.

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 schema already carries most parameter meaning and a baseline of 3 applies. The description earns above that by clarifying the mutually exclusive media paths (images vs chat_files vs upload_id), the meaning of an empty also_post_to list, and how social_set changes destination behavior.

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 and resource ("Schedule a post on X at a specific date and time") and immediately scopes the cross-posting extension. An agent can distinguish it from unschedule_post and cross_post without opening either 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?

Explicit routing rules abound: call get_connected_socials when the user says "everywhere", do not add also_post_to unless asked, do not call create_image_upload on ChatGPT, use unschedule_post to cancel later. It also names what not to do (never claim Facebook/YouTube/Pinterest posted) rather than only what to do.

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