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.

mcp config
{
  "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.

tool calls
// 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, and opentweet_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.

 
Official X MCP
OpenTweet MCP
Posts to X
Yes
Yes
Posts to Bluesky
No
Yes, in the same tool call
Scheduling
No, publish only
Schedule and batch schedule
X developer app
Required, with billing enrolled
Not required
Cost model
X pay-per-use, $0.015 a post, $0.20 with a link
Flat, from $11.99 a month
Bluesky credential
Not applicable
None. atproto OAuth grant

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.

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.