Skip to main content
Glama

schedule_post_draft

Hold a post to be SCHEDULED for future publishing as a pending draft WITHOUT scheduling it. Nothing enters the schedule until you show the user the exact post and time, they say yes in chat, and you call approve_draft(draftId); a draft nobody approves expires after 24 hours. Never tell the user to open the Socialync app to approve it: the whole flow stays in this chat. When the user has already confirmed the post, call publish_scheduled instead (one step). Once approved, it enters the scheduled queue and publishes automatically at scheduledFor. Returns a draft_id, expiry, and dailyDraftsRemaining for the target publish day. Media: up to 10 images via imageUrls/base64Images, OR one video via videoUrl, OR existing Socialync media via mediaId (from list_media). YouTube is allowed ONLY for video posts (and needs title). TikTok takes one video or a photo post of images (a swipeable photo carousel). Instagram requires media. Hard cap: 10 drafts per UTC day per profile (the day determined by scheduledFor). Each future day has its own independent 10-cap. ALWAYS run validate_post with these same arguments FIRST and resolve every error it reports before calling this.

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>",
      "scheduledFor": "<scheduledFor>"
    },
    "name": "schedule_post_draft"
  }
}

Input Schema

NameRequiredDescriptionDefault
titleNoPost title. REQUIRED when youtube is in platforms (it becomes the YouTube video title).
captionYesPost caption/text content.
mediaIdNoReference to media already in Socialync, from list_media (e.g. "upload:abc123"). Use this when the user uploaded their video/images in the Socialync app. Mutually exclusive with imageUrls/base64Images/videoUrl. Video mediaIds work on ALL platforms including TikTok and YouTube; image mediaIds work everywhere except YouTube.
videoUrlNoOne publicly fetchable https video URL (max 512MB). Socialync copies it into its own storage when you call this tool, so the link only has to work right now (an expiring export link is fine); a link that is already dead fails the call. Large videos take a while to copy; for files you generated yourself prefer create_media_upload + mediaId. No base64 video (if the user attached a video file in chat, have them upload it at socialync.io and use mediaId instead). Mutually exclusive with imageUrls/base64Images/mediaId. Each platform enforces its own format/duration/size limits at publish time (e.g. Bluesky ~60s, X free tier ~2:20).
imageUrlsNoUp to 10 publicly fetchable image URLs (https). Socialync copies them into its own storage when you call this tool, so the links only have to work right now (an expiring export link is fine). Combined with base64Images cannot exceed 10 total. Mutually exclusive with videoUrl/mediaId.
platformsNoPlatforms to draft for. Any of: facebook, instagram, tiktok, youtube, linkedin, twitter, threads, bluesky. YouTube requires a video (mediaId or videoUrl) and a title. TikTok requires a video or images. Pass platforms OR audienceId, not both.
profileIdNoThe Socialync profile to post from. Call list_profiles to see the profiles you can post to. Required only when this connection is authorized for more than one profile; if exactly one is authorized it is used automatically.
audienceIdNoA saved audience id from list_audiences. Expands to the platforms that audience reaches on the target profile; any member it cannot reach (other brand, needs reconnect, secondary account without its primary) is reported back in skippedMembers instead of failing the call. Use INSTEAD of platforms, never together.
base64ImagesNoUp to 10 images as base64 strings (data URIs accepted). Use when the user uploaded image(s) to you directly -- Socialync hosts them so they stay reachable until the scheduled publish time. Per-image cap: 8MB. Combined with imageUrls cannot exceed 10 total. Mutually exclusive with videoUrl/mediaId.
firstCommentNoOptional "first comment": text Socialync posts as a comment under the post right after it publishes -- the classic home for hashtags and links, keeps the caption clean. One string for all platforms. Supported: instagram, threads, twitter, youtube, linkedin, bluesky. Facebook and TikTok do not support it (they record it as skipped; the post itself is unaffected). Per-platform comment length limits are enforced at draft time: instagram 2200, threads 500, twitter 280, youtube 10000, linkedin 1250, bluesky 300. A failed comment never fails the post.
scheduledForYesISO 8601 UTC datetime for when to publish (e.g. 2026-04-15T14:00:00Z). Must be in the future.
exceptPlatformsNoOnly valid together with audienceId: platforms to leave out of the expanded audience for this one post (e.g. exclude tiktok when the post has no video).
instagramTrialReelNoOptional. Post the Instagram leg of this VIDEO post as an Instagram Trial Reel, shown only to non-followers. MANUAL: stays a trial until the user shares it with followers in the Instagram app. AUTO: Instagram shares it with followers automatically if it performs well. Omit for a regular Reel. One video only: images, carousels and Stories cannot be trial reels. Sharing a trial with followers cannot be done through the API, so never tell the user it will happen for them on MANUAL. An Instagram-only trial reel uses its own daily allowance (10 per UTC day per profile), separate from regular posts, so a trial reel plus a regular post of the same video later does not halve the regular allowance. Same as platformSpecificSettings.instagram = { trialReel: true, graduationStrategy: "MANUAL" | "AUTO" }.
tiktokPrivacyLevelNoRequired when tiktok is in platforms. Who can view the TikTok post (video or photos): PUBLIC_TO_EVERYONE (Everyone), MUTUAL_FOLLOW_FRIENDS (Friends), FOLLOWER_OF_CREATOR (Followers, private TikTok accounts only) or SELF_ONLY (Only me). TikTok requires this to be the user's own choice with no preset value: ask the user and pass their answer. One answer covers every TikTok post the user asks for together (for example "schedule all five, everyone can view"), so ask once per batch, not once per post. Never pick a level yourself or carry one over from posts the user did not say it applies to. When you ask, also tell them: "By posting, you agree to TikTok's Music Usage Confirmation" (https://www.tiktok.com/legal/page/global/music-usage-confirmation/en). Same as platformSpecificSettings.tiktok.privacyLevel.
platformSpecificSettingsNoPer-platform settings keyed by platform. Caption overrides: { "<platform>": { "customCaption": "..." } }. Instagram Trial Reel: { "instagram": { "trialReel": true, "graduationStrategy": "MANUAL" | "AUTO" } } (or use instagramTrialReel). TikTok: { "tiktok": { "privacyLevel": "PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "FOLLOWER_OF_CREATOR" | "SELF_ONLY" } } is required for every TikTok post and must be the user's own choice (or use tiktokPrivacyLevel). TikTok interaction settings default to allowed; pass { "tiktok": { "allowComments": false, "allowDuets": false, "allowStitching": false } } to turn any of them off. TikTok commercial content: { "tiktok": { "brandContent": true } } labels it "Promotional content" (the creator's own business); { "tiktok": { "brandedContent": true } } labels it "Paid partnership" (a third party). A paid partnership cannot be SELF_ONLY. AI label: { "<platform>": { "aiGenerated": true } } on tiktok, youtube or instagram shows that platform's AI-generated label (TikTok video only). Set it when the user says the media was made or substantially changed with AI. YouTube: { "youtube": { "isPrivate": true } } uploads as private; { "youtube": { "isKidsContent": true } } marks it made for kids. Threads topic: { "threads": { "topicTag": "Book Club" } } files the post under that topic (one per post, up to 50 characters, no periods or ampersands).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / platformSpecificSettings / description
      Previous value: -"Per-platform settings keyed by platform. Caption overrides: { \"<platform>\": { \"customCaption\": \"...\" } }. Instagram Trial Reel: { \"instagram\": { \"trialReel\": true, \"graduationStrategy\": \"MANUAL\" | \"AUTO\" } } (or use instagramTrialReel). TikTok: { \"tiktok\": { \"privacyLevel\": \"PUBLIC_TO_EVERYONE\" | \"MUTUAL_FOLLOW_FRIENDS\" | \"FOLLOWER_OF_CREATOR\" | \"SELF_ONLY\" } } is required for every TikTok post and must be the user's own choice (or use tiktokPrivacyLevel). TikTok interaction settings default to allowed; pass { \"tiktok\": { \"allowComments\": false, \"allowDuets\": false, \"allowStitching\": false } } to turn any of them off. TikTok commercial content: { \"tiktok\": { \"brandContent\": true } } labels it \"Promotional content\" (the creator's own business); { \"tiktok\": { \"brandedContent\": true } } labels it \"Paid partnership\" (a third party). A paid partnership cannot be SELF_ONLY. AI label: { \"<platform>\": { \"aiGenerated\": true } } on tiktok, youtube or instagram shows that platform's AI-generated label (TikTok video only). Set it when the user says the media was made or substantially changed with AI. YouTube: { \"youtube\": { \"isPrivate\": true } } uploads as private; { \"youtube\": { \"isKidsContent\": true } } marks it made for kids."New value: +"Per-platform settings keyed by platform. Caption overrides: { \"<platform>\": { \"customCaption\": \"...\" } }. Instagram Trial Reel: { \"instagram\": { \"trialReel\": true, \"graduationStrategy\": \"MANUAL\" | \"AUTO\" } } (or use instagramTrialReel). TikTok: { \"tiktok\": { \"privacyLevel\": \"PUBLIC_TO_EVERYONE\" | \"MUTUAL_FOLLOW_FRIENDS\" | \"FOLLOWER_OF_CREATOR\" | \"SELF_ONLY\" } } is required for every TikTok post and must be the user's own choice (or use tiktokPrivacyLevel). TikTok interaction settings default to allowed; pass { \"tiktok\": { \"allowComments\": false, \"allowDuets\": false, \"allowStitching\": false } } to turn any of them off. TikTok commercial content: { \"tiktok\": { \"brandContent\": true } } labels it \"Promotional content\" (the creator's own business); { \"tiktok\": { \"brandedContent\": true } } labels it \"Paid partnership\" (a third party). A paid partnership cannot be SELF_ONLY. AI label: { \"<platform>\": { \"aiGenerated\": true } } on tiktok, youtube or instagram shows that platform's AI-generated label (TikTok video only). Set it when the user says the media was made or substantially changed with AI. YouTube: { \"youtube\": { \"isPrivate\": true } } uploads as private; { \"youtube\": { \"isKidsContent\": true } } marks it made for kids. Threads topic: { \"threads\": { \"topicTag\": \"Book Club\" } } files the post under that topic (one per post, up to 50 characters, no periods or ampersands)."
  2. Changed3 schema fields changed
    • changedInput schema / properties / mediaId / description
      Previous value: -"Reference to media already in Socialync, from list_media (e.g. \"upload:abc123\"). Use this when the user uploaded their video/images in the Socialync app. Mutually exclusive with imageUrls/base64Images/videoUrl. Video mediaIds work on ALL platforms including TikTok and YouTube."New value: +"Reference to media already in Socialync, from list_media (e.g. \"upload:abc123\"). Use this when the user uploaded their video/images in the Socialync app. Mutually exclusive with imageUrls/base64Images/videoUrl. Video mediaIds work on ALL platforms including TikTok and YouTube; image mediaIds work everywhere except YouTube."
    • changedInput schema / properties / platforms / description
      Previous value: -"Platforms to draft for. Any of: facebook, instagram, tiktok, youtube, linkedin, twitter, threads, bluesky. TikTok/YouTube require a video (mediaId or videoUrl); YouTube also requires title. Pass platforms OR audienceId, not both."New value: +"Platforms to draft for. Any of: facebook, instagram, tiktok, youtube, linkedin, twitter, threads, bluesky. YouTube requires a video (mediaId or videoUrl) and a title. TikTok requires a video or images. Pass platforms OR audienceId, not both."
    • changedInput schema / properties / tiktokPrivacyLevel / description
      Previous value: -"Required when tiktok is in platforms. Who can view the TikTok video: PUBLIC_TO_EVERYONE (Everyone), MUTUAL_FOLLOW_FRIENDS (Friends), FOLLOWER_OF_CREATOR (Followers, private TikTok accounts only) or SELF_ONLY (Only me). TikTok requires this to be the user's own choice with no preset value: ask the user and pass their answer. One answer covers every TikTok post the user asks for together (for example \"schedule all five, everyone can view\"), so ask once per batch, not once per video. Never pick a level yourself or carry one over from posts the user did not say it applies to. When you ask, also tell them: \"By posting, you agree to TikTok's Music Usage Confirmation\" (https://www.tiktok.com/legal/page/global/music-usage-confirmation/en). Same as platformSpecificSettings.tiktok.privacyLevel."New value: +"Required when tiktok is in platforms. Who can view the TikTok post (video or photos): PUBLIC_TO_EVERYONE (Everyone), MUTUAL_FOLLOW_FRIENDS (Friends), FOLLOWER_OF_CREATOR (Followers, private TikTok accounts only) or SELF_ONLY (Only me). TikTok requires this to be the user's own choice with no preset value: ask the user and pass their answer. One answer covers every TikTok post the user asks for together (for example \"schedule all five, everyone can view\"), so ask once per batch, not once per post. Never pick a level yourself or carry one over from posts the user did not say it applies to. When you ask, also tell them: \"By posting, you agree to TikTok's Music Usage Confirmation\" (https://www.tiktok.com/legal/page/global/music-usage-confirmation/en). Same as platformSpecificSettings.tiktok.privacyLevel."
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations, the description discloses the full approval workflow, 24-hour expiry, return fields, media-copy behavior, platform-specific media rules, and per-day draft caps. This is unusually rich behavioral context, and it does not contradict the non-readOnly, non-destructive, openWorld annotations.

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?

The core purpose and approval workflow are front-loaded, and the length is justified by a complex 15-parameter tool. Some media/platform details duplicate the schema, but the description remains structured and almost every sentence carries operational value.

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?

Given the tool's complexity, the lack of an output schema, and rich annotations, the description is complete enough to call correctly: it covers prerequisites, alternatives, expiry, return values, media constraints, and caps. No critical agent-facing context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 15 parameters in detail. The description adds high-level media and platform rules, but most of those are also present in the schema descriptions, so it does not substantially extend parameter semantics beyond the structured data.

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?

The description states a specific verb and resource: it creates a pending draft for future publishing, not a live scheduled item. It explicitly distinguishes itself from approve_draft, publish_scheduled, and the validate_post prerequisite, so an agent can identify the tool's role without opening the 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?

Usage is highly explicit: call validate_post first, show the user the exact post and time, get confirmation in chat, then call approve_draft; if already confirmed, call publish_scheduled instead. It also warns never to send the user to the Socialync app and lists media/platform constraints, leaving little to inference.

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.