Skip to main content
Glama
posterly-mcp-server

posterly-mcp-server

by awpthorp

validate_post

Read-onlyIdempotent

Validate and normalize a post before publishing without creating it or consuming quotas. Use it to catch media issues and preview the final result before confirmation.

Instructions

Validate and normalize one post without creating it. This does not create records, copy remote media, consume post-item/storage quota, reserve X quota, emit webhooks, or enqueue publication. Third-party media may return remote_media_not_materialized because live create performs storage copy and final byte validation. Use this before showing the final preview and asking for confirmation to call create_post.

Input Schema

NameRequiredDescriptionDefault
captionNoThe post caption/text content. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when `thread_posts` is provided.
platformNoPlatform name (required with username). Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases such as x, gmb, and instagram-standalone are accepted.
usernameNoAccount username (alternative to account_id)
media_urlNoMedia URL to attach. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs. For threads, attaches to the lead post only.
post_typeNoOptional post type: text, image, video, carousel, reel, story, story_series, document, photo, cover_photo, x_thread, or threads_thread. Omit it for auto-detection from media. For TikTok photo posts, use photo/image/carousel or omit it; for Facebook cover photos, use cover_photo or platform_settings.post_type.
account_idNoSocial account ID (from list_accounts)
media_urlsNoMultiple media URLs for carousel or multi-image posts. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. For TikTok, 2 or more images auto-create a photo slideshow (up to 35 images) and every image is posted.
scheduled_atNoISO 8601 datetime for scheduling (e.g. 2026-03-05T09:00:00Z). Omit for immediate publish.
thread_postsNoFor X or Threads only: array of 2+ strings, one per post in the thread. The first entry leads, the rest reply in order. When set, the platform must be twitter or threads.
workspace_idNoWorkspace ID to assign the post to (from whoami). If omitted, uses the account's workspace or the caller's default workspace.
platform_settingsNoPlatform-specific settings for the selected account. Use this for non-Instagram settings and prefer it over raw metadata.
instagram_settingsNoInstagram-specific settings. If “tag” is ambiguous, distinguish caption @mentions (put @username in caption), native media tags (user_tags), and co-author invitations (collaborators). Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Call list_platforms with view=schema and account_id first.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.55.1

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, but the description goes further by enumerating the specific side effects that do NOT occur (no records, no media copy, no post-item or storage quota, no X quota reservation, no webhooks, no publication enqueue). It also discloses a real failure mode beyond annotations: third-party media may return remote_media_not_materialized because live create performs the storage copy and byte validation. Nothing contradicts the 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?

Purpose is front-loaded in the first clause, followed by side-effect exclusions, then the media caveat, then the usage instruction. Every sentence carries information, but the six-item negation list is dense enough that it reads as a run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter validator with nested per-platform settings and no output schema, the description covers side effects and workflow well but says nothing about what validation returns — errors vs. warnings, whether a normalized payload comes back, or which field failures are blocking. An agent can decide to call it, but not interpret its result.

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% across all 12 parameters (including deep nested platform_settings and instagram_settings), so the schema already carries parameter meaning and the baseline is 3. The description adds only indirect param context via the third-party media caveat, which explains why media_url/media_urls behave differently here than in create_post; it does not document caption, thread_posts, or scheduling semantics beyond the schema.

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?

"Validate and normalize one post without creating it" gives a specific verb pair (validate/normalize), a specific resource (one post), and a scope boundary (no creation). This immediately separates it from create_post, create_posts_batch, and update_post without the agent needing to inspect schemas.

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?

"Use this before showing the final preview and asking for confirmation to call create_post" names the alternative tool and the exact workflow condition that selects it. The ordering constraint (validate → preview → confirm → create) is explicit rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.