
Bluesky Mcp Server
A read-only window into Bluesky's AT Protocol AppView that needs no authentication. You get seven tools covering full-text post search with filters for author, language, hashtags, and date range, plus profile lookups, author feeds, complete thread trees with parent chains and reply depth control, actor search, social graph traversal for followers and following lists, and real-time trending topics. Built on the developer's mcp-ts-core framework, so it includes retry logic, structured logging, and runs over both stdio and streamable HTTP transports. The public instance at bluesky.caseyjhand.com/mcp is ready to use, or run it locally via npx. Useful when you need to pull Bluesky data into Claude without managing OAuth flows or API credentials.
- GitHub stars
- 2
- tools
- 10
- auth
- Secret needed
- transport
- STDIO, HTTP
- env vars
- 9
- last updated
- Nov 11, 2026
Install
From registry metadata$ npx add-mcp https://bluesky.caseyjhand.com/mcp --name blueskyRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http bluesky https://bluesky.caseyjhand.com/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 10 toolsVerified live against the running server on Nov 6, 2026.
bsky_get_profileFetch a Bluesky actor's public profile by handle (e.g. "bsky.app") or DID (e.g. "did:plc:z72i7hdynmk6r22z27h6tvur"). Returns displayName, handle, DID, bio, pronouns, website, ordered profile links, follower/following/post counts, associated list/feed/starter-pack counts and la...1 params
Fetch a Bluesky actor's public profile by handle (e.g. "bsky.app") or DID (e.g. "did:plc:z72i7hdynmk6r22z27h6tvur"). Returns displayName, handle, DID, bio, pronouns, website, ordered profile links, follower/following/post counts, associated list/feed/starter-pack counts and la...
actor*stringbsky_search_actorsFind Bluesky accounts by name or handle fragment. Returns ranked profiles with handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when the account set them, and Bluesky verification status — which tells a verified account fro...3 params
Find Bluesky accounts by name or handle fragment. Returns ranked profiles with handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when the account set them, and Bluesky verification status — which tells a verified account fro...
cursorstringlimitintegerquery*stringbsky_get_trendingFetch the current real-time trending topics on Bluesky. Returns topics with display name, Bluesky's one-sentence summary of the story, post count, category (politics, sports, pop-culture, etc.), status, start time, and the representative accounts driving each topic — so "who i...1 params
Fetch the current real-time trending topics on Bluesky. Returns topics with display name, Bluesky's one-sentence summary of the story, post count, category (politics, sports, pop-culture, etc.), status, start time, and the representative accounts driving each topic — so "who i...
limitintegerbsky_search_feedsSearch metadata in the provider’s public feed catalog, without credentials. This searches feed names and descriptions, not post text, and does not enumerate every feed. Returns feeds in provider order with generator AT-URIs and creator identities; pass a feedUri to bsky_get_fe...3 params
Search metadata in the provider’s public feed catalog, without credentials. This searches feed names and descriptions, not post text, and does not enumerate every feed. Returns feeds in provider order with generator AT-URIs and creator identities; pass a feedUri to bsky_get_fe...
cursorstringlimitintegerquery*stringbsky_get_feedRead the posts a Bluesky feed generator serves, in the order the feed ranks them. Accepts the feed's AT-URI (at://<handle-or-did>/app.bsky.feed.generator/<rkey>) or its bsky.app page (https://bsky.app/profile/<handle-or-did>/feed/<rkey>). Feeds come from the "feedUri" of each...3 params
Read the posts a Bluesky feed generator serves, in the order the feed ranks them. Accepts the feed's AT-URI (at://<handle-or-did>/app.bsky.feed.generator/<rkey>) or its bsky.app page (https://bsky.app/profile/<handle-or-did>/feed/<rkey>). Feeds come from the "feedUri" of each...
cursorstringfeed*stringlimitintegerbsky_get_author_feedGet a Bluesky user's recent feed ordered newest-first. Filter by post type: "posts_with_replies" (everything), "posts_no_replies" (excludes replies), "posts_and_author_threads" (posts the author started), "posts_with_media" (the actor's own posts with images or video — no link...5 params
Get a Bluesky user's recent feed ordered newest-first. Filter by post type: "posts_with_replies" (everything), "posts_no_replies" (excludes replies), "posts_and_author_threads" (posts the author started), "posts_with_media" (the actor's own posts with images or video — no link...
actor*stringcursorstringfilterstringposts_with_replies · posts_no_replies · posts_with_media · posts_and_author_threads · posts_with_videodefault: posts_no_repliesinclude_pinsbooleanlimitintegerbsky_get_post_threadFetch the conversation for a post by AT-URI — the parent chain upward and the reply tree downward. Enter the thread at any point and traverse the discussion. AT-URIs have the format "at://<handle-or-did>/<collection>/<rkey>" and are returned in the "uri" field of every post th...3 params
Fetch the conversation for a post by AT-URI — the parent chain upward and the reply tree downward. Enter the thread at any point and traverse the discussion. AT-URIs have the format "at://<handle-or-did>/<collection>/<rkey>" and are returned in the "uri" field of every post th...
depthintegerparent_heightintegeruri*stringbsky_get_post_quotesRead the quote posts behind a Bluesky post's "quoteCount" — the posts that embed it with commentary of their own. Sort latest (default) is newest first; top is descending like count as ordered by Bluesky. On Bluesky this is where much of the reaction to a post lives; bsky_get_...4 params
Read the quote posts behind a Bluesky post's "quoteCount" — the posts that embed it with commentary of their own. Sort latest (default) is newest first; top is descending like count as ordered by Bluesky. On Bluesky this is where much of the reaction to a post lives; bsky_get_...
cursorstringlimitintegersortstringlatest · topdefault: latesturi*stringbsky_get_post_interactionsList the accounts behind a post’s likes or reposts without credentials, in provider order. Accepts a post AT-URI or bsky.app post URL; a handle authority costs one extra resolution request. Returns actor summaries with account creation and label provenance when supplied, and a...4 params
List the accounts behind a post’s likes or reposts without credentials, in provider order. Accepts a post AT-URI or bsky.app post URL; a handle authority costs one extra resolution request. Returns actor summaries with account creation and label provenance when supplied, and a...
cursorstringkind*stringlikes · repostslimitintegeruri*stringbsky_get_followsFetch the social graph edges for a Bluesky account — who follows them, or who they follow. Returns paginated actor profiles (handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when set, and Bluesky verification status) plus a...5 params
Fetch the social graph edges for a Bluesky account — who follows them, or who they follow. Returns paginated actor profiles (handle, DID, displayName, bio, account creation timestamp, moderation labels with provenance, pronouns when set, and Bluesky verification status) plus a...
actor*stringcursorstringdirection*stringfollowers · followinglimitintegersortstringlatest · topSponsors
Configuration
BLUESKY_CLAMP_READ_LIMITSdefault: trueClamp oversized read limits with a notice; false restores rejection.
BLUESKY_IDENTIFIERHandle, DID, or email of the Bluesky account post search runs as. Optional: without it and BLUESKY_APP_PASSWORD, bsky_search_posts is not offered, since Bluesky refuses search without a signed-in account. Use a dedicated account — search leaves out posts from accounts in a block
BLUESKY_APP_PASSWORDsecretApp password for BLUESKY_IDENTIFIER (a standard, non-privileged one — Settings → Privacy and security → App passwords). Optional; required together with BLUESKY_IDENTIFIER to enable bsky_search_posts.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPEdefault: httpSelects the HTTP transport.
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
Readme
@cyanheads/bluesky-mcp-server
Search Bluesky posts and feeds; read profiles, threads, and trends. STDIO or Streamable HTTP.
Details
- Repository
- github.com/cyanheads/bluesky-mcp-server
- Category
- Search & Web Crawling
- Package
@cyanheads/bluesky-mcp-server- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active
- Resources
- 2
- Tools verified
- Nov 6, 2026
More from cyanheads
- Fbi Crime Mcp Server2
- Fema Mcp Server2
- Imf Mcp Server2
- Nonprofit Explorer Mcp Server2
- Onebusaway Mcp Server2
- Openfec Mcp Server2
- Openfoodfacts Mcp Server2
- Reliefweb Mcp Server2
- Smithsonian Mcp Server2
- Stackexchange Mcp Server2
- Wsdot Mcp Server2
- Oecd Mcp Server4
- Socrata Mcp Server4
- Census Mcp Server3
- Who Gho Mcp Server3
- Bls Labor Mcp Server1
- College Scorecard Mcp Server1
- Cpsc Recalls Mcp Server1
- Cyanheads Mcp Server1
- Exchange Rates Mcp Server1
- Fcc Broadband Mcp Server1
- Nist Nvd Mcp Server1
- Pokeapi Mcp Server1
- Reference Data Mcp Server1