Discord MCP服务器

一个安全的Discord MCP服务器,提供带有JWT Bearer Token认证的Discord集成工具。

  • by henishshah18
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 henishshah18/discord_mcp_server

使用说明

使用承载令牌身份验证对MCP服务器进行Discord

一个安全的Discord MCP(模型上下文协议)服务器,为Discord集成工具提供JWT承载令牌身份验证。

🔐 安全功能

  • 承载令牌身份验证 使用JWT令牌
  • Discord令牌保护 -令牌嵌入在JWT声明中,不作为参数传递
  • 审核日志记录 -所有工具调用都会记录用户信息
  • 临时机器人连接 -没有持久的Discord机器人实例
  • RSA密钥对加密 用于令牌签名和验证

📋 可用工具

工具 说明
send_message 向Discord频道发送消息
get_messages 从频道获取最近的消息
get_channel_info 获取频道元数据和信息
search_messages 搜索包含关键字的邮件
moderate_content 从频道中删除特定消息

🚀 设置和安装

先决条件

  • Python 3.8+
  • 使用适当权限对机器人令牌进行Discord
  • 虚拟环境(推荐)

安装

  1. 安装依赖项 (已安装在您的venv中):

    pip install discord.py fastapi fastmcp uvicorn python-dotenv PyJWT
    
  2. 创建Discord机器人 并获取您的bot令牌:

    • 首选 Discord开发者门户
    • 创建新的应用程序和机器人
    • 复制机器人令牌
    • 以必要的权限邀请机器人到您的服务器
  3. 设置环境变量 (可选):

    # Create .env file
    echo "DISCORD_TOKEN=your_discord_bot_token_here" > .env
    

🏃‍♂️ 运行服务器

启动服务器

python app.py

服务器将于启动 http://localhost:8000 并显示:

  • 可用工具
  • 认证信息
  • 令牌生成说明

生成访问令牌

替换 YOUR_DISCORD_TOKEN 使用您的实际Discord机器人令牌:

python -c "from app import generate_access_token; print(generate_access_token('YOUR_DISCORD_TOKEN'))"

🔧 使用服务器

认证

所有请求都必须在Authorization标头中包含JWT Bearer令牌:

Authorization: Bearer <your_jwt_token>

进行工具调用

端点: POST /mcp/v1/tools/invoke

标头:

Authorization: Bearer <your_jwt_token>
Content-Type: application/json

请求格式:

{
  "method": "tool_name",
  "params": {
    "parameter1": "value1",
    "parameter2": "value2"
  }
}

例子

获取频道信息

curl -X POST http://localhost:8000/mcp/v1/tools/invoke \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "get_channel_info",
    "params": {
      "channel_id": "1234567890123456789"
    }
  }'

发送信息

curl -X POST http://localhost:8000/mcp/v1/tools/invoke \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "send_message",
    "params": {
      "channel_id": "1234567890123456789",
      "message": "Hello from MCP server!"
    }
  }'

搜索邮件

curl -X POST http://localhost:8000/mcp/v1/tools/invoke \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "search_messages",
    "params": {
      "channel_id": "1234567890123456789",
      "query": "hello",
      "limit": 10
    }
  }'

🧪 测试

使用提供的测试脚本验证您的设置:

# Update YOUR_DISCORD_TOKEN in test_server.py first
python test_server.py

📊 监控和日志

  • 审计日志 写信给 audit.log
  • 服务器日志 显示在控制台中
  • 每次工具调用都会记录用户ID、参数和成功/失败状态

🏗️ 建筑

身份验证流程

  1. 令牌生成:JWT声明中嵌入了Discord令牌
  2. 请求身份验证:JWT使用RSA公钥进行验证
  3. 令牌提取:从已验证的JWT中提取Discord令牌
  4. 工具执行:已创建临时Discord机器人连接
  5. 清理:操作后Bot连接已正确关闭

证券收益

  • 无代币风险:不一致标记从不出现在请求参数中
  • 集中式身份验证:所有工具的单一身份验证点
  • 审计跟踪:完整记录所有经过身份验证的操作
  • 临时连接:没有持久的机器人实例减少攻击面

🔒 安全考虑

开发vs生产

  • 发展:使用生成的RSA密钥对(当前设置)
  • 生产:应使用外部OAuth 2.1提供程序或IdP

令牌安全

  • JWT令牌过期 1小时后(可配置)
  • Discord代币 嵌入在JWT声明中,在请求中不可见
  • RSA加密 确保令牌完整性

最佳实践

  1. 定期旋转令牌 生产中
  2. 使用HTTPS 用于所有通信
  3. 安全地存储Discord令牌 (环境变量、机密管理器)
  4. 监控审核日志 不寻常的活动
  5. 实施速率限制 如有需要

🤝 与MCP客户端集成

此服务器遵循MCP规范,可用于:

  • 克劳德桌面 与MCP集成
  • 自定义MCP客户端
  • API测试工具 (邮差、卷发等)

📚 参考文献

🐛 故障排除

常见问题

  1. “在身份验证中找不到Discord令牌”

    • 验证您的JWT令牌在声明中是否包含Discord令牌
    • 使用正确的Discord机器人令牌检查令牌生成
  2. “Bot没有权限”

    • 确保Discord机器人在服务器中具有必要的权限
    • 具体检查频道权限
  3. “无法访问服务器”

    • 验证服务器是否在localhost:8000上运行
    • 检查端口冲突
  4. “无效令牌”

    • 令牌可能已过期(默认1小时)
    • 生成新令牌
    • 验证授权标头中的令牌格式