Provides tools for interacting with Discord to send and manage messages, read channel history, list servers and channels, and search for messages, featuring intelligent name resolution for channels and users.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Discord MCP ServerSend 'The meeting is starting now' to the general channel"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Discord MCP Server
A streamlined Model Context Protocol server for Discord with smart target resolution. No more hallucinated IDs!
Features
π― Smart Target Resolution: Use channel names, usernames, or IDs - no need to memorize snowflakes
π§ LLM-Friendly: Reduces hallucination by accepting human-readable names
π¬ Automatic Mention Processing: Converts @username to proper Discord
<@id>format automaticallyπ¦ Streamlined API: Only 7 essential tools, no redundancy
πΎ Smart Caching: Automatically caches nameβID mappings
π Ambiguity Handling: Detects when channel names collide and guides to use
ServerName/channelformat
Tools
send_message - Send to channels or DMs (accepts names or IDs)
edit_message - Edit or delete messages (empty content = delete)
read_messages - Read channel history + channel info
list_servers - List all accessible servers
list_channels - List channels in a server
search_messages - Search for messages in a channel
add_reaction - React to messages with emoji
Setup
1. Create a Discord Bot
Go to Discord Developer Portal
Click "New Application" and give it a name
Go to "Bot" section and click "Add Bot"
Enable these Privileged Gateway Intents:
Message Content Intent
Server Members Intent
Presence Intent (optional)
Click "Reset Token" and copy your bot token
Go to "OAuth2" β "URL Generator"
Select scopes:
botSelect permissions:
Send Messages,Read Message History,Add Reactions,Manage Messages
Use the generated URL to invite the bot to your server
2. Install Dependencies
pip install -r requirements.txt3. Set Environment Variable
export DISCORD_TOKEN="your_bot_token_here"Or on Windows:
set DISCORD_TOKEN=your_bot_token_here4. Run the Server
python path/to/discord-mcpUsage Examples
With Claude Desktop (config)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"discord": {
"command": "python",
"args": ["/path/to/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your_bot_token_here"
}
}
}
}Example Prompts for Claude
Send a message:
Send "Hello everyone!" to the general channel
Send "Meeting in 5 mins" to Work Server/announcementsRead messages:
Read the last 20 messages from announcements
Read messages from Gaming Server/generalSearch:
Search for messages containing "meeting" in the team-chat channel
Search for "bug report" in Dev Team/bugsEdit/Delete:
Edit message 123456789 to say "Updated: Meeting at 3pm"
Delete message 987654321Smart Target Resolution
The server automatically handles both names and IDs:
Input Type | Example | How It Works |
Channel name |
| Searches for channel by name |
Server/Channel |
| Searches in specific server (solves ambiguity) |
Channel with # |
| Strips # and searches by name |
Username |
| Searches for user by username |
Username with @ |
| Strips @ and searches by username |
Snowflake ID |
| Uses ID directly (17-20 digits) |
Handling Ambiguous Channel Names
Since most Discord servers have channels with common names like "general" or "announcements", the server handles ambiguity intelligently:
If a channel name is unique: Just use the name
Send "Hello!" to announcementsIf a channel name appears in multiple servers: The server will tell you which servers have that channel and ask you to specify:
Error: Multiple channels named 'general' found:
β’ My Gaming Server β #general
β’ Work Team β #general
β’ Friend Group β #general
Please specify format: 'ServerName/channel' or use channel IDUse the ServerName/channel format:
Send "Hello team!" to Work Team/general
Read the last 10 messages from My Gaming Server/generalThis completely eliminates the need for the AI to remember or hallucinate long channel IDs!
Automatic User Mention Processing
Discord bots can only mention users using the <@user_id> format, but LLMs naturally want to use @username. The server automatically handles bidirectional conversion:
When SENDING messages (AI β Discord):
AI writes: "Hey @john, can you check this?"
Discord receives: "Hey <@789012345678901234>, can you check this?"When READING messages (Discord β AI):
Discord has: "Meeting with <@789012345678901234> at 3pm"
AI sees: "Meeting with @john at 3pm"Sending - Handles:
@usernameβ Looks up user and converts to<@id>@123456789β Recognizes as ID and formats to<@123456789>123456789β Detects raw IDs and converts to<@123456789>if valid userNon-existent users β Left as plain text (won't create broken mentions)
Reading - Handles:
<@123456789>β Fetches user and converts to@username<@!123456789>β Handles nickname format, converts to@usernameUnknown user IDs β Shows as
@[123456789](fallback format)
This bidirectional conversion means:
β The AI can write natural messages with @mentions
β The AI can read and understand who's being mentioned in chat history
β The AI can quote or reference previous mentions correctly
β No confusion with long user IDs
Caching
The server caches nameβID mappings to improve performance and reduce API calls. Cache is maintained in memory during runtime.
Architecture
discord_mcp_server.py
β
ββ parse_target() - Parses "ServerName/channel" format
ββ process_mentions() - Converts @username and raw IDs to <@id> format (AI β Discord)
ββ humanize_mentions() - Converts <@id> back to @username format (Discord β AI)
ββ standardize_server() - Resolves server names/IDs to Guild objects
ββ standardize_channel() - Resolves channel names/IDs to Channel objects
β Returns (channel, error) for ambiguity handling
ββ standardize_user() - Resolves usernames/IDs to User objects
β
ββ MCP Tools:
ββ send_message - Uses parse_target(), process_mentions(), standardize functions
ββ edit_message - Uses process_mentions() + direct message ID lookup
ββ read_messages - Uses parse_target(), humanize_mentions(), standardize functions
ββ list_servers - No resolution needed
ββ list_channels - Uses standardize_server()
ββ search_messages - Uses parse_target(), humanize_mentions(), standardize functions
ββ add_reaction - Direct message ID lookupError Handling
The server provides clear error messages:
"Could not find channel 'xyz'" - Channel name/ID not found
"Could not find server 'xyz'" - Server name/ID not found
"Could not find message with ID xyz" - Message doesn't exist or bot lacks access
Permissions
Ensure your bot has these permissions:
Read Messages/View Channels
Send Messages
Read Message History
Add Reactions
Manage Messages (for editing/deleting)
Troubleshooting
Bot not responding:
Check that
DISCORD_TOKENis set correctlyVerify bot is invited to the server
Ensure bot has necessary permissions
"Could not find channel" errors:
Check channel name spelling
Verify bot has access to the channel
Try using the channel ID instead
Message edit/delete fails:
Bot can only edit/delete its own messages
Ensure the message ID is correct
Check bot has "Manage Messages" permission
License
APACHE LICENSE 2.0 - feel free to modify and use as needed!