Official Model Context Protocol (MCP) server for Upload-Post — publish, schedule, analyze and manage social media across TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, X and more from any MCP-compatible AI agent (Claude Desktop, Claude Code, Cursor, ...).
Upload-Post MCP demonstrates solid definition quality with all 5 tools having clear, descriptive names following verb_noun convention (get_*). Descriptions are well-written (150-300 chars), explaining WHAT each tool does and WHEN to use it. Input schemas are present with proper types and descriptions. However, output schemas are not documented in the visible code, and some parameter descriptions lack format constraints or validation guidance. Tool composition is clean (single responsibility), and parameter naming is consistent. The analytics tools show good domain knowledge (platform-specific metrics, pagination support). Risk annotations (READ_ONLY) are present, indicating security awareness.
Aggregated analytics for a profile across selected platforms (followers, views, engagement). Instagram also returns two audience breakdowns with the same shape (age / gender / country / city): `follower_demographics` for the account's followers and `engaged_audience_demographics` for the accounts that engaged with its content.
Replays per-post metrics Upload-Post already fetched, instead of calling the platforms again. ONLY contains posts previously fetched through `get_post_analytics`; there is no background refresh, so `captured_at` is the last time that post was read live and a post never queried live will be absent. Unlike `get_post_analytics` it never hits the platforms, so it is not subject to the live analytics rate limit (100 requests / 5 minutes) — prefer it when scanning many posts or paging through a profile's history. Paginated: pass `next_cursor` from the response back as `cursor` until `has_more` is false.
Reference: which metrics are available per platform (impressions, likes, …) and their human labels.
Per-platform metrics for a specific post identified by `request_id`. `post_metrics` carries whatever each platform reports, so its shape is not the same everywhere: on TikTok it adds `retention` (the curve, second by second), `impression_sources` (For You, following, search, profile…), `audience_types` (followers vs non-followers), `new_followers` won by the post, `reach` and the watch times (`average_time_watched`, `total_time_watched`, `full_video_watched_rate`) on top of the usual counters.
Output schemas not documented. Tool descriptions explain inputs but do not specify what fields/structure the response contains. LLMs cannot plan downstream tool calls or extract data without knowing response shape.
Parameter format constraints missing. 'startDate', 'endDate', 'date' parameters lack explicit format (YYYY-MM-DD assumed but not stated). 'limit' has no min/max bounds stated in description. LLMs may pass invalid values.
Pagination guidance incomplete. get_cached_post_analytics mentions 'next_cursor' and 'has_more' in description but does not document the full pagination contract (e.g., what happens when cursor is invalid, when has_more becomes false).
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 74 | 2026-07-28+ | v2 |
Sum of impressions for a profile from daily snapshots. Use `period` for presets, or `startDate`/`endDate` for custom ranges.
Error handling guidance absent. No tool description explains what errors can occur, when to retry, or how to recover. E.g., rate limit (100 req/5 min) mentioned for get_post_analytics but no guidance on retry strategy.
Parameter dependencies undocumented. get_total_impressions accepts both 'period' (preset) and 'startDate'/'endDate' (custom range), mutual exclusivity not stated. LLMs may pass both, causing ambiguous behavior.