cameronrye/atproto-mcp
If you are the rightful owner of atproto-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The AT Protocol MCP Server is a comprehensive server solution that integrates the Model Context Protocol (MCP) with the AT Protocol ecosystem, facilitating seamless interaction with social networks like Bluesky.
A comprehensive Model Context Protocol (MCP) server that provides LLMs with direct access to the AT Protocol ecosystem, enabling seamless interaction with Bluesky and other AT Protocol-based social networks.
๐ฏ Supports both authenticated and unauthenticated modes - Start immediately with public data access (search posts, view profiles), or add authentication for full functionality (write operations, private data, feeds).
๐๏ธ Architecture
This MCP server acts as a bridge between LLM clients and the AT Protocol ecosystem:
โโโโโโโโโโโโโโโโโโโ
โ User โ "Search for posts about AI"
โโโโโโโโโโฌโโโโโโโโโ
โ Natural Language
โผ
โโโโโโโโโโโโโโโโโโโ
โ LLM Client โ (Claude Desktop, etc.)
โ (MCP Client) โ
โโโโโโโโโโฌโโโโโโโโโ
โ MCP Protocol (JSON-RPC 2.0)
โผ
โโโโโโโโโโโโโโโโโโโ
โ This Server โ AT Protocol MCP Server
โ (MCP Server) โ - Tools, Resources, Prompts
โโโโโโโโโโฌโโโโโโโโโ
โ AT Protocol API
โผ
โโโโโโโโโโโโโโโโโโโ
โ AT Protocol โ Bluesky, Custom PDS, etc.
โ Ecosystem โ
โโโโโโโโโโโโโโโโโโโ
Key Point: Users don't interact with this server directly. Instead, they talk to their LLM client in natural language, and the LLM client uses this MCP server to access AT Protocol functionality.
๐ Features
- ๐ Unauthenticated Mode: Access public data without any setup - search posts and view basic profiles
- ๐ Optional Authentication: Enable full functionality with app passwords or OAuth for write operations, feeds, and private data
- Complete AT Protocol Integration: Full implementation using official
@atproto/api
- MCP Server Compliance: Built with
@modelcontextprotocol/sdk
following MCP specification - Type-Safe: Written in TypeScript with strict type checking
- Comprehensive Tools: 30+ MCP tools for social networking operations
- Real-time Support: WebSocket connections for live data streams
- Rate Limiting: Built-in respect for AT Protocol rate limits
- Extensible: Modular architecture for easy customization
๐ฏ Who Is This For?
Primary Audience: LLM Clients
This is an MCP (Model Context Protocol) server designed to be consumed by LLM clients such as:
- Claude Desktop
- Other MCP-compatible AI assistants
- Custom LLM applications using the MCP SDK
How it works:
User โ LLM Client (Claude Desktop) โ MCP Protocol โ This Server โ AT Protocol โ Bluesky
Users interact with their LLM client in natural language (e.g., "search for posts about AI"), and the LLM client uses this MCP server to fulfill those requests by calling the appropriate tools via the MCP protocol.
Secondary Audience: Developers
This project is also for developers who want to:
- Deploy the MCP server for their LLM clients to connect to
- Extend the server with custom MCP tools and resources
- Contribute to the open-source project
โ ๏ธ This Is NOT:
- โ A direct-use REST API or SDK for application developers
- โ A JavaScript/TypeScript library to import into your app
- โ An end-user application
If you're building an application that needs AT Protocol functionality, you should either:
- Use the official
@atproto/api
package directly, OR - Build an LLM-powered application that uses this MCP server through an LLM client
๐ฆ Installation
npm install -g atproto-mcp
Or use with npx:
npx atproto-mcp
๐ง Quick Start
Option 1: Unauthenticated Mode (Recommended for most use cases)
Perfect for LLM clients that need to access public AT Protocol data:
-
Configure your LLM client (e.g., Claude Desktop) to launch the MCP server:
Add to your LLM client's MCP configuration:
{ "mcpServers": { "atproto": { "command": "npx", "args": ["atproto-mcp"] } } }
-
Start your LLM client - it will automatically launch the MCP server
-
Interact in natural language - Ask your LLM to search posts, view profiles, etc.
What your LLM can do in unauthenticated mode:
- โ
View user profiles (
get_user_profile
- works without auth, provides additional viewer-specific data when authenticated) - โ
Manage OAuth authentication flows (
start_oauth_flow
,handle_oauth_callback
,refresh_oauth_tokens
,revoke_oauth_tokens
)
Note: The following features require authentication:
- โ Searching posts and hashtags (
search_posts
) - API changed in 2025 to require authentication - โ Viewing follower/following lists (
get_followers
,get_follows
) - โ Browsing feeds and threads (
get_thread
,get_custom_feed
,get_timeline
) - โ All write operations (create, like, repost, follow, etc.)
- โ Resources (timeline, profile, notifications) - these are listed but will return an error when accessed without authentication
- โ Prompts (content composition, reply templates) - these are listed but will return an error when accessed without authentication
Important: All tools, resources, and prompts are listed by the MCP server regardless of authentication state. Tools and resources that require authentication will return a clear error message when called without proper credentials.
Option 2: Authenticated Mode (For full functionality)
Enable write operations and private data access for your LLM:
-
Configure your LLM client with AT Protocol credentials:
{ "mcpServers": { "atproto": { "command": "npx", "args": ["atproto-mcp"], "env": { "ATPROTO_IDENTIFIER": "your-handle.bsky.social", "ATPROTO_PASSWORD": "your-app-password" } } } }
-
Start your LLM client - it will launch the authenticated MCP server
What your LLM can do in authenticated mode:
- โ Create, edit, and delete posts
- โ Follow/unfollow users
- โ Like and repost content
- โ Access personalized timelines and notifications
- โ Manage lists and moderation settings
๐ ๏ธ Available Tools
The server provides 30+ MCP tools across multiple categories. See the complete API documentation for detailed information on each tool.
๐ Public Tools (No Authentication Required)
Data Retrieval
get_user_profile
- Retrieve basic user information (ENHANCED mode: works without auth, provides additional viewer-specific data when authenticated)
OAuth Management
start_oauth_flow
- Initiate OAuth authenticationhandle_oauth_callback
- Complete OAuth flowrefresh_oauth_tokens
- Refresh authentication tokensrevoke_oauth_tokens
- Revoke OAuth tokens
Note: As of 2025, the AT Protocol API has changed to require authentication for most endpoints that were previously public, including search_posts
.
๐ Private Tools (Authentication Required)
Social Operations
create_post
- Create new posts with rich text supportcreate_rich_text_post
- Create posts with advanced formattingreply_to_post
- Reply to existing posts with threadinglike_post
/unlike_post
- Like and unlike postsrepost
/unrepost
- Repost content with optional quotesfollow_user
/unfollow_user
- Follow and unfollow users
Data Retrieval
search_posts
- Search for posts and content across the network (โ ๏ธ API changed in 2025 to require auth)get_followers
- Get follower listsget_follows
- Get following listsget_thread
- View post threads and conversationsget_custom_feed
- Access custom feedsget_timeline
- Retrieve personalized timelinesget_notifications
- Access notification feeds
Content Management
upload_image
/upload_video
- Upload media contentdelete_post
- Remove postsupdate_profile
- Modify profile and settingsgenerate_link_preview
- Generate link previews for posts
List Management
create_list
- Create user listsadd_to_list
/remove_from_list
- Manage list membersget_list
- Retrieve list information
Moderation
mute_user
/unmute_user
- Mute and unmute usersblock_user
/unblock_user
- Block and unblock usersreport_content
/report_user
- Report content and users
Real-time Streaming
start_streaming
- Start real-time event streamstop_streaming
- Stop event streamget_streaming_status
- Check streaming statusget_recent_events
- Retrieve recent events
๐ Documentation
Visit our documentation site for:
- Getting Started Guide
- API Reference
- Configuration Options
- Examples and Tutorials
- Troubleshooting
๐ Authentication (Optional)
The server works perfectly without authentication for accessing public data. Authentication is only needed for write operations and private data access.
App Passwords (Recommended for Development)
export ATPROTO_IDENTIFIER="your-handle.bsky.social"
export ATPROTO_PASSWORD="your-app-password"
atproto-mcp
OAuth (Production)
export ATPROTO_CLIENT_ID="your-client-id"
export ATPROTO_CLIENT_SECRET="your-client-secret"
atproto-mcp --auth oauth
๐งช Development
Quick Start
# Clone the repository
git clone https://github.com/cameronrye/atproto-mcp.git
cd atproto-mcp
# Install dependencies (use pnpm, npm, or yarn)
pnpm install # or: npm install
# Start development server
pnpm dev # or: npm run dev
# Run tests
pnpm test # or: npm test
# Build for production
pnpm build # or: npm run build
Available Commands
This project provides cross-platform npm scripts that work on Windows, macOS, and Linux:
# Show all available commands
npm run help
# Development
npm run dev # Start development server with hot reload
npm run build # Build for production
npm run start # Start production server
# Testing & Quality
npm test # Run tests
npm run test:coverage # Run tests with coverage
npm run test:ui # Run tests with interactive UI
# Integration Tests (connects to real AT Protocol servers)
npm run test:integration
npm run lint # Run ESLint
npm run lint:fix # Fix linting issues
npm run format # Format code with Prettier
npm run type-check # Run TypeScript type checking
npm run check # Run all quality checks
# Utilities
npm run clean # Clean build artifacts
npm run clean:all # Clean everything including node_modules
npm run status # Show project status
npm run ci # Run full CI pipeline locally
# Dependencies
npm run deps:update # Update dependencies
npm run deps:audit # Audit for security issues
Cross-Platform Compatibility
All build commands work on Windows, macOS, and Linux without requiring additional tools.
Simply use npm scripts on any platform (e.g., npm run dev
, npm test
, npm run build
).
๐งช Testing
The project includes comprehensive test coverage:
Unit Tests
# Run all unit tests
pnpm test
# Run with coverage
pnpm test:coverage
# Run with interactive UI
pnpm test:ui
Integration Tests
Comprehensive integration tests that connect to real AT Protocol servers to validate all public-facing functionality:
# Run integration tests (requires internet connection)
npm run test:integration
What's tested:
- โ All public tools (search_posts, get_user_profile, get_followers, get_follows, get_thread, get_custom_feed)
- โ DID and handle resolution
- โ Pagination support
- โ Error handling
- โ AT Protocol specification compliance
- โ Rate limiting behavior
Note: Integration tests are opt-in and disabled by default to avoid hitting real servers during normal development. See for details.
๐ค Contributing
We welcome contributions! Please see our for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
๐ License
This project is licensed under the MIT License.
๐ Acknowledgments
- AT Protocol Team for the excellent protocol and SDK
- Anthropic for the Model Context Protocol
- The open source community for inspiration and contributions
๐ Support
- ๐ Documentation
- ๐ Issue Tracker
- ๐ฌ Discussions
๐ญ Production Deployment
The AT Protocol MCP Server is production-ready with comprehensive features for enterprise deployment:
Production Features
- Performance Optimization: Connection pooling, caching, and WebSocket management
- Security Hardening: Input sanitization, rate limiting, and secure credential storage
- Monitoring: Health checks, metrics, and comprehensive logging
- Docker Support: Multi-stage builds with security best practices
- Kubernetes Ready: Helm charts and deployment manifests
- Observability: Prometheus metrics and Grafana dashboards
Docker Deployment
# Quick start with Docker Compose
docker-compose up -d
# Or build and run manually
docker build -t atproto-mcp .
docker run -d -p 3000:3000 \
-e ATPROTO_IDENTIFIER=your.handle \
-e ATPROTO_PASSWORD=your-password \
atproto-mcp
Environment Configuration
# Copy example environment file
cp .env.example .env
# Edit with your credentials
ATPROTO_IDENTIFIER=your.handle.bsky.social
ATPROTO_PASSWORD=your-app-password
NODE_ENV=production
LOG_LEVEL=info
For detailed deployment instructions, see .
๐ Security
Security is a top priority for this project. Please review our security practices and policies:
Security Best Practices
Before deploying to production:
-
Change Default Passwords
- Set
GRAFANA_ADMIN_PASSWORD
environment variable (don't use default) - Configure Redis password if using Redis
- Generate strong random keys for
SECURITY_SECRET_KEY
- Set
-
Configure CORS Properly
- Replace wildcard
*
origins with specific domains - Set
CORS_ORIGINS
in your environment configuration - Example:
CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com
- Replace wildcard
-
Secure Your Credentials
- Never commit
.env
files to version control - Use app passwords instead of main account passwords
- Rotate credentials regularly
- Use secret management systems in production (AWS Secrets Manager, HashiCorp Vault, etc.)
- Never commit
-
Network Security
- Use HTTPS in production
- Configure
TRUSTED_PROXIES
if behind a reverse proxy - Enable rate limiting
- Restrict access to internal services (Redis, Prometheus, Grafana)
-
Keep Dependencies Updated
pnpm audit pnpm update
Reporting Security Vulnerabilities
If you discover a security vulnerability, please review our for responsible disclosure guidelines.
Do not open public issues for security vulnerabilities. Instead, send me a message privately.
Security Features
- โ Input validation and sanitization
- โ Rate limiting and abuse prevention
- โ Credential redaction in logs
- โ Non-root Docker containers
- โ HTTPS support for AT Protocol
- โ Error sanitization to prevent information leakage
For more details, see .
Made with โค๏ธ by Cameron Rye