Skip to main content
Glama
elyxlz

Discord MCP Server

by elyxlz
README.md
# 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

## Quick Start with Claude Code

```bash
# 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

```bash
# 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
```bash
git clone https://github.com/elyxlz/discord-mcp.git
cd discord-mcp
uv sync
uv run playwright install
```

### Configuration
Create `.env` file:
```env
DISCORD_EMAIL=your_email@example.com
DISCORD_PASSWORD=your_password
DISCORD_HEADLESS=true
```

### Run Server
```bash
uv run python main.py
```

## Claude Desktop Integration

Add to `~/.claude/claude_desktop_config.json`:
```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

```bash
# 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

## Legal Notice

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.

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 issues