Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
cyanheads avatar

Bluesky MCP

  • 1 repo stars
  • Updated July 31, 2026
  • cyanheads/bluesky-mcp-server

Search posts, profiles, feeds, threads, and trending topics on Bluesky.

About

Search posts, profiles, feeds, threads, and trending topics on Bluesky. Exposes 7 MCP tools including io.github.cyanheads/bluesky-mcp-server, MCP_LOG_LEVEL, | Tool | Description |, |. Search posts, profiles, feeds, threads, and trending topics on Bluesky. Search posts, profiles, feeds, threads, and trending topics on Bluesky. "name": "io.github.cyanheads/bluesky-mcp-server", Install via Claude Desktop, Cursor, or any MCP-compatible client using the server manifest from the upstream repository.

  • Search posts, profiles, feeds, threads, and trending topics on Bluesky.
  • 7 registered MCP tools for structured agent access.
  • Category: Communication with launch/distribution journey placement.
  • Compatible with Claude Desktop, Cursor, and MCP clients.
  • Upstream manifest: bluesky-mcp-server.

Bluesky MCP by the numbers

  • Exposes 7 verified tools (MCP introspection)
  • Data as of Aug 10, 2026 (Skillselion catalog sync)
terminal
claude mcp add --env MCP_LOG_LEVEL=YOUR_MCP_LOG_LEVEL bluesky-mcp-server -- npx -y @cyanheads/bluesky-mcp-server run

Add your badge

Show developers this MCP server is listed on Skillselion. Paste this into your README.

Listed on Skillselion
repo stars1
Package@cyanheads/bluesky-mcp-server
TransportSTDIO, HTTP
AuthNone
Tools7
Last updatedJuly 31, 2026
Repositorycyanheads/bluesky-mcp-server

How do I connect Bluesky Mcp Server to my MCP client?

Search posts, profiles, feeds, threads, and trending topics on Bluesky.

Who is it for?

Teams wiring Bluesky Mcp Server into Claude, Cursor, or custom agents for communication.

Skip if: Skip when you need a non-MCP SDK or hosted API without stdio/SSE transport.

What you get

Working Bluesky Mcp Server MCP server with verified tool registration and client config.

  • Search results for Bluesky posts, profiles, feeds, and threads in agent sessions
  • Trending topic snapshots to inform launch copy and engagement lists

By the numbers

  • [object Object]
At a glance

Bluesky Mcp Server capabilities & compatibility

Capabilities
bluesky mcp server mcp tool registration · bluesky mcp server client configuration · bluesky mcp server agent workflow integration
Use cases
email
Runs
Runs locally
From the docs

What Bluesky Mcp Server says it does

Search posts, profiles, feeds, threads, and trending topics on Bluesky.
README.md

Tools 7

Public tool metadata - what this server can do for an agent.

bsky_get_profile1 param

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, follower/following/post counts, avatar URL, moderation labels, and pinned post AT-URI. Use this as the first step to resolve a handle to a DID before calling tools that require a DID or AT-URI. Handles and DIDs are interchangeable as input.

  • actorstringrequiredHandle (e.g. "bsky.app", "alice.bsky.social") or DID (e.g. "did:plc:z72i7hdynmk6r22z27h6tvur") of the actor to look up.
bsky_search_actors3 params

Find Bluesky accounts by name or handle fragment. Returns ranked profiles with handle, DID, displayName, bio, and follower count. Use before bsky_get_profile or bsky_get_author_feed when you have a name but not a confirmed handle. Supports cursor-based pagination for browsing beyond the first page of results.

  • querystringrequiredName or handle fragment to search for, e.g. "alice" or "nytimes.com".
  • limitintegerMaximum number of actors to return (1–100). Default 25.
  • cursorstringOpaque pagination cursor from a previous response. Note: the public Bluesky AppView restricts cursor-based search pagination for unauthenticated requests — passing a cursor may return a 403 error. Cursor pagination is reliable only for bsky_get_author_feed and bsky_get_follows.
bsky_get_trending1 param

Fetch the current real-time trending topics on Bluesky. Returns topics with display name, post count, category (politics, sports, pop-culture, etc.), status (hot/rising), and start time. Entry point for "what is Bluesky talking about right now". Pair with bsky_search_posts to drill into any trending topic. Note: uses the app.bsky.unspecced.getTrends endpoint, which is not part of Bluesky's stable lexicon and may change without notice.

  • limitintegerMaximum number of trending topics to return (1–25). Default 10.
bsky_get_author_feed4 params

Get a Bluesky user's recent posts ordered newest-first. Filter by post type: "posts_with_replies" (everything), "posts_no_replies" (original posts only), "posts_with_media" (posts with images or links), or "posts_and_author_threads" (posts the author started). Returns posts with full text, engagement counts, embeds, and AT-URIs for drilling into threads via bsky_get_post_thread. Supports cursor pagination.

  • actorstringrequiredHandle (e.g. "alice.bsky.social") or DID of the author whose feed to fetch.
  • filterstringFilter for post types: "posts_no_replies" for original posts only, "posts_with_replies" for everything, "posts_with_media" for posts with images/links, "posts_and_author_threads" for threads the author started.
  • limitintegerMaximum number of posts to return (1–100). Default 25.
  • cursorstringOpaque pagination cursor from a previous response. Omit for the first page.
bsky_search_posts9 params

Full-text search across public Bluesky posts. Filters by author (handle or DID), language (BCP-47 code, e.g. "en"), hashtag (without the # prefix), date range (ISO 8601), and sort order. Returns posts with text, author info, engagement counts (likes/reposts/replies), normalized embeds, AT-URIs for thread drilling, and hitsTotal when the API reports the total number of matching posts. This is the primary entry point for social listening — pass any AT-URI from results to bsky_get_post_thread to read the full conversation.

  • querystringrequiredFull-text search query, e.g. "climate change" or "#ai announcement".
  • author_handlestringFilter to posts by this author. Accepts handle (e.g. "bsky.app") or DID. Use bsky_get_profile to resolve a name to a handle first.
  • languagestringBCP-47 language code to restrict results to, e.g. "en", "ja", "es".
  • tagstringHashtag to filter by — provide without the # prefix, e.g. "ai" not "#ai".
  • sincestringReturn posts after this ISO 8601 datetime (inclusive), e.g. "2025-01-01T00:00:00Z".
  • untilstringReturn posts before this ISO 8601 datetime (inclusive), e.g. "2025-12-31T23:59:59Z".
  • sortstring"latest" returns posts in reverse-chronological order (default). "top" returns by engagement score.
  • limitintegerMaximum posts to return (1–100). Default 25.
  • cursorstringOpaque pagination cursor from a previous response. Note: the public Bluesky AppView restricts cursor-based search pagination for unauthenticated requests — passing a cursor may return a 403 error. Cursor pagination is reliable only for bsky_get_author_feed and bsky_get_follows.
bsky_get_post_thread3 params

Fetch the full 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 full discussion. AT-URIs have the format "at://<did>/<collection>/<rkey>" and are returned by bsky_search_posts and bsky_get_author_feed in the "uri" field of each post. Returns the root post, parent chain, and nested replies with per-post author and engagement data. "truncated: true" on a reply node means there are more replies below — increase depth to load them.

  • uristringrequiredAT-URI of the post to fetch, e.g. "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/abc123". Obtain from bsky_search_posts or bsky_get_author_feed.
  • depthintegerHow many levels of replies to include in the reply tree. Default 6.
  • parent_heightintegerHow many parent posts to include in the parent chain above the target post. Default 80.
bsky_get_follows4 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, follower count) plus a summary of the subject account. Accounts with large social graphs return only the first page; use cursor pagination to walk through the full list.

  • actorstringrequiredHandle (e.g. "alice.bsky.social") or DID of the account to query.
  • directionstringrequired"followers" returns accounts that follow this actor. "following" returns accounts this actor follows.
  • limitintegerMaximum number of actors to return per page (1–100). Default 25.
  • cursorstringOpaque pagination cursor from a previous response. Omit for the first page.
README.md

@cyanheads/bluesky-mcp-server

Search posts, profiles, feeds, threads, and trending topics on Bluesky via MCP. STDIO or Streamable HTTP.

7 Tools • 1 Resource

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

Public Hosted Server: https://bluesky.caseyjhand.com/mcp


Tools

Seven tools for read-only access to the public Bluesky/AT Protocol AppView — no authentication required:

Tool Description
bsky_search_posts Full-text search across public Bluesky posts, with author, language, tag, domain, date, and sort filters
bsky_get_profile Fetch a Bluesky actor's public profile by handle or DID — the handle↔DID resolver
bsky_get_author_feed A user's recent posts ordered newest-first, filterable by post type
bsky_get_post_thread Fetch the full conversation for a post by AT-URI — parent chain upward and reply tree downward
bsky_search_actors Find Bluesky accounts by name or handle fragment
bsky_get_follows Paginated social graph edges — who a user follows or who follows them
bsky_get_trending Real-time trending topics on Bluesky with post count, category, and status

bsky_search_posts

Full-text search across public Bluesky posts.

  • Filters: author handle, language (BCP-47), hashtag, domain, date range (since/until), and sort order (top or latest)
  • Returns posts with text, author, engagement counts (likes/reposts/replies/quotes), embeds, AT-URIs, and timestamps
  • hitsTotal when available — total matching posts, not just the current page
  • Pagination via opaque cursor; up to 100 results per call
  • Embeds normalized into a flat union: images, external (link cards), record (quoted posts), video, unknown
  • Moderation labels surfaced as-is — not filtered

bsky_get_profile

Fetch a Bluesky actor's public profile by handle or DID.

  • Returns displayName, handle, DID, description, follower/following/post counts, avatar URL, moderation labels, and pinned post AT-URI
  • The resolution step for handle↔DID — use before tools that require a DID or AT-URI when you only have a handle

bsky_get_author_feed

A user's recent posts ordered newest-first.

  • Filter by post type: posts_with_replies, posts_no_replies, posts_with_media, or posts_and_author_threads
  • Returns posts with full text, engagement counts, embeds, and AT-URIs for thread drilling
  • Pagination via cursor

bsky_get_post_thread

Fetch the full conversation for a post by AT-URI.

  • Returns the root post, parent chain (upward), and nested reply tree (downward)
  • Configurable depth (reply tree depth, default 6) and parent_height (parent chain height, default 80)
  • Truncated subtrees surface truncated: true; deleted posts surface as not_found
  • AT-URIs come from bsky_search_posts or bsky_get_author_feed

bsky_get_follows

Fetch social graph edges for an account.

  • direction: followers (who follows the actor) or following (who the actor follows)
  • Returns paginated profiles with handle, DID, displayName, description, and follower count
  • Includes the subject's profile summary at the top level

bsky_get_trending

Fetch real-time trending topics on Bluesky.

  • Returns topics with display name, post count, category (politics, sports, pop-culture, etc.), status (hot/rising), and start time
  • No cursor — returns the current snapshot up to limit
  • Uses app.bsky.unspecced.getTrends — Bluesky may change this endpoint without notice

Resource

Type Name Description
Resource bsky://profile/{actor} A Bluesky actor's public profile, addressable by handle or DID

All resource data is also reachable via tools. Use bsky_get_profile for programmatic access or bsky://profile/{actor} to inject profile context directly.

Features

Built on @cyanheads/mcp-ts-core:

  • Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
  • Unified error handling — handlers throw, framework catches, classifies, and formats
  • Pluggable auth: none, jwt, oauth
  • Swappable storage backends: in-memory, filesystem, Supabase, Cloudflare KV/R2/D1
  • Structured logging with optional OpenTelemetry tracing
  • STDIO and Streamable HTTP transports

Bluesky-specific:

  • No authentication required — all seven tools operate against api.bsky.app without credentials
  • Single BlueskyService wrapping the AT Protocol public AppView with retry (3 attempts, 500ms base), 15s timeout, and a versioned User-Agent
  • Embed normalization — raw nested AT Protocol embed objects flattened to a clean type-discriminated union
  • Moderation labels surfaced verbatim — the agent and its human decide what to do
  • AT Protocol identifier types (handle, DID, AT-URI) explained at first encounter in every tool description

Agent-friendly output:

  • AT-URIs on every post and resource — chain bsky_search_postsbsky_get_post_thread without extra steps
  • Discriminated embed union (type: "images" | "external" | "record" | "video" | "unknown") — branch on data, not $type strings
  • hitsTotal on search results — communicate result scale to users without extra round trips
  • Truncation signals (truncated: true) on thread nodes — agents know where the tree ends and why

Getting started

Public Hosted Instance

Connect directly — no installation required:

{
  "mcpServers": {
    "bluesky-mcp-server": {
      "type": "streamable-http",
      "url": "https://bluesky.caseyjhand.com/mcp"
    }
  }
}

Self-hosted

Add the following to your MCP client configuration file. No API key required.

{
  "mcpServers": {
    "bluesky-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/bluesky-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

Or with npx (no Bun required):

{
  "mcpServers": {
    "bluesky-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/bluesky-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

Or with Docker:

{
  "mcpServers": {
    "bluesky-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "ghcr.io/cyanheads/bluesky-mcp-server:latest"
      ]
    }
  }
}

For Streamable HTTP, set the transport and start the server:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.3.0 or higher (or Node.js v24+).
  • No API key or account required — all tools call api.bsky.app without credentials.

Installation

  1. Clone the repository:
git clone https://github.com/cyanheads/bluesky-mcp-server.git
  1. Navigate into the directory:
cd bluesky-mcp-server
  1. Install dependencies:
bun install
  1. Configure environment (optional):
cp .env.example .env
# edit .env to override any framework defaults

Configuration

This server requires no API keys. All framework configuration is optional.

Variable Description Default
MCP_TRANSPORT_TYPE Transport: stdio or http stdio
MCP_HTTP_PORT Port for HTTP server 3010
MCP_AUTH_MODE Auth mode: none, jwt, or oauth none
MCP_LOG_LEVEL Log level (RFC 5424) info
LOGS_DIR Directory for log files (Node.js only) <project-root>/logs
STORAGE_PROVIDER_TYPE Storage backend in-memory
OTEL_ENABLED Enable OpenTelemetry instrumentation false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • Run checks and tests:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    

Docker

docker build -t bluesky-mcp-server .
docker run --rm -p 3010:3010 bluesky-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/bluesky-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

Directory Purpose
src/index.ts createApp() entry point — registers tools, resource, and inits service.
src/services/bluesky AT Protocol AppView HTTP client with retry, timeout, and User-Agent.
src/mcp-server/tools Tool definitions (*.tool.ts) — seven read-only Bluesky tools.
src/mcp-server/resources Resource definitions (*.resource.ts) — bsky://profile/{actor}.
tests/ Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources via the arrays in src/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues and pull requests are welcome. Run checks and tests before submitting:

bun run devcheck
bun run test

License

Apache-2.0 — see LICENSE for details.

Recommended MCP Servers

How it compares

Bluesky read/search MCP connector, not a multi-network social media management skill.

FAQ

What does bluesky mcp server MCP do?

Search posts, profiles, feeds, threads, and trending topics on Bluesky.

When should I use bluesky mcp server?

User asks about Bluesky MCP mcp, search posts, profiles, feeds, threads, and trending topics on bluesky.

Is this MCP server safe to install?

Review the Security Audits panel and upstream source before connecting in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.