A Model Context Protocol (MCP) server that exposes Discord operations as tools for AI assistants.
discord-mcp-server lets any MCP-compatible AI client (Claude Desktop, Cursor, Windsurf, etc.) interact with Discord — send messages, manage channels, create webhooks, assign roles, and more.
Built with Bun, FastMCP, and discord.js.
| Category | Tools |
|---|---|
| 🏠 Server Info | list_servers, get_server_info |
| 📢 Channels | list_channels, find_channel, create_text_channel, create_voice_channel, delete_channel, create_category, list_categories, move_channel |
| 💬 Messages | send_message, read_messages, edit_message, delete_message, add_reaction, remove_reaction |
| 🔗 Webhooks | list_webhooks, create_webhook, delete_webhook, send_webhook_message, edit_webhook |
| 🎭 Roles | list_roles, create_role, edit_role, delete_role, assign_role, remove_role |
| 🧵 Threads | list_threads, create_thread, reply_to_thread, get_thread |
31 tools covering the most common Discord operations. Forum posts are supported via create_thread.
- Bun (v1.0.0+) — Install Bun
- Discord Bot Token — Create one here
- Go to the Discord Developer Portal
- Click New Application → give it a name
- Go to Bot → click Reset Token → copy the token
- Under Privileged Gateway Intents, enable:
- ✅ Message Content Intent
- ✅ Server Members Intent
- Go to OAuth2 → URL Generator
- Scopes:
bot - Bot Permissions:
Administrator(or cherry-pick permissions)
- Scopes:
- Copy the generated URL and open it to invite the bot to your server
npx @ncodelife/discord-mcp-server --token YOUR_BOT_TOKENnpm install -g @ncodelife/discord-mcp-server
discord-mcp-server --token YOUR_BOT_TOKENdocker build -t discord-mcp-server .
docker run -e DISCORD_TOKEN=YOUR_BOT_TOKEN discord-mcp-serverAdd to your claude_desktop_config.json:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["@ncodelife/discord-mcp-server", "--token", "YOUR_BOT_TOKEN"]
}
}
}Add to your MCP settings:
{
"discord": {
"command": "npx",
"args": ["@ncodelife/discord-mcp-server", "--token", "YOUR_BOT_TOKEN"]
}
}Install via Smithery for automatic configuration.
| Option | CLI Flag | Env Variable | Default |
|---|---|---|---|
| Bot Token | --token |
DISCORD_TOKEN |
required |
| Default Guild ID | --guild-id |
DISCORD_GUILD_ID |
— |
| Transport | --transport |
MCP_TRANSPORT |
stdio |
| HTTP Port | --port |
MCP_PORT |
8080 |
DISCORD_TOKEN=your-bot-token-here
DISCORD_GUILD_ID=your-server-idStandard I/O transport — used by Claude Desktop, Cursor, and most MCP clients.
discord-mcp-server --token YOUR_TOKENFor web-based integrations and remote access:
discord-mcp-server --token YOUR_TOKEN --transport http --port 8080Note on build targets: The npm package is built with
--target nodesonpxworks everywhere. The Docker image uses--target bunfor native Bun performance. Both are fully functional.
# Clone the repo
git clone https://github.com/ngoctranfire/discord-mcp-server.git
cd discord-mcp-server
# Install dependencies
bun install
# Run in development
bun run dev
# Type-check
bun run typecheck
# Lint
bun run lint
# Test with MCP Inspector
bun run inspectsrc/
├── index.ts # Entry point — FastMCP server setup
├── config.ts # CLI args + env var merging
├── discord.ts # Discord.js client factory
├── utils.ts # Shared utilities (error handling, formatting)
└── tools/
├── server-info.ts # Server listing & details
├── channels.ts # Channel CRUD operations
├── messages.ts # Message send/read/edit/delete + reactions
├── webhooks.ts # Webhook management
├── roles.ts # Role CRUD + assignment
└── threads.ts # Thread & forum operations
See CONTRIBUTING.md for guidelines on setup, development, and submitting pull requests.