Skip to main content
Glama
discord-mcp

discord-mcp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DISCORD_TOKENYesDiscord bot authentication token.
DISCORD_MCP_APPROVALNoConfirmation mode for destructive operations (`elicitation` or `none`). Any other value stops startup.elicitation
DISCORD_MCP_TOOLSETSNoComma-separated list of enabled toolsets. Available: core, messages, reactions, threads, channels, webhooks, guild, members, roles, moderation, events, invites.core,messages
DISCORD_MCP_ALLOW_DMSNoPermits direct messages and user-scoped operations alongside an active guild allowlist (`true` or `false`). Any other value stops startup.false
DISCORD_MCP_READ_ONLYNoBlocks all mutating actions and allows read-only tools only (`true` or `false`). Any other value stops startup.false
DISCORD_MCP_FILE_ROOTSNoOptional comma-separated list of directory paths allowed for uploads. A leading ~/ is expanded to the home directory. If unset or empty, upload file access is open by default subject to built-in exclusions.
DISCORD_MCP_DOWNLOAD_DIRNoDirectory path where attachment downloads are stored. A leading ~/ is expanded to the home directory. Created recursively on first download.~/Downloads/discord-mcp
DISCORD_MCP_ALLOWED_GUILDSNoComma-separated list of allowed guild IDs. When set, operations outside these guilds are refused.
DISCORD_MCP_MAX_UPLOAD_BYTESNoMaximum upload size in bytes (defaults to 20 MiB).20971520
DISCORD_MCP_MAX_DOWNLOAD_BYTESNoMaximum download size in bytes for discord_download_attachment (defaults to 100 MiB).104857600
DISCORD_MCP_RATE_LIMIT_WAIT_MSNoMaximum wait duration in milliseconds when encountering a Discord rate limit before aborting.5000
DISCORD_MCP_REQUEST_TIMEOUT_MSNoHTTP request timeout in milliseconds for Discord REST API requests.15000

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}
logging
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
discord_bulk_delete_messagesA

Delete 2 to 100 messages from a guild channel in one request. The whole request fails if any message is older than 14 days or any message ID is duplicated. To delete a single message instead use discord_delete_message. Bot permissions it may need: View Channel, Manage Messages. Destructive: the user is asked to approve the exact change before it runs.

discord_create_pinA

Pin a message in a channel or thread so it appears in the channel's pinned list. Use it to keep an important message easy to find; use discord_list_pins to see what is pinned and discord_delete_pin to unpin. Returns pinned: true with the channel and message IDs. Bot permissions it may need: View Channel, Pin Messages. Changes Discord data; safe to retry.

discord_crosspost_messageA

Publish a message posted in an announcement channel (type 5) so Discord copies it into every channel that follows that channel. Use it after posting with discord_send_message in an announcement channel; regular text channels cannot be crossposted, and a message can be published only once, so a second call fails. Manage Messages is only needed for messages the bot did not send. Returns the published message. Bot permissions it may need: View Channel, Send Messages, Manage Messages. Changes Discord data and is not idempotent; check the result before retrying.

discord_delete_messageA

Permanently delete a single message from a channel or thread. To delete between 2 and 100 recent messages at once use discord_bulk_delete_messages. Returns a confirmation object with the deleted message and channel IDs. Bot permissions it may need: View Channel, Manage Messages. Destructive: the user is asked to approve the exact change before it runs.

discord_delete_pinA

Unpin a pinned message from a channel or thread. To add a pin use discord_create_pin, and to list all current pinned messages use discord_list_pins. Returns a confirmation object with the unpinned message and channel IDs. Bot permissions it may need: View Channel, Pin Messages. Changes or removes existing Discord data without an approval prompt.

discord_download_attachmentA

Download a message attachment from Discord into the local download folder (DISCORD_MCP_DOWNLOAD_DIR, default ~/Downloads/discord-mcp). Requires the message ID and the specific attachment ID (attachment_id comes from the attachments of discord_get_message). Returns local file path, size, content type and SHA-256 hash. Bot permissions it may need: View Channel, Read Message History. Writes a file to the local download folder and changes nothing in Discord.

discord_edit_messageA

Edit a message the bot sent: replace its content or embeds, add uploaded files, and change the description or spoiler flag of existing attachments. Existing attachments are always kept; they cannot be removed with this tool. Discord only lets a bot edit its own messages; to post a new message use discord_send_message. Returns the updated message. Bot permissions it may need: View Channel, Read Message History, Attach Files, Embed Links. Changes or removes existing Discord data without an approval prompt.

discord_end_pollA

End a poll the bot created before its duration runs out. Discord does not let a bot end polls posted by other users. Returns the message with the poll; Discord finishes the final vote count in the background, so read the final tally later with discord_get_message once poll.results.is_finalized is true. Bot permissions it may need: View Channel. Changes or removes existing Discord data without an approval prompt.

discord_get_messageA

Fetch one message by ID from a channel or thread, with its author, content, attachments, embeds, reactions and poll. Use it when you already have the message ID; to read recent history use discord_list_messages, and to find messages by text use discord_search_guild_messages. Bot permissions it may need: View Channel, Read Message History. Read-only; safe to retry.

discord_get_my_userA

Fetch the bot's own user object: id, username, global name, avatar, banner and flags. Use it to confirm which account the token belongs to; to look up any other user by ID use discord_get_user. Returns the user object. No special bot permissions. Read-only; safe to retry.

discord_get_userA

Fetch any Discord user by user ID: username, global name, avatar, banner, accent color and whether the account is a bot. Use it to resolve an ID taken from a message author, a mention or a poll voter; for the bot's own account use discord_get_my_user, and for guild data such as nickname, roles and join date use discord_get_guild_member (members toolset). Returns the user object. No special bot permissions. Read-only; safe to retry.

discord_leave_guildA

Remove the authenticated bot from a guild by server ID. The bot ceases to be a member immediately and requires a new invite URL with bot scopes to rejoin. Use this when the bot is instructed to depart a server; to kick another member use discord_delete_guild_member (members toolset). Returns deleted: true and the guild ID. No special bot permissions. Destructive: the user is asked to approve the exact change before it runs.

discord_list_messagesA

List messages from a channel or thread, newest first. Provide before, after, or around snowflake IDs to paginate or center the search window. To fetch a specific message by ID use discord_get_message, and to search messages by text or author across an entire server use discord_search_guild_messages. Page older messages with before=next_before. Bot permissions it may need: View Channel, Read Message History. Read-only; safe to retry.

discord_list_my_connectionsA

List the external accounts (for example GitHub, Twitch, YouTube, Steam) linked to the account behind the credential, with each connection's name, type, verified flag and visibility. Discord requires an OAuth2 token with the connections scope for this endpoint, so a plain bot token can be refused; to list the guilds the bot is in use discord_list_my_guilds. Returns the connections array. No special bot permissions. Read-only; safe to retry.

discord_list_my_guildsA

List the Discord guilds (servers) the authenticated bot account belongs to. Use this to discover available guild IDs before calling guild-scoped tools, or to check membership counts. Page older results with before and newer results with after. Under DISCORD_MCP_ALLOWED_GUILDS, paging parameters must be omitted; every allowed guild is returned in a single call. Returns partial guild objects plus next_before and next_after cursors; both are set only when the page is full, so a full page can be followed by an empty one, and both are null when the page holds fewer guilds than limit. No special bot permissions. Read-only; safe to retry.

discord_list_pinsA

List the pinned messages of a channel or thread, newest pin first, each with its pin time. To pin a message use discord_create_pin, and to unpin use discord_delete_pin. Page with before=next_before while has_more is true. Bot permissions it may need: View Channel, Read Message History. Read-only; safe to retry.

discord_list_poll_answer_votersA

Get a paginated list of users that voted for a specific answer on a poll message. Use it after fetching a poll message with discord_get_message to see who selected each answer. Page subsequent voters with after=next_after. Bot permissions it may need: View Channel, Read Message History. Read-only; safe to retry.

discord_search_guild_messagesA

Search messages across a whole guild by text and filters (author, channel, mentions, attachments, links, embeds, pinned state, message ID range). Use discord_list_messages to read one channel in order. Results come back newest first by default; a page can hold fewer than limit, so page with offset=next_offset until it is null. A new or busy guild index can answer "not ready"; the tool then fails with a retryable error that carries the retry delay in seconds. Results omit reactions. Bot permissions it may need: View Channel, Read Message History. Read-only; safe to retry.

discord_send_messageA

Send a message to a channel or thread. It can carry text, embeds, a poll, files from the local machine, a reply to an existing message, stickers (up to 3) and flags (suppress embeds, silent). At least one of content, embeds, sticker_ids, files or poll is required. Mentions do not ping unless allowed_mentions permits it. To change a message already sent use discord_edit_message. A retry without the same nonce posts a second message. Bot permissions it may need: View Channel, Send Messages, Attach Files, Embed Links, Send Polls, Send TTS Messages, Read Message History, Send Messages in Threads, Use External Stickers, Mention Everyone. Changes Discord data and is not idempotent; check the result before retrying.

discord_trigger_typing_indicatorA

Show the typing indicator in a channel or thread for 10 seconds, for a bot that needs a few seconds to prepare an answer. Discord advises most bots not to use it. To post the reply use discord_send_message. Bot permissions it may need: View Channel, Send Messages, Send Messages in Threads. Changes Discord data and is not idempotent; check the result before retrying.

discord_update_my_userA

Update the authenticated bot's global username, avatar image, or banner image. Changes apply globally across every server the bot is in. Changing the username can randomize the discriminator. To change the bot's nickname or avatar in one guild only, use discord_update_my_guild_member (members toolset). Returns the updated bot user object. No special bot permissions. Destructive: the user is asked to approve the exact change before it runs.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.3/5.0

Scored across 21 tools

Disambiguation5/5

Every tool targets a distinct resource+action, and the descriptions actively cross-reference siblings to steer the agent (delete_message vs bulk_delete_messages, get_message vs list_messages vs search_guild_messages, get_my_user vs get_user, create_pin vs list_pins vs delete_pin). Even the easily-conflated pairs are explicitly disambiguated with 'use X instead' guidance. No two tools appear to do the same thing.

Naming Consistency5/5

All 21 tools follow the discord_verb_noun snake_case pattern (discord_send_message, discord_list_pins, discord_bulk_delete_messages), with only the stable 'my' qualifier (get_my_user, list_my_guilds) used consistently for self-scoped operations. No camelCase or mixed-convention drift.

Tool Count4/5

At 21 tools this is slightly heavy for a single toolset, but the surface covers a genuinely broad domain (messages, attachments, pins, polls, users, guild membership) and no tool is a redundant wrapper or trivial duplicate. It is at the upper edge of well-scoped rather than bloated.

Completeness3/5

Message lifecycle (send, edit, delete, bulk delete, get, list, search, crosspost) plus pins and polls is well covered, but core messaging operations are missing: there is no way to add or remove reactions even though get_message and search return reaction data, and no thread creation despite threads being accepted as targets. Minor gaps (no embed-only helper, no message-forward) are workaroundable, but reactions/threads are notable dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues