← Projects
MIT · Open source

mcp-bsky

MCP server for Bluesky — search, read, and post via the AT Protocol.

🌟 Features

  • App-password auth — uses your Bluesky App Password via BLUESKY_HANDLE / BLUESKY_APP_PASSWORD (shared with @kud/bsky-cli).
  • 11 tools — 5 read, 6 write.
  • Writes are gated — every posting/engagement tool requires an explicit confirm: true, so an agent can never publish by accident.
  • Thin wrapper — each tool is one line over @kud/bsky; the API logic lives in the core library, not here.
  • TypeScript, ESM, zero business logic@modelcontextprotocol/sdk + zod.

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • A Bluesky account and an App Password (Settings → App Passwords)

Installation

npx @kud/mcp-bsky

Claude Desktop / Claude Code

{
  "mcpServers": {
    "bsky": {
      "command": "npx",
      "args": ["@kud/mcp-bsky"],
      "env": {
        "BLUESKY_HANDLE": "you.bsky.social",
        "BLUESKY_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
      }
    }
  }
}

✅ Restart your client and the bsky tools appear.

🛠️ Available Tools

🔭 Read (5 tools)

ToolDescription
search_postsSearch Bluesky for posts matching a query
timelineThe authenticated user's home timeline
notificationsThe authenticated user's notifications
profileA profile by handle or DID
threadA post and its replies

✍️ Write — gated by confirm: true (6 tools)

ToolDescription
postPublish a post
thread_postPublish a self-thread (each post replies to the previous)
replyReply to a post
likeLike a post
repostRepost a post
followFollow an account

Total: 11 tools covering the core Bluesky workflow.

💬 Example Conversations

You: "What are people saying about the AT Protocol on Bluesky?"
AI: *calls search_posts → summarises the latest posts*

You: "Post 'shipped a new MCP server 🦋' to my Bluesky."
AI: *calls post with confirm: true → returns the post URL*

You: "Reply to that thread and like the original."
AI: *calls reply and like (confirm: true) → done*

🧪 Development

git clone https://github.com/kud/mcp-bsky.git
cd mcp-bsky
npm install
npm run build
npm test
ScriptDescription
npm run buildCompile TypeScript to dist/
npm run devRun from source via tsx
npm testRun the vitest suite
npm run inspect:devLaunch the MCP Inspector against source

Test against source with the Inspector:

export BLUESKY_HANDLE=you.bsky.social
export BLUESKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
npm run inspect:dev

🔐 Authentication

This server reads two environment variables — @kud/bsky's contract, intentionally not MCP_-prefixed so the credentials are shared with @kud/bsky-cli:

  1. Sign in at bsky.appSettings → App Passwords → Add App Password.
  2. Set BLUESKY_HANDLE (e.g. you.bsky.social) and BLUESKY_APP_PASSWORD (the generated app password — never your main password).

📊 Tech Stack

  • Runtime: Node.js 20+
  • Language: TypeScript (ESM)
  • Protocol: Model Context Protocol (@modelcontextprotocol/sdk)
  • Core: @kud/bsky
  • Validation: zod

📄 License

MIT — see LICENSE.

🙏 Acknowledgments

Made with ❤️ for the terminal

⭐ Star this repo if it helped you!