GitHub PR MCP Server 是一个基于 Gradio 和 Flask 的 MCP(Model Context Protocol)服务器,专门用于自动化处理 GitHub Pull Request 事件。当 GitHub Webhook 检测到 PR 时,系统会自动将 PR 内容转发给 AI 进行分析,生成结构化的日志摘要,并发送到飞书知识库。
- MCP 协议支持: 完全兼容 MCP 协议,可作为工具供 LLM 使用
- 自动化 Webhook 处理: 自动接收和处理 GitHub PR 事件
- AI 驱动分析: 使用 OpenAI API 智能分析代码变更
- 飞书知识库集成: 自动将分析结果发送到飞书
- 双界面支持: 提供 Gradio Web UI 和 Flask API 两种接口
- 安全验证: 支持 GitHub Webhook 签名验证
- 丰富信息: 提取完整的 PR 信息(标题、作者、链接等)
GitHub Webhook → MCP Server → AI Analysis → 飞书知识库
↓ ↓ ↓ ↓
PR 事件 自动处理 智能摘要 结构化存储
- Python 3.8 或更高版本
- OpenAI API 密钥
- GitHub 个人访问令牌(可选)
- 飞书 Webhook URL(可选)
# 安装 uvx(如果尚未安装)
pip install uvx
# 直接运行
uvx github-pr-mcp-server@latestpip install github-pr-mcp-servergit clone https://github.com/your-username/github-pr-mcp-server.git
cd github-pr-mcp-server
pip install -e .创建 .env 文件或设置环境变量:
# 必需配置
OPENAI_API_KEY=your_openai_api_key_here
# 可选配置
WEBHOOK_SECRET=your_github_webhook_secret
FEISHU_WEBHOOK_URL=your_feishu_webhook_url
GITHUB_TOKEN=your_github_token
MCP_SERVER_TYPE=gradio # 或 flask
WEBHOOK_PORT=5000
GRADIO_PORT=8080# 启动 Gradio MCP 服务器(默认)
github-pr-mcp-server
# 或指定服务器类型
MCP_SERVER_TYPE=flask github-pr-mcp-server{
"mcpServers": {
"github-pr-mcp-server": {
"command": "uvx",
"args": ["github-pr-mcp-server@latest"],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY",
"WEBHOOK_SECRET": "YOUR_WEBHOOK_SECRET",
"FEISHU_WEBHOOK_URL": "YOUR_FEISHU_WEBHOOK_URL",
"GITHUB_TOKEN": "YOUR_GITHUB_TOKEN"
}
}
}
}{
"mcpServers": {
"github-pr-mcp-server": {
"command": "npx",
"args": [
"mcp-remote",
"http://your-server:port/gradio_api/mcp/sse"
]
}
}
}-
配置 GitHub Webhook
- 在 GitHub 仓库设置中添加 Webhook
- URL:
http://your-server:5000/webhook/github - 事件类型: 选择 "Pull requests"
- 密钥: 设置
WEBHOOK_SECRET
-
创建 Pull Request
- 在 GitHub 上创建新的 PR
- 系统自动接收 Webhook 事件
-
AI 分析处理
- 系统自动获取 PR 差异内容
- 使用 OpenAI API 分析代码变更
- 生成结构化摘要
-
飞书通知
- 自动将摘要发送到飞书知识库
- 包含 PR 链接、作者、变更详情等信息
# 在 MCP 客户端中调用
result = mcp_analyze_pr(
diff_content="diff --git a/file.py b/file.py...",
openai_api_key="your_key"
)
print(result) # 输出 AI 生成的摘要# 处理 GitHub Webhook 事件
result = mcp_process_webhook(
webhook_payload='{"action": "opened", "pull_request": {...}}',
openai_api_key="your_key",
feishu_webhook_url="your_webhook_url"
)
print(result) # 输出处理结果# 手动分析代码变更
summary = mcp_manual_analysis(
diff_content="your_diff_content",
openai_api_key="your_key",
feishu_webhook_url="your_webhook_url"
)
print(summary)## 变更摘要
本次 PR 主要添加了用户认证功能和错误处理机制。
## 详细分析
1. 新增了用户登录模块 (auth.py)
- 实现了 JWT 令牌生成和验证
- 添加了密码加密功能
2. 改进了错误处理 (error_handler.py)
- 统一了错误响应格式
- 添加了详细的错误日志记录
3. 更新了 API 文档
- 添加了新的端点说明
- 更新了认证流程文档
## 建议
- 建议添加单元测试覆盖新功能
- 考虑添加速率限制防止暴力攻击
- 建议在生产环境使用 HTTPS
{
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": "PR #123: 添加用户认证功能",
"content": [
[{"tag": "text", "text": "📋 **PR 摘要**\n\n"}],
[{"tag": "text", "text": "🔗 **链接**: https://github.com/repo/pull/123\n"}],
[{"tag": "text", "text": "👤 **作者**: username\n"}],
[{"tag": "text", "text": "📝 **变更摘要**: 添加了用户认证功能...\n"}],
[{"tag": "text", "text": "📅 **处理时间**: 2024-01-15 14:30:00\n"}]
]
}
}
}
}- Web 界面:
http://localhost:8080 - MCP 端点:
http://localhost:8080/gradio_api/mcp/sse - Webhook:
http://localhost:8080/webhook/github
- Webhook:
http://localhost:5000/webhook/github - MCP 分析:
POST /mcp/analyze - MCP Webhook:
POST /mcp/process_webhook - 健康检查:
GET /health
系统启动时会自动验证配置:
🔍 验证环境配置...
✅ 所有环境变量已配置- API 密钥错误: 显示友好的错误信息
- 网络连接失败: 自动重试机制
- Webhook 验证失败: 返回 401 状态码
- AI 分析失败: 提供详细的错误原因
- 健康检查端点:
/health - 实时日志: 控制台输出详细处理信息
- 错误追踪: 完整的异常堆栈信息
- Webhook 签名验证: 防止伪造请求
- API 密钥保护: 支持环境变量配置
- HTTPS 支持: 生产环境建议使用 HTTPS
- 访问控制: 可配置 IP 白名单
- 标准工具格式: 符合 MCP 工具规范
- 类型注解: 完整的参数类型定义
- 文档字符串: 详细的函数说明
- 错误处理: 标准的错误响应格式
- 项目地址: https://github.com/your-username/github-pr-mcp-server
- 问题反馈: https://github.com/your-username/github-pr-mcp-server/issues
- 文档: https://github.com/your-username/github-pr-mcp-server#readme
- 许可证: MIT License
欢迎提交 Issue 和 Pull Request!
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。