npm package: @taeraekim/discord-mcp
Description: Discord MCP Server — Manage Discord servers through MCP tools with discord.js v14
Author: TaeRaeKim
Latest version: 1.2.0

# @taeraekim/discord-mcp

[![npm version](https://img.shields.io/npm/v/@taeraekim/discord-mcp)](https://www.npmjs.com/package/@taeraekim/discord-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green)](https://nodejs.org)

A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server for the Discord API using [discord.js](https://discord.js.org/) v14.
Provides 37 tools for managing Discord servers, channels, messages, users, roles, and more — all accessible from MCP-compatible clients like Claude Desktop, Claude Code, and Cursor.

## Quick Start

```bash
claude mcp add discord-mcp \
  -e DISCORD_TOKEN=your_token \
  -e DISCORD_GUILD_ID=your_guild_id \
  -- npx -y @taeraekim/discord-mcp
```

> On Windows, prefix with `cmd /c`: `-- cmd /c npx -y @taeraekim/discord-mcp`

## Installation

### Claude Code

```bash
# macOS / Linux
claude mcp add discord-mcp -e DISCORD_TOKEN=your_token -e DISCORD_GUILD_ID=your_guild_id -- npx -y @taeraekim/discord-mcp

# Windows
claude mcp add discord-mcp -e DISCORD_TOKEN=your_token -e DISCORD_GUILD_ID=your_guild_id -- cmd /c npx -y @taeraekim/discord-mcp
```

Verify with `claude mcp list`.

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "discord": {
      "command": "npx",
      "args": ["-y", "@taeraekim/discord-mcp"],
      "env": {
        "DISCORD_TOKEN": "your_token",
        "DISCORD_GUILD_ID": "your_guild_id"
      }
    }
  }
}
```

> On Windows, use `"command": "cmd"` with `"args": ["/c", "npx", "-y", "@taeraekim/discord-mcp"]`.

### Cursor

Add to `~/.cursor/mcp.json` or `.cursor/mcp.json` in your project:

```json
{
  "mcpServers": {
    "discord": {
      "command": "npx",
      "args": ["-y", "@taeraekim/discord-mcp"],
      "env": {
        "DISCORD_TOKEN": "your_token",
        "DISCORD_GUILD_ID": "your_guild_id"
      }
    }
  }
}
```

### Docker

```bash
docker run --rm -i \
  -e DISCORD_TOKEN=your_token \
  -e DISCORD_GUILD_ID=your_guild_id \
  taerae/discord-mcp:latest
```

### From Source

```bash
git clone https://github.com/TaeRaeKim/discord-mcp.git
cd discord-mcp
npm install
cp .env.example .env   # edit .env with your token
npm run build
npm start
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `DISCORD_TOKEN` | Yes | Discord bot token |
| `DISCORD_GUILD_ID` | No | Default guild ID. When set, `guildId` becomes optional for all tools |

## Tools

### Server Info (1)

| Tool | Description |
|------|-------------|
| `get_server_info` | Get detailed server information |

### Messages (6)

| Tool | Description |
|------|-------------|
| `send_message` | Send a message to a text channel |
| `edit_message` | Edit an existing message |
| `delete_message` | Delete a message |
| `read_messages` | Read message history from a channel |
| `add_reaction` | Add an emoji reaction to a message |
| `remove_reaction` | Remove the bot's emoji reaction |

### Users & DM (5)

| Tool | Description |
|------|-------------|
| `get_user_id_by_name` | Find a user's ID by username |
| `send_private_message` | Send a DM to a user |
| `edit_private_message` | Edit a DM sent by the bot |
| `delete_private_message` | Delete a DM sent by the bot |
| `read_private_messages` | Read DM history with a user |

### Channels (4)

| Tool | Description |
|------|-------------|
| `create_channel` | Create a new channel (text, voice, announcement, stage, or forum) |
| `delete_channel` | Delete a channel |
| `find_channel` | Find a channel by name |
| `list_channels` | List all channels in the server |

### Categories (4)

| Tool | Description |
|------|-------------|
| `create_category` | Create a new category |
| `delete_category` | Delete a category |
| `find_category` | Find a category by name |
| `list_channels_in_category` | List channels in a category |

### Webhooks (4)

| Tool | Description |
|------|-------------|
| `create_webhook` | Create a webhook on a channel |
| `delete_webhook` | Delete a webhook |
| `list_webhooks` | List webhooks on a channel |
| `send_webhook_message` | Send a message via webhook |

### Threads (1)

| Tool | Description |
|------|-------------|
| `list_active_threads` | List active threads in the server |

### Roles (6)

| Tool | Description |
|------|-------------|
| `list_roles` | List all roles in the server |
| `create_role` | Create a new role |
| `edit_role` | Edit an existing role |
| `delete_role` | Delete a role |
| `assign_role` | Assign a role to a user |
| `remove_role` | Remove a role from a user |

### Pins (3)

| Tool | Description |
|------|-------------|
| `pin_message` | Pin a message in a text channel |
| `unpin_message` | Unpin a message in a text channel |
| `list_pinned_messages` | List all pinned messages in a channel |

### Permissions (3)

| Tool | Description |
|------|-------------|
| `set_channel_permission` | Set permission overwrite for a role or member on a channel |
| `remove_channel_permission` | Remove a permission overwrite from a channel |
| `get_channel_permissions` | Get all permission overwrites for a channel |

## Documentation

- [Setup Guide](./docs/setup.md) — Bot creation, environment setup, and detailed configuration
- [Tools Reference](./docs/tools-reference.md) — Full parameter reference for all 37 tools

## License

[MIT](LICENSE)