Skip to main content
Glama
README.mdโ€ข6.34 kB
# Discord MCP Server with Bearer Token Authentication A secure Discord MCP (Model Context Protocol) server that provides Discord integration tools with JWT Bearer Token authentication. ## ๐Ÿ” Security Features - **Bearer Token Authentication** using JWT tokens - **Discord token protection** - tokens are embedded in JWT claims, not passed as parameters - **Audit logging** - all tool calls are logged with user information - **Temporary bot connections** - no persistent Discord bot instances - **RSA key pair encryption** for token signing and verification ## ๐Ÿ“‹ Available Tools | Tool | Description | |------|-------------| | `send_message` | Send messages to Discord channels | | `get_messages` | Fetch recent messages from channels | | `get_channel_info` | Get channel metadata and information | | `search_messages` | Search for messages containing keywords | | `moderate_content` | Delete specific messages from channels | ## ๐Ÿš€ Setup and Installation ### Prerequisites - Python 3.8+ - Discord bot token with appropriate permissions - Virtual environment (recommended) ### Installation 1. **Install dependencies** (already installed in your venv): ```bash pip install discord.py fastapi fastmcp uvicorn python-dotenv PyJWT ``` 2. **Create a Discord bot** and get your bot token: - Go to [Discord Developer Portal](https://discord.com/developers/applications) - Create a new application and bot - Copy the bot token - Invite the bot to your server with necessary permissions 3. **Set up environment variables** (optional): ```bash # Create .env file echo "DISCORD_TOKEN=your_discord_bot_token_here" > .env ``` ## ๐Ÿƒโ€โ™‚๏ธ Running the Server ### Start the Server ```bash python app.py ``` The server will start on `http://localhost:8000` and display: - Available tools - Authentication information - Token generation instructions ### Generate Access Token Replace `YOUR_DISCORD_TOKEN` with your actual Discord bot token: ```bash python -c "from app import generate_access_token; print(generate_access_token('YOUR_DISCORD_TOKEN'))" ``` ## ๐Ÿ”ง Using the Server ### Authentication All requests must include a JWT Bearer token in the Authorization header: ``` Authorization: Bearer <your_jwt_token> ``` ### Making Tool Calls **Endpoint**: `POST /mcp/v1/tools/invoke` **Headers**: ``` Authorization: Bearer <your_jwt_token> Content-Type: application/json ``` **Request Format**: ```json { "method": "tool_name", "params": { "parameter1": "value1", "parameter2": "value2" } } ``` ### Examples #### Get Channel Information ```bash curl -X POST http://localhost:8000/mcp/v1/tools/invoke \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "method": "get_channel_info", "params": { "channel_id": "1234567890123456789" } }' ``` #### Send a Message ```bash curl -X POST http://localhost:8000/mcp/v1/tools/invoke \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "method": "send_message", "params": { "channel_id": "1234567890123456789", "message": "Hello from MCP server!" } }' ``` #### Search Messages ```bash curl -X POST http://localhost:8000/mcp/v1/tools/invoke \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "method": "search_messages", "params": { "channel_id": "1234567890123456789", "query": "hello", "limit": 10 } }' ``` ## ๐Ÿงช Testing Use the provided test script to verify your setup: ```bash # Update YOUR_DISCORD_TOKEN in test_server.py first python test_server.py ``` ## ๐Ÿ“Š Monitoring and Logs - **Audit logs** are written to `audit.log` - **Server logs** are displayed in the console - Each tool call is logged with user ID, parameters, and success/failure status ## ๐Ÿ—๏ธ Architecture ### Authentication Flow 1. **Token Generation**: Discord token is embedded in JWT claims 2. **Request Authentication**: JWT is validated using RSA public key 3. **Token Extraction**: Discord token is extracted from validated JWT 4. **Tool Execution**: Temporary Discord bot connection is created 5. **Cleanup**: Bot connection is properly closed after operation ### Security Benefits - **No token exposure**: Discord tokens never appear in request parameters - **Centralized auth**: Single authentication point for all tools - **Audit trail**: Complete logging of all authenticated operations - **Temporary connections**: No persistent bot instances reduce attack surface ## ๐Ÿ”’ Security Considerations ### Development vs Production - **Development**: Uses generated RSA key pairs (current setup) - **Production**: Should use external OAuth 2.1 provider or IdP ### Token Security - **JWT tokens expire** after 1 hour (configurable) - **Discord tokens** are embedded in JWT claims, not visible in requests - **RSA encryption** ensures token integrity ### Best Practices 1. **Rotate tokens regularly** in production 2. **Use HTTPS** for all communications 3. **Store Discord tokens securely** (environment variables, secrets manager) 4. **Monitor audit logs** for unusual activity 5. **Implement rate limiting** if needed ## ๐Ÿค Integration with MCP Clients This server follows the MCP specification and can be used with: - **Claude Desktop** with MCP integration - **Custom MCP clients** - **API testing tools** (Postman, curl, etc.) ## ๐Ÿ“š References - [FastMCP Documentation](https://gofastmcp.com) - [FastMCP Bearer Token Auth](https://gofastmcp.com/servers/auth/bearer) - [Discord.py Documentation](https://discordpy.readthedocs.io/) - [MCP Specification](https://spec.modelcontextprotocol.io/) ## ๐Ÿ› Troubleshooting ### Common Issues 1. **"No Discord token found in authentication"** - Verify your JWT token contains the Discord token in claims - Check token generation with correct Discord bot token 2. **"Bot doesn't have permission"** - Ensure Discord bot has necessary permissions in the server - Check channel permissions specifically 3. **"Server not reachable"** - Verify server is running on localhost:8000 - Check for port conflicts 4. **"Invalid token"** - Token may be expired (1 hour default) - Generate a new token - Verify token format in Authorization header

Latest Blog Posts

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/henishshah18/Discord_MCP_Server'

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