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 "Install 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-mcppost 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
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MrSagarShah/upload-post-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server