Slack MCP Server
Read, search and post in a Slack workspace, including DMs, threads, unreads and user groups
Runs a Discord bot as an MCP server for administering one Discord server: roles, channels, members, moderation
By HardHeadHackerHead (individual) TypeScript Local · stdio Communication
38 popularity score ★ 42 ↓ 180/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs DISCORD_TOKEN, DISCORD_GUILD_ID. Replace each <NAME> with your value.
claude mcp add discord -e DISCORD_TOKEN=<DISCORD_TOKEN> -e DISCORD_GUILD_ID=<DISCORD_GUILD_ID> -- npx -y @quadslab.io/discord-mcp{
"mcpServers": {
"discord": {
"command": "npx",
"args": [
"-y",
"@quadslab.io/discord-mcp"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}{
"mcpServers": {
"discord": {
"command": "npx",
"args": [
"-y",
"@quadslab.io/discord-mcp"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}{
"servers": {
"discord": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@quadslab.io/discord-mcp"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}[mcp_servers.discord]
command = "npx"
args = ["-y", "@quadslab.io/discord-mcp"]
[mcp_servers.discord.env]
DISCORD_TOKEN = "<DISCORD_TOKEN>"
DISCORD_GUILD_ID = "<DISCORD_GUILD_ID>"gemini mcp add --scope user -e DISCORD_TOKEN=<DISCORD_TOKEN> -e DISCORD_GUILD_ID=<DISCORD_GUILD_ID> discord npx -- -y @quadslab.io/discord-mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs DISCORD_TOKEN, DISCORD_GUILD_ID. Replace each <NAME> with your value.
git clone https://github.com/HardHeadHackerHead/discord-mcp.git
cd discord-mcp
npm install
npm run buildclaude mcp add discord -e DISCORD_TOKEN=<DISCORD_TOKEN> -e DISCORD_GUILD_ID=<DISCORD_GUILD_ID> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js'{
"mcpServers": {
"discord": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}{
"mcpServers": {
"discord": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}{
"servers": {
"discord": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"
],
"env": {
"DISCORD_TOKEN": "<DISCORD_TOKEN>",
"DISCORD_GUILD_ID": "<DISCORD_GUILD_ID>"
}
}
}
}[mcp_servers.discord]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js"]
[mcp_servers.discord.env]
DISCORD_TOKEN = "<DISCORD_TOKEN>"
DISCORD_GUILD_ID = "<DISCORD_GUILD_ID>"gemini mcp add --scope user -e DISCORD_TOKEN=<DISCORD_TOKEN> -e DISCORD_GUILD_ID=<DISCORD_GUILD_ID> discord node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/cli.js'DISCORD_TOKEN |
Required: Token of your Discord bot; BOT_TOKEN is accepted instead. |
|---|---|
DISCORD_GUILD_ID |
Required: ID of the Discord server to manage. |
Discord MCP, published on npm as @quadslab.io/discord-mcp by QuadsLab.io, connects an assistant to a Discord bot you create yourself and turns that bot's powers into 139 tools for running one Discord server (a guild). The tools cover roles and their permissions, channels and permission overwrites, members (kick, ban, timeout, prune, nicknames, voice moves), messages and threads, forums, emojis and stickers, webhooks, scheduled events, stage instances, auto-moderation rules, polls, DMs to members, server templates, slash commands and onboarding. It also exposes three read-only resources with a summary of the server, its channels and its roles.
Channels, roles and members can be named loosely: the server matches IDs, mentions, exact names, names with hyphens or spaces ignored, and close partial names, and suggests near matches when nothing fits. Changes accept a reason that lands in the Discord audit log. On start it logs the bot in and caches the server's channels, roles and members.
The same package carries a setup CLI: `init` walks through creating the bot, checks the token, builds an invite link with the needed permissions and writes the config for Claude Code, Claude Desktop, Cursor or Windsurf; `check` audits the bot's 24 permissions. Not in the README: the server also accepts the token as BOT_TOKEN when DISCORD_TOKEN is unset, and it reads a .env file from the working directory (dist/mcp-server.js, version 2.1.1).
| Runtime | Node.js 18+ |
|---|
Node.js 18 or later (for npx). A Discord bot of your own created in the Discord Developer Portal, with its token, invited to the server you want to manage with the permissions the README lists (Manage Server, Manage Roles, Ban Members and others), and with the privileged Server Members and Message Content intents switched on. The ID of that Discord server.
Works on one Discord server per running instance: it exits at start unless both DISCORD_TOKEN (or BOT_TOKEN) and DISCORD_GUILD_ID are set (dist/mcp-server.js, 2.1.1). There is no read-only mode or tool filter: all 139 tools are offered. The bot can only manage roles below its own highest role. Bulk delete takes 2 to 100 messages younger than 14 days; role icons and server banners need boost level 2. On large servers the member cache at start can hit Discord's gateway rate limit; the README says it retries, and the first call after start may be slow.
Server owners and moderators who want to run a Discord community from Claude Code, Claude Desktop, Cursor or Windsurf in plain language, including destructive admin work such as bans, pruning and bulk deletes. It needs a bot of your own with wide permissions, so it is a poor fit for someone who only wants to read or post in channels: a narrower bot with fewer permissions limits what can go wrong. Pick something else if you need several servers at once from one instance or a read-only setup. It is a community project, not Discord's own.
list_guildsget_guild_infolist_rolescreate_roledelete_rolemodify_rolemodify_role_permissionsassign_roleremove_rolelist_channelscreate_text_channelcreate_voice_channelcreate_categorydelete_channelmodify_channelset_channel_permissionslock_channelunlock_channelset_slowmodeget_voice_memberslist_membersget_memberkick_memberban_memberunban_membertimeout_memberprune_membersbulk_assign_roleset_nicknamesearch_membersget_messagessend_messagesend_embededit_messagedelete_messagebulk_delete_messagespin_messageadd_reactionsearch_messagesget_reactionsedit_servercreate_inviteget_audit_loglist_banslist_threadsget_thread_messagescreate_threadarchive_threadcreate_forum_postcreate_emojicreate_webhooksend_webhook_messagecreate_eventstart_stagecreate_automod_rulecreate_pollsend_dmset_bot_presencecreate_commandedit_onboarding