内容
# 💬 Discord MCP 服务器
[](https://www.npmjs.com/package/@iqai/mcp-discord)
[](https://opensource.org/licenses/MIT)
## 概述
Discord MCP 服务器使 AI 代理能够通过模型上下文协议(MCP)与 Discord 平台交互。该服务器提供对 Discord 功能的全面访问,包括消息管理、频道管理、论坛操作、反应和 webhook 管理。
通过实现 MCP,该服务器允许大型语言模型(LLM)直接通过其上下文窗口读取和发送消息、管理频道和论坛、处理反应以及与 webhook 交互,弥合了 AI 和 Discord 社区之间的差距。
该服务器支持通过采样功能进行双向通信,允许机器人监听消息并在被提及时自动响应。
## 功能
* **消息管理**:在 Discord 频道中发送、读取和删除消息
* **频道操作**:创建和删除具有自定义主题的文本频道
* **论坛支持**:创建、读取、回复和删除具有标签支持的论坛帖子
* **反应处理**:为消息添加单个或多个反应
* **Webhook 集成**:通过 webhook 创建、编辑、删除和发送消息
* **服务器信息**:检索包括频道和成员数量在内的详细服务器信息
## 安装
### 使用 npx(推荐)
无需全局安装即可使用此服务器:
```bash
npx @iqai/mcp-discord --config ${DISCORD_TOKEN}
```
### 从源代码构建
```bash
git clone https://github.com/IQAIcom/mcp-discord.git
cd mcp-discord
pnpm install
pnpm run build
```
## 与 MCP 客户端一起运行
在您的 MCP 客户端设置中添加以下配置(例如 `claude_desktop_config.json`)。
### 最小配置
```json
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@iqai/mcp-discord", "--config", "您的 Discord 令牌"]
}
}
}
```
### 高级配置(本地构建)
```json
{
"mcpServers": {
"discord": {
"command": "node",
"args": ["/绝对路径/to/mcp-discord/dist/index.js"],
"env": {
"DISCORD_TOKEN": "您的 Discord 机器人令牌",
"SAMPLING_ENABLED": "true",
"TRANSPORT": "stdio"
}
}
}
}
```
## 配置(环境变量)
| 变量 | 是否必填 | 描述 | 默认值 |
| :--- | :--- | :--- | :--- |
| `DISCORD_TOKEN` | 是 | Discord 机器人令牌,从开发者门户获取 | - |
| `SAMPLING_ENABLED` | 否 | 启用双向消息采样 | `true` |
| `TRANSPORT` | 否 | 传输方式:`stdio` 或 `http` | `stdio` |
| `HTTP_PORT` | 否 | HTTP 传输端口 | `8080` |
| `DEFAULT_RATE_LIMIT_SECONDS` | 否 | 每个用户的采样请求速率限制(秒) | `2` |
| `DEFAULT_MESSAGE_CHUNK_SIZE` | 否 | 采样响应最大消息块大小 | `2000` |
| `RESPOND_TO_MENTIONS_ONLY` | 否 | 仅对提及机器人的消息做出回应 | `true` |
| `BLOCK_DMS` | 否 | 阻止直接消息发送给机器人 | `true` |
| `BLOCKED_GUILDS` | 否 | 要阻止的公会 ID 逗号分隔列表 | `""` |
| `BANNED_USERS` | 否 | 要禁止的用户 ID 逗号分隔列表 | `""` |
| `REACTION_SAMPLING_ENABLED` | 否 | 启用 AI 生成的上下文反应 | `false` |
| `REACTION_TIMEOUT_MS` | 否 | 反应采样请求的超时时间(毫秒) | `3000` |
| `REACTION_FALLBACK_EMOJI` | 否 | 反应采样失败时的备用表情符号 | `"🤔"` |
## 先决条件
在使用此 MCP 服务器之前,您需要:
1. 具有适当权限的 Discord 机器人,从 [Discord 开发者门户](https://discord.com/developers/applications) 获取
2. 启用这些权限:消息内容、服务器成员、存在
3. 将机器人添加到您的服务器中,授予所需的权限(建议管理员,或特定权限用于频道、消息、webhook)
## 使用示例
### 消息操作
* "向 #general 频道发送消息 '大家好!'"
* "从公告频道读取最后 10 条消息"
* "删除 #spam-channel 频道中 ID 为 123456789 的消息"
### 频道管理
* "创建一个名为 'project-updates' 的新文本频道,主题为 '项目状态更新'"
* "删除 #old-channel 频道"
* "获取服务器信息,包括所有频道列表"
### 论坛操作
* "列出此服务器中的所有论坛频道"
* "创建一个名为 '功能请求' 的新论坛帖子,内容关于新功能"
* "回复关于错误论坛帖子的状态更新"
### 反应处理
* "在 #feedback 频道的最新消息中添加一个 '点赞' 反应"
* "在公告消息中添加多个反应(🎉 🚀 ✅)"
* "删除我对该消息的反应"
### Webhook 管理
* "在 #alerts 频道中创建一个名为 '通知机器人' 的 webhook"
* "通过 webhook 发送消息,伪装成 '系统警报'"
* "删除 #old-notifications 频道中未使用的 webhook"
## MCP 工具
<!-- AUTO-GENERATED TOOLS START -->
### `discord_add_multiple_reactions`
一次为 Discord 消息添加多个表情符号反应
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `messageId` | 字符串 | ✅ | |
| `emojis` | 数组 | ✅ | |
### `discord_add_reaction`
为特定的 Discord 消息添加表情符号反应
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `messageId` | 字符串 | ✅ | |
| `emoji` | 字符串 | ✅ | |
### `discord_create_category`
在 Discord 服务器中创建一个新类别
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `guildId` | 字符串 | ✅ | |
| `name` | 字符串 | ✅ | |
| `position` | 数字 | | |
| `reason` | 字符串 | | |
### `discord_create_forum_post`
在 Discord 论坛频道中创建一个新帖子,支持可选标签
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `forumChannelId` | 字符串 | ✅ | |
| `title` | 字符串 | ✅ | |
| `content` | 字符串 | ✅ | |
| `tags` | 数组 | | |
### `discord_create_text_channel`
在 Discord 服务器中创建一个新文本频道,支持可选主题
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `guildId` | 字符串 | ✅ | |
| `channelName` | 字符串 | ✅ | |
| `topic` | 字符串 | | |
### `discord_create_webhook`
为 Discord 频道创建一个新 webhook
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `name` | 字符串 | ✅ | |
| `avatar` | 字符串 | | |
| `reason` | 字符串 | | |
### `discord_delete_category`
通过 ID 删除 Discord 类别
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `categoryId` | 字符串 | ✅ | |
| `reason` | 字符串 | | |
### `discord_delete_channel`
删除 Discord 频道,支持可选原因
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `reason` | 字符串 | | |
### `discord_delete_forum_post`
删除论坛帖子或线程,支持可选原因
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `threadId` | 字符串 | ✅ | |
| `reason` | 字符串 | | |
### `discord_delete_message`
删除 Discord 文本频道中的特定消息
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `messageId` | 字符串 | ✅ | |
| `reason` | 字符串 | | |
### `discord_delete_webhook`
删除 Discord 频道的现有 webhook
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `webhookId` | 字符串 | ✅ | |
| `webhookToken` | 字符串 | | |
| `reason` | 字符串 | | |
### `discord_edit_category`
编辑现有的 Discord 类别(名称和位置)
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `categoryId` | 字符串 | ✅ | |
| `name` | 字符串 | | |
| `position` | 数字 | | |
| `reason` | 字符串 | | |
### `discord_edit_webhook`
编辑 Discord 频道的现有 webhook
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `webhookId` | 字符串 | ✅ | |
| `webhookToken` | 字符串 | | |
| `name` | 字符串 | | |
| `avatar` | 字符串 | | |
| `channelId` | 字符串 | | |
| `reason` | 字符串 | | |
### `discord_get_forum_channels`
列出指定 Discord 服务器(公会)中的所有论坛频道
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `guildId` | 字符串 | ✅ | |
### `discord_get_forum_post`
检索论坛帖子的详细信息,包括其消息
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `threadId` | 字符串 | ✅ | |
### `discord_get_server_info`
检索 Discord 服务器的详细信息,包括频道和成员数量
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `guildId` | 字符串 | ✅ | |
### `discord_login`
使用配置的令牌登录 Discord
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `token` | 字符串 | | |
### `discord_read_messages`
从 Discord 文本频道检索消息,支持可配置的限制
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|-----------|------|----------|---------|-------------|
| `channelId` | 字符串 | ✅ | | |
| `limit` | 数字 | | 50 | |
### `discord_remove_reaction`
从 Discord 消息中删除特定的表情符号反应
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `messageId` | 字符串 | ✅ | |
| `emoji` | 字符串 | ✅ | |
| `userId` | 字符串 | | |
### `discord_reply_to_forum`
为现有的论坛帖子或线程添加回复
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `threadId` | 字符串 | ✅ | |
| `message` | 字符串 | ✅ | |
### `discord_send`
向指定的 Discord 文本频道发送消息
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `channelId` | 字符串 | ✅ | |
| `message` | 字符串 | ✅ | |
### `discord_send_webhook_message`
使用 webhook 向 Discord 频道发送消息
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `webhookId` | 字符串 | ✅ | |
| `webhookToken` | 字符串 | ✅ | |
| `content` | 字符串 | ✅ | |
| `username` | 字符串 | | |
| `avatarURL` | 字符串 | | |
| `threadId` | 字符串 | | |
<!-- AUTO-GENERATED TOOLS END -->
## 开发
### 构建项目
```bash
pnpm run build
```
### 开发模式(监听)
```bash
pnpm run watch
```
### linting 和格式化
```bash
pnpm run lint
pnpm run format
```
### 项目结构
* `src/tools/`:各个工具处理程序
* `src/tool-list.ts`:MCP 工具定义
* `src/schemas.ts`:Zod 验证模式
* `src/sampling.ts`:双向采样功能
* `src/index.ts`:服务器入口点
## 资源
* [Discord 开发者门户](https://discord.com/developers/applications)
* [Discord.js 文档](https://discord.js.org/)
* [模型上下文协议(MCP)](https://modelcontextprotocol.io)
## 免责声明
本项目是一个非官方工具,与 Discord Inc. 没有直接关联。用户有责任确保其机器人使用符合 Discord 的服务条款和开发者条款。
## 许可证
[MIT](LICENSE)