MCP server for upload-post.com — post text, photos, and videos to 13 social platforms (X, LinkedIn, Instagram, TikTok, YouTube, Facebook, Threads, Pinterest, Bluesky, Reddit, Discord, Telegram, Google Business) from Claude and other MCP clients
17 tools with complete schemas and descriptions. Naming follows verb_noun convention (post_*, list_*, get_*, create_*, etc.). Descriptions are detailed (100-250 chars typical) and explain WHAT, WHEN, and prerequisites. Parameters are well-typed with enums for platforms. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. Error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint). Some parameter descriptions could be more concise. Risk classification (WRITE, READ_ONLY, DESTRUCTIVE) is present in metadata but not exposed to LLMs.
Cancel (delete) a scheduled post by job_id so it will not be published.
Create a new user profile. After creating, use generate_connect_link to get a URL for linking social accounts to it.
Change the publish time, title, or caption of a scheduled post by job_id.
Generate a secure URL where social accounts (TikTok, Instagram, X, LinkedIn...) can be linked to a profile. Open it in a browser and log in to each platform.
Retrieve comments on an Instagram post/reel. Provide post_id or post_url. Paginate with the returned next_cursor.
Retrieve paginated history of past uploads with their platforms, status, and post URLs.
Output schemas not documented. LLMs cannot see what fields responses contain (e.g., does get_history return post_id, post_url, platform, status, timestamp?). This forces agents to guess field names for downstream tool calls and risks broken chains.
No error handling guidance. Tools lack recovery hints (e.g., 'If subreddit not found, call list_subreddits() first'). Agents receive raw API errors with no actionable next steps.
Tool annotations missing. Risk metadata (WRITE, READ_ONLY, DESTRUCTIVE) exists in code but is not exposed via readOnlyHint/destructiveHint in tool definitions. LLMs cannot distinguish safe from destructive operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Fetch account-level metrics (followers, reach, views, likes, comments, shares...) for a profile's connected platforms.
Check the progress/result of an async upload (by request_id) or a scheduled post (by job_id). Provide one of the two.
List recent posts/media published on a connected platform account (instagram, tiktok, youtube, linkedin, facebook, x, threads, pinterest, bluesky, reddit).
List posting targets needed for platform-specific IDs: facebook → pages (facebook_page_id), linkedin → organization pages (target_linkedin_page_id), pinterest → boards (pinterest_board_id).
List all user profiles and which social accounts each has connected. The profile 'username' is the 'user' value for posting tools.
List all posts scheduled for future publishing, with their job_ids.
Publish photo(s) — including carousels — to instagram, tiktok, linkedin, facebook, x, threads, pinterest, bluesky, discord, telegram. Each photo can be a local file path or a public http(s) URL.
Publish a text-only post to one or more platforms (x, linkedin, facebook, threads, reddit, bluesky, discord, telegram, google_business). 'title' is the post content. Supports scheduling, queueing, link previews (link_url), X polls via extra_params.
Publish a video to tiktok, instagram (reels/stories), youtube, linkedin, facebook, x, threads, pinterest, bluesky, discord, telegram. The video can be a local file path or a public http(s) URL. 'title' is required for YouTube and Reddit. YouTube extras (tags, categoryId, privacyStatus...), Instagram media_type, TikTok privacy etc. go in extra_params.
Send a private reply DM to the author of an Instagram comment (comment_id comes from get_comments).
Validate the API key and return account info (email, plan). Use this to test the connection.
Pagination not fully specified. get_history accepts page/limit but does not document total_count or next_cursor in response. Agents cannot determine if more results exist.
Mutual exclusivity not documented. post_text, post_photos, post_video all accept both scheduled_date and add_to_queue, but descriptions state 'Cannot combine with scheduled_date'. This constraint is buried in text, not enforced or clearly highlighted.