discord-mcp (spyd3r83/discord-mcp) is an MCP server listed on the M8ven Trust Index. It scores 58 out of 100, grade D. It declares 56 tools. No publisher has claimed this listing.
A full-featured Discord MCP (Model Context Protocol) server — send messages, manage channels, guilds, roles, members, threads, webhooks and more.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
spyd3r83
Source: github_code
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
get_audit_logFetch audit log entries from a Discord guild. Shows moderator actions like bans, kicks, role changes, channel edits, etc. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds…
list_channelsList all channels (text, voice, forum, category, etc.) in a Discord guild (server). Returns each channel's Discord snowflake ID (a 17-19 digit integer string like "1471337835444310187"), display name, and channel type number. IMPORTANT — two different kinds of "channel ID" exist in this system: …
get_channelFetch metadata for a single Discord channel by its Discord snowflake ID. Returns the channel's snowflake id, type, and (for guild channels) name and guild_id. IMPORTANT — channel_id here is a Discord snowflake (17-19 digit integer string like "1471337835444310187"), NOT a non-Discord channel UUID …
create_channelCreate a new channel in a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digits, e.g. "1396724253621223584"). Call discord-ext_list_guilds to find it. • name — channel name (lowercase, hyphens for spaces) • type — Discord ChannelType integer: 0=tex…
edit_channelEdit properties of an existing Discord channel (name, topic, slowmode, NSFW flag). Required parameter: • channel_id — Discord channel snowflake ID (17-19 digits, e.g. "1471337835444310187"). NOT a non-Discord channel UUID. Call discord-ext_list_channels to look up a channel snowflake by name.…
delete_channelPermanently delete a Discord channel by its snowflake ID. This action is irreversible. Required parameter: • channel_id — Discord channel snowflake ID (17-19 digits, e.g. "1471337835444310187"). NOT a non-Discord channel UUID. Use discord-ext_list_channels to look up the snowflake by channel …
set_channel_permissionsSet a permission overwrite for a role or member on a specific Discord channel. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digits). NOT a non-Discord channel UUID. • target_id — snowflake ID of the role or member to set permissions for • target_type — "role" or "me…
send_dmSend a direct message (DM) to a Discord user by their user snowflake ID. Required parameters: • user_id — Discord user snowflake ID (17-19 digit integer string, e.g. "123456789012345678"). This is the user's Discord account ID, NOT a channel ID or non-Discord UUID. If you only know a user…
get_userFetch public profile information for a Discord user by their snowflake ID. Required parameter: • user_id — Discord user snowflake ID (17-19 digit integer string, e.g. "123456789012345678"). NOT a non-Discord agent/user ID — this is a Discord account snowflake. Returns: { id, username, discri…
list_forum_postsList all active (non-archived) posts in a Discord forum channel. Required parameter: • channel_id — Discord snowflake ID of the forum channel (17-19 digit integer string). Must be a ChannelType 15 (GuildForum) channel. NOT a non-Discord channel UUID. Call discord-ext_list_channels with ty…
create_forum_postCreate a new post (thread) inside a Discord forum channel. Required parameters: • channel_id — Discord snowflake ID of the forum channel (17-19 digit integer, ChannelType 15). NOT a non-Discord channel UUID. Use discord-ext_list_channels with type=15 to find it. • name — title of the forum …
close_forum_postArchive (close) a forum post by its thread snowflake ID. Required parameter: • thread_id — Discord snowflake ID of the forum thread/post to archive (17-19 digit integer). Call discord-ext_list_forum_posts to find the thread snowflake ID by name. Archived posts are hidden from the active list…
get_guildFetch metadata about a Discord guild (server) by its snowflake ID. Returns the guild's snowflake id, name, and approximate member count. Required parameter: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). Call discord-ext_list_guilds first if…
list_guildsList all Discord guilds (servers) the bot is currently a member of. Returns each guild's snowflake ID (17-19 digit integer string) and name. This is the starting point for all guild-scoped operations — call this first to get the guild_id needed by tools like discord-ext_list_channels, discord-ext_g…
get_guild_member_countGet the total member count for a Discord guild (server). Required parameter: • guild_id — Discord guild snowflake ID (17-19 digits, e.g. "1396724253621223584"). Call discord-ext_list_guilds to find it. Returns: { "memberCount": <number> }
get_memberGet detailed information about a specific member of a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • user_id — D…
list_membersList members of a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. Optional: • limit — max members to return (1–100…
search_membersSearch for members in a Discord guild by username or nickname. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • query — search string to m…
edit_memberEdit a member's properties in a Discord guild (nickname, mute, deaf). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • user_id — Discord u…
send_messageSend a plain text message to a Discord channel. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1397109398337224736"). This is NOT a non-Discord channel UUID (like "bcdf5931-..."). These are completely different IDs. If you only know the…
edit_messageEdit the content of an existing Discord message (only messages sent by the bot can be edited). Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit number, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. Use discord-ext_list_channels to find a channel sno…
delete_messageDelete a Discord message from a channel. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit number, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. • message_id — Discord message snowflake ID to delete Deletion is permanent. The bot must have Manage …
get_messageFetch a single Discord message by its snowflake ID. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit number, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. Use discord-ext_list_channels to look up channel snowflakes by name. • message_id — Discord …
list_messagesFetch recent messages from a Discord channel. Required parameter: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1397109398337224736"). This is a Discord snowflake, NOT a non-Discord channel UUID (like "bcdf5931-..."). If you received a message from the use…
pin_messagePin a Discord message in a channel so it appears in the channel's pinned messages list. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digits, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. • message_id — Discord message snowflake ID to pin The bot must h…
unpin_messageUnpin a previously pinned Discord message from a channel. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digits, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. • message_id — Discord message snowflake ID to unpin The bot must have Manage Messages permissi…
send_embedSend a rich embed message (with title, description, fields, color, image, etc.) to a Discord channel. Required parameter: • channel_id — Discord channel snowflake ID (17-19 digit number, e.g. "1397109398337224736"). NOT a non-Discord channel UUID. Use discord-ext_list_channels to find the sno…
ban_memberBan a user from a Discord guild (server). Removes the user and prevents them from rejoining. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. …
unban_memberUnban a previously banned user from a Discord guild (server). Allows them to rejoin. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • user…
kick_memberKick a user from a Discord guild (server). They can rejoin with an invite. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • user_id — Disc…
timeout_memberTimeout (mute) a user in a Discord guild for a specified duration. They cannot send messages or join voice channels during the timeout. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-e…
remove_timeoutRemove an active timeout from a Discord guild member, allowing them to send messages and join voice again. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you d…
list_bansList banned users in a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. Optional: • limit — max bans to return (1–1…
add_reactionAdd an emoji reaction to a Discord message. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you don't know it. • message_id — Discord message snowflake …
remove_reactionRemove the bot's own emoji reaction from a Discord message. Only removes the bot's reaction, not other users'. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels firs…
remove_user_reactionRemove a specific user's emoji reaction from a Discord message. Requires the Manage Messages permission. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if y…
list_reactionsList users who reacted to a Discord message with a specific emoji. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you don't know it. • message_id — Dis…
clear_reactionsRemove all emoji reactions from a Discord message. Requires the Manage Messages permission. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you don't know…
list_rolesList all roles in a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. Returns: [{ id, name, color }] Example: discord…
get_roleGet detailed information about a specific Discord role. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • role_id — Discord role snowflake …
create_roleCreate a new role in a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • name — name for the new role (e.g. "Modera…
edit_roleEdit an existing Discord role's properties. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. • role_id — Discord role snowflake ID (17-19 di…
delete_roleDelete a role from a Discord guild (server). Members who only had this role will lose it. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. •…
assign_roleAssign a role to a Discord guild member. The member gains all permissions and properties of that role. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't…
remove_roleRemove a role from a Discord guild member. The member loses all permissions and properties of that role. Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don…
create_threadCreate a thread attached to an existing Discord message. The thread starts in the same channel as the message. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels firs…
create_standalone_threadCreate a standalone thread in a Discord channel without attaching it to a specific message. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you don't know…
list_threadsList all active threads in a Discord guild (server). Required parameters: • guild_id — Discord guild snowflake ID (17-19 digit integer string, e.g. "1396724253621223584"). NOT a non-Discord UUID. Call discord-ext_list_guilds first if you don't know it. Returns: [{ id, name, archived }] Exam…
archive_threadArchive a Discord thread. Archived threads are hidden but can be unarchived later. Required parameters: • thread_id — Discord thread snowflake ID (17-19 digit integer string, e.g. "1396725500621223584"). NOT a non-Discord UUID. Call discord-ext_list_threads first if you don't know it. Return…
unarchive_threadUnarchive a previously archived Discord thread, making it active again. Required parameters: • thread_id — Discord thread snowflake ID (17-19 digit integer string, e.g. "1396725500621223584"). NOT a non-Discord UUID. Call discord-ext_list_threads first if you don't know it. Returns: "Thread …
add_thread_memberAdd a member to a Discord thread. The user will be able to see and send messages in the thread. Required parameters: • thread_id — Discord thread snowflake ID (17-19 digit integer string, e.g. "1396725500621223584"). NOT a non-Discord UUID. Call discord-ext_list_threads first if you don't kno…
remove_thread_memberRemove a member from a Discord thread. The user will no longer see the thread. Required parameters: • thread_id — Discord thread snowflake ID (17-19 digit integer string, e.g. "1396725500621223584"). NOT a non-Discord UUID. Call discord-ext_list_threads first if you don't know it. • user_id…
list_webhooksList all webhooks in a Discord channel. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you don't know it. Returns: [{ id, name, url }] Example: discord…
create_webhookCreate a new webhook in a Discord channel. Webhooks can send messages with a custom name and avatar. Required parameters: • channel_id — Discord channel snowflake ID (17-19 digit integer string, e.g. "1396725483621223584"). NOT a non-Discord UUID. Call discord-ext_list_channels first if you d…
delete_webhookDelete a Discord webhook. Required parameters: • webhook_id — Discord webhook snowflake ID (17-19 digit integer string, e.g. "1396726000621223584"). NOT a non-Discord UUID. Call discord-ext_list_webhooks first if you don't know it. Returns: "Webhook deleted" Example: discord-ext_delete_webh…
send_webhook_messageSend a message through a Discord webhook with optional custom username, avatar, and embeds. Required parameters: • webhook_id — Discord webhook snowflake ID (17-19 digit integer string, e.g. "1396726000621223584"). NOT a non-Discord UUID. Call discord-ext_list_webhooks first if you don't know…
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
When Vitest UI server is listening, arbitrary file can be read and executed
Vitest allows Remote Code Execution when accessing a malicious website while Vitest API server is listening
@modelcontextprotocol/sdk has cross-client data leak via shared server/transport instance reuse
Anthropic's MCP TypeScript SDK has a ReDoS vulnerability
Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default
DISCORD_BOT_TOKENBot token auth — just setLOG_LEVEL❌ info Log level: debug, info, warn, errorPORTTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
56/56 tools missing one or more hints — get_audit_log (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_channels (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_channel (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +53 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Tool inputs are validated
Only 1/56 tool handlers declare input schemas (2%)
Declare an inputSchema with zod/joi/yup on every tool definition.
License file
No license file
Add a LICENSE file (MIT, Apache-2.0, etc.).
Production dependencies are patched
0 critical, 3 high severity in production deps — @modelcontextprotocol/sdk@1.12.0 (high), @modelcontextprotocol/sdk@1.12.0 (high)
Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.
Dev dependencies
2 critical/high in dev-only deps (does not ship to users)
Upgrade dev dependencies when convenient.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/spyd3r83/discord-mcp)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check