Discord MCP服务器机器人
一种模型上下文协议(MCP)服务器,使AI模型能够通过安全、经过身份验证的工具与Discord进行交互。该项目提供了通过MCP协议访问的Discord机器人功能的完整实现。
🚀 特性
- 完成MCP服务器实施 使用官方的TypeScript SDK
- Discord集成 具有完整的bot功能
- 安全认证 具有基于API密钥的访问控制
- 权限系统 具有细粒度访问控制
- 多租户支持 用于管理多个Discord机器人
- 审计日志 对于所有操作
- MCP检查器集成 用于调试和监控
📋 先决条件
- Node.js 18+和npm
- Discord Bot令牌(请参阅下面的设置说明)
- TypeScript知识(可选,用于开发)
🛠️ 安装
- 克隆存储库:
git clone
cd W4D3-Discord-MCP-Server-Bot- 安装依赖项:
npm install- 设置环境变量:
创建一个 .env 根目录中的文件:
DISCORD_BOT_TOKEN=your_discord_bot_token_here- 构建项目:
npm run build🤖 Discord Bot设置
- 创建Discord应用程序:
- 首选 Discord开发者门户 - 点击“新建应用程序”并为其命名 - 转到“Bot”部分,然后单击“添加Bot” - 复制机器人令牌并将其添加到您的 .env 文件
- 配置Bot权限:
- 在Discord开发者门户中,转到“OAuth2”>“URL生成器” - 选择“机器人”范围 - 选择这些权限: - 发送消息 - 读取消息历史记录 - 管理邮件(用于审核) - 查看频道
- 邀请机器人到服务器:
- 使用生成的URL邀请机器人到您的Discord服务器 - 确保机器人在您要使用的频道中具有必要的权限
🔧 用法
启动MCP服务器
npm start服务器将启动并通过stdio传输监听MCP请求。
MCP检验员测试
npm run inspector这将启动MCP检查器以调试和测试您的服务器。
🛡️ 认证
服务器使用API密钥身份验证。在中配置API密钥 src/mcp_auth_wrapper.ts:
export const API_KEYS: Record = {
'your-api-key': {
permissions: ['send_message', 'get_messages', 'get_channel_info', 'search_messages', 'moderate_content'],
tenant: 'your-tenant-id'
},
};🔨 可用工具
1. send_message
向Discord频道发送消息。
参数:
channelId(字符串):频道ID不一致content(string):要发送的消息内容apiKey(字符串):用于身份验证的API密钥
2. get_messages
从Discord频道检索消息历史记录。
参数:
channelId(字符串):频道ID不一致limit(number,可选):要检索的邮件数(默认值:10)apiKey(字符串):用于身份验证的API密钥
3. get_channel_info
获取有关Discord频道的信息。
参数:
channelId(字符串):频道ID不一致apiKey(字符串):用于身份验证的API密钥
4. search_messages
在Discord频道中搜索消息。
参数:
channelId(字符串):频道ID不一致query(string):搜索查询limit(数字,可选):最大结果数(默认值:10)apiKey(字符串):用于身份验证的API密钥
5. moderate_content
通过删除邮件来缓和内容。
参数:
channelId(字符串):频道ID不一致messageId(string):消息ID为中等action(string):适度操作('删除')apiKey(字符串):用于身份验证的API密钥
🏗️ 发展
项目结构
src/
├── index.ts # Main MCP server implementation
├── state.ts # Shared Discord client state
├── mcp_auth_wrapper.ts # Authentication and permissions
└── tools/ # Individual tool implementations (legacy)
├── send_message.ts
├── get_messages.ts
├── get_channel_info.ts
├── search_messages.ts
└── moderate_content.ts构建命令
npm run build-将TypeScript编译为JavaScriptnpm run watch-注意更改并重新编译npm start-启动已编译的服务器npm run inspector-启动MCP检查器
添加新工具
要添加新工具,请在中注册 src/index.ts 使用 mcpServer.tool() 方法:
mcpServer.tool(
'your_tool_name',
{
param1: z.string().describe('Parameter description'),
apiKey: z.string().describe('API key for authentication')
},
async ({ param1, apiKey }) => {
// Authentication check
if (!apiKey || !(apiKey in API_KEYS)) {
auditLog('AUTH_FAIL', { reason: 'Invalid or missing API key', tool: 'your_tool_name' });
throw new Error('Unauthorized: Invalid or missing API key');
}
// Your tool logic here
return {
content: [{
type: "text",
text: "Your response here"
}]
};
}
);🔒 安全功能
- API密钥验证:所有工具都需要有效的API密钥
- 基于权限的访问控制:每个API密钥都有特定的权限
- 审计日志:所有操作都会记录时间戳
- 输入验证:所有参数都使用Zod模式进行验证
- 错误处理:通过有意义的消息进行全面的错误处理
📊 监控
服务器包括内置的监控功能:
- 请求/响应日志记录:记录所有MCP请求和响应
- 连接跟踪:活动连接受到监控
- 审计跟踪:记录所有操作以进行安全审计
🐛 故障排除
常见问题
- Bot没有响应:检查机器人令牌是否正确,机器人是否在线
- 权限错误:确保机器人在Discord中具有所需的权限
- 身份验证失败:验证API密钥是否正确配置
- 未找到频道:确保机器人可以访问指定的频道
调试
使用MCP检查器调试服务器:
npm run inspector检查控制台日志以了解详细的错误消息和审计跟踪。
📝 许可证
该项目根据ISC许可证获得许可。
🤝 贡献
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
