使用说明
不和谐mcp rs
铁锈 主控程序 暴露的服务器 整个Discord REST API 作为工具。连接任何MCP客户端(Claude Code、Claude Desktop等)以与Discord交互——服务器、通道、消息、成员、角色、Webhook、应用程序等——范围取决于你的机器人令牌能做什么。
这些工具是 由Discord官方动态生成 OpenAPI 3.1规范,因此覆盖率跟踪真实的API,而不是手动维护的子集。
运作原理
在启动时,服务器解析Discord的OpenAPI规范(嵌入在二进制文件中)并 将每个操作整合到一个MCP工具中:
- 工具名称=操作的
operationId(例如。create_message,get_guild,ban_user_from_guild). - 路径和查询参数 是顶级工具参数(例如。
channel_id,limit). - JSON请求体 单身去
bodyargument(一个与Discord模式匹配的JSON对象,内联到每个工具的输入模式中)。 - 文件上传 拿 本地文件系统路径 --单身
file字符串,或afilesarray——服务器读取并发送为multipart/form-data. - 每次呼叫都会发送到Discord
Authorization: Bot <token>; HTTP 429 使用以下命令自动重试响应Retry-After.
每个工具都将原始Discord响应返回为:
{ "status": 200, "ok": true, "body": { /* Discord's JSON, or null for 204 */ } }
Discord API错误(400/401/403/404/…)作为工具结果返回,带有 "ok": false (不是MCP协议错误),因此模型可以读取错误并进行调整。
特性
- 242工具 --全面报道Discord v10 REST API
- 根据Discord的官方OpenAPI规范生成(没有手写包装)
- 每个工具都有丰富、自包含的JSON模式(请求体类型内联在
$defs) - 按本地路径上传文件(附件、头像、贴纸/音板资产)
- 自动速率限制(429)重试
- stdio传输——适用于任何MCP客户端
- 单个自包含二进制文件;规范在构建时嵌入
覆盖
按资源区域列出的所有242个Discord v10操作(103个GET、43个POST、39个DELETE、33个PATCH、24个PUT):
| 区域 | 工具 | 示例 |
|---|---|---|
| 公会 | 91 | 公会CRUD、成员、角色、禁令、公会频道、表情符号、贴纸、预定事件、自动审核、模板、小部件、欢迎屏幕、集成、修剪、虚荣URL |
| 频道和消息 | 48 | 频道、消息、反应、线程、pin、权限覆盖、频道邀请、轮询、键入 |
| 应用程序 | 33 | 全局和公会应用程序(斜线)命令、权限、应用程序表情符号、角色连接元数据、活动实例、附件上传 |
| Webhooks和交互 | 15 | webhook CRUD,执行webhook,交互响应和跟进 |
| 大厅 | 15 | 游戏SDK大厅管理 |
| 用户 | 12 | 当前用户、用户查找、DM、连接、公会会员 |
| 邀请 | 5 | 获取/删除邀请 |
| 合作伙伴/嵌入式应用SDK | 5 | 合作伙伴SDK端点 |
| OAuth2 | 4 | 授权信息、令牌自检* |
| 阶段实例 | 4 | 创建/获取/更新/删除 |
| 杂项 | 6 | 网关、SKU、贴纸包、独立贴纸、语音区域、默认音板声音 |
*OAuth2/合作伙伴SDK/需要 用户(持有者)令牌 不适用于bot令牌--请参阅 局限性.
要查看确切的工具列表,请使用MCP客户端的工具列表或在中运行握手 发现工具.
先决条件
- Discord机器人令牌-- 在此处创建一个.
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
DISCORD_TOKEN |
是 | 机器人令牌,发送方式为 Authorization: Bot <token>. |
DISCORD_OPENAPI_PREVIEW |
否 | 如果属实(1/true/yes/on),使用嵌入式 预览 spec(不稳定/实验性特征)而不是稳定特征。 |
DISCORD_OPENAPI_SPEC |
否 | 要加载的外部OpenAPI JSON文件的路径,而不是嵌入式规范(覆盖预览标志)。允许您在不重建的情况下交换更新的规范。 |
没有
DISCORD_APPLICATION_ID变量。需要应用程序ID的工具需要application_id论证;从那里得到它get_my_application,或使用接受的路由@me别名。
设置
1.创建Discord机器人
- 去 Discord开发者门户 并创建应用程序。
- 打开 Bot → 重置令牌 并复制令牌。
- 下 特权网关意图,启用 服务器成员意图 如果你需要列出公会成员(
list_guild_members). - 下 OAuth2→ URL生成器,选择
bot然后使用生成的URL将机器人邀请到您的服务器。
2.安装
选项A——下载预构建的二进制文件(推荐)
从获取适用于您平台的最新二进制文件 发布:
| 平台 | 二进制 |
|---|---|
| macOS(苹果硅) | discord-mcp-rs-aarch64-apple-darwin |
| macOS(英特尔) | discord-mcp-rs-x86_64-apple-darwin |
| Linux(x86_64) | discord-mcp-rs-x86_64-unknown-linux-gnu |
| Linux(arm64) | discord-mcp-rs-aarch64-unknown-linux-gnu |
| Windows(x86_64) | discord-mcp-rs-x86_64-pc-windows-msvc.exe |
# Example: macOS Apple Silicon
curl -L -o discord-mcp-rs \
https://github.com/Craigeous/discord-mcp-rs/releases/latest/download/discord-mcp-rs-aarch64-apple-darwin
chmod +x discord-mcp-rs
选项B——从源代码构建
需要最近的稳定 锈 工具链(1.94+;板条箱使用2024版)。
git clone https://github.com/Craigeous/discord-mcp-rs.git
cd discord-mcp-rs
cargo build --release
二进制文件被写入 target/release/discord-mcp-rs.
3.配置您的MCP客户端
替换
/path/to/discord-mcp-rs使用二进制文件的实际路径。
Claude 代码
使用CLI:
claude mcp add discord --env DISCORD_TOKEN=YOUR_TOKEN_HERE -- /path/to/discord-mcp-rs
或者将其添加到您的Claude Code MCP设置中(~/.claude/settings.json 或一个项目 .claude/settings.json):
{
"mcpServers": {
"discord": {
"command": "/path/to/discord-mcp-rs",
"env": { "DISCORD_TOKEN": "YOUR_TOKEN_HERE" }
}
}
}
克劳德桌面版
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"discord": {
"command": "/path/to/discord-mcp-rs",
"env": { "DISCORD_TOKEN": "YOUR_TOKEN_HERE" }
}
}
}
要使用预览规范,请添加 "DISCORD_OPENAPI_PREVIEW": "1" 到 env 块。
4.验证
询问您的MCP客户:
“机器人在哪个Discord服务器上?”
它应该呼叫 get_my_user 和 list_my_guilds 并返回机器人的信息和服务器列表。
用法
工具与Discord API一一对应。几个工作示例:
- 列出公会的频道 —
list_guild_channels与{ "guild_id": "..." } - 发送消息 —
create_message与{ "channel_id": "...", "body": { "content": "Hello!" } } - 发送带有附件的消息 —
create_message与{ "channel_id": "...", "body": { "content": "See attached" }, "files": ["/abs/path/image.png"] } - 禁止会员 —
ban_user_from_guild与{ "guild_id": "...", "user_id": "...", "body": { "delete_message_seconds": 0 } } - 编辑机器人的个人资料 —
update_my_user与{ "body": { "username": "New Name" } }
提示
- 雪花ID是字符串 --传递ID,如
"1234567890123456789". - 请求尸体进入
body--形状由每个工具的输入模式(Discord自己的字段名)描述。 - 文件上传是本地路径 --服务器读取文件本身;尽可能通过绝对路径。
- 权限和意图很重要 --如果机器人缺乏权限(或所需的特权意图),该工具将返回Discord错误
"ok": false阅读并调整。 - 应用程序范围的工具 --通行证
application_id(从get_my_application)如有需要。
发现工具
要在stdio上转储完整的工具列表,请执行以下操作:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| DISCORD_TOKEN="YOUR_TOKEN" ./target/release/discord-mcp-rs 2>/dev/null \
| tail -1 | python3 -c 'import sys,json; print("\n".join(sorted(t["name"] for t in json.load(sys.stdin)["result"]["tools"])))'
局限性
- 仅限Bot令牌身份验证。 每个请求都与
Authorization: Bot <token>.需要OAuth2的端点 用户/持有者 令牌(部分oauth2,partner-sdk,以及lobbies)将使用bot令牌失败。 - 没有审核日志原因标头。 Discord的
X-Audit-Log-Reasonheader未公开(规范模型没有header参数)。 - 预览规范不稳定。
DISCORD_OPENAPI_PREVIEW暴露Discord可能会更改或删除的实验操作,恕不另行通知。 - 该规范是Discord的公开预览版,可能与 文档 在某些地方;当他们意见不一致时,请遵循文件。
更新Discord API覆盖范围
保险范围完全来自供应商的规格 spec/ --没有手写的工具可以触摸。要更新,请执行以下操作:
- 转售商
spec/openapi.json和spec/openapi_preview.json来自 不和谐/不和谐api规范 (将上游承诺记录在spec/SOURCE.txt). - 重建。新的/更改的操作会自动成为工具。
将规格更改推送到 main 触发发布工作流。
发展
cargo test # spec parsing + schema generation sanity checks (offline)
cargo clippy # lints
cargo build --release
项目布局:
spec/--供应商提供的Discord OpenAPI规范(通过嵌入include_str!)src/openapi.rs--spec解析器:构建工具注册表和每个工具的JSON模式src/server.rs—rmcp::ServerHandler实施:list_tools/call_tool派遣src/main.rs--入口点、stderr日志记录、stdio传输
调试记录
RUST_LOG=debug DISCORD_TOKEN="YOUR_TOKEN" cargo run
日志会转到stderr,这样它们就不会干扰stdout上的MCP stdio传输。
许可证
麻省理工学院