
discord-mcp by SaseQ: a community Discord bot server for AI assistants
Lets your AI assistant post, read and moderate on your Discord server through a bot you control.
This community server runs as a Discord bot you create, so Claude, Codex or Cursor can read and send messages, set up channels and roles, and moderate members on servers the bot has joined. Discord has no official server, and this is the most-starred bot-based option. You run it yourself in Docker on your own computer with your bot's token. Its web address has no login, so keep it on your own machine and give the bot only the Discord permissions it needs.
Good for
- Community managers who want an assistant to set up channels, roles and events
- Moderators who want help with timeouts, kicks, bans and invite cleanup
- Developers who want Claude Code or Codex to post updates and read a channel
- n8n users wiring Discord into automated workflows
Works in
5 supported · 8 should work
Tap an app to see how to set it up and any known problems.
The README covers it: start the container, then add its local address as an HTTP server.
Known problems
- Closed
The older setup started a new container for every terminal
Workaround: Use the recommended HTTP mode with one shared container.
Reported Mar 2026 · GitHub
The README covers the config file setup; the Connectors screen needs a public HTTPS address. GitHub
The README covers it: add the container's local address to ~/.cursor/mcp.json. GitHub
The README covers it: add the container's local address to Codex. GitHub
The README covers the MCP Client node; if n8n runs in Docker, use the container name instead of localhost. GitHub
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Install discord MCP
Claude Code
- 1
Copy this prompt.
Add the discord MCP server to Claude Code. Run this command: export DISCORD_TOKEN="YOUR_DISCORD_BOT_TOKEN" export DISCORD_GUILD_ID="OPTIONAL_DEFAULT_SERVER_ID" export SPRING_PROFILES_ACTIVE=http docker run -d -i \ --name discord-mcp \ --restart unless-stopped \ -p 8085:8085 \ -e SPRING_PROFILES_ACTIVE \ -e DISCORD_TOKEN \ -e DISCORD_GUILD_ID \ saseq/discord-mcp:latest claude mcp add discord-mcp --transport http http://localhost:8085/mcp Ask me for DISCORD_TOKEN and only put the values in that config, nowhere else. Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Docker, A Discord bot token.
Create a bot in the Discord Developer Portal, copy its token and invite it to your server first. Run the container once, then point every assistant at it; it keeps running in the background. Keep port 8085 on your own machine: the address has no login, so anyone who can reach it can use your bot.
From the project README. Source.
Tools
Reads recent messages in a channel, with who wrote them
Reads up to 100 messages of a channel's history at a time, including authors, replies and attachment details, and can page further back.
Try: “Read the last 50 messages in #general and summarise them”
Read ·
read_messagesFinds messages in a channel or thread that contain some text
Scans up to the 1,000 most recent messages of a channel or thread for matching text, newest first.
Try: “Find messages in #support that mention 'refund'”
Read ·
search_messagesShows one message, and the message it replies to
Fetches a single message by its ID in the same format as the history, including the message it replied to.
Try: “Show me the message this link points to and what it was replying to”
Read ·
get_messageFinds the replies to a message
Scans the messages posted after a message, up to 1,000, to find the ones that reply to it.
Try: “Who replied to the announcement I posted this morning?”
Read ·
get_message_repliesPosts a message in a channel
Sends a message to a channel as the bot.
Try: “Post 'Server maintenance starts at 9pm UTC' in #announcements”
Write ·
send_messageEdits a message the bot posted
Changes the text of a message in a channel.
Try: “Fix the typo in the bot's last message in #announcements”
Write ·
edit_messageDeletes a message in a channel
Removes a message from a channel.
Try: “Delete the spam message that was just posted in #general”
Delete ·
delete_messageAdds an emoji reaction to a message
Reacts to a message with an emoji.
Try: “React with a thumbs up to the latest message in #ideas”
Write ·
add_reactionRemoves an emoji reaction from a message
Takes a given emoji reaction off a message.
Try: “Remove the bot's thumbs up from that message”
Delete ·
remove_reactionReads the bot's private messages with someone
Reads the history of private messages between the bot and a user, up to 100 at a time.
Try: “What has Alex sent the bot in private messages this week?”
Read ·
read_private_messagesSends someone a private message from the bot
Sends a direct message from the bot to a user.
Try: “Send Sam a private message reminding them about tonight's event”
Write ·
send_private_messageEdits a private message the bot sent
Changes a direct message the bot sent to a user.
Try: “Change the time in the reminder the bot sent Sam to 8pm”
Write ·
edit_private_messageDeletes a private message the bot sent
Removes a direct message between the bot and a user.
Try: “Delete the last private message the bot sent to Sam”
Delete ·
delete_private_messageShows details about your Discord server
Returns information about the server, such as its name, members and settings.
Try: “Give me an overview of my Discord server”
Read ·
get_server_infoFinds server members by name or ID
Searches members by ID, username, display name or nickname and returns matches with their user IDs.
Try: “Find members whose nickname contains 'mod'”
Read ·
search_membersShows a member's names, roles and join date
Looks up a member by user ID and returns their usernames, nickname, bot status, join time and roles.
Try: “When did this user join and what roles do they have?”
Read ·
get_member_by_idLists every channel on the server
Returns all channels on the server.
Try: “List all the channels on my server”
Read ·
list_channelsShows details about a channel
Returns detailed information about one channel.
Try: “What are the settings of #general?”
Read ·
get_channel_infoCreates a new text channel
Adds a new text channel to the server.
Try: “Create a #feedback text channel”
Write ·
create_text_channelChanges a text channel's name, topic or settings
Edits a text channel's name, topic, age-restricted flag, slowmode, category or position.
Try: “Set a 10 second slowmode on #general”
Write ·
edit_text_channelMoves a channel to another category or position
Moves a channel into a different category or changes its order.
Try: “Move #feedback into the Community category”
Write ·
move_channelDeletes a channel
Removes a channel from the server.
Try: “Delete the #old-announcements channel”
Delete ·
delete_channelLists the channels in a category
Returns the channels inside one category.
Try: “Which channels are in the Voice category?”
Read ·
list_channels_in_categoryCreates a channel category
Adds a new category to group channels.
Try: “Create a category called Events”
Write ·
create_categoryRenames or moves a category
Changes a category's name or position.
Try: “Rename the Events category to Community Events”
Write ·
edit_categoryDeletes a category
Removes a channel category from the server.
Try: “Delete the empty Archive category”
Delete ·
delete_categoryLists every role and its details
Returns all roles on the server with their settings.
Try: “List all roles on my server”
Read ·
list_rolesCreates a new role
Adds a new role to the server.
Try: “Create a role called Event Host”
Write ·
create_roleChanges a role's settings
Modifies an existing role, such as its name, color or permissions.
Try: “Make the Event Host role green”
Write ·
edit_roleDeletes a role for good
Permanently removes a role from the server.
Try: “Delete the unused Beta Tester role”
Delete ·
delete_roleGives a member a role
Adds a role to a member.
Try: “Give Sam the Moderator role”
Write ·
assign_roleTakes a role away from a member
Removes a role from a member.
Try: “Remove the Moderator role from Sam”
Write ·
remove_roleMutes a member for a set time
Stops a member from talking for a chosen duration.
Try: “Time out spambot123 for 24 hours”
Write ·
timeout_memberEnds a member's timeout early
Lifts a timeout before it expires.
Try: “Remove the timeout on Sam”
Write ·
remove_timeoutKicks a member off the server
Removes a member from the server; they can rejoin with an invite.
Try: “Kick spambot123 from the server”
Delete ·
kick_memberBans a user from the server
Bans a user so they cannot rejoin.
Try: “Ban spambot123 for posting scam links”
Delete ·
ban_memberLifts a ban
Removes a user's ban so they can rejoin.
Try: “Unban Alex, it was a mistake”
Write ·
unban_memberLists banned users and why
Returns the users banned from the server with the ban reasons.
Try: “Show me everyone who is banned and why”
Read ·
get_bansChanges a member's nickname
Sets a member's nickname on the server.
Try: “Set Sam's nickname to Sam (Mod)”
Write ·
set_nicknameCreates a voice channel
Adds a new voice channel.
Try: “Create a voice channel called Game Night”
Write ·
create_voice_channelCreates a stage channel for audio events
Adds a stage channel for talks and audio events.
Try: “Create a stage channel for our town hall”
Write ·
create_stage_channelChanges a voice channel's name, quality or user limit
Edits a voice or stage channel's name, bitrate, user limit or region.
Try: “Limit the Game Night voice channel to 10 people”
Write ·
edit_voice_channelMoves someone to another voice channel
Moves a member into a different voice channel.
Try: “Move Sam to the Meeting voice channel”
Write ·
move_memberDisconnects someone from voice
Removes a member from the voice channel they are in.
Try: “Disconnect the AFK user from voice”
Write ·
disconnect_memberServer-mutes or deafens someone in voice
Mutes or deafens a member in voice channels for the whole server.
Try: “Server-mute Alex in voice”
Write ·
modify_voice_stateLists upcoming and active server events
Returns the server's scheduled and active events.
Try: “What events are scheduled this month?”
Read ·
list_guild_scheduled_eventsShows who is interested in an event
Lists the users who marked interest in a scheduled event.
Try: “Who is interested in Game Night?”
Read ·
get_guild_scheduled_event_usersSchedules a server event
Creates a voice, stage or external event on the server.
Try: “Schedule Game Night for Friday at 8pm in the Game Night voice channel”
Write ·
create_guild_scheduled_eventChanges an event or starts, ends or cancels it
Edits an event's details or changes its status to started, completed or cancelled.
Try: “Move Game Night to Saturday”
Write ·
edit_guild_scheduled_eventDeletes a scheduled event
Permanently removes a scheduled event.
Try: “Delete the cancelled meetup event”
Delete ·
delete_guild_scheduled_eventShows who has special access in a channel
Lists the role and member permission overrides set on a channel.
Try: “Who has special permissions in #staff?”
Read ·
list_channel_permission_overwritesSets what a role can do in a channel
Creates or updates a role's permission override on a channel.
Try: “Make #announcements read-only for everyone except Moderators”
Write ·
upsert_role_channel_permissionsSets what one member can do in a channel
Creates or updates a member's permission override on a channel.
Try: “Let Sam post in #announcements”
Write ·
upsert_member_channel_permissionsRemoves a special channel permission
Deletes a role's or member's permission override from a channel.
Try: “Remove Sam's special access to #staff”
Delete ·
delete_channel_permission_overwriteLists active invite links and their use
Returns the server's active invites with their usage stats.
Try: “Which invite links are active and how often were they used?”
Read ·
list_invitesShows details about an invite link
Returns information about an invite, including public invites to other servers.
Try: “What server does this invite link go to?”
Read ·
get_invite_detailsCreates an invite link
Makes a new invite link for a channel.
Try: “Create an invite to #welcome that expires in a day”
Write ·
create_inviteRevokes an invite link
Deletes an invite so the link stops working.
Try: “Revoke the old invite link we posted on Twitter”
Delete ·
delete_inviteLists active threads across the server
Returns all active threads on the server.
Try: “What threads are active right now?”
Read ·
list_active_threadsLists the threads in one channel
Returns a channel's threads, including recent archived public ones.
Try: “List the threads in #support, including archived ones”
Read ·
list_threadsShows details about a thread
Returns a thread's parent channel, owner, archived or locked state and message and member counts.
Try: “Who started this thread and is it locked?”
Read ·
get_thread_infoLists forum channels
Returns all forum channels on the server.
Try: “Which forum channels do we have?”
Read ·
list_forum_channelsShows a forum's settings and tags
Returns a forum channel's details, including tags and settings.
Try: “What tags and settings does the #help forum use?”
Read ·
get_forum_channel_infoLists the tags in a forum
Returns the tags available in a forum channel.
Try: “List the tags in #help”
Read ·
list_forum_tagsLists active posts in a forum
Returns the active posts in a forum channel.
Try: “Show me the open posts in #help”
Read ·
list_forum_postsCreates a forum channel
Adds a new forum channel.
Try: “Create a #help forum for support questions”
Write ·
create_forum_channelChanges a forum's settings
Edits a forum's name, topic, slowmode, category, position, default sort or layout.
Try: “Sort the #help forum by newest activity”
Write ·
edit_forum_channelStarts a new forum post
Creates a post with a first message in a forum channel.
Try: “Post a 'Read before asking' guide in #help”
Write ·
create_forum_postLocks, archives, pins or retags a forum post
Locks or unlocks, archives or unarchives, pins or unpins a post, or changes its tags.
Try: “Lock and archive the solved posts in #help”
Write ·
modify_forum_postLists the server's custom emojis
Returns all custom emojis on the server.
Try: “Show our custom emojis”
Read ·
list_emojisShows details about a custom emoji
Returns information about one custom emoji.
Try: “Who can use the :partyparrot: emoji?”
Read ·
get_emoji_detailsUploads a new custom emoji
Adds a custom emoji from an image or image link, up to 256KB.
Try: “Add this image as a :wave: emoji”
Write ·
create_emojiRenames an emoji or limits who can use it
Changes a custom emoji's name or the roles allowed to use it.
Try: “Rename :wave: to :hello:”
Write ·
edit_emojiDeletes a custom emoji
Permanently removes a custom emoji.
Try: “Delete the :oldlogo: emoji”
Delete ·
delete_emojiLists a channel's webhooks
Returns the webhooks set up on a channel.
Try: “Which webhooks post into #deploys?”
Read ·
list_webhooksCreates a webhook on a channel
Adds a webhook that other apps can use to post into a channel.
Try: “Create a webhook on #deploys for our CI”
Write ·
create_webhookPosts a message through a webhook
Sends a message to a channel through a webhook, under the webhook's name.
Try: “Post the release notes in #deploys through the CI webhook”
Write ·
send_webhook_messageDeletes a webhook
Removes a webhook so it can no longer post.
Try: “Delete the old CI webhook”
Delete ·
delete_webhookUsed by the assistant behind the scenes
Looks up a member's user ID from their name
Finds a member's user ID from their username so the assistant can mention them. Used by the assistant for itself.
Try: “What is Sam's user ID?”
Read ·
get_user_id_by_nameLooks up a channel's ID from its name
Finds a channel's type and ID from its name. Used by the assistant before other channel actions.
Try: “What is the ID of #general?”
Read ·
find_channelLooks up a category's ID from its name
Finds a category's ID from its name. Used by the assistant before other category actions.
Try: “What is the ID of the Events category?”
Read ·
find_category
Read from the source code
Pros and cons
Good
- Most-starred Discord server that works through a bot.
- Covers messages, channels, roles, moderation, events, forums, invites and emojis.
- One shared container serves every assistant on your machine.
- Optional default server ID saves repeating it in prompts.
- Setup written up for Claude Code, Codex, Cursor, Claude Desktop and n8n.
- Free and open source under MIT.
Watch out
- No login on its web endpoint; keep it local.
- No read-only mode; the bot can delete and ban.
- Needs Docker, or Java and Maven to build it yourself.
- You must create a Discord bot and invite it to each server first.
- Claude Desktop's Connectors screen needs a public HTTPS address in front of it.
Permissions
high risk · 4 things to watch
High risk
Anyone who can reach the server's port can make your bot delete channels, ban members or post as it, because the endpoint has no login. Keep the container on your own machine and give the bot only the Discord permissions you actually need.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
Anyone who reaches the port can use your bot
The HTTP endpoint has no login. Keep it on localhost and never publish port 8085 to the internet or a shared network. github.com
It can ban, kick and delete, not just read
Tools include deleting channels, roles, messages and emojis and banning members. Grant the bot only the permissions it needs in Discord. github.com
Extra admin pages could leak your bot token
Expose only the health check. Other admin endpoints, such as env, would reveal the token. github.com
The token only goes to Discord
A security review found it is never logged or sent elsewhere, and the server has no telemetry. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Talks to | Discord API |
|---|---|
| Sign-in and keys | Bot token passed as the DISCORD_TOKEN environment variable to the container. |
Alternatives
Use SaseQ's server for the most-starred bot you run in Docker. Pick cappyeo's for the widest tool set or PaSympa's for an npm install; Kite builds bots rather than running them.
| Server | Official | Runs | Sign-in | GitHub stars |
|---|---|---|---|---|
| For Discord | ||||
| discord-mcp (SaseQ)This page | Community | Local | Bot token | 579 |
| Discord MCP (cappyeo) | Community | Local | Bot token | 189 |
| discord-mcp (PaSympa) | Community | Local | Bot token | 29 |
| Kite | Community | Hosted | – | 334 |
| discord.py-self-mcp | Community | Local | User account | 73 |
| Other tools for the same job | ||||
| mcp-discord | Community | Local | Bot token | 108 |
What people say
People say it works well once running, and find the bot setup and the open network endpoint the hard parts.
What people like
- A user said it works perfectly apart from extra containers in the old setup, which the HTTP mode fixed.
- An independent security review found the bot token handled cleanly, with no telemetry.
- The maintainer fixed a security bug that the review found.
Common complaints
- Non-developers find the bot and token setup confusing.
- The web endpoint has no login, so anyone who can reach it can use the bot.
- One user's assistant could not connect over the HTTP mode.
In their words
“The server works perfectly except for this problem that quickly fill up my ram :)”TrikosGitHub issueJun 2026
“The good news first: **the token itself is handled cleanly**”thoraxeGitHub issueOct 2026
“Anyone who can reach port 8085 can call every tool with the bot's permissions.”SaseQGitHub issueApr 2026
“Please use consistent language, why can't you just use what the Discord labeling is.”sanjarcode
Questions
Is there an official Discord MCP server?
No. Discord has not released one, so every Discord server is a community project. SaseQ's is the most-starred one that works through a bot.
Which Discord token do I need?
The bot token of a Discord application you create in the Discord Developer Portal. It is not the client ID or the client secret. Invite that bot to your server before you start.
Is it safe?
The token handling passed an independent review, but the server's web address has no login and the bot can ban members and delete channels. Keep it on your own machine and limit the bot's permissions.
Can it delete messages or ban people?
Yes. It can delete messages, channels, roles and emojis, and kick, time out or ban members, if the bot has those permissions in Discord. There is no read-only switch.
Can it read my personal DMs?
No. It works as a bot, so it only sees servers the bot has joined and private messages people send to the bot.
Why does it keep starting new Docker containers?
The older config starts one container per session. Run one container in the recommended HTTP mode and point every assistant at it instead.
Do I have to give it a server ID?
No. The server ID setting is optional. Set it if you mostly work in one Discord server, so you do not have to name it in every request.
Can I add it from Claude Desktop's Connectors screen?
Only if you put it behind a public HTTPS address. For a local setup, use the config file method in the install box.
Can it act as my own Discord account?
No, it only runs as a bot. Selfbot servers like discord.py-self-mcp run as your account, and their own docs warn this breaks Discord's terms and risks your account.
Examples
Catch up on a busy channel
Read the last 100 messages in #general and summarise what people decided
Set up a new community from scratch
Create an Events category with #announcements and #schedule, and a Moderator role that can manage messages
Moderate a member
Time out the user spambot123 for 24 hours and tell me who else posted the same link
Run a server event
Schedule a voice event for Friday at 8pm called Game Night and list who is interested
Information
updated Nov 2, 2026
- Publisher
- Community
- Package
saseq/discord-mcp- Registry
- Docker
- Transport
- Streamable HTTP, stdio
- Auth
- token in env
- Version
- 1.0.0
- License
- MIT
- Last commit
- Oct 23, 2026
- Open issues
- 6
Other Discord MCP servers
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 12Hide
- discord-mcp README · github.com
- Security follow-ups · github.com
- discord-mcp README: Available Tools · github.com
- Security review · github.com
- Open a new container for each prompt terminal · github.com
- Unable to set up, please add YouTube walkthrough · github.com
- discord.py-self-mcp README · github.com
- Failed to connect to MCP · github.com
- Discord MCP (cappyeo) README · github.com
- discord-mcp (PaSympa) README · github.com
- mcp-discord README · github.com
- Kite README · github.com