Skip to main content
Glama
Discord MCP Server

Discord MCP Server

by elyxlz

Discord MCP Server

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

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)

  • Web scraping approach - works with any Discord server you can access as a user

  • No bot permissions or API tokens required

Related MCP server: discord-mcp

Quick Start with Claude Code

# Add Discord MCP server
claude mcp add discord-mcp -s user -e DISCORD_EMAIL=your_email@example.com -e DISCORD_PASSWORD=your_password -e DISCORD_HEADLESS=true -- uvx --from git+https://github.com/elyxlz/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 long message (will be split automatically)
> send a very long message with multiple paragraphs to channel 123 in server 456

# 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, max_messages required)

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

Manual Setup

Prerequisites

  • Python 3.10+ with uv package manager

  • Discord account credentials

Installation

git clone https://github.com/elyxlz/discord-mcp.git
cd discord-mcp
uv sync
uv run playwright install

Configuration

Create .env file:

DISCORD_EMAIL=your_email@example.com
DISCORD_PASSWORD=your_password
DISCORD_HEADLESS=true

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/elyxlz/discord-mcp.git", "discord-mcp"],
      "env": {
        "DISCORD_EMAIL": "your_email@example.com",
        "DISCORD_PASSWORD": "your_password",
        "DISCORD_HEADLESS": "true"
      }
    }
  }
}

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

  • Use app passwords if 2FA is enabled

  • Consider using a dedicated Discord account for automation

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

  • Always use DISCORD_HEADLESS=true in production

Troubleshooting

  • Login issues: Verify credentials, use app password for 2FA

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

  • Rate limits: Reduce max_messages, monitor for Discord warnings (server auto-splits long messages with delays)

  • Cookie issues: Delete ~/.discord_mcp_cookies.json if needed

  • Message splitting: Long messages (>2000 chars) automatically split into multiple messages with 0.5s delays

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.

Available Tools

4 tools
get_channelsB

List all channels in a specific Discord server

Inputs: server_id (required).

get_serversA

List all Discord servers (guilds) you have access to

Inputs: no named parameters.

read_messagesA

Read recent messages from a specific channel

Inputs: server_id (required), channel_id (required), max_messages (required), hours_back.

send_messageB

Send a message to a specific Discord channel. Long messages are automatically split.

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

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: servers list, channels list, messages read, messages send. There is no overlap or ambiguity between them.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern (get_servers, get_channels, read_messages, send_message). The verbs are specific and the nouns clearly indicate the target resource.

    Tool Count5/5

    Four tools is an ideal size for a focused Discord server. Each tool covers a necessary step in the interaction flow without redundancy or bloat.

    Completeness4/5

    The surface covers the core read/send workflow well: discover servers, discover channels, read messages, send messages. Missing edit/delete operations are a minor gap, but the primary use case is fully supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      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.
      19 npm
      245
      MIT
    • A
      license
      A
      quality
      F
      maintenance
      Enables LLMs to read and send Discord messages, list servers and channels, and monitor unread messages via a selfbot that uses a user token (violates Discord ToS).
      8
      11 npm
      1
      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.
      19 npm
      2
      MIT