Discord MCP服务器机器人

一个基于模型上下文协议(MCP)的服务器,使AI模型能够通过安全认证的工具与Discord交互,提供完整的Discord机器人功能实现。

  • by Misal-Ambasta
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 misal-ambasta/w4d3-discord-mcp-server-bot

使用说明

Discord MCP服务器机器人

一种模型上下文协议(MCP)服务器,使AI模型能够通过安全、经过身份验证的工具与Discord进行交互。该项目提供了通过MCP协议访问的Discord机器人功能的完整实现。

🚀 特性

  • 完成MCP服务器实施 使用官方的TypeScript SDK
  • Discord集成 具有完整的bot功能
  • 安全认证 具有基于API密钥的访问控制
  • 权限系统 具有细粒度访问控制
  • 多租户支持 用于管理多个Discord机器人
  • 审计日志 对于所有操作
  • MCP检查器集成 用于调试和监控

📋 先决条件

  • Node.js 18+和npm
  • Discord Bot令牌(请参阅下面的设置说明)
  • TypeScript知识(可选,用于开发)

🛠️ 安装

  1. 克隆存储库:

    git clone <repository-url>
    cd W4D3-Discord-MCP-Server-Bot
    
  2. 安装依赖项:

    npm install
    
  3. 设置环境变量: 创建一个 .env 根目录中的文件:

    DISCORD_BOT_TOKEN=your_discord_bot_token_here
    
  4. 构建项目:

    npm run build
    

🤖 Discord Bot设置

  1. 创建Discord应用程序:

    • 首选 Discord开发者门户
    • 点击“新建应用程序”并为其命名
    • 转到“Bot”部分,然后单击“添加Bot”
    • 复制机器人令牌并将其添加到您的 .env 文件
  2. 配置Bot权限:

    • 在Discord开发者门户中,转到“OAuth2”>“URL生成器”
    • 选择“机器人”范围
    • 选择这些权限:
      • 发送消息
      • 读取消息历史记录
      • 管理邮件(用于审核)
      • 查看频道
  3. 邀请机器人到服务器:

    • 使用生成的URL邀请机器人到您的Discord服务器
    • 确保机器人在您要使用的频道中具有必要的权限

🔧 用法

启动MCP服务器

npm start

服务器将启动并通过stdio传输监听MCP请求。

MCP检验员测试

npm run inspector

这将启动MCP检查器以调试和测试您的服务器。

🛡️ 认证

服务器使用API密钥身份验证。在中配置API密钥 src/mcp_auth_wrapper.ts:

export const API_KEYS: Record<string, { permissions: string[], tenant: string }> = {
  '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编译为JavaScript
  • npm 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请求和响应
  • 连接跟踪:活动连接受到监控
  • 审计跟踪:记录所有操作以进行安全审计

🐛 故障排除

常见问题

  1. Bot没有响应:检查机器人令牌是否正确,机器人是否在线
  2. 权限错误:确保机器人在Discord中具有所需的权限
  3. 身份验证失败:验证API密钥是否正确配置
  4. 未找到频道:确保机器人可以访问指定的频道

调试

使用MCP检查器调试服务器:

npm run inspector

检查控制台日志以了解详细的错误消息和审计跟踪。

📝 许可证

该项目根据ISC许可证获得许可。

🤝 贡献

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

📚 资源