Skip to main content
Glama

validate_post

Read-only

Validate a post BEFORE creating or publishing it. Checks caption length, link count, media type/count/size, image aspect ratio, video duration, and connection/token health for every target platform -- without creating anything. ALWAYS call this with the exact arguments you intend to pass to create_post_draft / schedule_post_draft / publish_now / publish_scheduled, BEFORE calling them, and again after any edit. Errors are guaranteed publish failures: fix them or drop that platform. Warnings publish but degraded (truncated caption, blur-fitted image, heuristic link count) -- surface them to the user before publishing. Pass scheduledFor to validate under the scheduled rules (all 8 platforms, video allowed); omit it for immediate-post rules. Does not check the daily quota (call check_quota). base64Images cannot be pre-validated -- they are checked at draft time once Socialync hosts them.

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

Input Schema

NameRequiredDescriptionDefault
titleNoPost title (required when youtube is in platforms).
captionYesThe exact caption you intend to post.
mediaIdNoExisting Socialync media from list_media (e.g. "upload:abc123"). Mutually exclusive with imageUrls/videoUrl.
videoUrlNoOne publicly fetchable https video URL. Requires scheduledFor (video posts are scheduled-only).
imageUrlsNoUp to 10 publicly fetchable https image URLs -- the same ones you will pass to the posting tool.
platformsNoPlatforms the post will target. Pass platforms OR audienceId, not both. Without scheduledFor, TikTok/YouTube fail validation (they post through the scheduled tools only).
profileIdNoThe Socialync profile to post from. Call list_profiles to see authorized profiles. Required only when more than one profile is authorized.
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.
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.
scheduledForNoISO 8601 UTC datetime if this will be a scheduled post. Presence switches validation to the scheduled rules.
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).
instagramTrialReelNoThe instagramTrialReel value you will pass to schedule_post_draft / publish_scheduled, if any.
tiktokPrivacyLevelNoThe tiktokPrivacyLevel you will pass to schedule_post_draft / publish_scheduled. 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.
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). Pass exactly what you will pass to the posting tool.

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. Pass exactly what you will pass to the posting tool."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). Pass exactly what you will pass to the posting tool."
  2. Changed2 schema fields changed
    • changedInput schema / properties / platforms / description
      Previous value: -"Platforms the post will target. Pass platforms OR audienceId, not both. Without scheduledFor, TikTok/YouTube fail validation (video posts are scheduled-only)."New value: +"Platforms the post will target. Pass platforms OR audienceId, not both. Without scheduledFor, TikTok/YouTube fail validation (they post through the scheduled tools only)."
    • changedInput schema / properties / tiktokPrivacyLevel / description
      Previous value: -"The tiktokPrivacyLevel you will pass to schedule_post_draft / publish_scheduled. 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: +"The tiktokPrivacyLevel you will pass to schedule_post_draft / publish_scheduled. 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.8/5.0
Behavior5/5

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

Beyond the readOnly and openWorld annotations, the description explains validation behavior in detail: guaranteed publish failures versus degraded warnings, scheduledFor switching rule sets, platform-specific rules, and the base64Images limitation. It clearly discloses that the tool creates nothing and that warnings should be surfaced to the user.

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 description is dense and somewhat long, but it is front-loaded with the primary rule and organized around validation outcomes, scheduling mode, quota exclusion, and limitations. Most sentences add concrete operational value, though the length is close to the upper limit for a tool description.

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 14-parameter validation tool with no output schema, the description is complete enough to call correctly: it states the purpose, required workflow, error/warning semantics, scheduling distinction, quota exclusion, and an explicit pre-validation limitation. The schema supplies the detailed parameter contracts.

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 documents most parameters. The description adds meaningful semantics beyond the schema, especially the behavioral switch from immediate-post rules to scheduled rules via scheduledFor and the note that base64Images cannot be pre-validated.

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: validate a post before creating or publishing it. It distinguishes itself from sibling tools by explicitly saying it creates nothing and must be called before create_post_draft / schedule_post_draft / publish_now / publish_scheduled.

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?

It gives explicit when-to-use guidance: ALWAYS call with the exact arguments intended for the posting tools, before calling them and again after any edit. It also explains alternatives and exclusions, including that daily quota requires check_quota and that base64Images cannot be pre-validated.

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.