关于 discord-mcp
discord-mcp 是面向 Discord REST API 的社区 MCP 服务,为需要通过 Agent 管理 Discord 服务器的用户提供接口。它按工具集覆盖消息、频道、成员等操作,并支持限制服务器范围和破坏性操作前审批。
主要功能
- 01覆盖消息、频道、成员等 API 操作
- 02按工具集启用功能
- 03文件上传下载及完整性校验
- 04破坏性操作前请求审批
- 05服务器白名单与只读模式
- 06令牌不出现在工具结果和日志中
适用场景
- 01汇总或搜索服务器消息
- 02发布公告并附加文件
- 03管理线程、成员与角色
- 04安排活动或发送 Webhook 通知
MCP 相关
作为 MCP 服务,它向客户端提供 Discord REST API 工具,涵盖消息、反应、线程、频道、Webhook、服务器、成员、角色、审核、活动和邀请等领域。可通过工具集控制暴露范围。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @qungtai/discord-mcpDISCORD_TOKEN密钥Discord Bot TokenDISCORD_MCP_ALLOWED_GUILDSComma-separated list of allowed guild IDs. When set, operations outside these guilds are refused.DISCORD_MCP_TOOLSETSComma-separated list of enabled toolsets. Available: core, messages, reactions, threads, channels, webhooks, guild, members, roles, moderation, events, invites.DISCORD_MCP_READ_ONLYBlocks all mutating actions and allows read-only tools only (true or false). Any other value stops startup.DISCORD_MCP_APPROVALConfirmation mode for destructive operations (elicitation or none). Any other value stops startup.DISCORD_MCP_ALLOW_DMSPermits direct messages and user-scoped operations alongside an active guild allowlist (true or false). Any other value stops startup.DISCORD_MCP_FILE_ROOTSOptional comma-separated list of absolute directory paths accessible for uploads. When unset, empty, or parsing to no entries, file access is open by default for any absolute path, except hidden files and directories.DISCORD_MCP_DOWNLOAD_DIRAbsolute directory path where attachment downloads are stored. Defaults to ~/Downloads/discord-mcp and is created recursively on first download.DISCORD_MCP_MAX_DOWNLOAD_BYTESMaximum download size in bytes for discord_download_attachment (defaults to 100 MiB).DISCORD_MCP_MAX_UPLOAD_BYTESMaximum upload size in bytes (defaults to 20 MiB).DISCORD_MCP_REQUEST_TIMEOUT_MSHTTP request timeout in milliseconds for Discord REST API requests.DISCORD_MCP_RATE_LIMIT_WAIT_MSMaximum wait duration in milliseconds when encountering a Discord rate limit before aborting.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
21收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| reason | string | 否 | 通过 X-Audit-Log-Reason 标头发送的审计日志原因(最多 512 个字符) |
| channel_id | string | 是 | 包含待删除消息的频道 ID |
| message_ids | array | 是 | 要删除的消息 ID 数组,包含 2 到 100 个未满 14 天且不重复的 ID |
详细介绍
discord-mcp
适用于 Discord REST API 的社区版 Model Context Protocol(MCP)服务。
-
提供 137 个工具,涵盖核心功能、消息、回应、帖子、频道、Webhook、Guild、成员、角色、审核、事件和邀请。
-
已实现 250 项稳定版 Discord API 操作中的 141 项(参见 docs/coverage.md);其中 123 项已通过实时服务验证,18 项已通过模拟合约验证。
-
支持文件上传和下载,并提供沙盒目录边界限制及 SHA-256 完整性检查。
-
通过 MCP elicitation 在执行破坏性操作前请求批准。
-
支持 Guild 白名单、只读模式和工具集选择。
-
Token 不会出现在工具参数、输出或日志流中。
状态
0.1.0,早期版本。可通过 npm 获取,包名为 @qungtai/discord-mcp;MCP Registry 名称为 io.github.qungtai/discord-mcp。
快速开始
1. 创建 Discord 机器人
- 打开 Discord Developer Portal,然后选择 New Application。
- 转到 Bot 选项卡,选择 Reset Token,并将机器人 Token 复制到安全位置。
- 在 Privileged Gateway Intents 下,启用 Message Content intent(读取消息文本所必需)和 Server Members intent(列出和搜索成员所必需)。请勿启用 Presence intent;此服务使用 REST API,不连接 Gateway。
- 转到 OAuth2 > URL Generator。选择
botscope,然后选择工具所需的权限(各工具集所需的权限及权限整数请参见下文的工具集部分)。在生成的邀请 URL 中,使用permissions=<integer>指定权限(例如,默认工具集对应的 URL 为https://discord.com/oauth2/authorize?client_id=<application_id>&scope=bot&permissions=2815162084228096)。Developer Portal 会以带空格的形式显示权限(例如 “Send Messages” 或 “Manage Channels”)。如果要管理角色或成员,请确保机器人在 Discord Server Settings > Roles 中的最高角色高于其要管理的任何角色。在浏览器中打开邀请 URL,将机器人邀请到你的服务器。 - 在 Discord 客户端中,打开 User Settings > Advanced 并启用 Developer Mode。右键点击侧边栏中的服务器图标,然后选择 Copy Server ID。
2. 标准配置
将服务添加到 MCP 客户端配置中:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
建议:将 DISCORD_MCP_ALLOWED_GUILDS 添加到 env,并设为第 5 步获取的服务器 ID,这样机器人就只能在该服务器中执行操作。
"DISCORD_MCP_ALLOWED_GUILDS": "123456789012345678"
使用 DISCORD_MCP_TOOLSETS 启用更多工具集。使用 DISCORD_MCP_FILE_ROOTS 将上传限制在指定文件夹中。设置 DISCORD_MCP_DOWNLOAD_DIR 指定下载目录。
3. 客户端配置
Claude Code
通过 CLI 添加(默认为本地项目范围;添加 -s user 可应用于所有项目):
claude mcp add discord -e DISCORD_TOKEN="your-bot-token" -- npx -y @qungtai/discord-mcp
或在 ~/.claude.json 中手动配置:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
Claude Desktop
编辑适用于你操作系统的配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json(非官方构建版本)
添加服务配置块:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
Codex
通过 CLI 添加:
codex mcp add discord --env DISCORD_TOKEN="your-bot-token" -- npx -y @qungtai/discord-mcp
或添加到 ~/.codex/config.toml:
[mcp_servers.discord]
command = "npx"
args = ["-y", "@qungtai/discord-mcp"]
[mcp_servers.discord.env]
DISCORD_TOKEN = "your-bot-token"
Cursor
添加到 .cursor/mcp.json,或在 Cursor Settings > MCP 中配置:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
VS Code
在 .vscode/mcp.json 中配置,并为机器人令牌设置输入变量:
{
"servers": {
"discord": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "${input:discordToken}"
}
}
},
"inputs": [
{
"id": "discordToken",
"type": "promptString",
"description": "Discord Bot Token",
"password": true
}
]
}
MCP Inspector
运行检查器:
npx @modelcontextprotocol/inspector -- npx -y @qungtai/discord-mcp
连接前,在检查器环境面板中设置 DISCORD_TOKEN。
使用 Docker 安装
使用 Docker 运行服务:
docker run -i --rm -e DISCORD_TOKEN="your-bot-token" -v /path/to/downloads:/home/node/Downloads/discord-mcp -v /path/to/uploads:/uploads ghcr.io/qungtai/discord-mcp:latest
使用文件工具时,请使用 -v host_path:container_path 挂载主机目录,以便在容器外访问上传和下载的文件。传递给工具的上传路径必须是容器路径。在 Linux 绑定挂载中,如果容器用户权限导致无法写入已挂载的主机目录,请传递 --user "$(id -u):$(id -g)" -e DISCORD_MCP_DOWNLOAD_DIR=/home/node/Downloads/discord-mcp。
在 MCP 客户端中配置(在 Linux 上使用自定义 --user 时,还需将 -e DISCORD_MCP_DOWNLOAD_DIR=/home/node/Downloads/discord-mcp 添加到 args):
{
"mcpServers": {
"discord": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DISCORD_TOKEN",
"-v",
"/path/to/downloads:/home/node/Downloads/discord-mcp",
"-v",
"/path/to/uploads:/uploads",
"ghcr.io/qungtai/discord-mcp:latest"
],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
提示词示例
要运行这些提示词,请使用 DISCORD_MCP_TOOLSETS 启用每个提示词所需的工具集(例如,DISCORD_MCP_TOOLSETS="core,messages,threads,members,events,webhooks")。
- “总结频道 123456789012345678 中最近的 50 条消息。”(messages 工具集)
- “在频道 123456789012345678 中发布一则公告,附上发行说明并附加
/Users/name/Downloads/banner.png。”(messages 工具集) - “在频道 123456789012345678 中创建名为 'incident-402' 的私密话题,并添加用户 987654321098765432。”(threads 工具集)
- “列出目前拥有角色 555666777888999000 的所有公会成员。”(members 工具集)
- “在语音舞台频道 123456789012345678 中安排一场即将举行的社区通话活动,名称为 'Sprint Planning',时间为明天 18:00 UTC。”(events 工具集)
- “使用 webhook 111222333444555666 发送发行通知,并将自定义用户名设为 'Deploy Bot'。”(webhooks 工具集)
工具集
| 工具集 | 默认 | 工具数 | 涵盖内容 | Bot 权限 |
|---|---|---|---|---|
| core | 是 | 6 | 当前 Bot 用户、用户查询、服务器列表和退出、用户关联 | 无 |
| messages | 是 | 15 | 发送、获取、编辑、删除、置顶和搜索消息,投票、附件 | AttachFiles, EmbedLinks, ManageMessages, MentionEveryone, PinMessages, ReadMessageHistory, SendMessages, SendMessagesInThreads, SendPolls, SendTTSMessages, UseExternalStickers, ViewChannel |
| reactions | 否 | 6 | 添加、移除和列出消息上的表情回应 | AddReactions, ManageMessages, ReadMessageHistory, UseExternalEmojis, ViewChannel |
| threads | 否 | 13 | 创建、列出、加入、退出和归档帖子及帖子成员 | CreatePrivateThreads, CreatePublicThreads, EmbedLinks, ManageThreads, ReadMessageHistory, SendMessages, SendMessagesInThreads, ViewChannel |
| channels | 否 | 13 | 创建、编辑、删除频道,权限覆盖,语音状态 | Connect, ManageChannels, ManageRoles, ManageThreads, ManageWebhooks, SetVoiceChannelStatus, ViewChannel |
| webhooks | 否 | 10 | 创建、编辑、删除和执行 Webhook,以及编辑 Webhook 消息 | ManageWebhooks |
| guild | 否 | 22 | 服务器设置、审计日志、引导流程、欢迎界面、组件 | ManageGuild, ManageRoles, ViewAuditLog |
| members | 否 | 12 | 列出、搜索、更新、踢出、禁言、拒听成员,清理成员 | ChangeNickname, Connect, DeafenMembers, KickMembers, ManageGuild, ManageNicknames, ManageRoles, ModerateMembers, MoveMembers, MuteMembers |
| roles | 否 | 7 | 创建、更新、删除和列出服务器角色,角色成员数量 | ManageRoles |
| moderation | 否 | 10 | 封禁、解除封禁、列出封禁对象、AutoMod 规则 | BanMembers, ManageGuild, ModerateMembers |
| events | 否 | 11 | 创建、更新、删除定时活动并列出订阅者 | CreateEvents, ManageEvents |
| invites | 否 | 12 | 创建、获取和删除邀请,服务器/频道邀请,目标用户 | CreateInstantInvite, ManageChannels, ManageGuild, ManageRoles |
默认启用 core,messages。使用 DISCORD_MCP_TOOLSETS(逗号分隔)启用更多工具集。 |
默认工具集的权限整数:2815162084228096。
所有已实现工具集的权限整数:3115458644933879。
core(6 个工具)
discord_get_my_user:获取当前机器人用户discord_get_user:根据 ID 获取用户discord_leave_guild:离开一个服务器(需要批准)discord_list_my_connections:列出机器人用户的连接discord_list_my_guilds:列出机器人加入的服务器。使用 after=next_after 翻页。在 DISCORD_MCP_ALLOWED_GUILDS 下无法翻页;一次调用会返回所有允许的服务器。discord_update_my_user:更新当前机器人的用户名、头像或横幅(需要批准)
messages(15 个工具)
discord_bulk_delete_messages:一次性从频道中删除多条消息(2-100 条,且消息发布时间不超过 14 天)(需要批准)discord_create_pin:在频道中置顶一条消息discord_crosspost_message:将公告频道中的消息转发(发布)到关注该频道的频道discord_delete_message:从频道中删除一条消息(需要批准)discord_delete_pin:取消置顶频道中的一条消息discord_download_attachment:将消息附件下载到 DISCORD_MCP_DOWNLOAD_DIRdiscord_edit_message:编辑消息内容、嵌入内容和附件元数据,或添加附件discord_end_poll:立即结束消息中的投票discord_get_message:获取一条消息discord_list_messages:按时间从新到旧列出消息。使用 before=next_before 翻页discord_list_pins:列出频道中的置顶消息discord_list_poll_answer_voters:获取投选某个特定投票选项的用户列表discord_search_guild_messages:搜索服务器中的消息。使用 offset=next_offset 翻页discord_send_message:发送一条消息discord_trigger_typing_indicator:在频道中触发正在输入指示器
reactions(6 个工具)
discord_add_my_message_reaction:以当前用户身份为消息添加回应discord_delete_all_message_reactions:删除消息上的所有回应(需要批准)discord_delete_all_message_reactions_by_emoji:删除消息上指定表情符号的所有回应(需要批准)discord_delete_my_message_reaction:删除当前用户对消息的回应discord_delete_user_message_reaction:删除另一位用户对消息的回应(需要批准)discord_list_message_reactions_by_emoji:获取使用指定表情符号进行回应的用户列表
threads(13 个工具)
- `discord_add_thread_member`:将用户添加到帖子 - `discord_create_thread`:在频道中创建新帖子,且不需要已有消息(如果提供了消息,则创建论坛帖子)。在文本频道中,如果省略 type,则默认为私密帖子(类型 12);仅私密帖子适用可邀请设置。 - `discord_create_thread_from_message`:根据频道中的现有消息创建新帖子 - `discord_delete_thread_member`:将用户从帖子中移除(需要审批) - `discord_get_thread_member`:根据用户 ID 获取帖子的成员 - `discord_join_thread`:将当前用户添加到帖子 - `discord_leave_thread`:将当前用户从帖子中移除 - `discord_list_active_guild_threads`:获取服务器中的所有活跃帖子,包括公开和私密帖子 - `discord_list_my_private_archived_threads`:列出机器人已加入的频道中的私密归档帖子。使用 before=next_before 翻页 - `discord_list_private_archived_threads`:列出频道中的私密归档帖子。使用 before=next_before 翻页 - `discord_list_public_archived_threads`:列出频道中的公开归档帖子。使用 before=next_before 翻页 - `discord_list_thread_members`:列出帖子的成员。注意:仅当 with_member 为 true 且机器人具有 GUILD_MEMBERS intent 时,after 和 limit 分页参数才适用。使用 after=next_after 翻页 - `discord_search_threads`:搜索频道中的帖子。新帖子可能需要约 30 秒才会出现在搜索结果中。使用 offset=next_offset 翻页频道(13 个工具)
discord_bulk_update_guild_channels:修改服务器中一组频道的位置(需要审批)discord_create_dm:与用户开启私信频道discord_create_guild_channel:在服务器中创建新频道(需要审批)discord_delete_channel:删除频道,或关闭私信(需要审批)discord_delete_channel_permission_overwrite:删除频道的权限覆盖设置(需要审批)discord_follow_channel:关注公告频道,以便将消息发送到目标频道discord_get_channel:根据 ID 获取频道discord_get_member_permissions:获取计算后的服务器或频道成员权限discord_get_role_permissions:获取计算后的服务器或频道角色权限discord_list_guild_channels:列出服务器中的频道discord_set_channel_permission_overwrite:设置或更新频道的权限覆盖设置(需要审批)discord_update_channel:更新频道设置(需要审批)discord_update_voice_channel_status:设置或清除语音频道状态(需要审批)
Webhook(10 个工具)
discord_create_webhook:在频道中创建新的 Webhookdiscord_delete_webhook:永久删除 Webhook(需要审批)discord_delete_webhook_message:删除 Webhook 之前发送的消息(需要审批)discord_edit_webhook_message:编辑 Webhook 之前发送的消息(需要审批)discord_execute_webhook:执行 Webhook 以发送消息(需要审批)discord_get_webhook:根据 ID 获取 Webhookdiscord_get_webhook_message:获取 Webhook 之前发送的消息discord_list_channel_webhooks:列出频道中的 Webhookdiscord_list_guild_webhooks:列出服务器中的 Webhookdiscord_update_webhook:更新 Webhook 的名称、头像,或将其移至其他频道(需要审批)
服务器(22 个工具)
- `discord_create_guild_template`:为服务器创建模板 - `discord_delete_guild_integration`:删除服务器中的集成(需审批) - `discord_delete_guild_template`:删除服务器模板(需审批) - `discord_get_guild`:根据 ID 获取服务器 - `discord_get_guild_new_member_welcome`:获取服务器的新成员欢迎设置(主页设置) - `discord_get_guild_onboarding`:获取服务器的入门配置 - `discord_get_guild_preview`:获取服务器预览 - `discord_get_guild_template`:根据代码获取服务器模板 - `discord_get_guild_vanity_url`:获取服务器的自定义 URL 代码 - `discord_get_guild_welcome_screen`:获取服务器的欢迎页面 - `discord_get_guild_widget`:获取服务器的小组件数据 - `discord_get_guild_widget_settings`:获取服务器的小组件设置 - `discord_list_guild_audit_log_entries`:列出服务器的审计日志条目 - `discord_list_guild_integrations`:列出服务器的集成 - `discord_list_guild_templates`:列出服务器的模板 - `discord_sync_guild_template`:将服务器模板同步到服务器的当前状态(需审批) - `discord_update_guild`:更新服务器设置(需审批) - `discord_update_guild_incident_actions`:更新服务器禁用邀请或私信前的时长(需审批) - `discord_update_guild_onboarding`:设置服务器的入门配置(需审批) - `discord_update_guild_template`:更新服务器模板元数据(需审批) - `discord_update_guild_welcome_screen`:更新服务器的欢迎页面(需审批) - `discord_update_guild_widget_settings`:更新服务器的小组件设置(需审批)成员(12 个工具)
discord_add_guild_member_role:为服务器成员添加角色(需审批)discord_delete_guild_member:将成员从服务器中移除(踢出)(需审批)discord_delete_guild_member_role:移除服务器成员的角色(需审批)discord_get_guild_member:根据用户 ID 获取服务器成员discord_list_guild_join_requests:列出服务器的加入申请,可按申请状态筛选discord_list_guild_members:列出服务器成员。需要 Server Members 特权 Gateway 意图(GUILD_MEMBERS)。使用 after=next_after 翻页discord_preview_prune_guild:获取清理操作将移除的成员数量discord_prune_guild:开始清理操作,从服务器中移除不活跃成员(需审批)discord_review_guild_join_request:批准或拒绝服务器加入申请。仅当 action 为 REJECTED 时使用 rejection_reason(需审批)discord_search_guild_members:搜索用户名或昵称以查询内容开头的服务器成员。需要 Server Members 特权 Gateway 意图(GUILD_MEMBERS)discord_update_guild_member:更新服务器成员的属性。Discord 不允许在此处编辑机器人自身;discord_update_my_guild_member 可更改机器人自身的昵称。channel_id 用于将成员移至语音频道;设为 null 则断开连接(需审批)discord_update_my_guild_member:更新当前机器人的昵称或其在服务器中的成员资料
角色(7 个工具)
discord_bulk_update_guild_roles:修改服务器中一组角色对象的位置(需审批)discord_create_guild_role:创建新的服务器角色(需审批)discord_delete_guild_role:删除服务器角色(需审批)discord_get_guild_role:获取服务器角色discord_get_guild_role_member_counts:获取服务器中各角色的成员数量discord_list_guild_roles:列出服务器中的角色discord_update_guild_role:更新服务器角色(需审批)
审核(10 个工具)
- `discord_ban_user_from_guild`:封禁服务器中的用户,并可选择删除其消息(需审批) - `discord_bulk_ban_users_from_guild`:封禁服务器中最多 200 名用户,并可选择删除其消息(需审批) - `discord_create_auto_moderation_rule`:为服务器创建自动审核规则(需审批) - `discord_delete_auto_moderation_rule`:删除服务器的自动审核规则(需审批) - `discord_get_auto_moderation_rule`:获取服务器的指定自动审核规则 - `discord_get_guild_ban`:获取用户在服务器中的封禁信息 - `discord_list_auto_moderation_rules`:列出服务器的所有自动审核规则 - `discord_list_guild_bans`:按用户 ID 升序列出封禁记录。使用 after=next_after 分页 - `discord_unban_user_from_guild`:解除对服务器中用户的封禁(需审批) - `discord_update_auto_moderation_rule`:修改服务器现有的自动审核规则(需审批)活动(11 个工具)
discord_count_guild_scheduled_event_users:获取服务器计划活动及其例外情况的用户人数discord_create_guild_scheduled_event:为服务器创建计划活动discord_create_guild_scheduled_event_exception:为定期服务器计划活动创建例外情况discord_delete_guild_scheduled_event:删除服务器计划活动(需审批)discord_delete_guild_scheduled_event_exception:删除定期服务器计划活动的例外情况(需审批)discord_get_guild_scheduled_event:按 ID 获取服务器计划活动discord_list_guild_scheduled_event_exception_users:获取订阅服务器计划活动某个重复例外情况的用户列表,按用户 ID 升序排列。使用 after=next_after 分页discord_list_guild_scheduled_event_users:获取订阅服务器计划活动的用户列表,按用户 ID 升序排列。使用 after=next_after 分页discord_list_guild_scheduled_events:列出服务器的计划活动discord_update_guild_scheduled_event:修改服务器计划活动(需审批)discord_update_guild_scheduled_event_exception:修改定期服务器计划活动的例外情况(需审批)
邀请(12 个工具)
discord_add_invite_target_user:将目标用户添加到现有邀请中(需审批)discord_bulk_add_invite_target_users:将多个目标用户添加到现有邀请中(需审批)discord_bulk_delete_invite_target_users:从现有邀请中移除多个目标用户(需审批)discord_create_channel_invite:为频道创建新邀请(需审批)discord_delete_invite:按代码删除邀请(需审批)discord_delete_invite_target_user:从现有邀请中移除目标用户(需审批)discord_get_invite:按代码获取邀请。在允许列表限制下,设置 target_message_id 时必须同时设置 target_channel_id,以便检查消息。discord_get_invite_target_users_job_status:获取邀请的目标用户任务状态discord_list_channel_invites:获取频道的所有有效邀请discord_list_guild_invites:获取服务器的所有有效邀请discord_list_invite_target_users:获取邀请的目标用户。响应以 CSV 文本形式返回在 csv 字段中。discord_set_invite_target_users:使用 CSV 文件设置邀请的目标用户。(需审批)
配置
| Variable | Default | Description |
|---|---|---|
DISCORD_TOKEN | required | Discord 机器人身份验证令牌。 |
DISCORD_MCP_ALLOWED_GUILDS | (empty) | 允许的服务器 ID,以逗号分隔。设置后,将拒绝在这些服务器之外执行的操作。 |
DISCORD_MCP_ALLOW_DMS | false | 在启用服务器允许列表的同时,允许直接消息和用户级操作(true 或 false)。其他任何值都会导致启动失败。 |
DISCORD_MCP_TOOLSETS | core,messages | 已启用的工具集,以逗号分隔。可用项:core、messages、reactions、threads、channels、webhooks、guild、members、roles、moderation、events、invites。 |
DISCORD_MCP_READ_ONLY | false | 禁止所有会修改数据的操作,仅允许只读工具(true 或 false)。其他任何值都会导致启动失败。 |
DISCORD_MCP_APPROVAL | elicitation | 危险操作的确认模式(elicitation 或 none)。其他任何值都会导致启动失败。 |
DISCORD_MCP_FILE_ROOTS | (empty) | 可选的目录路径列表,以逗号分隔,可供上传访问;开头的 ~/ 会展开为用户主目录。未设置、为空或解析后没有条目时,默认允许访问任何绝对路径,但隐藏文件和目录、系统路径(/proc、/sys、/dev)以及应用程序配置目录(macOS 上的 ~/Library、Windows 上的 %APPDATA% 和 %LOCALAPPDATA%)除外。 |
DISCORD_MCP_DOWNLOAD_DIR | ~/Downloads/discord-mcp | 用于存储附件下载文件的目录路径;开头的 ~/ 会展开为用户主目录。默认为 ~/Downloads/discord-mcp,并会在首次下载时递归创建。 |
DISCORD_MCP_REQUEST_TIMEOUT_MS | 15000 | Discord REST API 请求的 HTTP 超时时间,单位为毫秒。 |
DISCORD_MCP_RATE_LIMIT_WAIT_MS | 5000 | 遇到 Discord 速率限制时,放弃操作前的最长等待时间,单位为毫秒。 |
DISCORD_MCP_MAX_UPLOAD_BYTES | 20971520 | 最大上传大小,单位为字节(默认为 20 MiB)。 |
DISCORD_MCP_MAX_DOWNLOAD_BYTES | 104857600 | discord_download_attachment 的最大下载大小,单位为字节(默认为 100 MiB)。 |
安全
服务器允许列表和私信策略
DISCORD_MCP_ALLOWED_GUILDS:将所有机器人操作限制在指定的服务器 ID 范围内。任何目标服务器不在允许列表中的操作都会被拒绝。- 启用服务器允许列表时,非私信类的非服务器资源(例如应用级 Webhook 和好友邀请)都会被拒绝,无论
DISCORD_MCP_ALLOW_DMS设置为何值。 discord_list_my_guilds会在一次响应中返回所有允许的服务器;配置了允许列表时,该工具会拒绝分页参数(before、after、limit)。- 配置服务器允许列表后,私信和用户范围的操作需要设置
DISCORD_MCP_ALLOW_DMS=true。
通过 elicitation 请求批准
标记为“需要批准”的工具必须通过 MCP elicitation(elicitation/create)获取确认。破坏性操作默认需要批准,但以下六种情况除外:
discord_edit_message:编辑机器人自己的消息不会删除其他用户的历史记录,只会替换内容,因此无需批准。discord_end_poll:Discord 只允许投票发起者结束投票,因此该操作只能结束机器人自己的投票。discord_delete_pin:取消置顶可以撤销,也不会删除任何消息内容。discord_delete_my_message_reaction:移除机器人自己的回应只会影响机器人自己的状态。discord_leave_thread:离开公开帖子只会移除机器人自己的成员身份。discord_update_my_guild_member:编辑机器人自己的服务器成员资料只会影响机器人的昵称、头像和横幅。
服务要求客户端声明 elicitation.form。目前仅验证过 Claude Code 和 Codex。Claude Desktop、Cursor 和 VS Code 尚未测试。
- Claude Code 会显示 elicitation 对话框,并在用户批准后继续。
- 在按需批准模式(
codex -a on-request)下,Codex 会显示确认提示。在完全访问模式下,Codex 会自动拒绝 elicitation 请求,工具将返回“Approval declined”。 - 使用不支持 MCP elicitation 的客户端时,设置
DISCORD_MCP_APPROVAL=none,即可绕过服务端 elicitation,改用客户端原生的工具执行确认机制。未启用 elicitation 时,破坏性工具会被拒绝,并返回一条策略错误,其中会指出DISCORD_MCP_APPROVAL=none。 - 设置
DISCORD_MCP_APPROVAL=none后,服务端将禁用破坏性工具的批准机制。服务会在启动时向 stderr 输出警告通知。
只读模式
设置 DISCORD_MCP_READ_ONLY=true 后,流水线会拒绝所有会修改数据的工具(写入和破坏性操作)。
文件系统边界
- 上传:默认情况下,文件访问不受限制。当
DISCORD_MCP_FILE_ROOTS未设置或为空时,附加文件的工具可以读取任何绝对路径,但以下内容除外:隐藏文件和目录(路径中包含以.开头的部分)、/proc、/sys或/dev下的系统路径,以及应用配置目录(macOS 上的~/Library、Windows 上的%APPDATA%和%LOCALAPPDATA%)。开放模式规则用于防范频道内容中的提示注入,避免凭据泄露。不会检测指向这些目录中文件的硬链接,也不会检测其他位置名称不以点开头的机密文件。文件内容中包含机器人令牌的上传会被拒绝。若要限制上传范围,请将DISCORD_MCP_FILE_ROOTS设置为以逗号分隔的允许目录列表。在明确指定的根目录中,允许访问隐藏文件。始终拒绝相对路径和..路径段。检查会同时针对词法路径和解析后的真实路径进行。 - 下载:通过
discord_download_attachment下载的附件会保存到DISCORD_MCP_DOWNLOAD_DIR中(默认为~/Downloads/discord-mcp);首次下载时会递归创建该目录,并进行 SHA-256 完整性验证。超过DISCORD_MCP_MAX_DOWNLOAD_BYTES限制(默认为 100 MiB)的下载会在下载前被拒绝,或在流式传输过程中中止。
凭据保护
DISCORD_TOKEN 直接从环境变量中读取。此令牌绝不会作为工具参数传递,也不会在工具响应中返回,并且会在日志和错误跟踪中自动脱敏。
开发
从源码安装
前置条件:Node >= 22。在 Node 25 或更高版本上,请先运行 npm install -g corepack。
克隆仓库并安装依赖:
git clone https://github.com/qungtai/discord-mcp.git
cd discord-mcp
corepack enable
pnpm install --frozen-lockfile
pnpm build
使用 Node 运行服务:
DISCORD_TOKEN="your-bot-token" node dist/index.js
本地构建的客户端配置
在克隆的仓库中运行 pwd,获取 dist/index.js 的绝对路径(例如,/Users/name/discord-mcp/dist/index.js)。将 MCP 客户端配置指向 dist/index.js:
{
"mcpServers": {
"discord": {
"command": "node",
"args": ["/absolute/path/to/discord-mcp/dist/index.js"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
验证
运行 AGENTS.md 中定义的完整验证套件。
有关贡献指南和安全问题披露政策,请参阅 CONTRIBUTING.md 和 SECURITY.md。
许可证
与 Discord Inc. 无关联,也未获其认可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。