github-pr-mcp-server


Namegithub-pr-mcp-server JSON
Version 1.0.3 PyPI version JSON
download
home_pageNone
SummaryGitHub PR MCP Server - MCP&Agent Challenge
upload_time2025-08-03 14:12:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords mcp github pr webhook ai gradio flask
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # GitHub PR MCP Server - MCP&Agent Challenge

[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![PyPI version](https://badge.fury.io/py/github-pr-mcp-server.svg)](https://badge.fury.io/py/github-pr-mcp-server)

## 项目简介

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(推荐)

```bash
# 安装 uvx(如果尚未安装)
pip install uvx

# 直接运行
uvx github-pr-mcp-server@latest
```

#### 方法二:从 PyPI 安装

```bash
pip install github-pr-mcp-server
```

#### 方法三:从源码安装

```bash
git clone https://github.com/your-username/github-pr-mcp-server.git
cd github-pr-mcp-server
pip install -e .
```

### 环境变量配置

创建 `.env` 文件或设置环境变量:

```bash
# 必需配置
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
```

### 启动服务器

```bash
# 启动 Gradio MCP 服务器(默认)
github-pr-mcp-server

# 或指定服务器类型
MCP_SERVER_TYPE=flask github-pr-mcp-server
```

### MCP 客户端配置

#### 支持 SSE 的客户端(如 Claude Desktop)

```json
{
  "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"
      }
    }
  }
}
```

#### 不支持 SSE 的客户端

```json
{
  "mcpServers": {
    "github-pr-mcp-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://your-server:port/gradio_api/mcp/sse"
      ]
    }
  }
}
```

## 使用示例

### 自动化 PR 处理流程

1. **配置 GitHub Webhook**
   - 在 GitHub 仓库设置中添加 Webhook
   - URL: `http://your-server:5000/webhook/github`
   - 事件类型: 选择 "Pull requests"
   - 密钥: 设置 `WEBHOOK_SECRET`

2. **创建 Pull Request**
   - 在 GitHub 上创建新的 PR
   - 系统自动接收 Webhook 事件

3. **AI 分析处理**
   - 系统自动获取 PR 差异内容
   - 使用 OpenAI API 分析代码变更
   - 生成结构化摘要

4. **飞书通知**
   - 自动将摘要发送到飞书知识库
   - 包含 PR 链接、作者、变更详情等信息

### MCP 函数使用

#### 1. 分析 PR 差异

```python
# 在 MCP 客户端中调用
result = mcp_analyze_pr(
    diff_content="diff --git a/file.py b/file.py...",
    openai_api_key="your_key"
)
print(result)  # 输出 AI 生成的摘要
```

#### 2. 处理 Webhook 载荷

```python
# 处理 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)  # 输出处理结果
```

#### 3. 手动分析

```python
# 手动分析代码变更
summary = mcp_manual_analysis(
    diff_content="your_diff_content",
    openai_api_key="your_key",
    feishu_webhook_url="your_webhook_url"
)
print(summary)
```

### 输出示例

#### AI 分析结果

```
## 变更摘要
本次 PR 主要添加了用户认证功能和错误处理机制。

## 详细分析
1. 新增了用户登录模块 (auth.py)
   - 实现了 JWT 令牌生成和验证
   - 添加了密码加密功能
   
2. 改进了错误处理 (error_handler.py)
   - 统一了错误响应格式
   - 添加了详细的错误日志记录

3. 更新了 API 文档
   - 添加了新的端点说明
   - 更新了认证流程文档

## 建议
- 建议添加单元测试覆盖新功能
- 考虑添加速率限制防止暴力攻击
- 建议在生产环境使用 HTTPS
```

#### 飞书消息格式

```json
{
  "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"}]
        ]
      }
    }
  }
}
```

## API 端点

### Gradio MCP 服务器

- **Web 界面**: `http://localhost:8080`
- **MCP 端点**: `http://localhost:8080/gradio_api/mcp/sse`
- **Webhook**: `http://localhost:8080/webhook/github`

### Flask MCP 服务器

- **Webhook**: `http://localhost:5000/webhook/github`
- **MCP 分析**: `POST /mcp/analyze`
- **MCP Webhook**: `POST /mcp/process_webhook`
- **健康检查**: `GET /health`

## 配置验证

系统启动时会自动验证配置:

```bash
🔍 验证环境配置...
✅ 所有环境变量已配置
```

## 错误处理

- **API 密钥错误**: 显示友好的错误信息
- **网络连接失败**: 自动重试机制
- **Webhook 验证失败**: 返回 401 状态码
- **AI 分析失败**: 提供详细的错误原因

## 监控

- **健康检查端点**: `/health`
- **实时日志**: 控制台输出详细处理信息
- **错误追踪**: 完整的异常堆栈信息

## 安全考虑

- **Webhook 签名验证**: 防止伪造请求
- **API 密钥保护**: 支持环境变量配置
- **HTTPS 支持**: 生产环境建议使用 HTTPS
- **访问控制**: 可配置 IP 白名单

## MCP 协议合规性

- **标准工具格式**: 符合 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!

1. Fork 项目
2. 创建功能分支
3. 提交更改
4. 推送到分支
5. 创建 Pull Request

## 许可证

本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "github-pr-mcp-server",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "mcp, github, pr, webhook, ai, gradio, flask",
    "author": null,
    "author_email": "MCP&Agent Challenge <challenge@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/28/d4/dc36437956b7c75c7925fbe1cc27f9c04ac087ab04dfabe5271c1ce6d9d2/github_pr_mcp_server-1.0.3.tar.gz",
    "platform": null,
    "description": "# GitHub PR MCP Server - MCP&Agent Challenge\r\n\r\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n[![PyPI version](https://badge.fury.io/py/github-pr-mcp-server.svg)](https://badge.fury.io/py/github-pr-mcp-server)\r\n\r\n## \u9879\u76ee\u7b80\u4ecb\r\n\r\nGitHub PR MCP Server \u662f\u4e00\u4e2a\u57fa\u4e8e Gradio \u548c Flask \u7684 MCP\uff08Model Context Protocol\uff09\u670d\u52a1\u5668\uff0c\u4e13\u95e8\u7528\u4e8e\u81ea\u52a8\u5316\u5904\u7406 GitHub Pull Request \u4e8b\u4ef6\u3002\u5f53 GitHub Webhook \u68c0\u6d4b\u5230 PR \u65f6\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u5c06 PR \u5185\u5bb9\u8f6c\u53d1\u7ed9 AI \u8fdb\u884c\u5206\u6790\uff0c\u751f\u6210\u7ed3\u6784\u5316\u7684\u65e5\u5fd7\u6458\u8981\uff0c\u5e76\u53d1\u9001\u5230\u98de\u4e66\u77e5\u8bc6\u5e93\u3002\r\n\r\n### \u6838\u5fc3\u529f\u80fd\r\n\r\n- **MCP \u534f\u8bae\u652f\u6301**: \u5b8c\u5168\u517c\u5bb9 MCP \u534f\u8bae\uff0c\u53ef\u4f5c\u4e3a\u5de5\u5177\u4f9b LLM \u4f7f\u7528\r\n- **\u81ea\u52a8\u5316 Webhook \u5904\u7406**: \u81ea\u52a8\u63a5\u6536\u548c\u5904\u7406 GitHub PR \u4e8b\u4ef6\r\n- **AI \u9a71\u52a8\u5206\u6790**: \u4f7f\u7528 OpenAI API \u667a\u80fd\u5206\u6790\u4ee3\u7801\u53d8\u66f4\r\n- **\u98de\u4e66\u77e5\u8bc6\u5e93\u96c6\u6210**: \u81ea\u52a8\u5c06\u5206\u6790\u7ed3\u679c\u53d1\u9001\u5230\u98de\u4e66\r\n- **\u53cc\u754c\u9762\u652f\u6301**: \u63d0\u4f9b Gradio Web UI \u548c Flask API \u4e24\u79cd\u63a5\u53e3\r\n- **\u5b89\u5168\u9a8c\u8bc1**: \u652f\u6301 GitHub Webhook \u7b7e\u540d\u9a8c\u8bc1\r\n- **\u4e30\u5bcc\u4fe1\u606f**: \u63d0\u53d6\u5b8c\u6574\u7684 PR \u4fe1\u606f\uff08\u6807\u9898\u3001\u4f5c\u8005\u3001\u94fe\u63a5\u7b49\uff09\r\n\r\n### \u6280\u672f\u67b6\u6784\r\n\r\n```\r\nGitHub Webhook \u2192 MCP Server \u2192 AI Analysis \u2192 \u98de\u4e66\u77e5\u8bc6\u5e93\r\n     \u2193              \u2193            \u2193            \u2193\r\n  PR \u4e8b\u4ef6      \u81ea\u52a8\u5904\u7406     \u667a\u80fd\u6458\u8981     \u7ed3\u6784\u5316\u5b58\u50a8\r\n```\r\n\r\n## \u90e8\u7f72\u6307\u5357\r\n\r\n### \u73af\u5883\u8981\u6c42\r\n\r\n- Python 3.8 \u6216\u66f4\u9ad8\u7248\u672c\r\n- OpenAI API \u5bc6\u94a5\r\n- GitHub \u4e2a\u4eba\u8bbf\u95ee\u4ee4\u724c\uff08\u53ef\u9009\uff09\r\n- \u98de\u4e66 Webhook URL\uff08\u53ef\u9009\uff09\r\n\r\n### \u5b89\u88c5\u65b9\u6cd5\r\n\r\n#### \u65b9\u6cd5\u4e00\uff1a\u4f7f\u7528 uvx\uff08\u63a8\u8350\uff09\r\n\r\n```bash\r\n# \u5b89\u88c5 uvx\uff08\u5982\u679c\u5c1a\u672a\u5b89\u88c5\uff09\r\npip install uvx\r\n\r\n# \u76f4\u63a5\u8fd0\u884c\r\nuvx github-pr-mcp-server@latest\r\n```\r\n\r\n#### \u65b9\u6cd5\u4e8c\uff1a\u4ece PyPI \u5b89\u88c5\r\n\r\n```bash\r\npip install github-pr-mcp-server\r\n```\r\n\r\n#### \u65b9\u6cd5\u4e09\uff1a\u4ece\u6e90\u7801\u5b89\u88c5\r\n\r\n```bash\r\ngit clone https://github.com/your-username/github-pr-mcp-server.git\r\ncd github-pr-mcp-server\r\npip install -e .\r\n```\r\n\r\n### \u73af\u5883\u53d8\u91cf\u914d\u7f6e\r\n\r\n\u521b\u5efa `.env` \u6587\u4ef6\u6216\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a\r\n\r\n```bash\r\n# \u5fc5\u9700\u914d\u7f6e\r\nOPENAI_API_KEY=your_openai_api_key_here\r\n\r\n# \u53ef\u9009\u914d\u7f6e\r\nWEBHOOK_SECRET=your_github_webhook_secret\r\nFEISHU_WEBHOOK_URL=your_feishu_webhook_url\r\nGITHUB_TOKEN=your_github_token\r\nMCP_SERVER_TYPE=gradio  # \u6216 flask\r\nWEBHOOK_PORT=5000\r\nGRADIO_PORT=8080\r\n```\r\n\r\n### \u542f\u52a8\u670d\u52a1\u5668\r\n\r\n```bash\r\n# \u542f\u52a8 Gradio MCP \u670d\u52a1\u5668\uff08\u9ed8\u8ba4\uff09\r\ngithub-pr-mcp-server\r\n\r\n# \u6216\u6307\u5b9a\u670d\u52a1\u5668\u7c7b\u578b\r\nMCP_SERVER_TYPE=flask github-pr-mcp-server\r\n```\r\n\r\n### MCP \u5ba2\u6237\u7aef\u914d\u7f6e\r\n\r\n#### \u652f\u6301 SSE \u7684\u5ba2\u6237\u7aef\uff08\u5982 Claude Desktop\uff09\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"github-pr-mcp-server\": {\r\n      \"command\": \"uvx\",\r\n      \"args\": [\"github-pr-mcp-server@latest\"],\r\n      \"env\": {\r\n        \"OPENAI_API_KEY\": \"YOUR_OPENAI_API_KEY\",\r\n        \"WEBHOOK_SECRET\": \"YOUR_WEBHOOK_SECRET\",\r\n        \"FEISHU_WEBHOOK_URL\": \"YOUR_FEISHU_WEBHOOK_URL\",\r\n        \"GITHUB_TOKEN\": \"YOUR_GITHUB_TOKEN\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n#### \u4e0d\u652f\u6301 SSE \u7684\u5ba2\u6237\u7aef\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"github-pr-mcp-server\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\r\n        \"mcp-remote\",\r\n        \"http://your-server:port/gradio_api/mcp/sse\"\r\n      ]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## \u4f7f\u7528\u793a\u4f8b\r\n\r\n### \u81ea\u52a8\u5316 PR \u5904\u7406\u6d41\u7a0b\r\n\r\n1. **\u914d\u7f6e GitHub Webhook**\r\n   - \u5728 GitHub \u4ed3\u5e93\u8bbe\u7f6e\u4e2d\u6dfb\u52a0 Webhook\r\n   - URL: `http://your-server:5000/webhook/github`\r\n   - \u4e8b\u4ef6\u7c7b\u578b: \u9009\u62e9 \"Pull requests\"\r\n   - \u5bc6\u94a5: \u8bbe\u7f6e `WEBHOOK_SECRET`\r\n\r\n2. **\u521b\u5efa Pull Request**\r\n   - \u5728 GitHub \u4e0a\u521b\u5efa\u65b0\u7684 PR\r\n   - \u7cfb\u7edf\u81ea\u52a8\u63a5\u6536 Webhook \u4e8b\u4ef6\r\n\r\n3. **AI \u5206\u6790\u5904\u7406**\r\n   - \u7cfb\u7edf\u81ea\u52a8\u83b7\u53d6 PR \u5dee\u5f02\u5185\u5bb9\r\n   - \u4f7f\u7528 OpenAI API \u5206\u6790\u4ee3\u7801\u53d8\u66f4\r\n   - \u751f\u6210\u7ed3\u6784\u5316\u6458\u8981\r\n\r\n4. **\u98de\u4e66\u901a\u77e5**\r\n   - \u81ea\u52a8\u5c06\u6458\u8981\u53d1\u9001\u5230\u98de\u4e66\u77e5\u8bc6\u5e93\r\n   - \u5305\u542b PR \u94fe\u63a5\u3001\u4f5c\u8005\u3001\u53d8\u66f4\u8be6\u60c5\u7b49\u4fe1\u606f\r\n\r\n### MCP \u51fd\u6570\u4f7f\u7528\r\n\r\n#### 1. \u5206\u6790 PR \u5dee\u5f02\r\n\r\n```python\r\n# \u5728 MCP \u5ba2\u6237\u7aef\u4e2d\u8c03\u7528\r\nresult = mcp_analyze_pr(\r\n    diff_content=\"diff --git a/file.py b/file.py...\",\r\n    openai_api_key=\"your_key\"\r\n)\r\nprint(result)  # \u8f93\u51fa AI \u751f\u6210\u7684\u6458\u8981\r\n```\r\n\r\n#### 2. \u5904\u7406 Webhook \u8f7d\u8377\r\n\r\n```python\r\n# \u5904\u7406 GitHub Webhook \u4e8b\u4ef6\r\nresult = mcp_process_webhook(\r\n    webhook_payload='{\"action\": \"opened\", \"pull_request\": {...}}',\r\n    openai_api_key=\"your_key\",\r\n    feishu_webhook_url=\"your_webhook_url\"\r\n)\r\nprint(result)  # \u8f93\u51fa\u5904\u7406\u7ed3\u679c\r\n```\r\n\r\n#### 3. \u624b\u52a8\u5206\u6790\r\n\r\n```python\r\n# \u624b\u52a8\u5206\u6790\u4ee3\u7801\u53d8\u66f4\r\nsummary = mcp_manual_analysis(\r\n    diff_content=\"your_diff_content\",\r\n    openai_api_key=\"your_key\",\r\n    feishu_webhook_url=\"your_webhook_url\"\r\n)\r\nprint(summary)\r\n```\r\n\r\n### \u8f93\u51fa\u793a\u4f8b\r\n\r\n#### AI \u5206\u6790\u7ed3\u679c\r\n\r\n```\r\n## \u53d8\u66f4\u6458\u8981\r\n\u672c\u6b21 PR \u4e3b\u8981\u6dfb\u52a0\u4e86\u7528\u6237\u8ba4\u8bc1\u529f\u80fd\u548c\u9519\u8bef\u5904\u7406\u673a\u5236\u3002\r\n\r\n## \u8be6\u7ec6\u5206\u6790\r\n1. \u65b0\u589e\u4e86\u7528\u6237\u767b\u5f55\u6a21\u5757 (auth.py)\r\n   - \u5b9e\u73b0\u4e86 JWT \u4ee4\u724c\u751f\u6210\u548c\u9a8c\u8bc1\r\n   - \u6dfb\u52a0\u4e86\u5bc6\u7801\u52a0\u5bc6\u529f\u80fd\r\n   \r\n2. \u6539\u8fdb\u4e86\u9519\u8bef\u5904\u7406 (error_handler.py)\r\n   - \u7edf\u4e00\u4e86\u9519\u8bef\u54cd\u5e94\u683c\u5f0f\r\n   - \u6dfb\u52a0\u4e86\u8be6\u7ec6\u7684\u9519\u8bef\u65e5\u5fd7\u8bb0\u5f55\r\n\r\n3. \u66f4\u65b0\u4e86 API \u6587\u6863\r\n   - \u6dfb\u52a0\u4e86\u65b0\u7684\u7aef\u70b9\u8bf4\u660e\r\n   - \u66f4\u65b0\u4e86\u8ba4\u8bc1\u6d41\u7a0b\u6587\u6863\r\n\r\n## \u5efa\u8bae\r\n- \u5efa\u8bae\u6dfb\u52a0\u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u65b0\u529f\u80fd\r\n- \u8003\u8651\u6dfb\u52a0\u901f\u7387\u9650\u5236\u9632\u6b62\u66b4\u529b\u653b\u51fb\r\n- \u5efa\u8bae\u5728\u751f\u4ea7\u73af\u5883\u4f7f\u7528 HTTPS\r\n```\r\n\r\n#### \u98de\u4e66\u6d88\u606f\u683c\u5f0f\r\n\r\n```json\r\n{\r\n  \"msg_type\": \"post\",\r\n  \"content\": {\r\n    \"post\": {\r\n      \"zh_cn\": {\r\n        \"title\": \"PR #123: \u6dfb\u52a0\u7528\u6237\u8ba4\u8bc1\u529f\u80fd\",\r\n        \"content\": [\r\n          [{\"tag\": \"text\", \"text\": \"\ud83d\udccb **PR \u6458\u8981**\\n\\n\"}],\r\n          [{\"tag\": \"text\", \"text\": \"\ud83d\udd17 **\u94fe\u63a5**: https://github.com/repo/pull/123\\n\"}],\r\n          [{\"tag\": \"text\", \"text\": \"\ud83d\udc64 **\u4f5c\u8005**: username\\n\"}],\r\n          [{\"tag\": \"text\", \"text\": \"\ud83d\udcdd **\u53d8\u66f4\u6458\u8981**: \u6dfb\u52a0\u4e86\u7528\u6237\u8ba4\u8bc1\u529f\u80fd...\\n\"}],\r\n          [{\"tag\": \"text\", \"text\": \"\ud83d\udcc5 **\u5904\u7406\u65f6\u95f4**: 2024-01-15 14:30:00\\n\"}]\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## API \u7aef\u70b9\r\n\r\n### Gradio MCP \u670d\u52a1\u5668\r\n\r\n- **Web \u754c\u9762**: `http://localhost:8080`\r\n- **MCP \u7aef\u70b9**: `http://localhost:8080/gradio_api/mcp/sse`\r\n- **Webhook**: `http://localhost:8080/webhook/github`\r\n\r\n### Flask MCP \u670d\u52a1\u5668\r\n\r\n- **Webhook**: `http://localhost:5000/webhook/github`\r\n- **MCP \u5206\u6790**: `POST /mcp/analyze`\r\n- **MCP Webhook**: `POST /mcp/process_webhook`\r\n- **\u5065\u5eb7\u68c0\u67e5**: `GET /health`\r\n\r\n## \u914d\u7f6e\u9a8c\u8bc1\r\n\r\n\u7cfb\u7edf\u542f\u52a8\u65f6\u4f1a\u81ea\u52a8\u9a8c\u8bc1\u914d\u7f6e\uff1a\r\n\r\n```bash\r\n\ud83d\udd0d \u9a8c\u8bc1\u73af\u5883\u914d\u7f6e...\r\n\u2705 \u6240\u6709\u73af\u5883\u53d8\u91cf\u5df2\u914d\u7f6e\r\n```\r\n\r\n## \u9519\u8bef\u5904\u7406\r\n\r\n- **API \u5bc6\u94a5\u9519\u8bef**: \u663e\u793a\u53cb\u597d\u7684\u9519\u8bef\u4fe1\u606f\r\n- **\u7f51\u7edc\u8fde\u63a5\u5931\u8d25**: \u81ea\u52a8\u91cd\u8bd5\u673a\u5236\r\n- **Webhook \u9a8c\u8bc1\u5931\u8d25**: \u8fd4\u56de 401 \u72b6\u6001\u7801\r\n- **AI \u5206\u6790\u5931\u8d25**: \u63d0\u4f9b\u8be6\u7ec6\u7684\u9519\u8bef\u539f\u56e0\r\n\r\n## \u76d1\u63a7\r\n\r\n- **\u5065\u5eb7\u68c0\u67e5\u7aef\u70b9**: `/health`\r\n- **\u5b9e\u65f6\u65e5\u5fd7**: \u63a7\u5236\u53f0\u8f93\u51fa\u8be6\u7ec6\u5904\u7406\u4fe1\u606f\r\n- **\u9519\u8bef\u8ffd\u8e2a**: \u5b8c\u6574\u7684\u5f02\u5e38\u5806\u6808\u4fe1\u606f\r\n\r\n## \u5b89\u5168\u8003\u8651\r\n\r\n- **Webhook \u7b7e\u540d\u9a8c\u8bc1**: \u9632\u6b62\u4f2a\u9020\u8bf7\u6c42\r\n- **API \u5bc6\u94a5\u4fdd\u62a4**: \u652f\u6301\u73af\u5883\u53d8\u91cf\u914d\u7f6e\r\n- **HTTPS \u652f\u6301**: \u751f\u4ea7\u73af\u5883\u5efa\u8bae\u4f7f\u7528 HTTPS\r\n- **\u8bbf\u95ee\u63a7\u5236**: \u53ef\u914d\u7f6e IP \u767d\u540d\u5355\r\n\r\n## MCP \u534f\u8bae\u5408\u89c4\u6027\r\n\r\n- **\u6807\u51c6\u5de5\u5177\u683c\u5f0f**: \u7b26\u5408 MCP \u5de5\u5177\u89c4\u8303\r\n- **\u7c7b\u578b\u6ce8\u89e3**: \u5b8c\u6574\u7684\u53c2\u6570\u7c7b\u578b\u5b9a\u4e49\r\n- **\u6587\u6863\u5b57\u7b26\u4e32**: \u8be6\u7ec6\u7684\u51fd\u6570\u8bf4\u660e\r\n- **\u9519\u8bef\u5904\u7406**: \u6807\u51c6\u7684\u9519\u8bef\u54cd\u5e94\u683c\u5f0f\r\n\r\n## \u5f00\u53d1\u4fe1\u606f\r\n\r\n- **\u9879\u76ee\u5730\u5740**: https://github.com/your-username/github-pr-mcp-server\r\n- **\u95ee\u9898\u53cd\u9988**: https://github.com/your-username/github-pr-mcp-server/issues\r\n- **\u6587\u6863**: https://github.com/your-username/github-pr-mcp-server#readme\r\n- **\u8bb8\u53ef\u8bc1**: MIT License\r\n\r\n## \u8d21\u732e\u6307\u5357\r\n\r\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\r\n\r\n1. Fork \u9879\u76ee\r\n2. \u521b\u5efa\u529f\u80fd\u5206\u652f\r\n3. \u63d0\u4ea4\u66f4\u6539\r\n4. \u63a8\u9001\u5230\u5206\u652f\r\n5. \u521b\u5efa Pull Request\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u67e5\u770b [LICENSE](LICENSE) \u6587\u4ef6\u4e86\u89e3\u8be6\u60c5\u3002 \r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "GitHub PR MCP Server - MCP&Agent Challenge",
    "version": "1.0.3",
    "project_urls": {
        "Documentation": "https://github.com/your-username/github-pr-mcp-server#readme",
        "Homepage": "https://github.com/your-username/github-pr-mcp-server",
        "Issues": "https://github.com/your-username/github-pr-mcp-server/issues",
        "Repository": "https://github.com/your-username/github-pr-mcp-server"
    },
    "split_keywords": [
        "mcp",
        " github",
        " pr",
        " webhook",
        " ai",
        " gradio",
        " flask"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "43e7a422d0b4c1ada4f48778ab33e67ddb9dbc1b9396591fb07f8de822efa517",
                "md5": "624d28f7f0567a696cf7688aca128e2a",
                "sha256": "1a6894b98eb5ef4cfe291e419a3dccf29c9ee20bdd4d2a9c526ffbc0ac846df8"
            },
            "downloads": -1,
            "filename": "github_pr_mcp_server-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "624d28f7f0567a696cf7688aca128e2a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 13280,
            "upload_time": "2025-08-03T14:12:18",
            "upload_time_iso_8601": "2025-08-03T14:12:18.250749Z",
            "url": "https://files.pythonhosted.org/packages/43/e7/a422d0b4c1ada4f48778ab33e67ddb9dbc1b9396591fb07f8de822efa517/github_pr_mcp_server-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "28d4dc36437956b7c75c7925fbe1cc27f9c04ac087ab04dfabe5271c1ce6d9d2",
                "md5": "a3a972e435b37ea6b4eb4ca5429c0552",
                "sha256": "f3c3f176fcdbbd277b5486ab09d5ece2a311470dd39424448b79a535dfa5189f"
            },
            "downloads": -1,
            "filename": "github_pr_mcp_server-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "a3a972e435b37ea6b4eb4ca5429c0552",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 14558,
            "upload_time": "2025-08-03T14:12:20",
            "upload_time_iso_8601": "2025-08-03T14:12:20.301377Z",
            "url": "https://files.pythonhosted.org/packages/28/d4/dc36437956b7c75c7925fbe1cc27f9c04ac087ab04dfabe5271c1ce6d9d2/github_pr_mcp_server-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-03 14:12:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "your-username",
    "github_project": "github-pr-mcp-server#readme",
    "github_not_found": true,
    "lcname": "github-pr-mcp-server"
}
        
Elapsed time: 1.05550s