Social Media MCP Server for Claude, ChatGPT and Cursor
PostWharf runs a hosted social media MCP server at https://mcp.postwharf.com/mcp. Add it to Claude, ChatGPT, Cursor, Codex or any other MCP client, and the agent gets 19 tools to draft, schedule, publish and track posts for one brand, with a receipt from each network a post goes to.
Ten of the fourteen networks it lists publish today: Instagram, TikTok, X, LinkedIn, YouTube, Facebook, Threads, Pinterest, Bluesky and Telegram. Reddit, Discord, Snapchat and WordPress are request-only: PostWharf cannot publish to them yet. The server is included on every plan, starting with Starter at $15 a month.
Starter's first seven days are free, and it includes the MCP server, the CLI and the REST API, all feeding one queue.
Start freeTwo ways to connect
The server speaks MCP over Streamable HTTP and stores no credentials of its own: every request carries a credential for the workspace it acts for. Clients differ only in where they let you put it.
A header, for Claude Code, Cursor and Codex. Clients that keep a settings file send the workspace key in an Authorization header. In Claude Code that is a single command:
claude mcp add --transport http \ wharf https://mcp.postwharf.com/mcp \ --header "Authorization: Bearer $POSTWHARF_KEY"
Cursor wants the same address and header as an entry under mcpServers:
{
"mcpServers": {
"wharf": {
"url": "https://mcp.postwharf.com/mcp",
"headers": { "Authorization": "Bearer YOUR_WORKSPACE_KEY" }
}
}
}
A connector link, for ChatGPT and the Claude apps. ChatGPT's connector form and the Add custom connector dialog in the Claude web and desktop apps ask for a server address and have no box for a header. For those two, the Agent & MCP screen in your dashboard gives you a connector link: the server address with a credential of its own inside it. Paste it as the server URL and set no authentication, since the link itself is the key. ChatGPT only accepts custom connectors with developer mode switched on, and its free plan does not have it.
The connector link can do everything the workspace key can, and you can replace it without touching anything else. Replacing it cuts off every chat app it was pasted into while the CLI and your scripts carry on. Rotating the workspace key works the other way round: the CLI, build variables and header-based connectors stop until they get the new key. Viewing or rotating a key and deleting the account need a signed-in session, so neither credential can do any of those.
Whichever way you connect, it is one connection per brand. Each key opens exactly one workspace, so the agent sees that brand's accounts and no others, and an agency with five brands adds five connections. The Agent & MCP screen has a ready-made block for Claude Code, Cursor, ChatGPT and the Claude app, with the right credential already filled in.
Setup by client
| Client | Credential | Where it goes | Setup guide |
|---|---|---|---|
| Claude Code | Workspace key, as a header | claude mcp add, run in the terminal | Claude Code |
| Cursor | Workspace key, as a header | An entry under mcpServers in Cursor's settings | Cursor |
| Codex | Workspace key, as a header | Codex's connector settings: the hosted address plus the header | Codex |
| Claude web and desktop apps | Connector link | Add custom connector, with the link as the server URL | Claude |
| ChatGPT | Connector link | Settings, then Connectors, then Create, with developer mode on | ChatGPT |
| n8n | Workspace key | An HTTP Request node calling the REST API | n8n |
| Zapier | Workspace key | A Webhooks by Zapier action calling the REST API | Zapier |
| Make | Workspace key | An HTTP module calling the REST API | Make |
The three automation platforms do not need MCP. They post through the REST API, which feeds the same queue as the MCP server, so an automation and an agent see the same posts and the same receipts.
The 19 tools
Every connection gets the same 19 tools (the live server reported that count on 16 October 2026), in five groups. The developer docs list them next to the REST API and the CLI.
| Tool | Group | What it does |
|---|---|---|
get_workspace | Workspace | Names the brand the key opens, its plan, and the time zone its schedule runs on |
list_channels | Workspace | Lists the brand's accounts and flags any that must be reconnected before a post can reach them |
describe_networks | Workspace | Tells the agent each network's post shapes, file counts, text ceilings and settings before it builds anything |
connect_channel | Workspace | Records an account once its sign-in completes; the dashboard normally does this |
stage_upload | Files | Hands out a one-off upload address for a file the agent made itself, such as a rendered clip |
upload_media | Files | Registers a picture or video that already sits at a public URL |
describe_media | Files | Adds, rewrites or removes the alt text on a registered picture |
create_post | Posting | Sends a post to the chosen channels straight away |
schedule_post | Posting | Puts one post in the queue for a set time |
schedule_many | Posting | Queues up to 60 posts in one call and reports on each separately |
save_draft | Drafts | Stores a post for a person to approve, without queueing or sending it |
list_drafts | Drafts | Shows what is already saved, so the same idea is not drafted twice |
update_post | Drafts | Changes the text, channels, files or time of anything not yet sent |
publish_draft | Drafts | The approval step: releases a draft now or at a chosen time |
get_status | Queue and receipts | One post's state on each channel, with its live link or the error |
list_queue | Queue and receipts | Recent and upcoming posts with their delivery state |
cancel_post | Queue and receipts | Takes a post back out of the queue, or deletes a draft |
list_events | Queue and receipts | The feed of delivered, retrying and failed posts, plus a warning before an account's sign-in expires |
health | Queue and receipts | Names the networks that post to real accounts, so nothing unsent is reported as live |
What each network takes
These limits come from the table the API checks every post against, so a caption that runs long or a post with too many files is refused when the agent creates it, not minutes later at the network. describe_networks gives the agent the same table, along with each network's own settings. Characters are counted the way a person counts them, one emoji as one. X keeps its own count, with every link at 23 and each Chinese, Japanese or Korean character at two, so a post close to 280 can still come out longer there.
| Network | Text limit (characters) | Files per post | Network page |
|---|---|---|---|
| 2,200 | Up to 10, pictures and videos mixed | Instagram MCP | |
| TikTok | 2,200 | Up to 35 pictures, or 1 video | TikTok MCP |
| X | 280 | Up to 4 pictures, or 1 video | X MCP |
| 3,000 | Up to 20 pictures, or 1 video | LinkedIn MCP | |
| YouTube | 5,000 | 1 video, no pictures | YouTube MCP |
| 63,206 | Up to 10 pictures, or 1 video | Facebook MCP | |
| Threads | 500 | Up to 20, pictures and videos mixed | Threads MCP |
| 500 | 1 picture or 1 video | Pinterest MCP | |
| Bluesky | 300 | Up to 4 pictures, no video | Bluesky MCP |
| Telegram | 4,096, or 1,024 with a file attached | Up to 10, pictures and videos mixed | Telegram MCP |
Reddit, Discord, Snapchat and WordPress are request-only. Their pages for Reddit, Discord, Snapchat and WordPress explain how to ask for each one, and the server will not queue a post to any of them until its connector exists.
What keeps an agent from posting the wrong thing
Drafts wait for a person. save_draft stores a post without queueing it, and the server tells agents to prefer it to create_post whenever they are acting on their own initiative. Nothing in a draft reaches a network until publish_draft runs, and agents are told to call that only when someone has said to. A month planned with schedule_many can be saved as drafts the same way. Publishing safely from an MCP server covers how to keep that approval step in your own setup.
A repeated call returns the first post. create_post, schedule_post and save_draft accept an idempotency key: repeat a call with the same key after a dropped connection and the server returns the post it already made instead of a second one. A batch takes one prefix and numbers its entries, so sending the same month twice still leaves one month in the queue.
Receipts instead of assumptions. get_status shows each channel's state with the live link or the error text, and list_events is where a post that failed quietly, or an account whose sign-in is about to lapse, shows up. Before calling anything published, the agent is told to check health, and never to describe a delivery to a network outside that list as published.
Times are the brand's own. A bare time such as 2026-11-03T09:00 is read in the workspace's time zone, so a 9am weekday slot stays at 9am through a clock change. The agent adds an offset only when it means one exact instant.
Files arrive finished. A picture goes out as the exact bytes that were uploaded, with nothing re-encoded. A video can still be converted on its way to a network, so the agent is told to encode it to that network's format first. Alt text written at upload appears on Bluesky posts today; the other networks do not carry it yet.
If you are weighing several servers, the buyer's guide to MCP servers for social media sets out eight checks to run on any of them.
What it costs
The MCP server comes with every plan, next to the CLI and the REST API. Plans are priced per brand (one workspace each), with unlimited channels in every workspace.
| Plan | Monthly | Billed yearly | Brands | Scheduled posts a month |
|---|---|---|---|---|
| Starter | $15 | $10 a month | 1 | 200 |
| Startup | $29 | $23 a month | 3 | 400 |
| Plus | $67 | $54 a month | 10 | 1,000 |
| Pro | $99 | $79 a month | Unlimited | 2,500 |
Starter's first seven days are free: the card is taken when you subscribe, and nothing is charged until the week is out.
Questions
Do Buffer and Hootsuite have MCP servers?
Yes. When PostWharf read their sites on 24 September 2026, Buffer, Hootsuite, Postiz, SocialPilot and Metricool each offered an MCP server, and Later's site showed none. What differs is how the bill grows as an agent reaches more accounts. Buffer charges per channel: $135 a month for 30 channels on Essentials. Hootsuite charges per user seat: $99 a month per user on Standard, with 10 accounts. PostWharf charges per brand with no channel cap, so 30 channels across six brands is $67 a month on Plus. The Buffer comparison and the Hootsuite comparison put the plans side by side.
How do you schedule social media posts with an MCP server?
Connect the server, then ask in plain words: "Draft three LinkedIn posts about Thursday's release, save them as drafts, and queue the one I approve for 9am." Behind that request the agent calls list_channels to find the account, describe_networks to check the length and file rules, save_draft for each option, and publish_draft with a time once you choose. For a month of posts it uses schedule_many, and afterwards get_status or list_events to confirm what went out.
Connect your agent
Start Starter's free week, open Agent & MCP in the dashboard, copy the block for your client, and ask it for a first draft. You get:
- 19 tools inside Claude, ChatGPT, Cursor, Codex or any other MCP client
- one post sent to as many of the ten live networks as you choose, with a receipt from each
- drafts that wait for your approval before anything goes out
Creating an account needs no card, and if you cancel before the free week ends you pay nothing.
Start free