Last updated: September 2026
Is there an MCP server that posts to both X and Bluesky?
Yes. The OpenTweet MCP server is hosted at https://mcp.opentweet.io/mcp, exposes 43 tools, and its posting tools take a platforms array. One tool call with ["x","bluesky"] publishes a native post on each network.
Worth saying up front, because this is where similar tools compete on a number: this is not a post-everywhere server. It goes deep on X and mirrors to Bluesky. If you need a long list of networks, this is the wrong answer and you should keep looking.
The setup and the call
One URL and one bearer key. Streamable HTTP, so nothing runs on your machine.
{
"mcpServers": {
"opentweet": {
"type": "streamable-http",
"url": "https://mcp.opentweet.io/mcp",
"headers": { "Authorization": "Bearer ot_your_key" }
}
}
}After that the agent has posting, scheduling and threading tools, and the network choice is a parameter on the tool rather than a separate server per network.
// Publish natively to both networks in one call.
opentweet_create_tweet({
text: "Shipped cross-posting today.",
platforms: ["x", "bluesky"],
publish_now: true
})
// Where would a post with no platforms value actually land?
opentweet_list_platforms({})The one rule an agent has to be told
Leaving platforms out does not mean X. A post with no platforms value follows the account auto cross-post setting, and when that setting is on it goes to every connected network. Explicit values are always honoured exactly and never expanded.
Tell the agent to pass platforms explicitly
An agent that has been quietly publishing X-only posts by omitting the field will start mirroring to Bluesky the moment auto cross-post is turned on. A single line in your project instructions saying to always pass an explicit platforms array removes the ambiguity for good, andopentweet_list_platforms lets the agent check rather than assume.A post that overruns a network is skipped there with the reason recorded, and still publishes wherever it fits. Bluesky allows 300 characters against 280 on X, or 25,000 on Premium, so the skip usually runs in the direction people do not expect.
Against the official X MCP server
The obvious comparison, since it is the other server people connect for this.
The official server is still the right pick for first-party trust and for full-archive search. It just cannot reach Bluesky and cannot schedule. More on that in can the official X MCP server schedule posts.
What the Bluesky side needs from you
Nothing in the MCP config. Bluesky issues no API keys and has no developer program, so there is no second credential to source. You connect the account once over atproto OAuth in the dashboard, meaning you sign in on the server that holds your account and OpenTweet keeps a scoped grant rather than a password. Accounts on a server you run yourself work the same way, because OAuth resolves the server from your handle.
What Bluesky does not give you is analytics. Nothing reads engagement back from Bluesky, so the analytics tools on the server are X-only, and video does not publish to Bluesky at all. Those are real gaps and the tools will say so rather than pretend.
7-day free trial. Cancel anytime.
Frequently asked questions
Is there an MCP server that posts to both X and Bluesky?
Yes. The OpenTweet MCP server, hosted at https://mcp.opentweet.io/mcp, exposes 43 tools, and the posting tools take a platforms array. Passing ["x","bluesky"] publishes a native post on each network from one tool call.
Does the official X MCP server post to Bluesky?
No. It posts to X only, it bills X pay-per-use at roughly $0.015 a post and $0.20 when the post carries a link, and it needs your own X developer app. It also has no scheduling tool, so an agent using it publishes immediately or not at all.
How does the agent know where a post will actually go?
It calls opentweet_list_platforms. That returns the connected accounts on each network, the auto cross-post setting, and the per-network limits. Worth doing before the first post of a session, because a post with no platforms value follows the account setting rather than defaulting to X.
Does the Bluesky connection need an API key in the MCP setup?
No. Bluesky issues no API keys and has no developer program. You connect the account once over atproto OAuth in the dashboard, and the MCP server posts through that grant. The only credential in your MCP config is your own ot_ key.
Is this a multi-platform posting server?
No, and that framing would be misleading. OpenTweet is X-native: the depth is in X analytics, evergreen recycling, threads, Articles and DM campaigns. Bluesky is a mirror for the posts you are already writing on X. LinkedIn and Threads are on the roadmap and are not shipped. Instagram and TikTok are not planned.
What does it cost to run?
Flat $11.99 a month on Pro, with the MCP server and the REST API included on every plan. There is no per-post fee, no per-link surcharge, and no X developer account. The Bluesky side costs nothing regardless, because publishing to Bluesky is free.
Keep exploring
One server, depth on X, and a Bluesky mirror in the same tool call.
Getting Claude Code to post to Bluesky
The one command to add the server, and the instruction that makes it stick.
The REST version
One POST with a platforms array, and the gotcha about leaving it out.
Is there a Bluesky API key?
No, and nothing to apply for. What the agent is actually authorized against.
Can the official X MCP schedule?
It can post but not schedule, and it bills pay-per-use.
API or MCP for an agent?
When a REST endpoint is the right call and when MCP is.
Cross-posting to X and Bluesky
One draft, a native post on each network, and a per-network result you can read.
Paste one URL, post to both
43 tools at mcp.opentweet.io/mcp. No X developer account, no Bluesky key, flat $11.99 a month.
7-day free trial. Cancel anytime.