Skip to main content
Glama
alex2neo

Discord MCP Server

by alex2neo

Discord MCP Server

A Model Context Protocol (MCP) server that lets LLMs read messages, discover channels, send messages, and monitor Discord communities using the Discord HTTP API.

Features

  • List Discord servers and channels you have access to

  • Read recent messages with time filtering (newest first)

  • Send messages to Discord channels (automatically splits long messages)

  • Send messages with file attachments

  • Read direct messages (1-on-1 and group DMs)

  • Token-based authentication (automatic extraction supported)

  • Fast API-based approach - no browser automation needed at runtime

Related MCP server: Discord MCP Server

Quick Start with Claude Code

# Add Discord MCP server (with token)
claude mcp add discord-mcp -s user -e DISCORD_TOKEN=your_token -- uvx --from git+https://github.com/waelsamy/discord-mcp.git discord-mcp

# Or with email/password (auto-extracts token on first use)
claude mcp add discord-mcp -s user -e DISCORD_EMAIL=your_email@example.com -e DISCORD_PASSWORD=your_password -- uvx --from git+https://github.com/waelsamy/discord-mcp.git discord-mcp

# Start Claude Code
claude

Usage Examples

# List your Discord servers
> use get_servers to show me all my Discord servers

# Read recent messages (max_messages is required)
> read the last 20 messages from channel ID 123 in server ID 456

# Send a message (long messages automatically split)
> send "Hello!" to channel 123 in server 456

# Send a message with attachment
> send a file /path/to/image.png to channel 123 in server 456

# List DM conversations
> show me my direct message conversations

# Read DMs from a user
> read the last 10 messages from my DM with johndoe123

# Monitor communities
> summarize discussions from the last 24 hours across my Discord servers

Available Tools

  • get_servers - List all Discord servers you have access to

  • get_channels(server_id) - List channels in a specific server

  • read_messages(server_id, channel_id, max_messages, hours_back?) - Read recent messages (newest first)

  • send_message(server_id, channel_id, content) - Send messages to channels (automatically splits long messages)

  • send_message_with_attachment(server_id, channel_id, content, file_path, filename?) - Send a message with a file attachment

  • get_dm_conversations() - List all direct message conversations

  • read_dm_messages(name, max_messages, hours_back?) - Read messages from a DM by username or display name

Manual Setup

Prerequisites

  • Python 3.10+ with uv package manager

  • Discord token or account credentials

Installation

git clone https://github.com/waelsamy/discord-mcp.git
cd discord-mcp
uv sync
uv run playwright install  # Only needed for token extraction

Configuration

DISCORD_TOKEN=your_discord_token_here

To extract your token, run:

uv run python get_token.py

Option 2: Using Email/Password

DISCORD_EMAIL=your_email@example.com
DISCORD_PASSWORD=your_password

The server will automatically extract and cache your token on first use.

Run Server

uv run python main.py

Claude Desktop Integration

Add to ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "discord": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/waelsamy/discord-mcp.git", "discord-mcp"],
      "env": {
        "DISCORD_TOKEN": "your_token_here"
      }
    }
  }
}

Or with email/password:

{
  "mcpServers": {
    "discord": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/waelsamy/discord-mcp.git", "discord-mcp"],
      "env": {
        "DISCORD_EMAIL": "your_email@example.com",
        "DISCORD_PASSWORD": "your_password"
      }
    }
  }
}

Development

# Type checking
uv run pyright

# Formatting
uvx ruff format .

# Linting
uvx ruff check --fix --unsafe-fixes .

# Testing
uv run pytest -v tests/

Security Notes

  • Token is cached securely at ~/.discord_mcp_token with 0o600 permissions

  • Never commit your token or .env file to git

  • Consider using a dedicated Discord account for automation

  • Server includes delays to avoid rate limiting (0.5s between split messages)

  • If your token is exposed, change your Discord password to invalidate it

Troubleshooting

  • Token extraction fails: Run uv run python get_token.py interactively

  • MFA/2FA enabled: Use get_token.py to complete authentication manually

  • Rate limits: Reduce max_messages, monitor for Discord warnings

  • Token expired: Server automatically detects 401 errors; re-run token extraction if needed

  • Browser errors: Run uv run playwright install --force

Ensure compliance with Discord's Terms of Service. Only access information you would normally have access to as a user. Use for legitimate monitoring and research purposes.

Author

waelsamy

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables LLMs to interact with Discord channels by sending and reading messages through Discord's API, with a focus on maintaining user control and security.
    9 npm
    231
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to send and read messages in Discord channels, manage servers, channels, and roles via Discord's API.
    9 npm
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables LLMs to read messages, discover channels, send messages, and monitor Discord communities using web scraping without requiring bot permissions or API tokens.
    4
    14
    -