upload-post-mcp
Allows posting text, photos, and videos to Bluesky.
Allows posting text, photos, and videos to Discord.
Allows posting text, photos, and videos to Facebook (requires facebook_page_id).
Allows posting photos and videos, and managing comments (reply to comments) on Instagram.
Allows posting photos and videos to Pinterest (requires pinterest_board_id).
Allows posting text to Reddit (requires subreddit).
Allows posting text, photos, and videos to Telegram.
Allows posting text, photos, and videos to Threads.
Allows posting videos (TikToks) to TikTok.
Allows posting videos (Shorts) to YouTube.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@upload-post-mcp post a photo of the sunset to Instagram"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
upload-post-mcp
An MCP (Model Context Protocol) server that lets Claude — or any MCP client — post to social media via upload-post.com: text, photos, and videos across 13 platforms: TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads, Pinterest, Bluesky, Reddit, Discord, Telegram, and Google Business Profile.
Unlike scheduler-specific connectors (e.g. Buffer's), this publishes directly to your connected accounts — no Buffer subscription, and it covers platforms most connectors don't (TikTok video, YouTube, Reddit, Google Business), plus scheduling, queues, analytics, and Instagram comment/DM replies.
🚀 Try it in 2 minutes (no install)
A hosted instance is live — connect it straight from your Claude settings:
claude.ai (web) / Claude Desktop / mobile: Settings → Connectors → Add custom connector
Name:
Upload-PostURL:
https://upload-post-mcp.sgr-flutter.workers.dev/mcpLeave the OAuth fields empty → Add
Claude opens a consent page — paste your upload-post API key once (free account: 10 posts/month, no card)
In a chat, try: "verify my upload-post account", then "post 'hello from Claude' to my X"
Claude Code: claude mcp add --transport http upload-post https://upload-post-mcp.sgr-flutter.workers.dev/mcp
Ships in two flavors from this repo:
Local (stdio) — repo root | Hosted (remote) — | |
Runs | on your machine | on Cloudflare Workers |
Works in | Claude Code, Claude Desktop, Cursor... | claude.ai (web), Claude Desktop & mobile via Settings → Connectors |
Auth |
| OAuth 2.1 — users paste their API key once on a consent page; stored encrypted |
Media | local file paths or URLs | public URLs only |
Live instance | — |
|
Related MCP server: Video MCP
Quick start
Get an API key: create an account at app.upload-post.com, create a profile, connect your social accounts to it, and generate an API key (Settings → API Keys). Free tier: 10 uploads/month.
Add to Claude Code:
claude mcp add upload-post --scope user \ --env UPLOAD_POST_API_KEY=YOUR_KEY_HERE \ -- npx -y upload-post-mcpClaude Desktop (
claude_desktop_config.json):{ "mcpServers": { "upload-post": { "command": "npx", "args": ["-y", "upload-post-mcp"], "env": { "UPLOAD_POST_API_KEY": "YOUR_KEY_HERE" } } } }Test: ask Claude to "verify my upload-post account". It should return your account email and plan. Then try "post 'hello world' to my X account".
From source
git clone https://github.com/MrSagarShah/upload-post-mcp.git
cd upload-post-mcp && npm install && npm run build
claude mcp add upload-post --scope user \
--env UPLOAD_POST_API_KEY=YOUR_KEY_HERE \
-- node "$(pwd)/dist/index.js"Tools (17)
Tool | Purpose |
| Text posts (X, LinkedIn, Facebook, Threads, Reddit, Bluesky, Discord, Telegram, GBP) |
| Photos/carousels — local file paths or URLs |
| Videos (Reels, Shorts, TikToks...) — local file path or URL |
| Poll async uploads ( |
| Paginated upload history |
| Manage scheduled posts |
| Followers/reach/likes/etc. per platform |
| Recent posts on a connected platform account |
| Instagram comments + private DM replies |
| Validate the API key, show plan |
| Facebook pages / LinkedIn org pages / Pinterest boards (for required IDs) |
| Manage upload-post profiles and link social accounts |
All publish tools support scheduled_date + timezone, add_to_queue, async_upload, first_comment, and an extra_params passthrough for any platform-specific field in the upload-post API docs (X polls, YouTube tags/privacy, Instagram REELS/STORIES, TikTok privacy, and more).
Scheduling runs on upload-post's servers — schedule posts and close your laptop; they publish on time.
Publish calls send an Idempotency-Key automatically, so a retried request won't double-post.
Example prompts
"Post 'We're hiring!' to my LinkedIn and X"
"Schedule this for Friday 9am New York time on LinkedIn"
"Post these three photos as an Instagram carousel with caption ..."
"Upload ~/Videos/demo.mp4 to YouTube as unlisted and TikTok"
"How did my last week's posts perform on X?"
"Reply to the latest comments on my Instagram reel"
Notes
The
userargument on posting tools is your upload-post profile name (seelist_profiles), not your account email.Facebook needs
facebook_page_id, Pinterest needspinterest_board_id, Reddit needssubreddit— uselist_page_targetsto find IDs.Media parameters accept either a local file path or a public
http(s)://URL (hosted connector: URLs only).
Troubleshooting
Symptom | Cause / fix |
| The key in your env/consent page is wrong or a placeholder — regenerate at app.upload-post.com/api-keys. |
| Free tier is 10 uploads/month; the error includes your usage counters. Upgrade or wait for reset. |
"must be a public http(s) URL" (hosted) | The hosted connector can't read files on your machine. Use a public URL, or switch to the local connector for file uploads. |
Facebook/Pinterest/Reddit post rejected | Missing |
Connector missing after adding in claude.ai | Enable it per-chat via the tools (sliders) menu, and check Settings → Connectors shows it as connected. |
Nothing posts to a platform | That platform isn't linked to the profile — ask Claude for a |
Roadmap
Local stdio connector (17 tools)
Hosted remote connector — OAuth 2.1 + Streamable HTTP on Cloudflare Workers
npm package (
npx -y upload-post-mcp)Anthropic connector directory listing
LinkedIn document posts, auto-DM monitors, queue-settings tools
Managed tier: connect socials directly, no upload-post account needed
Contributing & support
Issues and PRs welcome — open an issue for bugs or tool requests. For anything else: saumil@tempbutton.com.
If this saved you time, a ⭐ helps others find it.
Disclaimer: community project, not affiliated with or endorsed by Upload-Post. Your API key is yours; the hosted instance stores it encrypted and only forwards your own requests (privacy).
License
Available Tools
17 toolscancel_scheduled_postCancel a scheduled postA
Cancel (delete) a scheduled post by job_id so it will not be published.
Inputs: job_id (required).
create_profileCreate an upload-post profileA
Create a new user profile. After creating, use generate_connect_link to get a URL for linking social accounts to it.
Inputs: username (required).
edit_scheduled_postEdit a scheduled postB
Change the publish time, title, or caption of a scheduled post by job_id.
Inputs: job_id (required), title, caption, scheduled_date.
generate_connect_linkGenerate social-account connect linkA
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.
Inputs: username (required), platforms, redirect_url.
get_commentsGet Instagram post commentsA
Retrieve comments on an Instagram post/reel. Provide post_id or post_url. Paginate with the returned next_cursor.
Inputs: user (required), after, limit, post_id, +1 more.
get_historyGet upload historyA
Retrieve paginated history of past uploads with their platforms, status, and post URLs.
Inputs: page, limit.
get_profile_analyticsGet profile analyticsA
Fetch account-level metrics (followers, reach, views, likes, comments, shares...) for a profile's connected platforms.
Inputs: platforms (required), profile_username (required), page_id, page_urn.
get_upload_statusGet upload statusA
Check the progress/result of an async upload (by request_id) or a scheduled post (by job_id). Provide one of the two.
Inputs: job_id, request_id.
list_mediaList recent posts on a platformB
List recent posts/media published on a connected platform account (instagram, tiktok, youtube, linkedin, facebook, x, threads, pinterest, bluesky, reddit).
Inputs: user (required), platform (required), page_urn.
list_page_targetsList Facebook pages / LinkedIn pages / Pinterest boardsA
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).
Inputs: platform (required), profile.
list_profilesList upload-post profilesA
List all user profiles and which social accounts each has connected. The profile 'username' is the 'user' value for posting tools.
Inputs: no named parameters.
list_scheduled_postsList scheduled postsA
List all posts scheduled for future publishing, with their job_ids.
Inputs: no named parameters.
post_photosPost photos to social platformsA
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.
Inputs: user (required), photos (required), platforms (required), title, +11 more.
post_textPost text to social platformsA
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.
Inputs: user (required), title (required), platforms (required), link_url, +11 more.
post_videoPost a video to social platformsA
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.
Inputs: user (required), video (required), platforms (required), title, +13 more.
reply_to_commentReply to an Instagram comment (private DM)A
Send a private reply DM to the author of an Instagram comment (comment_id comes from get_comments).
Inputs: user (required), message (required), comment_id (required).
verify_accountVerify upload-post accountA
Validate the API key and return account info (email, plan). Use this to test the connection.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Each tool targets a distinct action on a specific resource (e.g., post_photos vs post_video, cancel_scheduled_post vs edit_scheduled_post). There is no functional overlap, making it easy for an agent to select the correct tool.
All tool names follow a consistent verb_noun pattern with underscores (e.g., list_profiles, get_upload_status). No mixing of conventions, which enhances predictability.
17 tools cover a broad but focused domain (social media posting, scheduling, analytics, account management). Each tool serves a necessary function without redundancy.
The set covers core workflows: account linking, posting (photo/video/text), scheduling, commenting, analytics, and history. Minor gaps like missing a tool to delete a published post or update a profile, but overall comprehensive.
Related MCP Connectors
Hosted MCP server for AI agents to post to LinkedIn profiles and X and upload to YouTube.
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Publish and schedule videos to TikTok, YouTube Shorts, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads and X from Claude, Cursor or any MCP client. Upload once, post everywhere, track views in unified analytics, and retry failed posts. Official platform APIs only, free plan available. Docs: https://docs.multi-upload-tool.com/mcp
PostHero MCP server — schedule and publish social media posts from any MCP-compatible AI tool
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that allows Claude to create, manage and publish X/Twitter posts directly through the chat interface.561MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that gives Claude Desktop full video editing capabilities via FFmpeg, Whisper, and yt-dlp.-

Upload-Postofficial
AlicenseBqualityBmaintenanceUpload-Post is the all-in-one social media MCP server the Model Context Protocol server for social media publishing, scheduling and analytics. Connect any MCP-compatible AI agent (Claude, Cursor, ChatGPT, Claude Desktop, n8n, and more) and publish, schedule and analyze content across 13+ social networks from one API: TikTok, Instagram, YouTube, YouTube Shorts, Instagram Reels, LinkedIn, Facebook72191 npm19MIT- AlicenseAqualityDmaintenanceA local MCP server that lets Claude log in to LinkedIn and publish image posts to your personal profile feed, backed by LinkedIn's REST Images API and Posts API.227 npmMIT