内容
# dismcp
使用以下工具构建的简单 Discord MCP 服务器:
- [`serenity`](https://crates.io/crates/serenity) 用于访问 Discord API
- [`rmcp`](https://crates.io/crates/rmcp) 用于提供 MCP 工具
> [!NOTE]
> 该项目处于早期开发阶段。目标是提供一个简单的 MCP 服务器,暴露 Discord 机器人功能。这允许与其他支持 MCP 的工具和服务(例如 AI 代理)轻松集成。
>
> 该项目设计为易于扩展,允许开发人员根据需要添加更多工具。最终目标是提供一套全面的工具,涵盖大部分 Discord 机器人功能。
## 要求
- Rust 工具链(cargo)
- Discord 机器人令牌(从 [Discord 开发者门户](https://discord.com/developers/applications) 获取)
环境变量:
- `DISCORD_TOKEN`(必填)
- `MCP_TRANSPORT`(可选,默认值:`stdio`. 接受 `stdio` 或 `http`)
- `MCP_BIND_ADDRESS`(可选,默认值:`127.0.0.1:3000`. 仅在传输方式为 `http` 时使用)
- `MCP_ENABLED_TOOLS`(可选,默认值:`all`. 接受 `all` 或以逗号分隔的类别列表,例如 `channel,guild,message`)
- `MCP_OMIT_NULLS`(可选,默认值:`false`. 当设置为 `true` 时,所有 `null` 字段从工具响应中被剥离,以减少 AI 代理的令牌消耗)
## 快速开始
默认情况下,服务器在 **stdio** 模式下运行,旨在由 AI 客户端直接执行:
```bash
DISCORD_TOKEN=your_bot_token cargo run
```
如果您想运行一个 **HTTP** 服务器以进行远程访问:
```bash
MCP_TRANSPORT=http DISCORD_TOKEN=your_bot_token cargo run
```
如果您想要为 HTTP 自定义绑定:
```bash
MCP_TRANSPORT=http MCP_BIND_ADDRESS=127.0.0.1:4000/mcp DISCORD_TOKEN=your_bot_token cargo run
```
或者,如果您通过 `cargo install dismcp` 或 `cargo install --path .` 安装,您可以直接使用二进制文件:
```bash
DISCORD_TOKEN=your_bot_token dismcp
```
## 如何连接到您的 AI 代理
大多数 AI 客户端期望 MCP 服务器作为后台子进程执行,通过标准输入/输出(`stdio`)进行通信。
### 1. 安装或定位二进制文件
最简单的方法是全局安装:
```bash
cargo install dismcp
```
### 2. 将其连接到您的 AI 代理
<details>
<summary><strong>Claude Desktop / Claude Code</strong></summary>
添加到 `~/.claude/settings.json`(Claude Code)或 Claude Desktop 配置:
```json
{
"mcpServers": {
"discord": {
"command": "dismcp",
"env": {
"DISCORD_TOKEN": "your_bot_token"
}
}
}
}
```
</details>
<details>
<summary><strong>Cursor</strong></summary>
添加到 `.cursor/mcp.json` 在您的项目中(或全局设置):
```json
{
"mcpServers": {
"discord": {
"command": "dismcp",
"env": {
"DISCORD_TOKEN": "your_bot_token"
}
}
}
}
```
</details>
<details>
<summary><strong>VS Code (Copilot / GitHub Copilot Chat)</strong></summary>
添加到 `.vscode/mcp.json`:
```json
{
"mcpServers": {
"discord": {
"command": "dismcp",
"env": {
"DISCORD_TOKEN": "your_bot_token"
}
}
}
}
```
</details>
<details>
<summary><strong>Antigravity</strong></summary>
添加到 `.agents/mcp.json` 在您的工作区中(或更好:`~/gemini/antigravity/mcp_config.json` 以获得更好的支持):
```json
{
"mcpServers": {
"discord": {
"command": "dismcp",
"env": {
"DISCORD_TOKEN": "your_bot_token"
}
}
}
}
```
</details>
<details>
<summary><strong>使用 HTTP 模式代替?</strong></summary>
如果您的客户端仅支持 HTTP,或者您在不同的机器上运行 `dismcp`,请使用 `MCP_TRANSPORT=http` 运行服务器,并配置您的客户端指向 URL(例如 `http://127.0.0.1:3000/`)。
</details>
<details>
<summary><strong>其他客户端</strong></summary>
请参考他们的文档,了解如何添加自定义 MCP 服务器。
</details>
### 3. 就是这样
连接后,代理可以看到所有 Discord 工具(频道、消息、角色、表情符号等),可以直接调用它们。例如,您可以询问代理:
> _"列出我的 Discord 服务器并在我的测试服务器中找到 #general 频道"_
它将自主调用 `get_guilds` 和 `search_guild_channels`。
## 已实现的工具类别:
- [应用](#application)
- [频道](#channel)
- [表情符号](#emoji)
- [公会](#guild)
- [成员](#member)
- [消息](#message)
- [角色](#role)
- [用户](#user)
- [Webhook](#webhook)
### 应用
| 工具 | 描述 |
| --- | --- |
| `get_current_application` | 获取当前 Discord 应用的信息。 |
| `edit_bot_profile` | 编辑机器人用户名、头像或横幅。 |
### 频道
| 工具 | 描述 |
| --- | --- |
| `search_guild_channels` | 按名称/类型搜索公会中的频道。 |
| `get_channel` | 获取指定 ID 的频道详细信息。 |
| `get_dm_channels` | 列出身份验证用户的 DM 频道。 |
| `create_dm_channel` | 与目标用户创建/获取 DM 频道。 |
| `get_guild_channels` | 列出公会中的频道。 |
| `create_guild_channel` | 创建公会频道(文本、语音、论坛等)。 |
| `edit_channel` | 编辑频道,包括输入的论坛字段。 |
| `delete_channel` | 删除公会或 DM 频道。 |
| `create_forum_post` | 在论坛频道中创建帖子。 |
| `edit_forum_post_tags` | 替换论坛帖子/线程上应用的标签。 |
| `get_guild_active_threads` | 列出公会中活跃的线程/帖子。 |
| `get_channel_archived_public_threads` | 列出频道中存档的公共线程/帖子。 |
| `get_channel_archived_private_threads` | 列出频道中存档的私人线程。 |
| `get_channel_joined_archived_private_threads` | 列出频道中已加入的存档私人线程。 |
| `get_channel_thread_members` | 列出当前在线程频道中的成员。 |
| `join_thread_channel` | 加入线程频道。 |
| `leave_thread_channel` | 离开线程频道。 |
| `get_channel_invites` | 列出频道的邀请。 |
| `create_channel_invite` | 为频道创建邀请。 |
| `delete_invite` | 删除邀请代码。 |
### 表情符号
| 工具 | 描述 |
| --- | --- |
| `get_guild_emojis` | 列出公会表情符号。 |
| `get_guild_emoji` | 获取指定 ID 的公会表情符号。 |
| `create_guild_emoji` | 从数据 URI 图像创建公会表情符号。 |
| `edit_guild_emoji` | 编辑公会表情符号名称/角色。 |
| `delete_guild_emoji` | 删除公会表情符号。 |
| `get_application_emojis` | 列出应用表情符号。 |
| `get_application_emoji` | 获取指定 ID 的应用表情符号。 |
| `create_application_emoji` | 从数据 URI 图像创建应用表情符号。 |
| `edit_application_emoji` | 编辑应用表情符号名称。 |
| `delete_application_emoji` | 删除应用表情符号。 |
### 公会
| 工具 | 描述 |
| --- | --- |
| `get_guilds` | 列出身份验证用户可见的公会。 |
| `get_guild` | 获取指定 ID 的公会详细信息。 |
| `get_guild_members` | 列出公会成员,支持分页。 |
| `get_guild_invites` | 列出公会中所有活跃的邀请。 |
| `get_scheduled_events` | 列出公会中所有计划的事件。 |
| `get_scheduled_event` | 获取指定 ID 的计划事件详细信息。 |
| `create_scheduled_event` | 创建新的计划事件。 |
| `edit_scheduled_event` | 编辑现有的计划事件。 |
| `delete_scheduled_event` | 删除计划事件。 |
| `get_scheduled_event_users` | 列出订阅计划事件的用户。 |
### 成员
| 工具 | 描述 |
| --- | --- |
| `get_member` | 获取指定公会/用户 ID 的成员。 |
| `kick_member` | 将成员从公会中踢出。 |
| `ban_member` | 将用户从公会中封禁。 |
| `unban_member` | 将用户从公会中解封。 |
| `timeout_member` | 设置成员超时直到指定时间戳。 |
| `clear_member_timeout` | 删除成员超时。 |
### 消息
| 工具 | 描述 |
| --- | --- |
| `get_message` | 获取指定频道/消息 ID 的消息。 |
| `get_messages` | 列出频道的消息,支持分页。 |
| `send_message` | 向公会频道或 DM 发送富文本消息。 |
| `edit_message` | 编辑公会频道或 DM 中的富文本消息。 |
| `delete_message` | 删除公会频道或 DM 中的消息。 |
| `get_pinned_messages` | 列出频道中固定的消息。 |
| `pin_message` | 在频道中固定消息。 |
| `unpin_message` | 在频道中取消固定消息。 |
| `add_message_reaction` | 给消息添加反应。 |
| `remove_own_message_reaction` | 删除机器人对消息的反应。 |
| `remove_user_message_reaction` | 删除其他用户对消息的反应。 |
| `clear_message_reactions` | 清除消息的所有反应。 |
| `clear_message_emoji_reactions` | 清除消息中某个表情符号的反应。 |
| `get_message_reaction_users` | 列出对指定表情符号做出反应的用户。 |
### 角色
| 工具 | 描述 |
| --- | --- |
| `search_guild_roles` | 按名称搜索公会角色。 |
| `get_guild_roles` | 列出公会角色。 |
| `get_guild_role` | 获取指定 ID 的角色。 |
| `create_guild_role` | 在公会中创建角色。 |
| `edit_guild_role` | 编辑现有的公会角色。 |
| `delete_guild_role` | 删除公会角色。 |
| `edit_guild_role_position` | 编辑角色顺序/位置。 |
| `add_member_role` | 将角色分配给公会成员。 |
| `remove_member_role` | 从公会成员中移除角色。 |
### 用户
| 工具 | 描述 |
| --- | --- |
| `search_guild_members` | 按用户名/全局名称/昵称搜索成员。 |
| `get_current_user` | 获取身份验证用户。 |
| `get_user` | 获取指定 ID 的用户。 |
### Webhook
| 工具 | 描述 |
| --- | --- |
| `get_channel_webhooks` | 列出特定频道的 Webhook。 |
| `get_guild_webhooks` | 列出特定公会的 Webhook。 |
| `get_webhook` | 获取指定 ID 的 Webhook 详细信息。 |
| `create_webhook` | 为特定频道创建新的 Webhook。 |
| `edit_webhook` | 编辑指定 ID 的现有 Webhook。 |
| `delete_webhook` | 删除指定 ID 的 Webhook。 |
## 贡献
我欢迎贡献!如果您想帮助改进 `dismcp`,请参阅 [贡献指南](CONTRIBUTING.md) 以了解如何开始、添加新工具和提交拉取请求。
## 许可证
该项目根据 MIT 许可证许可 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。