discord-mcp
discord-mcp is an MCP server that lets an AI client manage a Discord server end-to-end — channels, messages, roles, members, permissions, threads, invites, events, webhooks, and emoji — by translating natural-language requests into Discord API calls.
Servers: list servers the bot is in, view server info, edit server settings (name, icon, AFK/system channels, verification level, AFK timeout), and browse the audit log.
Channels: list, create (text/voice/category/announcement/stage/forum), edit (rename, topic, move category), and delete channels.
Messages: send messages and embeds, read recent messages, edit the bot's own messages, and delete messages.
Pins & reactions: pin/unpin messages, list pinned messages, add/remove reactions, and list who reacted with a given emoji.
Roles: list, create, edit, and delete roles; assign and remove roles from members.
Members: list members, get member details, kick, ban, list bans, unban, and timeout members (members can be referenced by id, @mention, or exact username/display name, with ambiguous matches rejected).
Voice: move members between voice channels, server mute/unmute, and server deafen/undeafen.
Channel permissions: list, set (allow/deny/reset), and remove permission overwrites for roles or members — e.g. making a channel private.
Threads: create threads (from a message or standalone), list active/archived threads, archive (optionally locking) and unarchive threads.
Invites: create invites with expiry/use limits, list active invites, and delete invites.
Scheduled events: create, list, and delete guild events (voice/stage or external).
Webhooks: create, list, delete webhooks and send messages through them with username/avatar overrides.
Emoji & stickers: list, create, and delete custom emoji; list guild stickers.
Note: listing members, resolving members by name, and reading message text require DISCORD_PRIVILEGED_INTENTS=true plus the corresponding intents enabled in the Discord Developer Portal.
Provides tools for managing Discord servers, including channels, messages, roles, members, permissions, threads, invites, events, webhooks, and emojis/stickers.
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., "@discord-mcp create a text channel called dev-updates under the Engineering category"
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
An MCP server for managing Discord servers through any MCP-compatible AI client. Once connected, you just describe what you want:
You: create a channel called
dev-chatunder the Engineering category
You: make a role called Moderator that can kick and ban, then give it to @alex
You: post "deploy is live 🚀" in #announcements
You: make #staff-only private — hide it from @everyone but let the Staff role in
Your AI client talks to this server over MCP, which translates requests into real Discord API calls via discord.js.
What it can do
Area | Tools |
Servers |
|
Channels |
|
Messages |
|
Pins & reactions |
|
Roles |
|
Members |
|
Voice |
|
Channel permissions |
|
Threads |
|
Invites |
|
Scheduled events |
|
Webhooks |
|
Emoji & stickers |
|
Members can be named by id, @mention, or exact username/display name. A name that matches nobody exactly, or more than one member, is rejected with the candidates listed rather than guessed at, so moderation tools never act on a near match.
Related MCP server: MCP-Discord
Setup
1. Create the Discord bot
Go to the Discord Developer Portal → New Application, give it a name, Create.
Open the Bot tab → Reset Token → Copy. This is your
DISCORD_TOKEN.(Optional) To list members or read message text, scroll to Privileged Gateway Intents and enable Server Members Intent and Message Content Intent. You'll also set
DISCORD_PRIVILEGED_INTENTS=truelater. Skip this if you only need to create channels/roles and send messages.
2. Invite the bot to your server
In the Developer Portal → OAuth2 → URL Generator.
Under Scopes, check
bot.Under Bot Permissions, pick what you want it to do. For full management the simplest choice is Administrator.
Open the generated URL, choose your server, Authorize.
Important — role hierarchy: in Server Settings → Roles, drag the bot's role above the roles/members you want it to manage.
3. Install and build
Requires Node.js 18+ (20+ recommended).
git clone https://github.com/grooving6/discord-mcp.git
cd discord-mcp
npm install
npm run buildThen create your .env from the template and fill in the token:
cp .env.example .envVariable | Required | Purpose |
| yes | The bot token from step 1. |
| no | Default server, so you don't have to name it in every request. |
| no | Set to |
4. Connect it to your MCP client
Option A — project config (recommended). This repo includes a .mcp.json.
Run your MCP client from this directory and it picks it up automatically.
Option B — global registration (Claude Code example). Use an absolute path to make the server available in any session:
claude mcp add discord -- node /absolute/path/to/discord-mcp/dist/index.jsAvailable Tools
55 toolsadd_reactionAdd reactionA
React to a message with a Unicode emoji or custom guild emoji (name or id).
Inputs: emoji (required), channel (required), message_id (required), server.
archive_threadArchive threadA
Archive a thread, optionally locking it so only moderators can unarchive it.
Inputs: thread (required), lock, server.
assign_roleAssign role to memberC
Give a role to a member.
Inputs: role (required), member (required), server.
ban_memberBan memberA
Ban a user from the server, optionally deleting their recent messages.
Inputs: member (required), reason, server, delete_message_days.
create_channelCreate channelB
Create a channel. type can be: text, voice, category, announcement, stage, or forum. Use category to nest the new channel under an existing category.
Inputs: name (required), type, topic, server, +1 more.
create_emojiCreate emojiA
Upload a new custom emoji from a URL or base64-encoded image. Requires Manage Expressions permission.
Inputs: name (required), image (required), roles, server.
create_eventCreate scheduled eventA
Schedule a guild event. For voice/stage events pass a voice channel; for external events pass a location string instead.
Inputs: name (required), start_time (required), server, channel, +3 more.
create_inviteCreate inviteB
Generate an invite link for a channel.
Inputs: channel (required), server, max_uses, temporary, +1 more.
create_roleCreate roleA
Create a role with an optional color, permissions, and display options.
Inputs: name (required), color, hoist, server, +2 more.
create_threadCreate threadA
Start a thread from an existing message, or as a standalone thread in a text/forum channel. Pass message_id to branch from a message; omit it for a standalone thread.
Inputs: name (required), channel (required), server, message_id, +2 more.
create_webhookCreate webhookA
Create a webhook for a channel. Requires Manage Webhooks permission.
Inputs: name (required), channel (required), avatar, server.
delete_channelDelete channelA
Permanently delete a channel. This cannot be undone.
Inputs: channel (required), reason, server.
delete_emojiDelete emojiA
Remove a custom emoji by name or id. Requires Manage Expressions permission.
Inputs: emoji (required), server.
delete_eventDelete scheduled eventB
Cancel and remove a scheduled guild event by name or id.
Inputs: event (required), server.
delete_inviteDelete inviteB
Revoke an invite by its code. Accepts the full URL or just the code.
Inputs: code (required), server.
delete_messageDelete messageB
Delete a single message by its id.
Inputs: channel (required), message_id (required), server.
delete_roleDelete roleB
Delete a role from the server.
Inputs: role (required), reason, server.
delete_webhookDelete webhookA
Remove a webhook by name or id. Requires Manage Webhooks permission.
Inputs: webhook (required), server.
edit_channelEdit channelC
Rename a channel, change its topic, or move it into/out of a category.
Inputs: channel (required), name, topic, server, +1 more.
edit_messageEdit messageA
Edit the content of a message the bot sent. The bot can only edit its own messages.
Inputs: channel (required), content (required), message_id (required), server.
edit_roleEdit roleA
Edit an existing role's name, color, permissions, or display options. Only provided fields are changed.
Inputs: role (required), name, color, hoist, +4 more.
edit_serverEdit serverA
Update server settings. Only provided fields are changed. Requires Manage Server (and Manage Guild for icon/banner changes).
Inputs: icon, name, reason, server, +4 more.
get_audit_logGet audit logA
Browse the server's audit log. Optionally filter by action type or the user who performed the action. Requires View Audit Log permission.
Inputs: user, limit, action, server.
get_memberGet member infoA
Show details about one member: nickname, join date, and roles.
Inputs: member (required), server.
get_pinned_messagesGet pinned messagesA
Fetch all pinned messages in a channel, newest first.
Inputs: channel (required), server.
get_reactionsGet reactionsB
List users who reacted to a message with a specific emoji.
Inputs: emoji (required), channel (required), message_id (required), server.
get_server_infoGet server infoB
Show an overview of a server: channel counts, role count, owner, members.
Inputs: server.
kick_memberKick memberA
Remove a member from the server. They can rejoin with a new invite.
Inputs: member (required), reason, server.
list_bansList bansB
List all banned users in a server with their ban reasons.
Inputs: server.
list_channel_permissionsList channel permissionsA
Show the permission overwrites on a channel — which roles/members are explicitly allowed or denied which permissions. Anything not listed is inherited.
Inputs: channel (required), server.
list_channelsList channelsB
List every channel in a server with its type, id, and parent category.
Inputs: server.
list_emojisList emojisA
Return all custom emoji in the server with their names and ids.
Inputs: server.
list_eventsList scheduled eventsA
Fetch upcoming scheduled events in the server with interested-user counts.
Inputs: server.
list_invitesList invitesA
Show all active invites for the server with use counts and expiry info.
Inputs: server.
list_membersList membersA
List members of a server. Requires DISCORD_PRIVILEGED_INTENTS=true and the Server Members intent enabled in the Developer Portal.
Inputs: limit, server.
list_rolesList rolesA
List all roles in a server, highest first.
Inputs: server.
list_serversList serversA
List the Discord servers (guilds) the bot has been added to.
Inputs: no named parameters.
list_stickersList stickersB
Fetch all guild stickers with their names, formats, and tags.
Inputs: server.
list_threadsList threadsA
List active threads in a channel. Pass archived=true to include archived threads.
Inputs: channel (required), server, archived.
list_webhooksList webhooksB
List all webhooks in the server, optionally filtered to one channel.
Inputs: server, channel.
move_member_to_voiceMove member to voice channelA
Move a member who is already in a voice channel to a different one. The member must be connected to voice for this to succeed.
Inputs: member (required), channel (required), server.
pin_messagePin messageB
Pin a message in its channel. Requires Manage Messages permission.
Inputs: channel (required), message_id (required), server.
read_messagesRead messagesA
Read the most recent messages from a channel (newest last). Reading the text body requires DISCORD_PRIVILEGED_INTENTS=true plus the Message Content intent.
Inputs: channel (required), limit, server.
remove_channel_permissionRemove channel permission overwriteA
Remove a role's or member's entire permission overwrite from a channel, reverting them to inherited permissions.
Inputs: target (required), channel (required), reason, server, +1 more.
remove_reactionRemove reactionA
Remove a reaction from a message. Omit user to remove the bot's own reaction. Removing another user's reaction requires Manage Messages permission.
Inputs: emoji (required), channel (required), message_id (required), user, +1 more.
remove_roleRemove role from memberC
Remove a role from a member.
Inputs: role (required), member (required), server.
send_messageSend messageA
Post a message to a text channel. Supports standard Discord markdown.
Inputs: channel (required), content (required), server.
send_webhook_messageSend webhook messageB
Post a message through a webhook. Supports a custom username and avatar override for this message.
Inputs: content (required), webhook (required), server, username, +1 more.
server_deafenServer deafen / undeafenC
Toggle server-level deafen for a member in a voice channel. Pass deafen=false to undeafen.
Inputs: deafen (required), member (required), server.
server_muteServer mute / unmuteB
Toggle server-level mute for a member in a voice channel. Pass mute=false to unmute.
Inputs: mute (required), member (required), server.
set_channel_permissionSet channel permissionA
Allow or deny specific permissions for a role or member on one channel (a permission overwrite). Examples: deny "ViewChannel" for @everyone to make a channel private; allow "ViewChannel" and "SendMessages" for a Team role. This merges with any existing overwrite. Use reset to clear a permission back to inherited.
Inputs: target (required), channel (required), deny, allow, +4 more.
timeout_memberTimeout memberA
Temporarily mute a member for a number of minutes. Use 0 to clear a timeout.
Inputs: member (required), minutes (required), reason, server.
unarchive_threadUnarchive threadA
Reopen an archived thread so members can post again.
Inputs: thread (required), server.
unban_memberUnban memberA
Lift a ban. Accepts a user id or username (looked up from the ban list).
Inputs: user (required), reason, server.
unpin_messageUnpin messageA
Remove a message from a channel's pinned list. Requires Manage Messages permission.
Inputs: channel (required), message_id (required), server.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 55 tools
Each tool targets a distinct action/resource combination (e.g., ban_member vs kick_member, set_channel_permission vs remove_channel_permission). Descriptions clearly delineate boundaries, and even similar-sounding tools like server_mute and timeout_member specify different contexts (voice vs temporary).
All 55 tools follow a consistent verb_noun snake_case pattern (e.g., create_channel, edit_role, delete_emoji). There are no deviations or mixed conventions, making the surface predictable for an agent.
55 tools is on the high side for a typical MCP server, even for a broad domain like Discord. While the scope covers many server management operations, the count feels heavy (borderline over 25 tools per the calibration scale) and may introduce cognitive load.
The tool set covers most core Discord server operations: CRUD for channels, roles, events, invites, webhooks; member management; messaging; permissions; threads; and audit logs. However, it lacks update operations for emoji, events, and stickers, and missing create/delete for stickers, which are minor but notable gaps.
Related MCP Connectors
The AI admin for Discord: manage channels, roles, members, moderation and automations.
Build Discord communities with AI: roles, channels, modules, automations and reviewed announcements.
Control your Discord community: send/read messages, manage channels and forums, and handle webhook…
- Discortics - Discord BotDeprecatedcom.discortics
Set up and manage your Discord server from MCP: channels, roles, verification, tickets and security.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to manage Discord servers through natural language, offering tools for guilds, channels, messages, roles, members, webhooks, invites, and automations. Includes a conversational agent that responds to @mentions in Discord.11Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with Discord by managing servers, channels, roles, members, messages, forum posts, reactions, webhooks, and permissions.860 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with the Discord platform for managing servers, channels, messages, roles, members, forums, and webhooks through natural language.860 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with Discord by managing servers, channels, messages, forums, roles, members, reactions, and webhooks.860 npmMIT