Skip to main content
Glama
discord-mcp

discord-mcp

by grooving6

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-chat under 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

list_servers, get_server_info, edit_server, get_audit_log

Channels

list_channels, create_channel, edit_channel, delete_channel

Messages

send_message, send_embed, read_messages, edit_message, delete_message

Pins & reactions

pin_message, unpin_message, get_pinned_messages, add_reaction, remove_reaction, get_reactions

Roles

list_roles, create_role, edit_role, delete_role, assign_role, remove_role

Members

list_members, get_member, kick_member, ban_member, list_bans, unban_member, timeout_member

Voice

move_member_to_voice, server_mute, server_deafen

Channel permissions

list_channel_permissions, set_channel_permission, remove_channel_permission

Threads

create_thread, list_threads, archive_thread, unarchive_thread

Invites

create_invite, list_invites, delete_invite

Scheduled events

create_event, list_events, delete_event

Webhooks

create_webhook, list_webhooks, delete_webhook, send_webhook_message

Emoji & stickers

list_emojis, create_emoji, delete_emoji, list_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

  1. Go to the Discord Developer Portal → New Application, give it a name, Create.

  2. Open the Bot tab → Reset Token → Copy. This is your DISCORD_TOKEN.

  3. (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=true later. Skip this if you only need to create channels/roles and send messages.

2. Invite the bot to your server

  1. In the Developer Portal → OAuth2 → URL Generator.

  2. Under Scopes, check bot.

  3. Under Bot Permissions, pick what you want it to do. For full management the simplest choice is Administrator.

  4. Open the generated URL, choose your server, Authorize.

  5. 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 build

Then create your .env from the template and fill in the token:

cp .env.example .env

Variable

Required

Purpose

DISCORD_TOKEN

yes

The bot token from step 1.

DISCORD_GUILD_ID

no

Default server, so you don't have to name it in every request.

DISCORD_PRIVILEGED_INTENTS

no

Set to true to list members, look members up by name, and read message text.

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.js

Available Tools

55 tools
add_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

    A3.5/5.0

    Scored across 55 tools

    Disambiguation5/5

    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).

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables 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.
      11
      Apache 2.0
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to interact with Discord by managing servers, channels, roles, members, messages, forum posts, reactions, webhooks, and permissions.
      860 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to interact with the Discord platform for managing servers, channels, messages, roles, members, forums, and webhooks through natural language.
      860 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to interact with Discord by managing servers, channels, messages, forums, roles, members, reactions, and webhooks.
      860 npm
      MIT