Post to Bluesky from Claude or ChatGPT with an MCP server
Bluesky has no official MCP server and a free API. Post and schedule from Claude, ChatGPT or Cursor via Mellow Hub with an app password.
By Mellow · UpdatedCan Claude or ChatGPT post to Bluesky?
Yes, through Mellow Hub’s remote MCP server at https://www.mellow.world/mcp, or through one of several small open-source servers. Bluesky runs no MCP server of its own, and its API costs nothing. With Hub, you connect Bluesky once with your handle and an app password, approve the assistant’s access, and it checks a post with validate_post, publishes or schedules it with create_post and reads the result with get_post. A post needs text, up to 300 characters counted as you see them, and can carry up to four images or one video.
Status: Hub’s first live Bluesky post went out on 1 October 2026, sent from Hub’s web cabinet. The first through the MCP server followed on 2 October 2026, from ChatGPT, and a post ChatGPT scheduled went out on its own the next morning. Details. What was tested.
Is there an official Bluesky MCP server?
No. Bluesky’s own GitHub organisation has no MCP server. Bluesky supports OAuth for apps since September 2024 and asks new projects to prefer it, while still recommending app passwords for bots and command-line tools. The community servers all sign in with an app password, and so does Hub.
| Server | What it does | How it gets access |
|---|---|---|
| brianellin/bsky-mcp-server | Reads and analyses feeds, timelines and searches, manages follows, publishes a post. | App password, in environment variables |
| laulauland/bluesky-context-server | Read-only: your profile, searches, your timeline. | App password |
| cameronrye/atproto-mcp | Reads and writes on Bluesky and other AT Protocol networks; OAuth not yet working. | App password |
| Mellow Hub | Posts and schedules to Bluesky with eight other networks in one request. | App password kept by Hub; OAuth consent or a Hub key for the assistant |
Read on 1 October 2026 from each project’s own page. Descriptions of other servers are their own claims; Mellow has not tested them.
Sources: Bluesky’s OAuth announcement and its client guide, read on 1 October 2026.
What Bluesky account do I need?
Any Bluesky account. Hub connects Bluesky with your handle and an app password rather than a sign-in screen, so an agent cannot complete this step alone.
Create the app password in Bluesky under Settings → Privacy and security → App passwords, give it a name you will recognise, and leave direct-message access off: Hub does not need it. Bluesky shows the password once, so paste it straight into Hub’s connect form with your full handle, such as name.bsky.social. Never use your account password. You can revoke an app password in the same place at any time without changing your password, and Hub’s connection stops with it.
- Open Accounts in Hub and choose Bluesky, or ask the assistant to call
connect_channelwithplatformset tobluesky. That tool only returns a link and an instruction for a person. It needs thechannels:connectpermission. - Enter the details Hub asks for yourself. An assistant cannot do this step for you.
- Tell the assistant you are done. It calls
list_channelswithrefresh: trueand uses the returned channel ID, which begins withspc_. A username is not a substitute for that ID.
Connect Claude, ChatGPT, Cursor or another MCP client
Every client uses the same server URL, https://www.mellow.world/mcp, over Streamable HTTP. A client signs in with OAuth 2.1 (dynamic client registration and PKCE) or sends an owner-created Hub API key as a Bearer token. Menus change between client versions, so the official guides linked below describe the current screens. The last column says only what Mellow itself has tested, on any network.
| Client | How to add Hub | Tested by Mellow |
|---|---|---|
| Claude | On any plan, Free included: Customize → Connectors → + Add → Add custom connector. Name it Mellow Hub and paste the URL; if Claude asks how to identify itself, choose Register automatically. There is no client secret to copy. Step by step: the Claude guide. | In production on September 29 and 30, 2026: sign-in and consent, starting channel connections, moving a scheduled post’s time (the post then went out at that time on seven networks) and creating a post. |
| ChatGPT | On the web, on Business, Enterprise or Edu where developer mode is allowed: Settings → Apps → Create, with the URL and OAuth. Pro connects MCP apps for reading only. Step by step: the ChatGPT guide. | On October 2, 2026, as a developer-mode app with a test account: it published a post to Bluesky, scheduled another that went out on its own the next morning, and was refused a text over Bluesky’s limit before anything was sent. |
| Claude Code | claude mcp add --transport http mellow https://www.mellow.world/mcp, then sign in when Claude Code asks, or send a Hub key as a Bearer header. | On September 29, 2026, with an owner-created key, it sent one video to Instagram, Facebook, Threads, LinkedIn, X and TikTok in a single post through the production endpoint. All but TikTok went public with links. |
| Cursor | Add Mellow Hub as a remote HTTP MCP server with the URL, then complete sign-in. Cursor’s MCP documentation. | Not tested. |
| Your own client | Streamable HTTP. Start OAuth discovery from the first 401 response, or send a Hub key in the Authorization: Bearer header. | The official MCP Python SDK completed registration, consent and a publication to Instagram and Threads in production on September 20, 2026. |
- Add the server in your client and select Connect. Sign in to Mellow if asked. Hub’s consent screen names the app that is asking.
- Choose the permissions the task needs (below), select your Bluesky channel, choose review or autopilot, a daily ceiling and an expiry, then approve.
- Back in the client, run the read-only check from the prompts below. Confirm the profile, the mode and the Bluesky channel ID. Agents shows the grant’s permissions, channels and expiry.
- If a client cannot complete OAuth, create a key in Agents and set it as the client’s
Authorization: Bearerheader, from its secret settings or an environment variable. Never paste a key into a chat.
Which permissions to approve
| Permission | What it allows |
|---|---|
channels:read | Read the profile, the mode and the channels the grant covers: whoami, list_channels. |
posts:read | Check and preview a post and read results: validate_post, preview_post, get_post, list_posts. |
media:write | Register a public media URL or request a signed upload URL. |
posts:write and posts:publish | Create, schedule or publish a post; both are needed, even in review mode. posts:write also covers cancelling and rescheduling. |
channels:connect | Start a channel connection and return its link for a person. |
metrics:read | Read network-reported metrics for published posts. |
The consent screen arrives with every permission the assistant asked for already ticked, except spending AI credits. Untick anything it should not have.
What you delegate, and how to take it back
Hub treats an assistant’s access as a delegation you give once, with limits: the permissions, the channels (the ones you select, or explicitly all), review or autopilot, a daily ceiling of 1 to 1,000 posts (50 by default) and an expiry of 1, 7 or 30 days (30 by default). Autopilot is the default: the assistant publishes on its own within those limits. Choose review and each post waits for you to approve it in Hub. A key or a connected app cannot approve its own post.
Hub records the posts an assistant creates or has refused, approvals, reschedules, cancellations and connection attempts in a journal you read in Agents. Revoking a key or a connected app takes effect on its next request. Publishing always needs an idempotency key, so a retried request cannot publish twice.
Bluesky rules Hub checks before anything is sent
This table is generated from the registry that validate_post enforces, the same one behind the rules for every network. These are Hub’s input rules; Bluesky still judges the media itself when it fetches it.
| Rule | Bluesky in Hub |
|---|---|
| Text | Up to 300 characters, required. Bluesky counts graphemes, the characters as you see them: an emoji counts once, however it is built. |
| Title | None. |
| Media | Optional, up to 4 images or videos. Up to four images, or one video. |
| Placement | None. |
| Also supported | Scheduling with scheduledAt, several media items in one post, metrics for published posts (get_metrics). |
Bluesky counts graphemes, the characters as you see them, so an emoji counts once however it is built; the limit is 300 (Bluesky documentation). Bluesky’s app has recently allowed more than Hub sends: ten images since June 2026 and videos of up to ten minutes since August 2026. Hub’s checks follow Bluesky’s API documentation, which still gives four images.
When validate_post refuses the post
Read ok, issues and notes in the result. The check publishes nothing and reports every problem at once, each with its field and, for a network rule, its channel. Fix them together and validate again.
| Issue code | What it means | What to change |
|---|---|---|
caption_required | No text for the Bluesky channel. | Add text, or give Bluesky its own in perChannel. |
caption_too_long | Over 300 graphemes. In a post that also goes to LinkedIn or Instagram, often only Bluesky fails. | Give Bluesky its own caption in perChannel. |
media_too_many | More than 4 images. | Keep four, or split the post. |
media_kinds_mixed | Images and a video in one post. | One video, or up to four images. |
Other refusals concern the request or the grant: schedule_in_past (use a future time with a UTC offset), insufficient_scope (approve a delegation with the missing permission), channel_out_of_scope (the channel is not in the grant), and at creation daily_limit_reached and idempotency_key_reused. A passing check is not proof of publication: Bluesky can still refuse the media or the account. The free post checker runs the same input rules on a draft before you connect anything.
Prompts you can paste
Replace the bracketed parts. Each prompt names the tools to call, so the assistant does not have to guess the order.
Check the connection, read-only
Use only Mellow Hub. Call whoami, then list_channels, then list_platforms.
Tell me my Bluesky channel ID, whether this connection is in review or
autopilot mode, how many posts it may still create today, and Bluesky's
rules. Do not create anything.One thought to Bluesky, Threads and X, each within its limit
Use Mellow Hub. Post this to my Bluesky, Threads and X channels:
[your post]
If validate_post says it is too long for any of them, write a shorter
version for that channel only, put it in perChannel, show me all versions
and wait for my yes. Then create_post once with idempotencyKey
"short-[short-name]-1" and get_post. Report each target separately.Media has to be reachable at a public https URL when Bluesky fetches it. An agent that can make HTTP requests, such as Claude Code or a script of your own, can instead call request_upload_url, send a local file with PUT to the returned uploadUrl and use the returned mediaUrl. An assistant that only has Hub’s tools cannot send file bytes itself.
Publish once, then read the Bluesky result
create_post is the step that publishes or schedules. It needs an idempotencyKey of 8 to 120 letters, digits or the characters . _ : -, stable for this post. If the response is lost or times out, send the same request with the same key: Hub returns the original post instead of making a second one. Reusing a key for different content is refused.
Under a review-mode grant the post comes back as pending_review and waits until you approve it, signed in, in Hub. Under autopilot it goes out at scheduledAt, or immediately without it. Always write scheduledAt with Z or an explicit UTC offset.
Then call get_post and read the Bluesky entry in targets, not only the post’s status. publishing means Bluesky has not reported a result yet; published comes with the post’s link; failed comes with the network’s message. In a post to several networks each target settles on its own and the post can end partial: republish only the failed channel, with a new key. Once Bluesky has published a post, Hub cannot edit or delete it; cancel_post works only before it goes out.
Each destination counts once against your plan: one post to Bluesky and two other networks is three publications. Validating, drafting and connecting work without a plan; publishing needs an active one. See plans.
What Mellow has tested with Bluesky
On 1 October 2026 at 07:42 UTC Hub published its first Bluesky post in production: a text post sent from the web cabinet, public on Bluesky ten seconds later.
On 2 October 2026, ChatGPT, with Hub added as a developer-mode app on the web, posted to a test account’s Bluesky channel through the MCP server. A post it published went out 11 seconds after the request, at 09:46 UTC. A post it scheduled for 03:00 UTC on 3 October went out on its own at 03:01. A 365-character text was refused by validate_post before anything was sent. See the ChatGPT guide. Hub’s connect form, its grapheme count and its checks are also covered by automated tests.
Questions
Is there an official Bluesky MCP server?
No. Bluesky publishes no MCP server. Community servers and Mellow Hub connect through Bluesky’s API with an app password.
Does Bluesky charge for its API?
No. Bluesky’s API is free to use; it limits how often an account can sign in and how much it can post, not what it costs.
Why does Hub ask for an app password instead of a sign-in screen?
Hub’s Bluesky connection uses an app password, the method Bluesky still recommends for automated tools. It is separate from your account password and can be revoked on its own in Bluesky’s settings, which ends Hub’s access.
Has Mellow Hub posted to Bluesky yet?
Yes. Its first live Bluesky post went out on 1 October 2026 from Hub’s web cabinet. On 2 October 2026 ChatGPT published one through Hub’s MCP server, and a post it scheduled went out on its own on 3 October.
Related
- Threads MCP guide and X MCP guide: the other short-post networks.
- Character counter with Bluesky’s grapheme count.
- Publish to social media with an MCP server: the workflow for every network.
- Before an AI agent posts: an MCP checklist.
- API and MCP reference and rules for every network.
- Plans: each destination counts once against the monthly publications.