A Monday community digest
Every Monday at 9:00, read the last week of messages in my Discord support channel, group them into questions nobody answered, bugs people reported, and feature requests, and write the result to discord-weekly.md.
Verified MCP server: Discord
The tool list below is a live capture from the running server; an authenticated tool call is still pending credentials.
The short answer
Last verified 2026-08-03
The Discord MCP server gives an AI assistant a set of Discord actions: read a channel, post a message, open and reply to forum threads, add reactions, create and delete channels and categories, and manage webhooks. Discord publishes no MCP server of its own, so the one on this page is a community package, mcp-discord, which runs on your Mac over stdio and connects to Discord as a bot you create yourself. We ran it, spoke the protocol to it, and enumerated all 22 tools it exposes; the table below is that capture, word for word. What we could not do is complete an authenticated call: that needs a real bot token and a bot invited into a real server, so this page shows the tools and the exact errors you get without one, and stops there. Two things are worth knowing before you install it. A wrong token does not stop this server: it starts anyway and lists every tool, which is why a client can look connected while nothing works. And npm is a year behind the repository: npm still serves version 1.3.4 from July 2025 while GitHub has shipped seven newer releases, so the README documents 42 tools and the package you actually get answers with 22. [1][3][4][5]
Verification
Method
We spawned the server with npx over stdio with a dummy bot token, completed the MCP initialize handshake, and called tools/list: the 22 tools below are that response, word for word. We then made one real tools/call, discord_get_server_info, and it failed, as it had to. Authenticated calls here are pending a real DISCORD_TOKEN, a bot token minted in the Discord Developer Portal for a bot that has been invited into a Discord server, and we have neither, so nothing on this page claims a successful Discord read or write. We ran the server four times to collect the errors printed further down: with a dummy token passed as a command argument, with a dummy token passed as an environment variable instead, with no token at all, and once more with deliberately incomplete tool arguments. All four runs started, and all four listed the same 22 tools.
Startup banner
{"jsonrpc":"2.0","method":"log","params":{"level":"error","message":"Auto-login failed: DiscordjsError [TokenInvalid]: An invalid token was provided."}}
{"jsonrpc":"2.0","method":"log","params":{"level":"info","message":"Initializing stdio transport"}}
{"jsonrpc":"2.0","method":"log","params":{"level":"info","message":"MCP server started successfully"}}One real tool call
tools/call discord_get_server_info {"guildId": "000000000000000000"}Discord client not logged in.
Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 22 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| discord_create_categoryguildId*name*positionreason | Creates a new category in a Discord server. |
| discord_edit_categorycategoryId*namepositionreason | Edits an existing Discord category (name and position). |
| discord_delete_categorycategoryId*reason | Deletes a Discord category by ID. |
| discord_logintoken | Logs in to Discord using the configured token |
| discord_sendchannelId*message* | Sends a message to a specified Discord text channel |
| discord_get_forum_channelsguildId* | Lists all forum channels in a specified Discord server (guild) |
| discord_create_forum_postforumChannelId*title*content*tags | Creates a new post in a Discord forum channel with optional tags |
| discord_get_forum_postthreadId* | Retrieves details about a forum post including its messages |
| discord_reply_to_forumthreadId*message* | Adds a reply to an existing forum post or thread |
| discord_create_text_channelguildId*channelName*topic | Creates a new text channel in a Discord server with an optional topic |
| discord_delete_channelchannelId*reason | Deletes a Discord channel with an optional reason |
| discord_read_messageschannelId*limit | Retrieves messages from a Discord text channel with a configurable limit |
| discord_get_server_infoguildId* | Retrieves detailed information about a Discord server including channels and member count |
| discord_add_reactionchannelId*messageId*emoji* | Adds an emoji reaction to a specific Discord message |
| discord_add_multiple_reactionschannelId*messageId*emojis* | Adds multiple emoji reactions to a Discord message at once |
| discord_remove_reactionchannelId*messageId*emoji*userId | Removes a specific emoji reaction from a Discord message |
| discord_delete_forum_postthreadId*reason | Deletes a forum post or thread with an optional reason |
| discord_delete_messagechannelId*messageId*reason | Deletes a specific message from a Discord text channel |
| discord_create_webhookchannelId*name*avatarreason | Creates a new webhook for a Discord channel |
| discord_send_webhook_messagewebhookId*webhookToken*content*usernameavatarURLthreadId | Sends a message to a Discord channel using a webhook |
| discord_edit_webhookwebhookId*webhookTokennameavatarchannelIdreason | Edits an existing webhook for a Discord channel |
| discord_delete_webhookwebhookId*webhookTokenreason | Deletes an existing webhook for a Discord channel |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": [
"-y",
"mcp-discord"
],
"env": {
"DISCORD_TOKEN": "YOUR_DISCORD_BOT_TOKEN"
}
}
}
}Paste your bot token in place of YOUR_DISCORD_BOT_TOKEN, then quit and reopen Claude Desktop. The README also documents passing the token as a command argument, --config followed by the token; we ran both and both work, but the environment variable keeps the token out of the process arguments, where anything on your Mac can read it. [9][5]
One command in your terminal:
claude mcp add discord -e DISCORD_TOKEN=YOUR_DISCORD_BOT_TOKEN -- npx -y mcp-discord
Everything after the double dash is the exact command Claude Code will run, and it is the command we ran in the verification run. The -e flag sets the environment variable the server reads for its token. [10]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": [
"-y",
"mcp-discord"
],
"env": {
"DISCORD_TOKEN": "YOUR_DISCORD_BOT_TOKEN"
}
}
}
}Cursor picks the file up on restart. This file holds a live bot token, so use the one in your home folder rather than a project-level .cursor/mcp.json that could end up in git. [11]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Discord Command npx Arguments -y mcp-discord Environment Variables DISCORD_TOKEN=YOUR_DISCORD_BOT_TOKEN
The token goes in the Environment Variables field, one KEY=value per line, with no quotes around it. Click Test Connection first, and read the result carefully: this server answers with twenty-two tools even when the token is wrong, so a successful test proves the server started, not that Discord accepted you. [12]
No terminal needed
The connection itself needs no terminal, but the bot behind it does need setting up on Discord's own website first, and there is no way around that. Routines is a Mac app that runs MCP servers for you: create the bot once, fill in four fields, and this server's tools are available to your AI in chat and in scheduled routines.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
Go to discord.com/developers/applications, click New Application, name it, then open the Bot tab. Under Privileged Gateway Intents turn on Message Content, Server Members, and Presence: the README lists all three as prerequisites, and the server names all three in its own login error. Then click Reset Token and copy the token it shows you. That string is the credential everything else on this page needs.
03
A Discord bot can only see servers it has been added to. In the same portal open OAuth2, tick bot under scopes, pick the permissions you want it to have, and open the generated link in your browser to add it to your Discord server. If you skip this, the server starts and lists its tools but every call is about a server it cannot see.
04
Back in Routines, click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.
05
Switch the form to Command (stdio): this server is a command that runs on your Mac, not a web address. Name it Discord. Command: npx. Arguments: -y mcp-discord. In Environment Variables put one line, DISCORD_TOKEN=, followed by the token you copied.
06
Click Test Connection: Routines starts the server and reports how many tools it found, twenty-two for this one. Note that it reports twenty-two with a wrong token too, so confirm the token by asking the assistant for your server info once the connection is added. Then click Add Server. The tools work in chat right away; to let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every Monday at 9:00, read the last week of messages in my Discord support channel, group them into questions nobody answered, bugs people reported, and feature requests, and write the result to discord-weekly.md.
Every weekday at 17:00, read the last 50 messages in my Discord support channel, list every question that still has no reply, and post that list as a single message in my team channel.
Every Friday at 15:00, read my release-notes.md file, and if anything was added this week, post a short plain-English summary of it to my Discord announcements channel.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
Discord client not logged in.
The fix
This is the state our verification run was in, and it is the one to understand first, because it looks like a broken server when it is not. The server started, the tools are real, and Discord simply never accepted the token. Check the token itself, then check that the three privileged intents are on in the Developer Portal, then restart your MCP client so it starts the server again.
What you see
{"jsonrpc":"2.0","method":"log","params":{"level":"error","message":"Auto-login failed: DiscordjsError [TokenInvalid]: An invalid token was provided."}}The fix
We triggered this on purpose with a made-up token. The server logs the failure and carries on: it finishes starting, answers tools/list with all twenty-two tools, and only fails when a tool is called. Most MCP clients never show you this line, so a mistyped or reset token looks like a working connection. Mint a fresh token in the Developer Portal under Bot, then Reset Token, and paste it again.
What you see
{"jsonrpc":"2.0","method":"log","params":{"level":"info","message":"No Discord token found in config, skipping auto-login"}}The fix
Started with neither the --config argument nor the DISCORD_TOKEN environment variable, the server skips the login attempt altogether and still lists all twenty-two tools. Add the token in the Environment Variables field, or after --config in the Arguments field, and restart. Both routes work; we tested both.
What you see
Discord token not provided and not configured. Cannot log in. Please check the following: 1. Provide a token in the login command or make sure the token is correctly set in your config or environment variables. 2. Ensure all required privileged intents (Message Content, Server Members, Presence) are enabled in the Discord Developer Portal for your bot application.
The fix
This is what the discord_login tool returns when no token reached the server, and it is worth quoting because of its second half: the server itself tells you that a correct token is not enough unless Message Content, Server Members and Presence are enabled on the bot. That switch is in the Developer Portal under your application, then Bot, then Privileged Gateway Intents, and it is the step people miss.
What you see
Invalid arguments: message: Required
The fix
The server validates arguments before it touches Discord and names the field that was missing. We triggered this by calling discord_send with a channel but no message. Nothing is wrong with your setup: tell the assistant what you actually want sent, or which message ID you mean, and it will fill the field in.
The fix
The npx command belongs to Node.js. If Node is not installed on your Mac, every client on this page fails at the spawn step before the server can say anything. Install Node from nodejs.org, restart your MCP client, and try again.
FAQ
It is a small program that gives an AI assistant a set of Discord actions: reading messages in a channel, sending one, creating and deleting text channels and categories, opening forum posts and replying to them, adding and removing reactions, and managing webhooks. It runs as a local process on your Mac, talks to your AI app over stdio, and talks to Discord as a bot account you create in your own Discord Developer Portal. [5]
We started the server, completed the MCP handshake, and read the tool list off the wire; that part is measured, and the table above is the raw response. We also made real tool calls, and they failed, because a real call needs a bot token for a real Discord server and we have none. So the tool list is evidence, and nothing on this page describes what a successful Discord read or post returns. The errors we did get are printed in full in the troubleshooting section.
The running server exposes 22: messages (discord_send, discord_read_messages, discord_delete_message), reactions (discord_add_reaction, discord_add_multiple_reactions, discord_remove_reaction), forums (discord_get_forum_channels, discord_create_forum_post, discord_get_forum_post, discord_reply_to_forum, discord_delete_forum_post), channels and categories (discord_create_text_channel, discord_delete_channel, discord_create_category, discord_edit_category, discord_delete_category), webhooks (discord_create_webhook, discord_send_webhook_message, discord_edit_webhook, discord_delete_webhook), plus discord_get_server_info and discord_login. The table above is the live tools/list output, word for word.
Because npm and GitHub are not showing you the same software. The npm package has sat at version 1.3.4 since 10 July 2025, while the repository has shipped seven more releases since, the newest on 13 July 2026, and npm never received them. The README you read on GitHub describes the newer code: it documents 42 tools, and we counted 20 of them missing from what npx installs, including everything to do with roles and members, plus voice channels, message search, message editing and channel permissions. There is a third version number to go with it: npm says 1.3.4, the repository says 1.3.8, and the running server introduces itself over MCP as 1.0.0. All three are real, and all three are on this page. [1][4][5]
Not as of the date on this page. We checked three places: the discord and discordjs GitHub organisations hold no MCP repository, neither of Discord's own npm scopes, @discord and @discordjs, publishes an MCP package, and Discord's developer documentation has no MCP page, the address one would live at returns a 404. Watch the scope when you search npm, because packages named @discord-mcp are published by an unrelated account, not by Discord. Every Discord MCP server you can install today, including this one, is community built by an individual developer, so read the maintainer line above the way you would read it on any other unaffiliated package. [8]
Three things, all free, all on Discord's side. A bot application in the Discord Developer Portal, its token copied out of the Bot tab. Three privileged gateway intents switched on for that bot: Message Content, Server Members, and Presence. And the bot invited into the Discord server you want it to work in, through the OAuth2 link the portal generates, because a bot can only see servers it was explicitly added to. Skip any one of them and you get the errors printed in the troubleshooting section above. [5][7]
Not for the connection. In Routines you fill four fields in Settings and click Test Connection; the walkthrough above shows every click. Claude Desktop and Cursor each need a small JSON file edited once. Only Claude Code is terminal-first by nature. The bot creation itself happens on Discord's website, not in a terminal, so nobody has to type a command to use this server. [12][9]
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
Latest version 1.3.4, published 2025-07-10, license MIT, sole maintainer barry99625.
[2]
[3]
101 stars, 57 forks and a push dated 2026-07-13 at access time, per the GitHub API.
[4]
Seven releases after v1.3.4, from v1.3.5 to v1.4.1 on 2026-07-13, none of which reached npm.
[5]
Prerequisites, the three privileged intents, the bot invite links, the npx command, and a tools list of 42 entries.
[6]
[7]
Where the bot, its token, its privileged intents and its invite link come from.
[8]
The docs index resolves; the /developers/mcp path under it returns 404 at access time, so Discord documents no MCP server.
[9]
The official Claude Desktop quickstart and the shape of claude_desktop_config.json.
[10]
The claude mcp add syntax, including -e for environment variables.
[11]
[12]
How Routines runs one-click OAuth connectors and any MCP server.
This page describes Discord as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines