How to post to social media from Claude (MCP setup in 2 minutes)
October 29, 2026
Claude can post to your social accounts if you give it an MCP server that knows how. yeetpost runs one. You connect your accounts once in the dashboard, add the server to Claude, and from then on a sentence like "post this to my LinkedIn" is enough.
This is the setup, in the two places most people use Claude, followed by a first run that cannot post anything by accident.
#Before you start
You need three things:
- A yeetpost account with at least one connected account. Connect one at app.yeetpost.com. The six live platforms are LinkedIn, X, Bluesky, Discord, Telegram and Mastodon.
- An API key, if you use Claude Code. Your first key is created when you sign up, and the API page in the dashboard shows it.
- Claude Code, or claude.ai with custom connectors available to you.
The MCP server lives at https://api.yeetpost.com/api/v2/mcp and speaks Streamable HTTP.
#Claude Code: one command
Claude Code adds remote servers with claude mcp add --transport http, and passes headers with --header. This syntax is from the Claude Code MCP docs, as of October 2026:
claude mcp add --transport http \
--header 'Authorization: Bearer ${YEETPOST_API_KEY}' \
yeetpost https://api.yeetpost.com/api/v2/mcpQuote the header, since it contains a space, and use single quotes: they pass ${YEETPOST_API_KEY} through as written, and Claude Code reads the key from your environment each time it starts, so it never lands in ~/.claude.json. The command does not check your key, so a wrong key is only found when Claude first uses the server. Run /mcp inside Claude Code to see whether the server is connected.
By default the server is added with local scope, so it loads only in the current project. To have it in every project, add --scope user:
claude mcp add --transport http --scope user \
--header 'Authorization: Bearer ${YEETPOST_API_KEY}' \
yeetpost https://api.yeetpost.com/api/v2/mcpProject scope writes the server into .mcp.json, which is checked into version control. Do not put a literal key in that file. Use scope local or user and keep the key out of the repository.
Any other MCP client that takes a URL and a header works the same way. yeetpost accepts the key as Authorization: Bearer <key> or x-api-key.
#claude.ai: a custom connector, no key
Some clients cannot hold a secret, claude.ai among them. For those, yeetpost's MCP endpoint also accepts an OAuth login. Add https://api.yeetpost.com/api/v2/mcp as a custom connector and leave the key out. Claude finds the rest on its own:
- It calls the endpoint with no token and gets a
401that points at the OAuth metadata. - It registers itself with yeetpost.
- It opens a consent screen in your browser. You log in, choose whether the app reaches your whole account or one profile, choose live or test mode, and approve.
- It gets an access token good for an hour and a refresh token good for 30 days. Refresh tokens rotate each time they are used.
You can see the apps you have approved on the MCP screen in the dashboard, and revoking one kills its tokens at its next request. The Claude Code docs note that connectors you set up in claude.ai are also available in Claude Code, and can be managed at claude.ai/customize/connectors.
#A first run that posts nothing
Do not start with "post this". Start by letting Claude look around. Try:
Call get_context and tell me what you can do. Then list my connections.
get_context is the tool meant to be called first. It says which account the key acts as, whether it is live or test mode, the plan, what is left of today's and this month's allowance, and an attention list for anything that needs fixing, such as an expired login. Claude should report each item before it posts.
list_connections then returns the slugs you can post to, for example linkedin, x and bluesky.
Next, ask for a draft:
Write a post announcing our v2.4 release for my LinkedIn. Save it as a draft, do not publish.
Claude calls get_brand to read the voice and look set for that connection, writes the post and calls create_post with isDraft: true. A draft is stored against the connection and publishes nothing. It also reserves nothing: no usage, no fair-use slot, no X fee, no webhook.
Read it, then say:
Publish the draft.
Claude calls publish_draft, which sends it now, or at a time you give it, or into the next queue slot.
#What you can ask for
The tools cover the whole loop, so these all work:
- "Post this to LinkedIn and Bluesky with this image."
create_posttakesmediaIds,mediawith alt text, ormediaUrls. - "Make this a thread on X."
create_posttakes athreadof up to 24 replies for X, Bluesky, Telegram and Mastodon. - "Schedule it for 9am tomorrow Helsinki time."
scheduledForplus atimezone. - "Add the link as the first comment."
firstComment, on LinkedIn. - "Make an image card for it."
render_imageturns HTML into an image. See on-brand image cards from HTML. - "How did last week's posts do?"
list_postsandget_post_metrics. - "Delete that."
delete_postremoves a draft, cancels a scheduled post or takes a sent one down.
If something fails, the tool answers with isError, a stable error code, a message that says the fix and a reqId to quote. One connection failing in a multi-platform post is a failed item in the results, not an error for the whole call. Claude can read it and retry just that one with retry_post.
#Keep it safe
An agent that can post can post wrongly, so set the boundaries before you rely on it.
- Use a test key first. A key starting with
yp_test_reaches sandbox connections only. Posts are validated and stored and fire webhooks, but nothing is published. Add a sandbox connection in the dashboard. - Scope the key. A key can be limited to one profile, so the agent sees one customer's connections and nothing else.
- Ask for drafts by default. Put "save as draft unless I say publish" in your project's
CLAUDE.md. - Set an X spend cap. X posts cost money per post, 1.5 cents or 20 cents with a link. A cap in Settings stops a loop from running up a bill. See X API pricing in 2026.
- Rate limits. The MCP endpoint allows 60 requests a minute. Past that it answers HTTP 429 with a retry time.
#Where to go next
The MCP docs list every tool with its arguments. The earlier walkthrough, post from Claude Code in 90 seconds, uses the plugin route. For a checklist of what an agent-facing posting API needs, read social media API for AI agents. The REST version of everything here is in the docs.