MCP server for PostWire with Smart Distribute: one prompt → the BEST NATIVE post for each platform (right hashtags, length, SEO & format — never the same text everywhere), then publish to TikTok, Instagram, YouTube, X, LinkedIn, Bluesky, Mastodon, Telegram & more. For Claude, Cursor or any AI agent.
PostWire MCP has well-structured tool definitions with clear naming (verb_noun pattern), comprehensive descriptions (avg 250+ chars), and complete JSON schemas with typed parameters. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present and correct. However, output schemas are not documented, responses are described in prose but not formally specified. Parameter descriptions are strong but some lack explicit constraints (e.g., 'platforms' array has no enum of valid values). Error handling is basic: the NO_KEY response is user-friendly but other error paths are not visible in the code excerpt.
Smart Distribute — PostWire's native AI writer. Give ONE prompt (and optional media) and it writes the BEST NATIVE post for EACH platform: correct character limits, hashtag rules, SEO title+tags for YouTube, hook-first captions for TikTok/Reels, professional framing for LinkedIn (link-in-comment), thread-friendly text for X (link-in-reply), CamelCase tags for Mastodon, and more. It does NOT send the same text everywhere — each platform gets its own optimized draft. Returns { drafts: { <platform>: { text, title?, tags? } } }. Review/edit, then pass to post_to_social as per_platform.
Check the processing/publish status of a post previously created with post_to_social.
List the social platforms PostWire supports and the fields each needs.
Show the PostWire account: plan, monthly usage, and connected platforms.
Publish to one or more social platforms via PostWire, in parallel. For best results, first call generate_posts to get a NATIVE draft per platform, then pass them here as `per_platform` (PostWire never just copies the same text everywhere). Or pass a single `text` for a quick same-everywhere post. Connect accounts first at https://postwire.io/dashboard.html. Returns per-platform results (each has an id you can pass to get_post_status).
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns { drafts: { <platform>: { text, title?, tags? } } }') but no formal JSON Schema for responses. LLMs cannot plan downstream operations without knowing response structure.
'platforms' parameter in generate_posts and post_to_social accepts array of strings but has no enum constraint. Description says 'e.g. [youtube, tiktok, ...]' but does not formally list valid values. LLMs may hallucinate unsupported platform names.
post_to_social has conflicting optional parameters: 'text' (fallback), 'per_platform' (native drafts), and 'title'/'video_url'/'photo_url'. Dependencies are not documented. LLMs may pass both 'text' and 'per_platform', causing ambiguity about which takes precedence.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Error handling visible only for missing API key (NO_KEY object). Other failure modes (invalid platform, auth failure, API errors) are not shown in code. Recovery guidance for common errors is missing.
list_platforms and my_account have empty inputSchema (no properties). Descriptions are brief (70 chars). These discovery tools should explain what structure they reveal and when to call them.