{"id":31526984,"url":"https://github.com/cameronrye/atproto-mcp","last_synced_at":"2026-05-15T13:07:32.731Z","repository":{"id":317443135,"uuid":"1065455847","full_name":"cameronrye/atproto-mcp","owner":"cameronrye","description":"A MCP server that gives LLMs direct access to the AT Protocol ecosystem, enabling seamless interaction with Bluesky and other AT Protocol-based social networks.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:59:39.000Z","size":1125,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-17T03:26:57.890Z","etag":null,"topics":["atprotocol","bluesky","mcp","mcp-server"],"latest_commit_sha":null,"homepage":"https://cameronrye.github.io/atproto-mcp/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cameronrye.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-27T19:07:01.000Z","updated_at":"2025-11-17T01:59:43.000Z","dependencies_parsed_at":"2025-09-30T23:27:18.251Z","dependency_job_id":"c7f59c45-e569-40c6-857e-4a42d50d4be6","html_url":"https://github.com/cameronrye/atproto-mcp","commit_stats":null,"previous_names":["cameronrye/atproto-mcp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cameronrye/atproto-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameronrye%2Fatproto-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameronrye%2Fatproto-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameronrye%2Fatproto-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameronrye%2Fatproto-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cameronrye","download_url":"https://codeload.github.com/cameronrye/atproto-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cameronrye%2Fatproto-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33067521,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atprotocol","bluesky","mcp","mcp-server"],"created_at":"2025-10-03T21:17:36.417Z","updated_at":"2026-05-15T13:07:32.724Z","avatar_url":"https://github.com/cameronrye.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/public/logo.svg\" alt=\"AT Protocol MCP Server Logo\" width=\"200\" height=\"200\"\u003e\n\n  # AT Protocol MCP Server\n\n  [![npm version](https://badge.fury.io/js/atproto-mcp.svg)](https://badge.fury.io/js/atproto-mcp)\n  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n  [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n\n  [![CI](https://github.com/cameronrye/atproto-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/cameronrye/atproto-mcp/actions/workflows/ci.yml)\n  [![Integration Tests](https://github.com/cameronrye/atproto-mcp/actions/workflows/integration-tests.yml/badge.svg)](https://github.com/cameronrye/atproto-mcp/actions/workflows/integration-tests.yml)\n  [![Documentation](https://github.com/cameronrye/atproto-mcp/actions/workflows/docs.yml/badge.svg)](https://github.com/cameronrye/atproto-mcp/actions/workflows/docs.yml)\n  [![Release](https://github.com/cameronrye/atproto-mcp/actions/workflows/release.yml/badge.svg)](https://github.com/cameronrye/atproto-mcp/actions/workflows/release.yml)\n  [![Coverage](https://codecov.io/gh/cameronrye/atproto-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/cameronrye/atproto-mcp)\n\n  ![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen?logo=node.js)\n  ![pnpm](https://img.shields.io/badge/pnpm-10.17.1-orange?logo=pnpm)\n  ![AT Protocol](https://img.shields.io/badge/AT_Protocol-0.17.7-7856ff)\n  ![MCP SDK](https://img.shields.io/badge/MCP_SDK-1.22.0-blue)\n\n  ![GitHub stars](https://img.shields.io/github/stars/cameronrye/atproto-mcp?style=social)\n  ![npm downloads](https://img.shields.io/npm/dm/atproto-mcp)\n  ![GitHub last commit](https://img.shields.io/github/last-commit/cameronrye/atproto-mcp)\n  ![GitHub contributors](https://img.shields.io/github/contributors/cameronrye/atproto-mcp)\n\n  ![Code Style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)\n  [![Documentation](https://img.shields.io/badge/docs-online-success)](https://cameronrye.github.io/atproto-mcp)\n  [![Security](https://img.shields.io/badge/security-policy-blue)](SECURITY.md)\n  ![npm bundle size](https://img.shields.io/bundlephobia/min/atproto-mcp)\n\u003c/div\u003e\n\nA 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.\n\n**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).\n\n\u003e **New in v0.1.1**: Batch operations for bulk actions, advanced analytics and insights, intelligent content discovery, and conversation context tracking for better LLM awareness across interactions!\n\n## Architecture\n\nThis MCP server acts as a bridge between LLM clients and the AT Protocol ecosystem:\n\n```\n┌─────────────────┐\n│      User       │  \"Search for posts about AI\"\n└────────┬────────┘\n         │ Natural Language\n         ▼\n┌─────────────────┐\n│   LLM Client    │  (Claude Desktop, etc.)\n│  (MCP Client)   │\n└────────┬────────┘\n         │ MCP Protocol (JSON-RPC 2.0)\n         ▼\n┌─────────────────┐\n│   This Server   │  AT Protocol MCP Server\n│  (MCP Server)   │  - Tools, Resources, Prompts\n└────────┬────────┘\n         │ AT Protocol API\n         ▼\n┌─────────────────┐\n│  AT Protocol    │  Bluesky, Custom PDS, etc.\n│   Ecosystem     │\n└─────────────────┘\n```\n\n**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.\n\n## Features\n\n### New in v0.1.1\n\n- **Batch Operations**: Perform multiple operations in a single call (follow/like/repost up to 25 items at once)\n- **Analytics \u0026 Insights**: Analyze engagement patterns, network connections, and get content strategy recommendations\n- **Content Discovery**: Find similar users, trending topics, and influential voices in your areas of interest\n- **Conversation Context**: Track conversation state across LLM interactions for better context awareness\n\n### Core Features\n\n- **Unauthenticated Mode**: Access public data without any setup - view basic profiles and manage OAuth flows\n- **Optional Authentication**: Enable full functionality with app passwords or OAuth for write operations, feeds, and private data\n- **Complete AT Protocol Integration**: Full implementation using official `@atproto/api`\n- **MCP Server Compliance**: Built with `@modelcontextprotocol/sdk` following MCP specification\n- **Type-Safe**: Written in TypeScript with strict type checking\n- **Comprehensive Tools**: 57 MCP tools for social networking operations\n- **Real-time Support**: WebSocket connections for live data streams with intelligent filtering and keyword monitoring\n- **Rate Limiting**: Built-in respect for AT Protocol rate limits\n- **Extensible**: Modular architecture for easy customization\n\n## Who Is This For?\n\n### Primary Audience: LLM Clients\n\nThis is an **MCP (Model Context Protocol) server** designed to be consumed by **LLM clients** such as:\n- Claude Desktop\n- Other MCP-compatible AI assistants\n- Custom LLM applications using the MCP SDK\n\n**How it works:**\n```\nUser → LLM Client (Claude Desktop) → MCP Protocol → This Server → AT Protocol → Bluesky\n```\n\nUsers 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.\n\n### Secondary Audience: Developers\n\nThis project is also for developers who want to:\n- **Deploy** the MCP server for their LLM clients to connect to\n- **Extend** the server with custom MCP tools and resources\n- **Contribute** to the open-source project\n\n### This Is NOT:\n\n- A direct-use REST API or SDK for application developers\n- A JavaScript/TypeScript library to import into your app\n- An end-user application\n\nIf you're building an application that needs AT Protocol functionality, you should either:\n1. Use the official `@atproto/api` package directly, OR\n2. Build an LLM-powered application that uses this MCP server through an LLM client\n\n## Installation\n\n```bash\nnpm install -g atproto-mcp\n```\n\nOr use with npx:\n\n```bash\nnpx atproto-mcp\n```\n\n## Quick Start\n\n### Option 1: Unauthenticated Mode (Recommended for most use cases)\n\n**Perfect for LLM clients that need to access public AT Protocol data:**\n\n1. **Configure your LLM client** (e.g., Claude Desktop) to launch the MCP server:\n\n   Add to your LLM client's MCP configuration:\n   ```json\n   {\n     \"mcpServers\": {\n       \"atproto\": {\n         \"command\": \"npx\",\n         \"args\": [\"atproto-mcp\"]\n       }\n     }\n   }\n   ```\n\n2. **Start your LLM client** - it will automatically launch the MCP server\n\n3. **Interact in natural language** - Ask your LLM to search posts, view profiles, etc.\n\n**What your LLM can do in unauthenticated mode:**\n- View user profiles (`get_user_profile` - works without auth, provides additional viewer-specific data when authenticated)\n- Manage OAuth authentication flows (`start_oauth_flow`, `handle_oauth_callback`, `refresh_oauth_tokens`, `revoke_oauth_tokens`)\n\n**Note:** The following features require authentication:\n- Searching posts and hashtags (`search_posts`) - **API changed in 2025 to require authentication**\n- Viewing follower/following lists (`get_followers`, `get_follows`)\n- Browsing feeds and threads (`get_thread`, `get_custom_feed`, `get_timeline`)\n- All write operations (create, like, repost, follow, etc.)\n- Resources (timeline, profile, notifications) - these are listed but will return an error when accessed without authentication\n- Prompts (content composition, reply templates) - these are listed but will return an error when accessed without authentication\n\n**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.\n\n### Option 2: Authenticated Mode (For full functionality)\n\n**Enable write operations and private data access for your LLM:**\n\n1. **Configure your LLM client** with AT Protocol credentials:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"atproto\": {\n         \"command\": \"npx\",\n         \"args\": [\"atproto-mcp\"],\n         \"env\": {\n           \"ATPROTO_IDENTIFIER\": \"your-handle.bsky.social\",\n           \"ATPROTO_PASSWORD\": \"your-app-password\"\n         }\n       }\n     }\n   }\n   ```\n\n2. **Start your LLM client** - it will launch the authenticated MCP server\n\n**What your LLM can do in authenticated mode:**\n- Create, edit, and delete posts\n- Follow/unfollow users\n- Like and repost content\n- Access personalized timelines and notifications\n- Manage lists and moderation settings\n\n## Available Tools\n\nThe server provides **57 MCP tools** across multiple categories. See the [complete API documentation](https://cameronrye.github.io/atproto-mcp/api/) for detailed information on each tool.\n\n### Public Tools (No Authentication Required)\n\n**Data Retrieval**\n- `get_user_profile` - Retrieve basic user information (ENHANCED mode: works without auth, provides additional viewer-specific data when authenticated)\n\n**OAuth Management**\n- `start_oauth_flow` - Initiate OAuth authentication\n- `handle_oauth_callback` - Complete OAuth flow\n- `refresh_oauth_tokens` - Refresh authentication tokens\n- `revoke_oauth_tokens` - Revoke OAuth tokens\n\n**Note:** As of 2025, the AT Protocol API has changed to require authentication for most endpoints that were previously public, including `search_posts`.\n\n### Private Tools (Authentication Required)\n\n**Social Operations**\n- `create_post` - Create new posts with rich text support\n- `create_rich_text_post` - Create posts with advanced formatting\n- `reply_to_post` - Reply to existing posts with threading\n- `like_post` / `unlike_post` - Like and unlike posts\n- `repost` / `unrepost` - Repost content with optional quotes\n- `follow_user` / `unfollow_user` - Follow and unfollow users\n\n**Data Retrieval**\n- `search_posts` - Search for posts and content across the network (⚠️ API changed in 2025 to require auth)\n- `get_followers` - Get follower lists\n- `get_follows` - Get following lists\n- `get_thread` - View post threads and conversations\n- `get_custom_feed` - Access custom feeds\n- `get_timeline` - Retrieve personalized timelines\n- `get_notifications` - Access notification feeds\n\n**Content Management**\n- `upload_image` / `upload_video` - Upload media content\n- `delete_post` - Remove posts\n- `update_profile` - Modify profile and settings\n- `generate_link_preview` - Generate link previews for posts\n\n**List Management**\n- `create_list` - Create user lists\n- `add_to_list` / `remove_from_list` - Manage list members\n- `get_list` - Retrieve list information\n\n**Moderation**\n- `mute_user` / `unmute_user` - Mute and unmute users\n- `block_user` / `unblock_user` - Block and unblock users\n- `report_content` / `report_user` - Report content and users\n\n**Real-time Streaming \u0026 Intelligence**\n- `start_streaming` - Start real-time event stream with filtering\n- `stop_streaming` - Stop event stream\n- `get_streaming_status` - Check streaming status\n- `get_recent_events` - Retrieve recent events from stream\n- `monitor_keywords` - Monitor firehose for specific keywords in real-time\n- `track_users` - Track activity from specific users in real-time\n\n**Batch Operations**\n- `batch_follow` - Follow multiple users at once (up to 25)\n- `batch_like` - Like multiple posts at once (up to 25)\n- `batch_repost` - Repost multiple posts at once (up to 25)\n\n**Analytics \u0026 Insights**\n- `analyze_engagement` - Analyze engagement patterns across posts\n- `analyze_network` - Analyze user's network and connections\n- `suggest_content_strategy` - Get content strategy recommendations based on performance\n- `find_influential_users` - Find influential users in a topic area\n\n**Content Discovery**\n- `discover_trending` - Discover trending topics and posts\n- `find_similar_users` - Find users similar to a given user\n- `recommend_content` - Get personalized content recommendations\n- `discover_communities` - Discover communities around topics\n\n**Composite Operations**\n- `get_user_summary` - Get complete user profile with stats and analysis\n- `get_post_context` - Get post with thread, author, and engagement data\n- `create_thread` - Create multi-post threads in one call\n\n**Rich Media**\n- `generate_alt_text` - Generate descriptive alt text for images\n- `analyze_image` - Analyze image metadata and properties\n- `extract_media_from_post` - Extract all media from posts\n\n**Enhanced Moderation**\n- `analyze_moderation_status` - Check moderation status of content\n\n## Documentation\n\nVisit our [documentation site](https://cameronrye.github.io/atproto-mcp) for:\n\n- **Getting Started Guide**\n- **API Reference**\n- **Configuration Options**\n- **Examples and Tutorials**\n- **Troubleshooting**\n\n## Authentication (Optional)\n\nThe server works perfectly without authentication for accessing public data. Authentication is only needed for write operations and private data access.\n\n### App Passwords (Recommended for Development)\n```bash\nexport ATPROTO_IDENTIFIER=\"your-handle.bsky.social\"\nexport ATPROTO_PASSWORD=\"your-app-password\"\natproto-mcp\n```\n\n### OAuth (Production)\n```bash\nexport ATPROTO_CLIENT_ID=\"your-client-id\"\nexport ATPROTO_CLIENT_SECRET=\"your-client-secret\"\natproto-mcp --auth oauth\n```\n\n## Development\n\n### Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/cameronrye/atproto-mcp.git\ncd atproto-mcp\n\n# Install dependencies (use pnpm, npm, or yarn)\npnpm install  # or: npm install\n\n# Start development server\npnpm dev      # or: npm run dev\n\n# Run tests\npnpm test     # or: npm test\n\n# Build for production\npnpm build    # or: npm run build\n```\n\n### Available Commands\n\nThis project provides cross-platform npm scripts that work on Windows, macOS, and Linux:\n\n```bash\n# Show all available commands\nnpm run help\n\n# Development\nnpm run dev              # Start development server with hot reload\nnpm run build            # Build for production\nnpm run start            # Start production server\n\n# Testing \u0026 Quality\nnpm test                 # Run tests\nnpm run test:coverage    # Run tests with coverage\nnpm run test:ui          # Run tests with interactive UI\n\n# Integration Tests (connects to real AT Protocol servers)\nnpm run test:integration\n\nnpm run lint             # Run ESLint\nnpm run lint:fix         # Fix linting issues\nnpm run format           # Format code with Prettier\nnpm run type-check       # Run TypeScript type checking\nnpm run check            # Run all quality checks\n\n# Utilities\nnpm run clean            # Clean build artifacts\nnpm run clean:all        # Clean everything including node_modules\nnpm run status           # Show project status\nnpm run ci               # Run full CI pipeline locally\n\n# Dependencies\nnpm run deps:update      # Update dependencies\nnpm run deps:audit       # Audit for security issues\n```\n\n### Cross-Platform Compatibility\n\nAll build commands work on **Windows, macOS, and Linux** without requiring additional tools.\nSimply use npm scripts on any platform (e.g., `npm run dev`, `npm test`, `npm run build`).\n\n## Testing\n\nThe project includes comprehensive test coverage:\n\n### Unit Tests\n\n```bash\n# Run all unit tests\npnpm test\n\n# Run with coverage\npnpm test:coverage\n\n# Run with interactive UI\npnpm test:ui\n```\n\n### Integration Tests\n\nComprehensive integration tests that connect to real AT Protocol servers to validate all public-facing functionality:\n\n```bash\n# Run integration tests (requires internet connection)\nnpm run test:integration\n```\n\n**What's tested:**\n- All public tools (search_posts, get_user_profile, get_followers, get_follows, get_thread, get_custom_feed)\n- DID and handle resolution\n- Pagination support\n- Error handling\n- AT Protocol specification compliance\n- Rate limiting behavior\n\n**Note:** Integration tests are opt-in and disabled by default to avoid hitting real servers during normal development. See [Integration Tests Documentation](src/__tests__/INTEGRATION_TESTS.md) for details.\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests\n5. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Acknowledgments\n\n- [AT Protocol Team](https://github.com/bluesky-social/atproto) for the excellent protocol and SDK\n- [Anthropic](https://github.com/modelcontextprotocol) for the Model Context Protocol\n- The open source community for inspiration and contributions\n\n## Support\n\n- [Documentation](https://cameronrye.github.io/atproto-mcp)\n- [Issue Tracker](https://github.com/cameronrye/atproto-mcp/issues)\n- [Discussions](https://github.com/cameronrye/atproto-mcp/discussions)\n\n## Production Deployment\n\nThe AT Protocol MCP Server is production-ready with comprehensive features for enterprise deployment:\n\n### Production Features\n- **Performance Optimization**: Connection pooling, caching, and WebSocket management\n- **Security Hardening**: Input sanitization, rate limiting, and secure credential storage\n- **Monitoring**: Health checks, metrics, and comprehensive logging\n- **Docker Support**: Multi-stage builds with security best practices\n- **Kubernetes Ready**: Helm charts and deployment manifests\n- **Observability**: Prometheus metrics and Grafana dashboards\n\n### Docker Deployment\n```bash\n# Quick start with Docker Compose\ndocker-compose up -d\n\n# Or build and run manually\ndocker build -t atproto-mcp .\ndocker run -d -p 3000:3000 \\\n  -e ATPROTO_IDENTIFIER=your.handle \\\n  -e ATPROTO_PASSWORD=your-password \\\n  atproto-mcp\n```\n\n### Environment Configuration\n```bash\n# Copy example environment file\ncp .env.example .env\n\n# Edit with your credentials\nATPROTO_IDENTIFIER=your.handle.bsky.social\nATPROTO_PASSWORD=your-app-password\nNODE_ENV=production\nLOG_LEVEL=info\n```\n\nFor detailed deployment instructions, see [DEPLOYMENT.md](DEPLOYMENT.md).\n\n## Security\n\nSecurity is a top priority for this project. Please review our security practices and policies:\n\n### Security Best Practices\n\n**Before deploying to production:**\n\n1. **Change Default Passwords**\n   - Set `GRAFANA_ADMIN_PASSWORD` environment variable (don't use default)\n   - Configure Redis password if using Redis\n   - Generate strong random keys for `SECURITY_SECRET_KEY`\n\n2. **Configure CORS Properly**\n   - Replace wildcard `*` origins with specific domains\n   - Set `CORS_ORIGINS` in your environment configuration\n   - Example: `CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com`\n\n3. **Secure Your Credentials**\n   - Never commit `.env` files to version control\n   - Use app passwords instead of main account passwords\n   - Rotate credentials regularly\n   - Use secret management systems in production (AWS Secrets Manager, HashiCorp Vault, etc.)\n\n4. **Network Security**\n   - Use HTTPS in production\n   - Configure `TRUSTED_PROXIES` if behind a reverse proxy\n   - Enable rate limiting\n   - Restrict access to internal services (Redis, Prometheus, Grafana)\n\n5. **Keep Dependencies Updated**\n   ```bash\n   pnpm audit\n   pnpm update\n   ```\n\n### Reporting Security Vulnerabilities\n\nIf you discover a security vulnerability, please review our [Security Policy](SECURITY.md) for responsible disclosure guidelines.\n\n**Do not open public issues for security vulnerabilities.** Instead, send me a message privately.\n\n### Security Features\n\n- Input validation and sanitization\n- Rate limiting and abuse prevention\n- Credential redaction in logs\n- Non-root Docker containers\n- HTTPS support for AT Protocol\n- Error sanitization to prevent information leakage\n\nFor more details, see [SECURITY.md](SECURITY.md).\n\n---\n\nMade with ❤️ by [Cameron Rye](https://rye.dev/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameronrye%2Fatproto-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcameronrye%2Fatproto-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameronrye%2Fatproto-mcp/lists"}