MCP-Discord
MCP-Discord is a server enabling AI assistants to interact with Discord, offering comprehensive platform management capabilities:
Login & Server Info: Login to Discord and retrieve server information
Channel Management: Send messages, create/delete text channels, read/delete messages
Forum Management: Retrieve forum channels, create/delete/reply to forum posts
Reactions: Add/remove single or multiple reactions to messages
Webhook Management: Create, edit, delete, and use webhooks to send messages
Custom Permissions: Configurable transport methods and permissions for integration
Enables interaction with Discord servers through a bot, providing tools for sending messages, managing channels, creating and managing forum posts, reading channel messages, and adding/removing message reactions.
Click on "Deploy 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., "@MCP-Discord send a welcome message 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.
MCP-Discord
A Discord MCP (Model Context Protocol) server that enables AI assistants to interact with the Discord platform.
Overview
MCP-Discord provides the following Discord-related functionalities:
Login to Discord bot
List servers the bot is a member of
Get server information
List members and inspect member details
List, create, edit, delete, assign, and remove roles
Search messages in a server
Read, edit, and delete channel messages
Send messages to specified channels
Retrieve forum channel lists
Create, update, delete, and reply to forum posts
List forum threads and manage forum tags
Create, edit, and delete text, forum, voice channels, and categories
Set and remove channel permission overrides
Add/remove message reactions
Create/edit/delete/use webhooks
Related MCP server: MCP-Discord
Table of Contents
Prerequisites
Node.js (v18.0.0 or higher)
npm (v7.0.0 or higher)
A Discord bot with appropriate permissions
Bot token (obtainable from the Discord Developer Portal)
Message Content Intent enabled
Server Members Intent enabled
Presence Intent enabled
Permissions required in your Discord server:
Easiest Setup
Administrator (Recommended for quick setup and full functionality)
Or, select only the required permissions:
Send Messages
Create Public Threads
Send Messages in Threads
Manage Messages
Manage Threads
Manage Channels
Manage Webhooks
Manage Roles
Add Reactions
View Channel
Add your Discord bot to your server
To add your Discord bot to your server, use one of the following invite links (replace
INSERT_CLIENT_ID_HEREwith your bot's client ID):Administrator (full access): https://discord.com/oauth2/authorize?client_id=INSERT_CLIENT_ID_HERE&scope=bot&permissions=8
Custom permissions (minimum required): https://discord.com/oauth2/authorize?client_id=INSERT_CLIENT_ID_HERE&scope=bot&permissions=52076489808
Note:
According to Discord's security model, a bot can only access information from servers it has been explicitly added to.
If you want to use this MCP server to access a specific Discord server, you must add the bot to that server first.
Use the invite link below to add the bot to your target server.
Installation
Installing via NPM
Set DISCORD_TOKEN in the environment, then start the server:
export DISCORD_TOKEN=your_discord_bot_token
npx mcp-discordOn Windows PowerShell:
$env:DISCORD_TOKEN="your_discord_bot_token"
npx mcp-discordThe server reads that variable itself. An environment variable is still visible to some local readers; this form keeps the token out of the process argument list.
--config still accepts a raw token or JSON with DISCORD_TOKEN. The value is part of the process arguments, so tools that can read the process list will show it. Prefer the environment variable above.
For more details, you can check out the NPM Package.
Installing via Smithery
To install mcp-discord automatically via Smithery
Installing via Docker
You can run mcp-discord using Docker. The Docker images are automatically built and published to Docker Hub.
Docker Hub Repository: barryy625/mcp-discord
Docker uses the streamable HTTP server by default via build/app.js.
# Pull the latest image
docker pull barryy625/mcp-discord:latest
# Run HTTP server on port 8080
docker run -e DISCORD_TOKEN=your_discord_bot_token -p 8080:8080 barryy625/mcp-discord:latest
# Override the listening port if needed
docker run -e DISCORD_TOKEN=your_discord_bot_token -p 3000:3000 barryy625/mcp-discord:latest --transport http --port 3000Available Tags:
latest- Latest stable version from main branchv1.3.8, etc. - Specific version releases
Manual Installation
# Clone the repository
git clone https://github.com/barryyip0625/mcp-discord.git
cd mcp-discord
# Install dependencies
npm install
# Compile TypeScript
npm run buildConfiguration
A Discord bot token is required for proper operation. The server supports two transport methods: stdio and streamable HTTP.
Transport Methods
stdio (Default)
Traditional stdio transport for basic usage
Suitable for simple integrations
streamable HTTP
HTTP-based transport for more advanced scenarios
Supports stateless operation
Configurable port number
Configuration Options
You can provide configuration in two ways:
Environment variables (preferred). The token stays out of the process argument list:
export DISCORD_TOKEN=your_discord_bot_token
node build/index.jsCommand line arguments. The value after
--configis visible to process listings and monitoring tools that can read arguments:
# For stdio transport (default)
node build/index.js --config "your_discord_bot_token"
# For streamable HTTP transport
node build/app.js --transport http --port 3000 --config "your_discord_bot_token"Usage with Claude/Cursor
1. Use Stdio Transport with Claude/Cursor
Use build/index.js when your MCP client expects a command-based stdio server.
Claude Desktop / Claude Code
{
"mcpServers": {
"discord": {
"command": "node",
"args": [
"path/to/mcp-discord/build/index.js"
],
"env": {
"DISCORD_TOKEN": "your_discord_bot_token"
}
}
}
}Cursor
{
"mcpServers": {
"discord": {
"command": "node",
"args": [
"path/to/mcp-discord/build/index.js"
],
"env": {
"DISCORD_TOKEN": "your_discord_bot_token"
}
}
}
}This is the recommended setup for local command-based MCP clients.
2. Self-Host the Streamable HTTP Server
Use build/app.js when you want to run mcp-discord as an HTTP MCP server.
Run with Node.js
DISCORD_TOKEN=your_discord_bot_token node build/app.js --transport http --port 3000On Windows PowerShell:
$env:DISCORD_TOKEN="your_discord_bot_token"
node build/app.js --transport http --port 3000Run with Docker
docker run -e DISCORD_TOKEN=your_discord_bot_token -p 3000:3000 barryy625/mcp-discord:latest --transport http --port 3000Once started, the MCP HTTP endpoint is:
http://localhost:3000/mcp3. Connect to a Hosted HTTP MCP Server
If you already host mcp-discord elsewhere, point your MCP client at the server's /mcp endpoint instead of launching build/app.js as a command.
Example endpoint:
https://your-server.example.com/mcpImportant notes:
build/app.jsstarts an HTTP server. It does not speak stdio.build/index.jsis the correct entrypoint for command-based stdio MCP clients.For hosted HTTP usage, configure your MCP client to connect to the HTTP endpoint URL provided by your deployment.
The exact HTTP-client configuration format depends on the MCP client you use.
Tools Documentation
Basic Functions
discord_login: Login to Discord using the configured tokendiscord_list_servers: List all Discord servers the bot is a member ofdiscord_send: Send a message to a specified channeldiscord_get_server_info: Get Discord server information
Channel Management
discord_create_text_channel: Create a text channeldiscord_create_forum_channel: Create a forum channeldiscord_create_voice_channel: Create a voice channeldiscord_edit_channel: Edit a channel name, topic, parent category, or positiondiscord_delete_channel: Delete a channeldiscord_create_category: Create a channel categorydiscord_edit_category: Edit a channel categorydiscord_delete_category: Delete a channel categorydiscord_set_channel_permissions: Set permission overrides for a role or user on a channel/categorydiscord_remove_channel_permissions: Remove permission overrides from a channel/category
Forum Functions
discord_get_forum_channels: Get a list of forum channelsdiscord_create_forum_post: Create a forum post (optionally pinned to the top of the channel)discord_get_forum_post: Get a forum postdiscord_list_forum_threads: List active and archived threads in a forum channeldiscord_reply_to_forum: Reply to a forum postdiscord_get_forum_tags: Get all available tags for a forum channeldiscord_set_forum_tags: Replace the available tags for a forum channeldiscord_update_forum_post: Update a forum post's title, tags, archived state, locked state, or pinned statediscord_delete_forum_post: Delete a forum post
Messages and Reactions
discord_search_messages: Search messages in a serverdiscord_read_messages: Read channel messages (supportsbefore,after,aroundparams — accepts snowflake IDs or ISO 8601 dates like"2025-03-01T00:00:00Z")discord_edit_message: Edit a bot-authored messagediscord_add_reaction: Add a reaction to a messagediscord_add_multiple_reactions: Add multiple reactions to a messagediscord_remove_reaction: Remove a reaction from a messagediscord_delete_message: Delete a specific message from a channeldiscord_pin_message: Pin a message to its channel (max 50 pins per channel)discord_unpin_message: Remove a message from its channel's pinned messagesdiscord_list_pinned_messages: List a channel's pinned messages, newest pin first
Webhook Management
discord_create_webhook: Creates a new webhook for a Discord channeldiscord_send_webhook_message: Sends a message to a Discord channel using a webhookdiscord_edit_webhook: Edits an existing webhook for a Discord channeldiscord_delete_webhook: Deletes an existing webhook for a Discord channel
Role Management
discord_list_roles: List all roles in a serverdiscord_create_role: Create a role with color, hoist, mentionable, and permission optionsdiscord_edit_role: Edit an existing rolediscord_delete_role: Delete a rolediscord_assign_role: Assign a role to a memberdiscord_remove_role: Remove a role from a member
Member Management
discord_list_members: List members in a server with rolesdiscord_get_member: Get detailed information about a specific member
Development
# Development mode
npm run devLicense
Available Tools
46 toolsdiscord_add_multiple_reactionsB
Adds multiple emoji reactions to a Discord message at once
Inputs: emojis (required), channelId (required), messageId (required).
discord_add_reactionC
Adds an emoji reaction to a specific Discord message
Inputs: emoji (required), channelId (required), messageId (required).
discord_assign_roleC
Assigns a role to a member in a Discord server
Inputs: roleId (required), userId (required), guildId (required), reason.
discord_create_categoryC
Creates a new category in a Discord server.
Inputs: name (required), guildId (required), reason, position.
discord_create_forum_channelA
Creates a new forum channel in a Discord server, optionally under a category
Inputs: name (required), guildId (required), topic, categoryId.
discord_create_forum_postB
Creates a new post in a Discord forum channel with optional tags
Inputs: title (required), content (required), forumChannelId (required), tags, +1 more.
discord_create_roleB
Creates a new role in a Discord server
Inputs: name (required), guildId (required), color, hoist, +3 more.
discord_create_text_channelA
Creates a new text channel in a Discord server with an optional topic and parent category
Inputs: guildId (required), channelName (required), topic, categoryId.
discord_create_voice_channelB
Creates a new voice channel in a Discord server with an optional parent category
Inputs: guildId (required), channelName (required), reason, userLimit, +1 more.
discord_create_webhookC
Creates a new webhook for a Discord channel
Inputs: name (required), channelId (required), avatar, reason.
discord_delete_categoryB
Deletes a Discord category by ID.
Inputs: categoryId (required), reason.
discord_delete_channelB
Deletes a Discord channel with an optional reason
Inputs: channelId (required), reason.
discord_delete_forum_postC
Deletes a forum post or thread with an optional reason
Inputs: threadId (required), reason.
discord_delete_messageB
Deletes a specific message from a Discord text channel
Inputs: channelId (required), messageId (required), reason.
discord_delete_roleA
Deletes a role from a Discord server
Inputs: roleId (required), guildId (required), reason.
discord_delete_webhookC
Deletes an existing webhook for a Discord channel
Inputs: webhookId (required), reason, webhookToken.
discord_edit_categoryB
Edits an existing Discord category (name and position).
Inputs: categoryId (required), name, reason, position.
discord_edit_channelA
Edits a Discord channel's name, topic, parent category, or position
Inputs: channelId (required), name, topic, reason, +2 more.
discord_edit_messageA
Edits a message previously sent by the bot. Only messages authored by the bot can be edited.
Inputs: content (required), channelId (required), messageId (required).
discord_edit_roleB
Edits an existing role in a Discord server
Inputs: roleId (required), guildId (required), name, color, +5 more.
discord_edit_webhookC
Edits an existing webhook for a Discord channel
Inputs: webhookId (required), name, avatar, reason, +2 more.
discord_get_forum_channelsA
Lists all forum channels in a specified Discord server (guild)
Inputs: guildId (required).
discord_get_forum_postB
Retrieves details about a forum post including its messages
Inputs: threadId (required).
discord_get_forum_tagsA
Gets all available tags for a Discord forum channel, including tag IDs, names, and emoji
Inputs: forumChannelId (required).
discord_get_memberB
Gets detailed information about a specific member in a Discord server
Inputs: userId (required), guildId (required).
discord_get_reaction_usersA
Lists the users who reacted with a specific emoji to a Discord message. Uses REST fetch and does not require Gateway intents. Returns up to 100 users per call.
Inputs: emoji (required), channelId (required), messageId (required), limit.
discord_get_server_infoB
Retrieves detailed information about a Discord server including channels and member count
Inputs: guildId (required).
discord_list_forum_threadsA
Lists all threads (posts) in a Discord forum channel, including both active and archived threads
Inputs: forumChannelId (required), limit, includeArchived.
discord_list_membersB
Lists members in a Discord server with their roles
Inputs: guildId (required), after, limit.
discord_list_pinned_messagesA
Lists the pinned messages of a channel, newest pin first.
Inputs: channelId (required), limit.
discord_list_rolesA
Lists all roles in a Discord server with their properties
Inputs: guildId (required).
discord_list_serversA
Lists all Discord servers the bot is a member of
Inputs: no named parameters.
discord_loginB
Logs in to Discord using the configured token
Inputs: token.
discord_pin_messageB
Pins a message to its channel. A channel can hold at most 50 pinned messages.
Inputs: channelId (required), messageId (required), reason.
discord_read_messagesA
Retrieves messages from a Discord text channel. Supports date-based filtering via before/after/around params (accepts snowflake IDs or ISO 8601 dates).
Inputs: channelId (required), after, limit, around, +1 more.
discord_remove_channel_permissionsA
Removes all permission overrides for a role or user on a channel or category
Inputs: roleId (required), channelId (required), reason.
discord_remove_reactionB
Removes a specific emoji reaction from a Discord message
Inputs: emoji (required), channelId (required), messageId (required), userId.
discord_remove_roleA
Removes a role from a member in a Discord server
Inputs: roleId (required), userId (required), guildId (required), reason.
discord_reply_to_forumB
Adds a reply to an existing forum post or thread
Inputs: message (required), threadId (required).
discord_search_messagesC
Searches for messages in a Discord server
Inputs: guildId (required), has, limit, maxId, +10 more.
discord_sendA
Sends a message to a specified Discord text channel. Optionally reply to another message by providing its message ID.
Inputs: message (required), channelId (required), replyToMessageId.
discord_send_webhook_messageB
Sends a message to a Discord channel using a webhook
Inputs: content (required), webhookId (required), webhookToken (required), threadId, +2 more.
discord_set_channel_permissionsA
Sets permission overrides for a role or user on a channel or category
Inputs: roleId (required), channelId (required), deny, allow, +1 more.
discord_set_forum_tagsA
Sets the available tags for a Discord forum channel. Replaces all existing tags.
Inputs: tags (required), forumChannelId (required).
discord_unpin_messageA
Removes a message from its channel's pinned messages.
Inputs: channelId (required), messageId (required), reason.
discord_update_forum_postB
Updates a forum post's title, applied tags, archived status, locked status, or pinned status. Tags can be specified by name or ID.
Inputs: threadId (required), name, tags, locked, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 46 tools
Multiple tools have overlapping purposes, such as 'discord_read_messages' vs 'discord_search_messages' and 'discord_reply_to_forum' vs 'discord_create_forum_post', which could confuse agents. The distinction between 'get', 'list', and 'read' is not always clear.
All tools follow a consistent 'discord_verb_object' pattern, making the naming predictable. However, there is some verb variation (get, list, read, search) that slightly reduces strict consistency, but overall it is well-structured.
With 46 tools, this far exceeds the recommended 3-15 scope for a well-designed MCP server. The high number of tools likely overwhelms agents and increases selection complexity, making it inappropriate for most use cases.
Despite the large number of tools, there are notable gaps such as missing getters for channels, webhooks, and roles (e.g., 'get_channel', 'list_webhooks'). Core operations like updating a message or deleting a webhook are present, but the surface is uneven and overfocused on creation/deletion.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
An MCP server that integrates with Discord to provide AI-powered features.
Official Duck Framework MCP server for AI-assisted development and project scaffolding.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseBqualityDmaintenanceA Discord MCP server that enables AI assistants to interact with Discord platforms, providing functionalities like sending messages, managing channels, creating forum posts, and handling webhooks.21842 npm1MIT
- AlicenseBqualityDmaintenanceA Discord Model Context Protocol server that enables AI assistants to interact with Discord by sending messages, managing channels, handling forum posts, managing webhooks, and processing reactions.2284 npm5MIT
- AlicenseNot gradedqualityDmaintenanceA Discord bot server based on Model Context Protocol (MCP), enabling AI models to interact with Discord through the MCP protocol.2MIT
- AlicenseBqualityDmaintenanceA Discord MCP server that enables AI assistants to interact with the Discord platform, providing features like message sending, channel management, forum operations, reactions, and webhook management.22842 npmMIT