Schedule Post
schedule_postSchedule 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
| Name | Required | Description | Default |
|---|---|---|---|
| images | No | Public image URLs only, max 4. Chat attachments use chat_files on ChatGPT, or create_image_upload on Claude and Grok. | |
| tiktok | No | Required when TikTok is in also_post_to. Ask the user first; without it TikTok is skipped. | |
| content | Yes | The text content of the post to schedule. This is the tweet body. | |
| post_to_x | No | Post to X. Defaults to true. Set false only when the user wants other networks and explicitly not X. | |
| upload_id | No | Id 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_files | No | Photos 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_set | No | The 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_to | No | Extra 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_id | No | Optional X community ID. Other networks still get the text without the community. | |
| platform_texts | No | Optional per-network captions when the main content is too long or should differ. | |
| scheduled_date | Yes | ISO 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_tag | No | Optional Threads topic tag (without #). Ignored unless Threads is in also_post_to. | |
| share_with_followers | No | Whether to share this post with followers. Defaults to false. |