Discord MCP Server
Discord MCP Server
An MCP server that exposes Discord admin operations as tools. Built with TypeScript + Bun, using direct Discord REST API v10 calls (no discord.js dependency).
Features
33 tools for Discord server administration
Channel management, role management, member moderation, server configuration
Composite tools for common multi-step workflows (category setup, channel lockdown, bulk role assignment)
Built-in rate limiting with per-route bucket tracking and automatic retry
Audit log reasons for all write operations via
X-Audit-Log-Reasonheader
Prerequisites
Bun v1.0+
A Discord bot token with appropriate permissions
Discord Bot Setup
Create a new application
Go to the Bot tab, create a bot, and copy the token
Enable required intents: Server Members Intent (needed for member listing)
Go to OAuth2 > URL Generator
Select scopes:
botSelect permissions: Administrator (or granular permissions: Manage Channels, Manage Roles, Kick Members, Ban Members, Manage Guild, Moderate Members)
Copy the generated invite URL and add the bot to your server
Copy the Guild ID (right-click the server name in Discord > Copy Server ID -- requires Developer Mode enabled in Discord settings)
Installation
git clone <repo-url>
cd discord-mcp
bun installConfiguration
cp .env.example .env
# Edit .env with your bot token and optional guild IDEnvironment variables:
Variable | Required | Description |
| Yes | Your Discord bot token |
| No | Default guild ID. If set, tools will use this as the default and the |
Usage with Claude Code
Add the following to .claude/mcp.json:
{
"mcpServers": {
"discord": {
"command": "bun",
"args": ["run", "/absolute/path/to/discord-mcp/src/index.ts"],
"env": {
"DISCORD_BOT_TOKEN": "your-token-here",
"DISCORD_GUILD_ID": "your-guild-id"
}
}
}
}Usage with Claude Desktop
Add the following to claude_desktop_config.json:
{
"mcpServers": {
"discord": {
"command": "bun",
"args": ["run", "/absolute/path/to/discord-mcp/src/index.ts"],
"env": {
"DISCORD_BOT_TOKEN": "your-token-here",
"DISCORD_GUILD_ID": "your-guild-id"
}
}
}
}Testing with MCP Inspector
bunx @modelcontextprotocol/inspector -- bun run src/index.tsTool Reference
Server Info (3 tools)
Tool | Description |
| Get detailed server information including member counts, features, and boost status |
| Get server preview with emojis, stickers, and approximate counts |
| Update server settings (name, description, verification level, icon, banner, system channel) |
Channels (7 tools)
Tool | Description |
| List all channels in a guild, grouped by category |
| Get detailed information about a specific channel |
| Create a new channel (text, voice, category, announcement, stage, forum, media) |
| Modify a channel's settings (name, topic, position, parent, NSFW) |
| Permanently delete a channel |
| Set permission overwrites for a role or member on a channel |
| Remove a permission overwrite for a role or member on a channel |
Roles (8 tools)
Tool | Description |
| List all roles in a guild, sorted by position |
| Get detailed information about a specific role |
| Create a new role with optional name, color, hoist, mentionable, and permissions |
| Modify an existing role's properties |
| Permanently delete a role |
| Reorder roles by specifying new positions |
| Add a role to a guild member |
| Remove a role from a guild member |
Members and Moderation (10 tools)
Tool | Description |
| List guild members with pagination (up to 1000 per request) |
| Search for members by username or nickname prefix |
| Get detailed info about a member (roles, join date, timeout status) |
| Modify a member's nickname, roles, or voice mute/deafen status |
| Remove a member from the guild (they can rejoin with an invite) |
| Ban a user from the guild, optionally deleting recent messages (up to 7 days) |
| Remove a ban, allowing the user to rejoin |
| List all banned users with reasons |
| Get ban information for a specific user |
| Temporarily prevent a member from interacting, or remove an existing timeout |
Composite Tools (5 tools)
Tool | Description |
| Read-only snapshot of guild info, all channels, and all roles |
| Create a category with child channels and optional permission overwrites in one operation |
| Set a channel to read-only for @everyone, or restore it |
| Create multiple roles with colors and permissions, then reorder them into a hierarchy |
| Assign a role to multiple members at once, with per-member error reporting |
Development
bun run start # Start the server
bun run dev # Start with --watch for auto-reload
bun test # Run tests
bun run lint # Lint code (Biome)
bun run format # Format code (Biome)Project Structure
src/
index.ts # Entry point — creates MCP server and stdio transport
config.ts # Environment variable loading and validation (Zod)
discord/
client.ts # Discord REST client with rate limiting and retry
rate-limiter.ts # Per-route bucket rate limiter
types.ts # Discord API type definitions
errors.ts # Discord API error handling
permissions.ts # Permission flag constants
tools/
index.ts # Tool registration coordinator
server-info.ts # Guild info tools
channels.ts # Channel management tools
roles.ts # Role management tools
members.ts # Member and moderation tools
composite.ts # Multi-step workflow tools
utils/
formatters.ts # Human-readable output formatting
validators.ts # Shared Zod validators (snowflake, color, permissions)License
MIT