# Bluesky MCP Server [![smithery badge](https://smithery.ai/badge/@semioz/bluesky-mcp)](https://smithery.ai/server/@semioz/bluesky-mcp) A Model Context Protocol (MCP) server for Bluesky that can post on your behalf by using the AT Protocol. ## Setup ### Installing via Smithery To install bluesky-mcp for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@semioz/bluesky-mcp): ```bash npx -y @smithery/cli install @semioz/bluesky-mcp --client claude ``` ### Manual Installation Configure Claude for Desktop: Open your Claude for Desktop App configuration at `~/Library/Application Support/Claude/claude_desktop_config.json` and add: ```json { "mcpServers": { "bluesky-mcp": { "command": "npx", "args": ["-y", "@semihberkay/bluesky-mcp"], "env": { "BLUESKY_IDENTIFIER": "your.handle.bsky.social", "BLUESKY_PASSWORD": "your-app-password" } } } } ``` ### Required Environment Variables - `BLUESKY_IDENTIFIER`: Your Bluesky handle or email - `BLUESKY_PASSWORD`: Your Bluesky app password ## Available MCP Tools ### Authentication ```typescript tool: "login" params: { identifier?: string, // Your Bluesky handle or email (optional if set in env) password?: string // Your Bluesky app password (optional if set in env) } ``` The server will attempt to auto-login using credentials from the environment variables when starting up. You only need to use the login tool if: - You haven't set the environment variables in Claude's config - You want to login with different credentials - The auto-login failed ### Posts ```typescript // Create a new post tool: "create-post" params: { text: string, // The text content of your post images?: { // Optional array of images data: string, // Base64 encoded image data encoding: string // Image MIME type (e.g., image/jpeg) }[] } // Get a single post tool: "get-post" params: { uri: string // The URI of the post to fetch } // Get multiple posts tool: "get-posts" params: { uris: string[] // Array of post URIs to fetch } // Delete a post tool: "delete-post" params: { uri: string // The URI of the post to delete } ``` ### Interactions ```typescript // Like a post tool: "like-post" params: { uri: string, // The URI of the post to like cid: string // The CID of the post to like } // Unlike a post tool: "unlike-post" params: { likeUri: string // The URI of the like to remove } // Repost tool: "repost" params: { uri: string, // The URI of the post to repost cid: string // The CID of the post to repost } // Remove repost tool: "unrepost" params: { repostUri: string // The URI of the repost to remove } ``` ### Profile & Timeline ```typescript // Get your profile tool: "get-profile" params: {} // Get timeline tool: "get-timeline" params: { limit?: number // Number of posts to fetch (max 100) } ``` ## Prompts ### Format Timeline ```typescript prompt: "format-timeline" params: { timeline: any // Timeline data to format } ``` Formats timeline data in a human-readable way with: - Author name/handle - Post text - Engagement metrics (replies, reposts, likes) - Timestamps - Embedded content (links, videos) - Repost information ## Features - ✅ Authentication with Bluesky - ✅ Create text posts - ✅ Support for image uploads - ✅ Get user profile - ✅ Get timeline - ✅ Like/Unlike posts - ✅ Repost/Unrepost - ✅ Rich text support with automatic link and mention detection - ✅ MCP compatible for use with Claude