Skip to main content
Glama
Discord MCP

Discord MCP

Discord MCP

Discord MCP screenshot

An MCP (Model Context Protocol) server that exposes Discord bot actions as tools for LLM clients (e.g. Claude Desktop, Claude Code).

Requirements

  • Python 3.10+

  • uv for dependency management and running the server

  • A Discord bot application with a bot token (Discord Developer Portal)

Related MCP server: Globalping

Installation

git clone https://github.com/EncryptMan/discord-mcp discord-mcp
cd discord-mcp
uv sync

Configuration

The server reads its Discord bot token from the DISCORD_BOT_TOKEN environment variable.

Add the server to your MCP client config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "discord": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/absolute/path/to/discord-mcp",
        "python",
        "/absolute/path/to/discord-mcp/main.py"
      ],
      "env": {
        "DISCORD_BOT_TOKEN": "your-bot-token-here"
      }
    }
  }
}

Restart your MCP client after editing the config so it picks up the new server.

Bot permissions

Make sure the bot is invited to your server with at least the following permissions/intents enabled in the Developer Portal, depending on which tools you use:

  • bot scope + relevant OAuth2 permissions (Send Messages, Manage Roles, Manage Channels, Kick/Ban Members, etc.)

  • Privileged Gateway Intents: SERVER MEMBERS INTENT (for member lookups/roles) and MESSAGE CONTENT INTENT (for reading message content)

Tools

Update this list to match what main.py actually implements.

Tool

Description

get_guilds

List guilds (servers) the bot is in

get_guild

Fetch guild (server) information

get_guild_channels

List channels in a guild

create_channel / edit_channel / delete_channel / reorder_channels

Manage channels

send_message / edit_message / get_messages

Send or edit messages

get_guild_roles

List roles in a guild

create_role / edit_role / delete_role

Manage roles

add_member_role / remove_member_role

Assign/remove roles on a member

get_guild_members / get_guild_member

List or fetch guild member(s)

edit_member

Edit nickname, mute/deafen state

kick_member / ban_member / timeout_member

Moderation actions

create_webhook / get_channel_webhooks / execute_webhook / delete_webhook

Manage and use webhooks

add_reaction

React to a message

create_thread

Create a thread from a message

create_invite / get_guild_invites

Manage invites

Running standalone

uv run --project /absolute/path/to/discord-mcp python /absolute/path/to/discord-mcp/main.py

The server communicates over stdio, so it's meant to be launched by an MCP client rather than run interactively.

Security notes

  • Never commit your DISCORD_BOT_TOKEN — keep it in your MCP client config or a local .env file that's gitignored.

  • Scope the bot's server permissions to only what these tools need; avoid granting Administrator unless required.

License

Add a license of your choice (MIT, Apache-2.0, etc.).

Available Tools

29 tools
add_member_roleC

Assign a role to a guild member.

Inputs: role_id (required), user_id (required), guild_id (required).

add_reactionB

Add a reaction to a message. emoji should be URL-encoded unicode or name:id for custom emoji.

Inputs: emoji (required), channel_id (required), message_id (required).

ban_memberC

Ban a member from the guild.

Inputs: user_id (required), guild_id (required), reason, delete_message_seconds.

create_channelC

Create a text channel.

Inputs: name (required), guild_id (required).

create_inviteA

Create an invite link for a channel. max_age in seconds (0 = never expires), max_uses (0 = unlimited).

Inputs: channel_id (required), max_age, max_uses.

create_roleC

Create a new role in a guild.

Inputs: name (required), guild_id (required), color, hoist, +2 more.

create_threadC

Create a thread from an existing message.

Inputs: name (required), channel_id (required), message_id (required), auto_archive_duration.

create_webhookB

Create a webhook in a channel — useful for posting alerts without full bot permissions.

Inputs: name (required), channel_id (required).

delete_channelD

Delete a channel.

Inputs: channel_id (required).

delete_roleC

Delete a role from a guild.

Inputs: role_id (required), guild_id (required).

delete_webhookC

Delete a webhook.

Inputs: webhook_id (required).

edit_channelC

Modify channel settings.

Inputs: channel_id (required), name, topic.

edit_memberC

Edit a guild member (nickname, voice mute/deafen state).

Inputs: user_id (required), guild_id (required), deaf, mute, +1 more.

edit_messageC

Edit an existing message.

Inputs: content (required), channel_id (required), message_id (required).

edit_roleC

Edit an existing role's settings.

Inputs: role_id (required), guild_id (required), name, color, +1 more.

execute_webhookC

Send a message via webhook, with optional embeds.

Inputs: webhook_id (required), webhook_token (required), embeds, content, +1 more.

get_channel_webhooksB

Fetch all webhooks for a channel.

Inputs: channel_id (required).

get_guildC

Fetch guild information.

Inputs: guild_id (required).

get_guild_channelsC

Fetch all channels in a guild.

Inputs: guild_id (required).

get_guild_invitesC

Fetch all active invites for a guild.

Inputs: guild_id (required).

get_guild_memberC

Fetch a single guild member's info.

Inputs: user_id (required), guild_id (required).

get_guild_membersA

Fetch members of a guild (up to limit, max 1000 per Discord's API).

Inputs: guild_id (required), limit.

get_guild_rolesC

Fetch all roles in a guild.

Inputs: guild_id (required).

get_guildsA

Fetch all guilds (servers) the bot belongs to.

Inputs: no named parameters.

get_messagesC

Fetch recent messages from a channel.

Inputs: channel_id (required), limit.

kick_memberC

Kick a member from the guild.

Inputs: user_id (required), guild_id (required), reason.

remove_member_roleC

Remove a role from a guild member.

Inputs: role_id (required), user_id (required), guild_id (required).

send_messageB

Send a message to a channel. embeds is a list of Discord embed objects (title, description, color, fields, etc.).

Inputs: channel_id (required), embeds, content.

timeout_memberA

Timeout a member for duration_seconds (max 28 days = 2419200s). Pass 0 to remove timeout.

Inputs: user_id (required), guild_id (required), duration_seconds (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 29 tools

    Disambiguation5/5

    Each tool targets a distinct action and resource (e.g., send_message vs create_webhook, add_reaction vs timeout_member). No two tools overlap in purpose.

    Naming Consistency5/5

    All tools use snake_case with a verb_noun pattern (e.g., delete_channel, add_member_role). Naming is uniform and predictable.

    Tool Count4/5

    29 tools is slightly high but reasonable given the broad domain coverage (channels, roles, members, webhooks, etc.). Each tool serves a clear need.

    Completeness4/5

    Covers most common Discord operations (CRUD for channels, roles, messages, members, webhooks). Missing delete_message and thread lifecycle beyond creation, but core workflows are present.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A production-ready MCP server that gives an LLM agent standalone-equivalent control over a Mineflayer Minecraft bot — movement, mining, crafting, inventory, combat, containers, chat, and much more — exposed as 110 strongly-typed tools across 23 groups, with full bot lifecycle management and dual (poll + push) event streaming.
      142 npm
      8
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables LLMs to control Discord servers via a bot token, providing comprehensive management tools for messages, members, roles, channels, permissions, and more.
      67
      81 npm
      MIT