🚀 GitHub代碼審查助手MCP服務器
這是一個全面的MCP(模型上下文協議)服務器,為GitHub拉取請求(PR)的代碼審查提供智能工具。該服務器使AI助手能夠分析PR、提出改進建議、檢查代碼模式,並確保與團隊標準保持一致。
🚀 快速開始
本服務器提供一系列工具,幫助你更高效地進行GitHub代碼審查。閱讀以下內容,瞭解如何安裝和使用這些工具。
✨ 主要特性
- 全面的PR分析:分析代碼模式、複雜度和潛在問題。
- 審查管理:創建評論、提交審查並管理反饋。
- 智能建議:基於最佳實踐,由AI提供審查建議。
- 標準合規性檢查:根據團隊編碼標準檢查PR。
- 文件與差異分析:詳細檢查代碼更改及其影響。
- 工作流集成:專為完整的審查工作流設計的工具。
📦 安裝指南
前提條件
- Python 3.8或更高版本
- 具有
repo權限範圍的GitHub個人訪問令牌
- 兼容MCP的客戶端(例如Claude Desktop或任何MCP客戶端)
安裝步驟
- 安裝依賴項:
pip install mcp httpx pydantic
- 設置GitHub令牌:
- 轉到GitHub設置 → 開發者設置 → 個人訪問令牌。
- 生成一個具有
repo權限範圍的新令牌。
- 安全地保存該令牌。
- 運行服務器:
python github_code_review_mcp.py
Claude Desktop配置
在Claude Desktop配置文件中添加以下內容:
{
"mcpServers": {
"github-code-review": {
"command": "python",
"args": ["/path/to/server.py"]
}
}
}
📚 詳細文檔
可用工具
1. github_list_pull_requests
列出倉庫中的拉取請求,並提供全面的過濾選項。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
state |
按狀態過濾(open/closed/all) |
sort |
排序依據(created/updated/popularity/long-running) |
direction |
排序方向(asc/desc) |
base |
按基礎分支過濾 |
head |
按頭部分支過濾 |
limit |
最大結果數(1 - 100) |
page |
分頁頁碼 |
response_format |
輸出格式(markdown/json) |
示例用法:
列出facebook/react倉庫中所有打開的PR
2. github_get_pr_details
獲取特定拉取請求的詳細信息。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
include_reviews |
是否包含審查信息(默認:true) |
include_checks |
是否包含狀態檢查(默認:true) |
response_format |
輸出格式(markdown/json) |
示例用法:
獲取編號為123的PR的詳細信息,包括審查和檢查信息
3. github_get_pr_files
列出拉取請求中所有更改的文件,並提供統計信息。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
limit |
每頁最大結果數 |
page |
頁碼 |
response_format |
輸出格式(markdown/json) |
示例用法:
顯示編號為456的PR中所有更改的文件
4. github_get_pr_diff
獲取拉取請求的統一差異。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
file_path |
過濾特定文件(可選) |
context_lines |
上下文行數(0 - 10) |
示例用法:
獲取編號為789的PR中src/main.js文件的差異
5. github_analyze_pr
對拉取請求進行全面的代碼質量分析。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
check_patterns |
是否檢查代碼模式(默認:true) |
check_complexity |
是否分析複雜度(默認:true) |
check_security |
是否進行基本安全檢查(默認:true) |
response_format |
輸出格式(markdown/json) |
示例用法:
分析編號為234的PR的代碼模式、複雜度和安全問題
6. github_get_pr_comments
獲取拉取請求上的所有評論。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
comment_type |
評論類型(all/issue/review) |
limit |
最大結果數 |
page |
頁碼 |
response_format |
輸出格式(markdown/json) |
示例用法:
獲取編號為567的PR的所有審查評論
7. github_create_review_comment
在拉取請求上創建評論(一般評論或內聯評論)。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
body |
支持markdown格式的評論內容(必需) |
commit_id |
要評論的提交的SHA值(可選) |
path |
內聯評論的文件路徑(可選) |
line |
內聯評論的行號(可選) |
side |
差異的一側(LEFT/RIGHT) |
示例用法:
在src/utils.js文件的第42行添加一條建議性能改進的評論
8. github_create_pr_review
提交對拉取請求的正式審查。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
body |
審查摘要文本(可選) |
event |
審查操作(APPROVE/REQUEST_CHANGES/COMMENT) |
comments |
內聯審查評論數組(可選) |
示例用法:
批准編號為890的PR,並附帶一條關於測試覆蓋率良好的評論
9. github_get_review_suggestions
為拉取請求生成由AI提供的審查建議。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
focus_areas |
關注領域(performance/security/readability/tests/documentation) |
response_format |
輸出格式(markdown/json) |
示例用法:
為編號為345的PR生成關注安全和性能的審查建議
10. github_check_team_standards
檢查拉取請求是否符合團隊編碼標準。
參數:
| 屬性 |
詳情 |
owner |
倉庫所有者(必需) |
repo |
倉庫名稱(必需) |
github_token |
GitHub訪問令牌(必需) |
pr_number |
拉取請求編號(必需) |
standards_file |
倉庫中標準文件的路徑(默認:.github/CODING_STANDARDS.md) |
response_format |
輸出格式(markdown/json) |
示例用法:
檢查編號為678的PR是否符合我們團隊的編碼標準
💻 使用示例
示例1:完整的PR審查工作流
github_list_pull_requests(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
state="open",
sort="created"
)
github_get_pr_details(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=123
)
github_analyze_pr(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=123
)
github_get_review_suggestions(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=123,
focus_areas=["security", "performance"]
)
github_check_team_standards(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=123
)
github_create_pr_review(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=123,
body="Great work! A few suggestions for improvement...",
event="APPROVE"
)
示例2:專注的代碼模式分析
files = github_get_pr_files(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=456
)
diff = github_get_pr_diff(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=456,
file_path="src/api/handler.js"
)
analysis = github_analyze_pr(
owner="myorg",
repo="myrepo",
github_token="ghp_xxx",
pr_number=456,
check_patterns=True,
check_security=True
)
🔧 技術細節
最佳實踐
審查人員
- 從概述開始:使用
github_get_pr_details瞭解PR的上下文。
- 先分析:在手動審查之前運行
github_analyze_pr。
- 檢查標準:使用
github_check_team_standards確保一致性。
- 獲取建議:使用
github_get_review_suggestions獲得全面反饋。
- 建設性評論:創建評論時要具體,並提出改進建議。
PR作者
- 自我審查:在請求審查之前,在自己的PR上使用分析工具。
- 符合標準:在提交之前檢查是否符合標準。
- 保持PR聚焦:分析工具在較小、聚焦的更改上效果更好。
- 包含測試:工具會檢查測試覆蓋率。
- 編寫良好的描述:工具會分析PR描述以獲取上下文。
安全考慮
- 令牌安全:切勿硬編碼GitHub令牌。使用環境變量或安全的憑證存儲。
- 權限:確保令牌具有適當的權限範圍(通常
repo就足夠了)。
- 速率限制:GitHub API有速率限制。工具會優雅地處理這些限制,但要注意限制。
- 私有倉庫:如果需要,確保令牌可以訪問私有倉庫。
模式檢測
分析工具可以檢測各種代碼模式,包括:
- 安全問題:硬編碼的秘密、SQL注入風險、XSS漏洞。
- 性能問題:嵌套循環、SELECT *、異步代碼中的同步操作。
- 代碼質量:控制檯日誌、註釋掉的代碼、空的catch塊。
- 最佳實踐:缺少測試、大文件、缺少文檔。
團隊標準集成
在倉庫中創建一個.github/CODING_STANDARDS.md文件,包含團隊的標準。工具將自動使用該文件進行合規性檢查。示例格式如下:
# 編碼標準
## 通用規則
- max_file_length: 500
- max_pr_size: 1000
- require_tests: true
- require_documentation: true
## 分支命名
- 模式: (feature|bugfix|hotfix|release)/description
## 提交消息
- 格式: type(scope): description
- 類型: feat, fix, docs, style, refactor, test, chore
故障排除
常見問題
- 身份驗證失敗
- 驗證你的GitHub令牌是否有效。
- 檢查令牌是否具有所需的權限範圍。
- 確保令牌未過期。
- 速率限制
- GitHub對經過身份驗證的請求的API調用限制為每小時5000次。
- 工具會報告速率限制錯誤。
- 考慮為頻繁訪問的數據實現緩存。
- 大型PR
- 非常大的PR可能會達到響應大小限制。
- 使用分頁參數。
- 儘可能過濾到特定文件。
- 網絡錯誤
- 檢查互聯網連接。
- 驗證GitHub API是否可訪問。
- 檢查代理/防火牆問題。
貢獻
歡迎貢獻!可以改進的方面包括:
- 額外的模式檢測規則
- 支持GitLab/Bitbucket
- 增強的安全掃描
- 與更多CI/CD系統集成
- 自定義規則定義
- 用於提高性能的緩存層
📄 許可證
本項目採用MIT許可證,詳情請參閱LICENSE文件。
致謝
本項目基於以下技術構建:
支持
如果你有問題、疑問或建議,可以:
- 在GitHub上提交問題
- 查看文檔
- 參考故障排除指南
⚠️ 重要提示
本工具旨在協助代碼審查,但不能替代人工判斷。在審查代碼時,請始終結合上下文和領域知識。