MCP (streamable HTTP) · Bluesky

Post to Bluesky from Claude Code, with approval

Claude Code already knows what changed in your repository, which makes it a natural author for release and changelog posts. Connect it to SocialHandoff over MCP and it can read the merged pull requests since the last tag, pick out what users will notice, and draft a Bluesky thread for the developer audience there, with links and handles turned into clickable facets on publish. Each draft is held in the approval inbox until a person says yes.

Prompt

Read the commits and merged PRs since tag v2.3.0. Draft a Bluesky thread for v2.4.0: first post with the headline feature, second with two smaller fixes, third with the upgrade command and the release URL github.com/acme/tern/releases/tag/v2.4.0. Mention @tern.dev in the first post.

How to do it

  1. Mint a Bluesky agent key In https://app.socialhandoff.com, open Connections, connect your Bluesky account, then create an agent key scoped to Bluesky with draft permission only. Copy the key when it is shown; only its hash is stored.
  2. Register the server Run claude mcp add with the HTTP transport, pointing at https://app.socialhandoff.com/mcp and passing an Authorization: Bearer header with the Bluesky key. Use --scope user if you want it in every repository.
  3. Point it at your changes From the repo, ask Claude Code to read the diff, the merged pull requests, or CHANGELOG.md since the last tag and draft a Bluesky post from them.
  4. Review in the inbox Claude Code calls draft_post and returns the post id. Open the approval inbox, adjust wording if needed, and approve. Use schedule_post if you want a specific slot.

Example draft

1/3 tern v2.4.0 is out. The big one: watch mode now reloads config without restarting, so editing tern.toml takes effect on the next save. Thanks to everyone who reported this. @tern.dev

2/3 Also fixed: Windows paths with spaces in --include, and a memory leak when watching more than 10k files.

3/3 Upgrade with npm i -g tern@2.4.0
Notes: github.com/acme/tern/releases/tag/v2.4.0

Gotchas

  • Links, @handles, and #tags become clickable facets when the post publishes. Have the agent write the plain URL and handle, not markdown links.
  • Connect Bluesky with an app password from Settings, never your account password. Revoking that app password cuts off only this connection.
  • The 300 limit counts graphemes, so an emoji or accented letter counts as one. Anything longer should become a reply-chain thread, not a clipped post.
  • Claude Code registers MCP servers per project by default. Add the server with --scope user if you want Bluesky drafting available in every repository.
Bluesky
  • Character limit: 300 graphemes per post. An emoji or an accented letter counts as 1 grapheme even if it uses several bytes.
  • Media per post: Up to 4 images, or 1 video. Images and video cannot be mixed in one post.
  • Image size: The AT Protocol image embed accepts blobs of about 1 MB each; the official app compresses larger photos. SocialHandoff checks for 1 MB per image.
  • Video: Up to 3 minutes and 100 MB, MP4. SocialHandoff does not publish video to Bluesky.
Bluesky scheduler for agent-drafted posts and threads

Frequently asked questions

Does Claude Code need the stdio server or HTTP?
Either works. HTTP at https://app.socialhandoff.com/mcp is simplest for the hosted app. The stdio server via npx -y socialhandoff-mcp suits a self-hosted instance on your machine.
Will Claude Code link to my repo correctly on Bluesky?
Yes. Write the plain URL and it becomes a clickable link facet when the post publishes. The same happens for @handles and #tags.
Does it support custom domain handles on Bluesky?
Yes. Connect with whatever handle you sign in with, including a domain handle. Mentions of other handles become clickable facets on publish.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial