Sandbox
@SaseQ/discord-mcp

MCP server for Discord integration

This project exposes Discord actions through Model Context Protocol so an agent can work with a server instead of only reading text. It supports message, channel, role, moderation, webhook, invite, scheduled event, permission, forum, and emoji tools.

482 starsβ€’100 forksβ€’Javaβ€’Updated 4mo ago
Who it's for

Builders who want their MCP agent to operate Discord servers and messages.

What it delivers

You can let your agent send messages, manage channels, and handle moderation inside Discord.

What it does

Server and user lookup

Gets server details and finds a Discord user ID by name for mention usage.

Message and DM tools

Sends, edits, deletes, and reads channel messages and private messages, including attachment metadata and cursors.

Channel and category management

Creates, edits, deletes, finds, lists, and moves text channels and categories.

Webhook and invite tools

Creates and manages webhooks and invites, and sends messages through webhooks.

Role and moderation tools

Lists, creates, edits, deletes, assigns, and removes roles, and supports kick, ban, timeout, nickname, and voice moderation actions.

Forum, event, and emoji tools

Creates and manages forum channels and posts, scheduled events, permissions, and custom emoji.

How to get it

  1. 1Run
    export DISCORD_TOKEN="YOUR_DISCORD_BOT_TOKEN"
    export DISCORD_GUILD_ID="OPTIONAL_DEFAULT_SERVER_ID"
    export SPRING_PROFILES_ACTIVE=http
  2. 2Run
    docker run -d -i \
      --name discord-mcp \
      --restart unless-stopped \
      -p 8085:8085 \
      -e SPRING_PROFILES_ACTIVE \
      -e DISCORD_TOKEN \
      -e DISCORD_GUILD_ID \
      saseq/discord-mcp:latest
  3. 3Run
    git clone https://github.com/SaseQ/discord-mcp
  4. 4Run
    cd discord-mcp
  5. 5Run
    cat > .env <<EOF
    SPRING_PROFILES_ACTIVE=http
    DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN>
    DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID>
    EOF
  6. 6Run
    docker compose up -d --build

README

DeepSeek-V3

πŸ“– Description

A Model Context Protocol (MCP) server for the Discord API using (JDA), designed to integrate Discord bots with MCP-compatible applications such as Claude, ChatGPT etc. It allows AI assistants to interact with Discord by managing channels, sending messages, and retrieving server information. Ideal for building powerful Discord automation and AI-driven workflows.

πŸ”¬ Installation

β–Ί 🐳 Docker Installation (Recommended)

[!NOTE] Docker installation is required. Full instructions can be found on docker.com.

1) Set local env variables

export DISCORD_TOKEN="YOUR_DISCORD_BOT_TOKEN"
export DISCORD_GUILD_ID="OPTIONAL_DEFAULT_SERVER_ID"
export SPRING_PROFILES_ACTIVE=http

[!IMPORTANT] Instructions for creating a Discord bot and retrieving its token can be found here.

[!TIP] The DISCORD_GUILD_ID env variable is optional.

When provided, it sets a default Discord server ID so any tool that accepts a guildId parameter can omit it.

2) Run the Docker container

docker run -d -i \
  --name discord-mcp \
  --restart unless-stopped \
  -p 8085:8085 \
  -e SPRING_PROFILES_ACTIVE \
  -e DISCORD_TOKEN \
  -e DISCORD_GUILD_ID \
  saseq/discord-mcp:latest

Default MCP endpoint URL (HTTP profile): http://localhost:8085/mcp

πŸ‹ Docker Compose Installation

1) Clone the repository

git clone https://github.com/SaseQ/discord-mcp

2) Go to the project directory

cd discord-mcp

3) Create local runtime env

cat > .env <<EOF
SPRING_PROFILES_ACTIVE=http
DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN>
DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID>
EOF

4) Start one shared MCP server container

docker compose up -d --build

5) Verify

docker ps --filter name=discord-mcp
curl -fsS http://localhost:8085/actuator/health

[!TIP] You do not need to set LOGGING_PATTERN_CONSOLE manually. Logging is configured automatically for both http and legacy stdio modes.

Default MCP endpoint URL (HTTP profile): http://localhost:8085/mcp

Health endpoint (Actuator): http://localhost:8085/actuator/health

πŸ”§ Manual Installation

1) Clone the repository

git clone https://github.com/SaseQ/discord-mcp

2) Build the project

NOTE: Maven installation is required to use the mvn command. Full instructions can be found here.

cd discord-mcp
mvn clean package # The jar file will be available in the /target directory

3) Configure AI client

Run the JAR as a long-running server:

DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN> \
DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID> \
SPRING_PROFILES_ACTIVE=http \
java -jar /absolute/path/to/discord-mcp-1.0.0.jar

NOTE: The DISCORD_GUILD_ID environment variable is optional. When provided, it sets a default Discord server ID so any tool that accepts a guildId parameter can omit it.

Default MCP endpoint URL (HTTP profile): http://localhost:8085/mcp

πŸ”— Connections

β–Ί πŸ—žοΈ Default config.json Connection

Recommended (HTTP singleton mode):

{
  "mcpServers": {
    "discord-mcp": {
      "url": "http://localhost:8085/mcp"
    }
  }
}

Legacy mode (stdio, starts a new process/container per client session):

{
  "mcpServers": {
    "discord-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN>",
        "-e",
        "DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID>",
        "saseq/discord-mcp:latest"
      ]
    }
  }
}
⌨️ Claude Code Connection

Recommended (HTTP singleton mode):

claude mcp add discord-mcp --transport http http://localhost:8085/mcp

Legacy mode (stdio, starts a new process/container per client session):

claude mcp add discord-mcp -- docker run --rm -i -e DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN> -e DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID> saseq/discord-mcp:latest
πŸ€– Codex CLI Connection
codex mcp add discord-mcp --url http://localhost:8085/mcp
codex mcp list
🦞 OpenClaw Connection

Run this command:

openclaw mcp set discord-mcp '{"url":"http://localhost:8085/mcp","transport":"streamable-http"}'
openclaw mcp list

OR

Pasting the following configuration into your OpenClaw ~/.openclaw/config.json file:

{
  "mcp": {
    "servers": {
      "discord-mcp": {
        "url": "http://localhost:8085/mcp",
        "transport": "streamable-http"
      }
    }
  }
}
πŸ–² Cursor Connection

Go to: Settings -> Cursor Settings -> MCP -> Add new global MCP server

Pasting the following configuration into your Cursor ~/.cursor/mcp.json file is the recommended approach. You may also install in a specific project by creating .cursor/mcp.json in your project folder. See Cursor MCP docs for more info.

{
  "mcpServers": {
    "discord-mcp": {
      "url": "http://localhost:8085/mcp"
    }
  }
}
πŸš€ n8n Connection

Connect in n8n

  1. Open n8n and add an MCP Client node.
  2. Choose HTTP or Streamable HTTP transport (depending on your n8n version/node options).
  3. Set the server URL to: http://localhost:8085/mcp
  4. Save the node and test the connection.
  5. After connecting, you can use the available Discord tools exposed by discord-mcp inside your workflow.

Notes

  • If n8n is running in Docker, localhost may point to the n8n container itself, not your host machine.
  • In that case, use the Docker service name or another reachable host, for example: http://discord-mcp:8085/mcp
πŸ–₯ Claude Desktop Connection

STDIO local config (Default, legacy):

Past the following configuration into your Claude Desktop claude_desktop_config.json file.

{
  "mcpServers": {
    "discord-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "DISCORD_TOKEN=<YOUR_DISCORD_BOT_TOKEN>",
        "-e",
        "DISCORD_GUILD_ID=<OPTIONAL_DEFAULT_SERVER_ID>",
        "saseq/discord-mcp:latest"
      ]
    }
  }
}

Remote MCP Connector:

  1. Open Claude Desktop and go to Settings -> Connectors.
  2. Add a custom connector and set MCP URL to your server endpoint (for example https://<PUBLIC_HOST>/mcp).
  3. Save and reconnect.

Claude Desktop remote connectors are managed via Connectors UI (not claude_desktop_config.json). http://localhost:8085/mcp is reachable only from your machine. For Claude Desktop remote connectors, expose the endpoint with public HTTPS (for example tunnel/reverse proxy).

πŸ› οΈ Available Tools

Server Information

User Management

Message Management

  • send_message: Send a message to a specific channel
  • edit_message: Edit a message from a specific channel
  • delete_message: Delete a message from a specific channel
  • read_messages: Read message history from a specific channel (includes attachment metadata, supports count 1-100 and optional cursor: before or after or around)
  • add_reaction: Add a reaction (emoji) to a specific message
  • remove_reaction: Remove a specified reaction (emoji) from a message

Channel Management

Category Management

Webhook Management

Role Management

Moderation and User Management

  • kick_member: Kicks a member from the server
  • ban_member: Bans a user from the server
  • unban_member: Removes a ban from a user
  • timeout_member: Disables communication for a member for a specified duration
  • remove_timeout: Removes a timeout (unmute) from a member before it expires
  • set_nickname: Changes a member's nickname on the server
  • get_bans: Returns a list of banned users on the server with ban reasons

Voice & Stage Channel Management

Scheduled Events Management

Channel Permission Overwrites

Invite Management

  • create_invite: Create a new invite link for a specific channel
  • list_invites: List all active invites on the server with their statistics
  • delete_invite: Delete (revoke) an invite so the link stops working
  • get_invite_details: Get details about a specific invite (works for any public invite)

Forum Management

Emoji Management

  • list_emojis: List all custom emojis on the server
  • get_emoji_details: Get detailed information about a specific custom emoji
  • create_emoji: Upload a new custom emoji to the server (base64 or image URL, max 256KB)
  • edit_emoji: Edit an existing emoji's name or role restrictions
  • delete_emoji: Permanently delete a custom emoji from the server

If DISCORD_GUILD_ID is set, the guildId parameter becomes optional for all tools above.


A more detailed examples can be found in the Wiki.

Files in the repo

Repository payloadβ€’10 top-level entries
  • .github
  • assets
  • src
  • .env.example
  • .gitignore
  • docker-compose.yml
  • Dockerfile
  • LICENSE
  • pom.xml
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface

86k

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph β€” average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code β€” use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300Β΅s in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up β€” it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k