Install
$ agentstack add mcp-hardheadhackerhead-discord-mcp ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
@quadslab.io/discord-mcp
[](https://www.npmjs.com/package/@quadslab.io/discord-mcp) [](https://www.npmjs.com/package/@quadslab.io/discord-mcp) [](LICENSE) [](https://nodejs.org/) [](https://discord.gg/sjnb8wWGCJ) [](https://github.com/HardHeadHackerHead/discord-mcp)
Manage your entire Discord server from Claude Code, Claude Co-Work, Claude Desktop, Cursor, or Windsurf. 139 admin tools across 20 categories — roles, channels, members, messages, threads, moderation, forums, stages, webhooks, events, polls, DMs, and more. Just talk to your AI in plain English.
Built by QuadsLab.io | Discord | npm
> If you find this useful, consider giving it a star on GitHub — it helps others discover the project!
Setup in 60 Seconds
One command. No manual config files. No copying IDs.
npx @quadslab.io/discord-mcp init
The interactive wizard walks you through everything:
It will:
- Guide you through creating a Discord bot (or use an existing one)
- Validate your bot token live
- Auto-generate the invite URL with all required permissions
- Let you pick which server to manage
- Auto-detect your installed MCP clients and write the config for you
Works With Every MCP Client
The wizard auto-detects which clients you have installed:
Detected MCP clients:
● Claude Code .mcp.json
● Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json
● Cursor ~/.cursor/mcp.json
○ Windsurf (not detected)
? Which client(s) to configure?
1. Claude Code (detected)
2. Claude Desktop (detected)
3. Cursor (detected)
4. Windsurf (not found)
5. All detected (3 clients)
6. Skip (show config to copy manually)
Select one, multiple, or "All detected" to configure everything at once.
Verify Your Setup
npx @quadslab.io/discord-mcp check
QuadsLab.io [discord-mcp] — Health Check
────────────────────────────────────────────────────
Token ............ present
Bot .............. MyBot#1234
Server ........... My Gaming Server (1,024 members)
Permissions
────────────────────────────────────────────────────
✔ Manage Roles .............. yes
✔ Manage Channels ........... yes
✔ Kick Members .............. yes
✔ Ban Members ............... yes
...
██████████████████████████████ 100% (24/24)
✔ All 24 permissions granted
┌──────────────────────────────────────────────────┐
│ MCP server is ready! │
│ Run discord-mcp or use via .mcp.json in Claude │
└──────────────────────────────────────────────────┘
What Can You Do With It?
Once connected to Claude Code or Claude Co-Work, just ask in natural language:
- "Send a welcome message in #general"
- "Lock down the #announcements channel"
- "Who reacted to the last message in #server-guide?"
- "Create a role called VIP with a gold color and assign it to @john"
- "Show me the audit log for the last 24 hours"
- "Set up an automod rule to block links in #general"
- "Show me the last 20 messages in the 'API Discussion' thread"
- "Send a reply in the 'bug-report' thread saying we're looking into it"
- "List all archived threads in #general"
- "Create a forum post in #feedback titled Bug Reports"
- "Timeout @spammer for 1 hour for spamming"
- "List all webhooks and delete the unused ones"
- "Schedule a community event for Friday at 8pm in the Stage channel"
- "Bulk delete the last 50 messages in #bot-testing"
- "Give everyone with the Member role access to #private-channel"
- "Create a poll in #general asking which game to play Friday"
- "DM all moderators about the upcoming server event"
- "Set the bot's status to 'Watching over 500 members'"
- "Show me who's in the Gaming voice channel right now"
Claude automatically resolves channel, role, and member names using fuzzy matching — no need to look up IDs.
Features
- 139 tools across 20 categories — comprehensive Discord server administration without leaving the terminal
- Interactive setup wizard —
npx initwalks you through bot creation, token validation, and config in under a minute - Health check & permission audit —
npx checkverifies your token, server access, and all 24 required permissions with a visual progress bar - Fuzzy name resolution — type
"bot testing","bot-testing", or"bottesting"and it resolves correctly; no need to look up IDs - Thread-aware messaging — all message tools (send, edit, pin, react, etc.) work in threads and channels alike — no separate tools needed
- Zero-config name matching — channels, roles, and members are all resolved by name, ID, or mention format automatically
- Pre-cached server data — all channels, roles, and members are cached on startup for instant lookups without extra API calls
- Structured JSON responses — every tool returns consistent, pretty-printed JSON
- Audit log integration — all modifying operations accept a
reasonparameter that appears in the Discord audit log - Helpful error recovery — failed lookups return suggestions (e.g., "Did you mean: #general, #bot-testing?")
- MCP resources — three read-only resources for server overview data
Alternative Setup (Manual)
If you prefer to configure things manually instead of using the wizard:
Manual setup steps
1. Create a Discord bot
Follow the [Bot Setup Guide](docs/bot-setup-guide.md) to create a bot in the Discord Developer Portal and get your token.
2. Add to your MCP config
Add the following discord entry to your client's config file:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@quadslab.io/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token",
"DISCORD_GUILD_ID": "your-server-id"
}
}
}
}
| Client | Config file location | |--------|---------------------| | Claude Code | .mcp.json in your project root | | Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) | | Cursor | ~/.cursor/mcp.json | | Windsurf | ~/.codeium/windsurf/mcp_config.json |
3. Connect
- Claude Code: Type
/mcpto connect - Claude Desktop: Restart the app
- Cursor / Windsurf: Reload the window
Run from source
git clone https://github.com/HardHeadHackerHead/discord-mcp.git
cd discord-mcp
npm install
cp .env.example .env
# Edit .env with your DISCORD_TOKEN and DISCORD_GUILD_ID
npm run build
npm start
CLI Reference
$ npx @quadslab.io/discord-mcp [command]
| Command | Description | |---------|-------------| | init | Interactive setup wizard — creates bot, validates token, auto-configures Claude Code / Co-Work / Desktop / Cursor / Windsurf | | check | Health check — verifies token, server access, and permission audit | | update | Check for new versions and clear the npx cache so the next run pulls the latest | | start | Start the MCP server (default when no command given) | | help | Show help message | | version | Show version |
When launched via .mcp.json (stdin is not a TTY), the server starts automatically — no subcommand needed.
Updating
Your MCP client config doesn't pin a version, so updating is simple:
npx @quadslab.io/discord-mcp update
This checks npm for the latest version, clears the npx cache, and your next MCP client launch will use the new version automatically. Your bot token, server, and client configuration are all preserved — nothing needs to be reconfigured.
To verify after updating:
npx @quadslab.io/discord-mcp version
npx @quadslab.io/discord-mcp check
Tools Overview
Summary
| Category | Tools | Description | |----------|------:|-------------| | Guild | 2 | Server information and metadata | | Roles | 11 | Role creation, editing, permissions, and assignment | | Channels | 20 | Channel creation, editing, permissions, and organization | | Members | 15 | Member management, moderation, and bulk operations | | Messages | 14 | Send, edit, delete, pin, and react to messages (works in threads too) | | Reactions | 1 | Detailed reaction data with reactor info | | Server Admin | 16 | Server settings, invites, bans, audit log, and integrations | | Threads | 15 | Thread creation, reading, editing, archiving, and member management | | Forums | 5 | Forum posts and tag management | | Emojis & Stickers | 7 | Custom emoji and sticker management | | Webhooks | 4 | Webhook creation, deletion, and messaging | | Scheduled Events | 5 | Event creation, editing, and deletion | | Stage Instances | 3 | Stage channel management | | Auto-Moderation | 4 | Automod rule creation, editing, and deletion | | Polls | 3 | Create polls, get results, end polls early | | Direct Messages | 2 | Send DMs and embed DMs to server members | | Bot Presence | 2 | Set bot status/activity, get bot info | | Server Templates | 4 | List, create, delete, sync server templates | | Application Commands | 4 | Manage slash commands (CRUD) | | Onboarding | 2 | Get and edit server onboarding configuration | | Total | 139 | |
Full tool reference (click to expand)
Guild (2 tools)
| Tool | Description | |------|-------------| | list_guilds | List all servers the bot is a member of | | get_guild_info | Detailed server info — member count, channels, roles, features, boost tier |
Roles (11 tools)
| Tool | Description | |------|-------------| | list_roles | List all roles sorted by position with colors and member counts | | create_role | Create a new role with name, color, hoist, and mentionable options | | delete_role | Delete a role (with managed role protection) | | modify_role | Change a role's name, color, hoist, mentionable, or position | | get_role_permissions | View all permissions granted to a role | | modify_role_permissions | Grant or revoke specific permissions on a role | | set_role_icon | Set a Unicode emoji or image as the role icon (requires boost level 2+) | | assign_role | Add a role to a member | | remove_role | Remove a role from a member | | get_role_members | List all members who have a specific role | | clone_role | Duplicate a role with all its permissions and settings |
Channels (20 tools)
| Tool | Description | |------|-------------| | list_channels | List all channels organized by category | | create_text_channel | Create a new text channel, optionally in a category | | create_voice_channel | Create a new voice channel with bitrate and user limit | | create_category | Create a new channel category | | create_forum_channel | Create a new forum channel with optional tags and default settings | | delete_channel | Delete any channel type | | modify_channel | Change name, topic, category, NSFW, position, user limit | | set_channel_permissions | Set permission overwrites for a role or user on a channel | | view_channel_permissions | View all permission overwrites on a channel | | lock_channel | Deny SendMessages for @everyone (quick lock) | | unlock_channel | Remove SendMessages deny for @everyone | | set_slowmode | Set rate limit (0–21600 seconds) on a text channel | | clone_channel | Duplicate a channel with all permissions and settings | | reorder_channels | Reorder channels by specifying new positions | | set_voice_region | Set the RTC region for a voice channel | | follow_announcement_channel | Follow an announcement channel to cross-post into another channel | | create_stage_channel | Create a new stage channel | | get_channel_invites | List all invites for a specific channel | | set_channel_topic | Set or clear a channel's topic/description | | get_voice_members | List all members currently in a voice or stage channel |
Members (15 tools)
| Tool | Description | |------|-------------| | list_members | List members with optional role and search filters | | get_member | Detailed member info — roles, join date, account age, permissions | | kick_member | Kick a member from the server | | ban_member | Ban a member with optional message deletion (0–7 days) | | unban_member | Remove a ban by username or user ID | | timeout_member | Apply a timeout (10m, 1h, 1d, 1w) or remove one | | prune_members | Remove inactive members (supports dry run and role filtering) | | bulk_assign_role | Assign a role to multiple members at once | | bulk_remove_role | Remove a role from multiple members at once | | set_nickname | Change a member's nickname or reset it | | move_to_voice | Move a member to a different voice channel | | disconnect_from_voice | Disconnect a member from their voice channel | | get_member_permissions | Get a member's effective permissions in a specific channel | | search_members | Search members by username, nickname, or role with advanced filters | | bulk_timeout_members | Apply a timeout to multiple members at once |
Messages (14 tools)
All message tools work in both regular channels and threads — just pass the thread name or ID as the channel.
| Tool | Description | |------|-------------| | get_messages | Fetch recent messages from a text channel, voice channel, or thread | | get_message | Fetch a single message by ID with full details | | send_message | Send a text message, optionally as a reply | | send_embed | Send a rich embed with title, fields, images, and footer | | edit_message | Edit a message previously sent by the bot | | delete_message | Delete a single message by ID | | bulk_delete_messages | Delete 2–100 messages at once (
Fuzzy Matching
All tools that accept channel, role, or member names use smart fuzzy matching. You never need to look up IDs manually. The resolution order is:
- Exact ID match — pass a Discord snowflake ID directly
- Exact name match — case-insensitive
- Normalized match — ignores hyphens, spaces, and underscores (
"bot testing"matches"bot-testing") - Substring match — partial name matches at 0.7+ similarity threshold
- Thread fallback — if no channel matches, active threads are searched using the same steps above
- Archived thread fallback — if an ID is provided and not found in active threads, the thread is fetched directly (covers archived threads)
Mention formats are also handled automatically:
- Channels:
#nameor `` - Roles:
@nameor `` - Members:
@nameor `or`
If no match is found, the error message includes suggestions of similar names to help you correct the input.
MCP Resources
Three read-only resources are exposed for quick server overview data:
| URI | Description | |-----|-------------| | discord://server/summary | Text overview of the server (channels, roles, members) | | discord://server/channels | JSON list of all channels organized by category | | discord://server/roles | JSON list of all roles sorted by position |
Required Permissions
The Discord bot needs the following permissions for full functionality:
| Category | Permissions | |----------|-------------| | General | Manage Server, Manage Roles, Manage Channels, View Audit Log, Manage Webhooks, Manage Events, Manage Emojis and Stickers | | Text | Send Messages, Manage Messages, Read Message History, Add Reactions, Use External Emojis | | Voice | Move Members, Disconnect Members | | Moderation | Kick Members, Ban Members, Moderate Members, Manage Auto Moderation |
The init wizard auto-generates an invite URL with all of these. If you set up manually, see the [Bot Setup Guide](docs/bot-setup-guide.md) for which checkboxes to select.
The bot can only act within its role hierarchy — it cannot manage roles positioned higher than its own highest role.
Gateway Intents
Th
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: HardHeadHackerHead
- Source: HardHeadHackerHead/discord-mcp
- License: MIT
- Homepage: https://QuadsLab.io
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.