Model Context Protocol (MCP) server for Upload-Post — publish, schedule, analyze and manage social media from any MCP-compatible AI agent.
@upload-post/mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Official **Model Context Protocol (MCP)** server for Upload-Post.
Lets any MCP-compatible AI agent (ChatGPT, Claude Desktop, Claude Code, Cursor, …) publish, schedule, analyze and manage social media across **TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, X, Google Business, Discord, Telegram and more** with a single API key.
> Built on top of the official upload-post SDK and the public Upload-Post REST API.
---
Use it in ChatGPT (no setup)
Upload-Post is a reviewed app in the **ChatGPT app directory**. Add Upload-Post in ChatGPT — or search for *Upload-Post* under **Apps** — click **Connect** and sign in with OAuth. No Developer mode, no MCP URL to paste, and you get the Upload Studio widget for publishing video files, photos and carousels straight from your computer.
Prefer to wire it up by hand? Enable **Developer mode** in **Settings → Apps → Advanced settings**, click **Create app**, point it at https://mcp.upload-post.com/mcp and set authentication to **OAuth**.
---
Two ways to run it yourself
A) Local stdio (single-user) — simplest
The server runs on your machine, spawned by the MCP client. Add to ~/.claude/mcp.json (or Cursor settings, etc.):
Get your API key at → *API Keys*. Restart the client — you should see 58 upload-post tools.
B) Hosted HTTP (multi-tenant) — share one server with many users
Run the server on any Docker-capable host (Fly, Railway, Cloud Run, your own box…) and let each user connect with **their own** Upload-Post API key. The server stores nothing per user.
Authorization: Bearer is also accepted, for clients that only allow Bearer.
---
What can the agent do?
The server exposes Upload-Post API tools plus one ChatGPT App UI launcher.
| Group | Tools |
|---------------|-------|
| Upload | upload_video, upload_photos, upload_text, upload_document, open_upload_studio |
| Media staging | create_media_upload, complete_media_upload, get_media_upload, delete_media_upload |
| Status | get_status, get_job_status, get_history, get_media |
| Schedule | list_scheduled, cancel_scheduled, edit_scheduled |
| Analytics | get_analytics, get_total_impressions, get_post_analytics, get_cached_post_analytics, get_platform_metrics |
| Audience | get_audience, get_suggestions |
| Users | get_account_info, list_users, get_connect_link, create_user, delete_user, generate_jwt, validate_jwt |
| Pages/boards | get_facebook_pages, get_linkedin_pages, get_pinterest_boards, get_google_business_locations, get_google_business_reviews, reply_to_google_business_review, get_reddit_detailed_posts |
| Posts | retry_post, unpublish_post |
| Comments | get_post_comments, create_comment, delete_comment, reply_to_comment, public_reply_to_comment, hide_comment, like_comment, pin_comment, edit_comment, hold_comment, approve_comment, ignore_comment, set_post_comments, comment_action |
| TikTok | tiktok_music_trending, tiktok_music_search, tiktok_location_search, tiktok_publishing_settings |
| DMs | send_dm, list_dm_conversations, start_autodm, list_autodms, get_autodm_logs, pause_autodm, resume_autodm, stop_autodm, delete_autodm, manage_autodms |
| FFmpeg | submit_ffmpeg_job, get_ffmpeg_job, download_ffmpeg_result, get_ffmpeg_consumption |
| Queue | get_queue_settings, update_queue_settings, preview_queue |
Async uploads return a request_id. The agent should poll get_status until success: true.
One tool per question, not per network
The Upload-Post API has no endpoint per social network: it has an endpoint per **question**, and a platform parameter saying who is being asked. get_post_comments, get_post_analytics, get_audience, get_suggestions and comment_action all work that way, so an agent learns one shape and reuses it for every network. Only the four tiktok_* tools are network-specific, because what they return (the Commercial Music Library, TikTok places, TikTok's per-account publishing settings) exists only on TikTok.
- get_audience — who follows the profile, where they are, when they are online, what they tap. Also benchmark_categories, and the niche averages to compare against when benchmarkCategory is set. The server clamps the window to at most 60 days ending before today, so a wider range is trimmed rather than rejected, and range in the response says which window was used.