Because the server is stateless and takes the handle and app password on each request, one deployment can serve several people without any of them handing it a stored secret — and revoking is just deleting the app password. Worth knowing before you connect it: the catalog reaches past posting into account control, with `delete_account` and `deactivate_account` sitting in the same list as `get_timeline`.
A TypeScript MCP server for Bluesky that you deploy to Vercel yourself and reach over Streamable HTTP. It covers the ordinary social surface — posting, timelines, threads, search, profiles, bookmarks — and also the account-management side of a PDS, including sessions, invite codes and app passwords. Reads mostly work unauthenticated; anything that writes needs credentials.
- `create_post`, `like_post` and `repost_post` write to the timeline; `get_posts`, `get_likes` and `get_reposted_by` read it back
- `get_timeline`, `get_feed`, `get_author_feed` and `get_thread` cover home feed, feed generators, one author and a full conversation
- `search_posts`, `search_actors` and `search_actors_typeahead` search posts and people
- `get_profile` and `get_profiles` fetch one profile or a batch of up to 25
- `create_bookmark`, `delete_bookmark` and `get_bookmarks` manage private bookmarks
- `create_session`, `refresh_session`, `list_app_passwords` and `create_app_password` handle sessions and credentials
- `create_invite_code`, `create_invite_codes` and `get_account_invite_codes` run invites for a PDS
Deploy it yourself — clone and run `vercel`, then point your client at `https://your-app.vercel.app/mcp`. Authentication is a Bluesky handle plus an app password created under Settings, sent per request as headers: either `X-BLUESKY-IDENTIFIER` and `X-BLUESKY-PASSWORD` separately, `X-BLUESKY-CREDENTIALS` as one combined value, or an `Authorization: Bearer` header. Nothing is written to Vercel env vars or disk; credentials live in memory for the length of the request.
One command plus a key — claude mcp add bluesky --transport http https://your-app.vercel.app/mcp, then supply credentials
