Skip to main content
Glama

Discord MCP Server

by tristan-kkim
README.mdβ€’16.4 kB
# Discord MCP Server [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/) [![Discord](https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white)](https://discord.com/) A comprehensive Model Context Protocol (MCP) server for Discord integration. This server exposes all Discord functionality as MCP tools, enabling seamless integration with AI assistants like OpenAI, LangChain, Cursor, and Claude. ## 🌟 Features - **Complete Discord API Coverage**: Channels, messages, threads, reactions, roles, webhooks, and more - **MCP Standard Compliance**: JSON-RPC 2.0 based standardized API - **High Performance**: Redis caching, rate limiting, automatic retries with exponential backoff - **Security First**: Mention filtering, minimal permissions, audit logging - **Production Ready**: Docker support, CI/CD pipeline, comprehensive monitoring - **Advanced AI Features**: Message summarization, activity analysis, intelligent filtering ## πŸš€ Quick Start ### Prerequisites - Python 3.12+ - Discord Bot Token - Redis 6.0+ (optional - uses in-memory cache if not available) ### Installation 1. **Clone the repository** ```bash git clone https://github.com/tristan-kkim/discord-mcp.git cd discord-mcp ``` 2. **Install dependencies** ```bash pip install -r requirements.txt ``` 3. **Configure environment** ```bash cp .env.example .env # Edit .env with your Discord Bot Token ``` 4. **Run the server** ```bash python run.py ``` ### Docker Deployment ```bash # Using Docker Compose (recommended) export DISCORD_BOT_TOKEN=your_bot_token_here docker-compose up -d # Or using Docker directly docker build -t discord-mcp . docker run -d -p 8000:8000 -e DISCORD_BOT_TOKEN=your_token discord-mcp ``` ## πŸ”§ MCP Client Integration ### Cursor IDE 1. Open Cursor Settings β†’ MCP Servers 2. Add server: `http://localhost:8000/mcp` 3. Start using Discord tools in your AI conversations ### OpenAI ChatGPT 1. Create a Custom GPT 2. Add Action with URL: `http://your-server:8000/mcp` 3. Configure with your Discord server details ### Claude Desktop Add to your MCP configuration: ```json { "mcpServers": { "discord-mcp": { "command": "uvx", "args": ["discord-mcp@latest"], "env": { "DISCORD_BOT_TOKEN": "your_bot_token" } } } } ``` ## πŸ“š Available MCP Tools ### Channel & Guild Management - `discord.list_guilds` - List all guilds the bot is member of - `discord.list_channels` - List channels in a guild - `discord.get_channel` - Get channel information - `discord.create_channel` - Create a new channel - `discord.update_channel` - Update channel settings - `discord.delete_channel` - Delete a channel ### Message Management - `discord.list_messages` - List messages in a channel - `discord.get_message` - Get specific message - `discord.send_message` - Send a message - `discord.edit_message` - Edit a message - `discord.delete_message` - Delete a message - `discord.search_messages` - Search messages with filters ### Thread Management - `discord.create_thread` - Create a thread - `discord.list_threads` - List active/archived threads - `discord.archive_thread` - Archive a thread - `discord.unarchive_thread` - Unarchive a thread ### Reactions, Pins & Webhooks - `discord.add_reaction` - Add reaction to message - `discord.remove_reaction` - Remove reaction - `discord.list_reactions` - List all reactions - `discord.pin_message` - Pin a message - `discord.unpin_message` - Unpin a message - `discord.create_webhook` - Create webhook - `discord.send_via_webhook` - Send message via webhook ### Role & Permission Management - `discord.list_roles` - List guild roles - `discord.add_role` - Assign role to member - `discord.remove_role` - Remove role from member - `discord.get_permissions` - Get permission information ### Advanced AI Features - `discord.summarize_messages` - AI-powered message summarization - `discord.rank_messages` - Intelligent message ranking - `discord.sync_since` - Delta synchronization - `discord.analyze_channel_activity` - Channel activity analysis ## πŸ” API Reference ### Endpoints - `GET /` - Server status - `GET /health` - Health check - `GET /metrics` - Prometheus-compatible metrics - `POST /mcp` - MCP JSON-RPC endpoint ### Example Usage ```bash # List available tools curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "method": "mcp_list_tools", "id": 1}' # Send a message curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "mcp_call_tool", "params": { "tool": "discord.send_message", "params": { "channel_id": "123456789", "content": "Hello from MCP!" } }, "id": 1 }' ``` ## πŸ”’ Security ### Bot Token Security - **Never expose your bot token** - Treat it like a password - **Use environment variables** - Never hardcode in source code - **Minimal permissions** - Only grant necessary Discord permissions ### Required Discord Permissions - `Send Messages` - Send messages to channels - `Read Message History` - Read message history - `Manage Messages` - Edit/delete messages - `Add Reactions` - Add reactions to messages - `Manage Channels` - Create/modify channels (if needed) - `Manage Roles` - Manage roles (if needed) ### Built-in Security Features - Automatic `@everyone` and `@here` mention filtering - Rate limiting with Discord API compliance - Audit logging for all operations - Input validation and sanitization ## πŸ“Š Monitoring & Observability ### Health Checks ```bash curl http://localhost:8000/health ``` ### Metrics ```bash curl http://localhost:8000/metrics ``` ### Logging All logs are structured JSON with fields: - `request_id` - Unique request identifier - `tool` - MCP tool being called - `channel_id` - Discord channel context - `latency_ms` - Response time - `success` - Operation success status ## πŸš€ Production Deployment ### Environment Variables | Variable | Description | Default | Required | |----------|-------------|---------|----------| | `DISCORD_BOT_TOKEN` | Discord Bot Token | - | βœ… | | `REDIS_URL` | Redis connection URL | `redis://localhost:6379` | ❌ | | `LOG_LEVEL` | Logging level | `INFO` | ❌ | | `RATE_LIMIT_ENABLED` | Enable rate limiting | `true` | ❌ | | `CACHE_TTL` | Cache TTL in seconds | `300` | ❌ | | `HOST` | Server host | `0.0.0.0` | ❌ | | `PORT` | Server port | `8000` | ❌ | ### Cloud Deployment #### Heroku ```bash heroku create your-discord-mcp heroku config:set DISCORD_BOT_TOKEN=your_token git push heroku main ``` #### Railway ```bash railway login railway init railway add redis railway deploy ``` #### AWS ECS/Fargate ```bash # Use provided Dockerfile docker build -t discord-mcp . # Deploy to ECS with environment variables ``` ## πŸ§ͺ Testing ```bash # Install test dependencies pip install pytest pytest-asyncio pytest-cov # Run unit tests pytest tests/test_tools/ # Run integration tests pytest tests/test_integration/ # Run with coverage pytest --cov=. --cov-report=html ``` ## 🀝 Contributing We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details. 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## πŸ“„ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## πŸ“š Documentation - **Wiki**: [Complete Documentation](https://github.com/tristan-kkim/discord-mcp/wiki) - **Installation Guide**: [Step-by-step Setup](https://github.com/tristan-kkim/discord-mcp/wiki/Installation-Guide) - **Quick Start**: [5-minute Setup](https://github.com/tristan-kkim/discord-mcp/wiki/Quick-Start) - **API Reference**: [Complete API Docs](https://github.com/tristan-kkim/discord-mcp/wiki/API-Endpoints) - **Security Guide**: [Best Practices](https://github.com/tristan-kkim/discord-mcp/wiki/Security-Guide) ## πŸ†˜ Support - **Issues**: [GitHub Issues](https://github.com/tristan-kkim/discord-mcp/issues) - **Discussions**: [GitHub Discussions](https://github.com/tristan-kkim/discord-mcp/discussions) ## πŸ”„ Changelog ### v1.0.0 (2024-10-29) - πŸŽ‰ Initial release - βœ… Complete Discord API integration - βœ… MCP standard compliance - βœ… Docker support - βœ… Advanced AI features - βœ… Security enhancements - βœ… Comprehensive documentation --- ## ν•œκ΅­μ–΄ λ¬Έμ„œ # Discord MCP μ„œλ²„ Discord와 ν†΅μ‹ ν•˜λŠ” Model Context Protocol(MCP) μ„œλ²„μž…λ‹ˆλ‹€. λͺ¨λ“  Discord κΈ°λŠ₯을 MCP Tool ν˜•νƒœλ‘œ λ…ΈμΆœν•˜μ—¬ OpenAI, LangChain, Cursor λ“±μ˜ MCP ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ## 🌟 μ£Όμš” κΈ°λŠ₯ - **μ™„μ „ν•œ Discord API 지원**: 채널, λ©”μ‹œμ§€, μŠ€λ ˆλ“œ, λ¦¬μ•‘μ…˜, μ—­ν• , μ›Ήν›… λ“± λͺ¨λ“  Discord κΈ°λŠ₯ - **MCP ν‘œμ€€ μ€€μˆ˜**: JSON-RPC 2.0 기반의 ν‘œμ€€ν™”λœ API - **κ³ μ„±λŠ₯**: Redis 캐싱, Rate limit 관리, μ§€μˆ˜ λ°±μ˜€ν”„ μž¬μ‹œλ„ - **λ³΄μ•ˆ μš°μ„ **: λ©˜μ…˜ 필터링, μ΅œμ†Œ κΆŒν•œ, 감사 둜그 - **ν”„λ‘œλ•μ…˜ μ€€λΉ„**: Docker 지원, CI/CD νŒŒμ΄ν”„λΌμΈ, 포괄적 λͺ¨λ‹ˆν„°λ§ - **κ³ κΈ‰ AI κΈ°λŠ₯**: λ©”μ‹œμ§€ μš”μ•½, ν™œλ™ 뢄석, μ§€λŠ₯ν˜• 필터링 ## πŸš€ λΉ λ₯Έ μ‹œμž‘ ### 사전 μš”κ΅¬μ‚¬ν•­ - Python 3.12+ - Discord Bot Token - Redis 6.0+ (선택사항 - μ—†μœΌλ©΄ λ©”λͺ¨λ¦¬ μΊμ‹œ μ‚¬μš©) ### μ„€μΉ˜ 1. **μ €μž₯μ†Œ 클둠** ```bash git clone https://github.com/tristan-kkim/discord-mcp.git cd discord-mcp ``` 2. **μ˜μ‘΄μ„± μ„€μΉ˜** ```bash pip install -r requirements.txt ``` 3. **ν™˜κ²½ μ„€μ •** ```bash cp .env.example .env # .env νŒŒμΌμ— Discord Bot Token μ„€μ • ``` 4. **μ„œλ²„ μ‹€ν–‰** ```bash python run.py ``` ### Docker 배포 ```bash # Docker Compose μ‚¬μš© (ꢌμž₯) export DISCORD_BOT_TOKEN=your_bot_token_here docker-compose up -d # λ˜λŠ” Docker 직접 μ‚¬μš© docker build -t discord-mcp . docker run -d -p 8000:8000 -e DISCORD_BOT_TOKEN=your_token discord-mcp ``` ## πŸ”§ MCP ν΄λΌμ΄μ–ΈνŠΈ 톡합 ### Cursor IDE 1. Cursor μ„€μ • β†’ MCP μ„œλ²„ μ—΄κΈ° 2. μ„œλ²„ μΆ”κ°€: `http://localhost:8000/mcp` 3. AI λŒ€ν™”μ—μ„œ Discord 도ꡬ μ‚¬μš© μ‹œμž‘ ### OpenAI ChatGPT 1. Custom GPT 생성 2. Action μΆ”κ°€: `http://your-server:8000/mcp` 3. Discord μ„œλ²„ μ„ΈλΆ€μ‚¬ν•­μœΌλ‘œ ꡬ성 ### Claude Desktop MCP ꡬ성에 μΆ”κ°€: ```json { "mcpServers": { "discord-mcp": { "command": "uvx", "args": ["discord-mcp@latest"], "env": { "DISCORD_BOT_TOKEN": "your_bot_token" } } } } ``` ## πŸ“š μ‚¬μš© κ°€λŠ₯ν•œ MCP 도ꡬ ### 채널 및 κΈΈλ“œ 관리 - `discord.list_guilds` - 봇이 μ†ν•œ λͺ¨λ“  κΈΈλ“œ λͺ©λ‘ - `discord.list_channels` - κΈΈλ“œμ˜ 채널 λͺ©λ‘ - `discord.get_channel` - 채널 정보 쑰회 - `discord.create_channel` - μƒˆ 채널 생성 - `discord.update_channel` - 채널 μ„€μ • μ—…λ°μ΄νŠΈ - `discord.delete_channel` - 채널 μ‚­μ œ ### λ©”μ‹œμ§€ 관리 - `discord.list_messages` - μ±„λ„μ˜ λ©”μ‹œμ§€ λͺ©λ‘ - `discord.get_message` - νŠΉμ • λ©”μ‹œμ§€ 쑰회 - `discord.send_message` - λ©”μ‹œμ§€ 전솑 - `discord.edit_message` - λ©”μ‹œμ§€ νŽΈμ§‘ - `discord.delete_message` - λ©”μ‹œμ§€ μ‚­μ œ - `discord.search_messages` - ν•„ν„°λ‘œ λ©”μ‹œμ§€ 검색 ### μŠ€λ ˆλ“œ 관리 - `discord.create_thread` - μŠ€λ ˆλ“œ 생성 - `discord.list_threads` - ν™œμ„±/μ•„μΉ΄μ΄λΈŒλœ μŠ€λ ˆλ“œ λͺ©λ‘ - `discord.archive_thread` - μŠ€λ ˆλ“œ μ•„μΉ΄μ΄λΈŒ - `discord.unarchive_thread` - μŠ€λ ˆλ“œ μ–Έμ•„μΉ΄μ΄λΈŒ ### λ¦¬μ•‘μ…˜, ν•€ 및 μ›Ήν›… - `discord.add_reaction` - λ©”μ‹œμ§€μ— λ¦¬μ•‘μ…˜ μΆ”κ°€ - `discord.remove_reaction` - λ¦¬μ•‘μ…˜ 제거 - `discord.list_reactions` - λͺ¨λ“  λ¦¬μ•‘μ…˜ λͺ©λ‘ - `discord.pin_message` - λ©”μ‹œμ§€ κ³ μ • - `discord.unpin_message` - λ©”μ‹œμ§€ κ³ μ • ν•΄μ œ - `discord.create_webhook` - μ›Ήν›… 생성 - `discord.send_via_webhook` - μ›Ήν›…μœΌλ‘œ λ©”μ‹œμ§€ 전솑 ### μ—­ν•  및 κΆŒν•œ 관리 - `discord.list_roles` - κΈΈλ“œ μ—­ν•  λͺ©λ‘ - `discord.add_role` - λ©€λ²„μ—κ²Œ μ—­ν•  λΆ€μ—¬ - `discord.remove_role` - λ©€λ²„μ—μ„œ μ—­ν•  제거 - `discord.get_permissions` - κΆŒν•œ 정보 쑰회 ### κ³ κΈ‰ AI κΈ°λŠ₯ - `discord.summarize_messages` - AI 기반 λ©”μ‹œμ§€ μš”μ•½ - `discord.rank_messages` - μ§€λŠ₯ν˜• λ©”μ‹œμ§€ μˆœμœ„ - `discord.sync_since` - 델타 동기화 - `discord.analyze_channel_activity` - 채널 ν™œλ™ 뢄석 ## πŸ”’ λ³΄μ•ˆ ### Bot Token λ³΄μ•ˆ - **Bot 토큰을 μ ˆλŒ€ λ…ΈμΆœν•˜μ§€ λ§ˆμ„Έμš”** - λΉ„λ°€λ²ˆν˜Έμ²˜λŸΌ μ·¨κΈ‰ - **ν™˜κ²½λ³€μˆ˜ μ‚¬μš©** - μ†ŒμŠ€μ½”λ“œμ— ν•˜λ“œμ½”λ”© κΈˆμ§€ - **μ΅œμ†Œ κΆŒν•œ** - ν•„μš”ν•œ Discord κΆŒν•œλ§Œ λΆ€μ—¬ ### ν•„μš”ν•œ Discord κΆŒν•œ - `Send Messages` - 채널에 λ©”μ‹œμ§€ 전솑 - `Read Message History` - λ©”μ‹œμ§€ 기둝 읽기 - `Manage Messages` - λ©”μ‹œμ§€ νŽΈμ§‘/μ‚­μ œ - `Add Reactions` - λ©”μ‹œμ§€μ— λ¦¬μ•‘μ…˜ μΆ”κ°€ - `Manage Channels` - 채널 생성/μˆ˜μ • (ν•„μš”μ‹œ) - `Manage Roles` - μ—­ν•  관리 (ν•„μš”μ‹œ) ### λ‚΄μž₯ λ³΄μ•ˆ κΈ°λŠ₯ - `@everyone` 및 `@here` λ©˜μ…˜ μžλ™ 필터링 - Discord API μ€€μˆ˜ Rate limiting - λͺ¨λ“  μž‘μ—…μ— λŒ€ν•œ 감사 둜그 - μž…λ ₯ 검증 및 μ •μ œ ## πŸ“Š λͺ¨λ‹ˆν„°λ§ 및 κ΄€μ°°μ„± ### ν—¬μŠ€μ²΄ν¬ ```bash curl http://localhost:8000/health ``` ### λ©”νŠΈλ¦­ ```bash curl http://localhost:8000/metrics ``` ### λ‘œκΉ… λͺ¨λ“  λ‘œκ·ΈλŠ” λ‹€μŒ ν•„λ“œκ°€ ν¬ν•¨λœ κ΅¬μ‘°ν™”λœ JSONμž…λ‹ˆλ‹€: - `request_id` - 고유 μš”μ²­ μ‹λ³„μž - `tool` - ν˜ΈμΆœλ˜λŠ” MCP 도ꡬ - `channel_id` - Discord 채널 μ»¨ν…μŠ€νŠΈ - `latency_ms` - 응닡 μ‹œκ°„ - `success` - μž‘μ—… 성곡 μƒνƒœ ## πŸš€ ν”„λ‘œλ•μ…˜ 배포 ### ν™˜κ²½ λ³€μˆ˜ | λ³€μˆ˜ | μ„€λͺ… | κΈ°λ³Έκ°’ | ν•„μˆ˜ | |------|------|--------|------| | `DISCORD_BOT_TOKEN` | Discord Bot Token | - | βœ… | | `REDIS_URL` | Redis μ—°κ²° URL | `redis://localhost:6379` | ❌ | | `LOG_LEVEL` | λ‘œκΉ… 레벨 | `INFO` | ❌ | | `RATE_LIMIT_ENABLED` | Rate limiting ν™œμ„±ν™” | `true` | ❌ | | `CACHE_TTL` | μΊμ‹œ TTL (초) | `300` | ❌ | | `HOST` | μ„œλ²„ 호슀트 | `0.0.0.0` | ❌ | | `PORT` | μ„œλ²„ 포트 | `8000` | ❌ | ### ν΄λΌμš°λ“œ 배포 #### Heroku ```bash heroku create your-discord-mcp heroku config:set DISCORD_BOT_TOKEN=your_token git push heroku main ``` #### Railway ```bash railway login railway init railway add redis railway deploy ``` #### AWS ECS/Fargate ```bash # 제곡된 Dockerfile μ‚¬μš© docker build -t discord-mcp . # ν™˜κ²½ λ³€μˆ˜μ™€ ν•¨κ»˜ ECS에 배포 ``` ## πŸ§ͺ ν…ŒμŠ€νŠΈ ```bash # ν…ŒμŠ€νŠΈ μ˜μ‘΄μ„± μ„€μΉ˜ pip install pytest pytest-asyncio pytest-cov # λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ‹€ν–‰ pytest tests/test_tools/ # 톡합 ν…ŒμŠ€νŠΈ μ‹€ν–‰ pytest tests/test_integration/ # 컀버리지와 ν•¨κ»˜ μ‹€ν–‰ pytest --cov=. --cov-report=html ``` ## 🀝 κΈ°μ—¬ν•˜κΈ° κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€! μžμ„Έν•œ λ‚΄μš©μ€ [κΈ°μ—¬ κ°€μ΄λ“œ](CONTRIBUTING.md)λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. 1. μ €μž₯μ†Œ 포크 2. κΈ°λŠ₯ 브랜치 생성 (`git checkout -b feature/amazing-feature`) 3. 변경사항 컀밋 (`git commit -m 'Add amazing feature'`) 4. λΈŒλžœμΉ˜μ— ν‘Έμ‹œ (`git push origin feature/amazing-feature`) 5. Pull Request μ—΄κΈ° ## πŸ“„ λΌμ΄μ„ μŠ€ 이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ [LICENSE](LICENSE) νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”. ## πŸ“š λ¬Έμ„œ - **Wiki**: [μ™„μ „ν•œ λ¬Έμ„œ](https://github.com/tristan-kkim/discord-mcp/wiki) - **μ„€μΉ˜ κ°€μ΄λ“œ**: [단계별 μ„€μ •](https://github.com/tristan-kkim/discord-mcp/wiki/Installation-Guide) - **λΉ λ₯Έ μ‹œμž‘**: [5λΆ„ μ„€μ •](https://github.com/tristan-kkim/discord-mcp/wiki/Quick-Start) - **API μ°Έμ‘°**: [μ™„μ „ν•œ API λ¬Έμ„œ](https://github.com/tristan-kkim/discord-mcp/wiki/API-Endpoints) - **λ³΄μ•ˆ κ°€μ΄λ“œ**: [λͺ¨λ²” 사둀](https://github.com/tristan-kkim/discord-mcp/wiki/Security-Guide) ## πŸ†˜ 지원 - **이슈**: [GitHub Issues](https://github.com/tristan-kkim/discord-mcp/issues) - **ν† λ‘ **: [GitHub Discussions](https://github.com/tristan-kkim/discord-mcp/discussions) ## πŸ”„ λ³€κ²½ 둜그 ### v1.0.0 (2024-10-29) - πŸŽ‰ 초기 릴리즈 - βœ… μ™„μ „ν•œ Discord API 톡합 - βœ… MCP ν‘œμ€€ μ€€μˆ˜ - βœ… Docker 지원 - βœ… κ³ κΈ‰ AI κΈ°λŠ₯ - βœ… λ³΄μ•ˆ κ°•ν™” - βœ… 포괄적 λ¬Έμ„œν™”

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tristan-kkim/discord-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server