返回市场
代码审查服务器-mcp

代码审查服务器-mcp

作者:cayirtepeomer28 星标更新:2025-11-14

项目介绍

Gerrit Review MCP 服务器

smithery 徽章

此 MCP 服务器提供了与 Gerrit 代码审查系统集成的功能,允许通过简单界面让AI助手审查代码更改及其详细信息。

功能

该服务器提供了一套简洁的代码审查工具集:

获取变更详情

fetch_gerrit_change(change_id: str, patchset_number: Optional[str] = None)
  • 获取完整的变更信息,包括文件和补丁集
  • 显示每个修改文件的详细差异信息
  • 展示文件更改、插入和删除
  • 支持审查特定的补丁集
  • 返回全面的变更详情,包括:
    • 项目和分支信息
    • 作者和审阅者详情
    • 评论和审阅历史
    • 文件修改及差异内容
    • 当前补丁集信息

比较补丁集差异

fetch_patchset_diff(change_id: str, base_patchset: str, target_patchset: str, file_path: Optional[str] = None)
  • 比较一个变更的两个补丁集之间的差异
  • 查看特定文件差异或所有更改文件
  • 分析跨补丁集版本的代码修改
  • 跟踪通过审阅迭代的更改演变

提交审阅反馈

submit_gerrit_review(
    change_id: str,
    message: Optional[str] = None,
    patchset_number: Optional[str] = None,
    labels: Optional[Dict[str, int]] = None,
    comments: Optional[List[Dict[str, Any]]] = None,
    notify: str = "OWNER",
)
  • 发布总结反馈、投票标签(例如:{"Code-Review": 1})以及内联/文件级评论
  • 目标是特定的补丁集或默认为最新修订版
  • 控制 Gerrit 的通知行为(notify: NONE, OWNER, OWNER_REVIEWERS, ALL
  • 评论负载接受带有 path, message 和可选 Gerrit 注释字段(如 line, side, range 等)的字典

示例用法

审查一个完整的变更:

# 获取变更 23824 的最新补丁集
change = fetch_gerrit_change("23824")

提交带有投票和内联评论的审阅反馈:

submit_gerrit_review(
    change_id="23824",
    message="整体看起来不错",
    labels={"Code-Review": 1},
    comments=[{"path": "src/app.py", "line": 42, "message": "很好的重构"}],
    patchset_number="2",           # 可选:目标特定补丁集
    notify="OWNER_REVIEWERS",      # 可选:调整通知范围
)

比较特定的补丁集:

# 比较变更 23824 的补丁集 1 和 2 之间的差异
diff = fetch_patchset_diff("23824", "1", "2")

查看特定文件更改:

# 获取补丁集之间特定文件的差异
file_diff = fetch_patchset_diff("23824", "1", "2", "path/to/file.swift")

预备条件

  • Python 3.10 或更高版本(推荐 Python 3.11)
  • Gerrit HTTP 访问凭证
  • 从 Gerrit 设置生成的 HTTP 密码
  • mcp[cli] 包仓库的访问权限(私有包)

安装

通过 Smithery 安装

要通过 Smithery 自动安装 gerrit-code-review-mcp 到 Claude Desktop:

npx -y @smithery/cli install @cayirtepeomer/gerrit-code-review-mcp --client claude

手动安装

  1. 克隆此仓库:
git clone <repository-url>
cd gerrit-review-mcp
  1. 创建并激活虚拟环境:
# 对于 macOS/Linux:
python -m venv .venv
source .venv/bin/activate

# 对于 Windows:
python -m venv .venv
.venv\Scripts\activate
  1. 以可编辑模式安装此包及其依赖项:
pip install -e .

配置

  1. 设置环境变量:
export GERRIT_HOST="gerrit.example.com"  # 你的 Gerrit 服务器主机名(不带 https://)
export GERRIT_USER="your-username"       # 你的 Gerrit 账户用户名
export GERRIT_HTTP_PASSWORD="your-http-password"  # 从 Gerrit 设置 > HTTP 凭证生成的 HTTP 密码
export GERRIT_EXCLUDED_PATTERNS="\.pbxproj$,\.xcworkspace$,node_modules/"  # 可选:用于排除审阅的文件的正则表达式模式
# 可选的 TLS 配置用于自定义或自签名证书
export GERRIT_SSL_VERIFY="true"              # 在受限环境中设置为 'false' 以跳过 TLS 验证
export GERRIT_CA_BUNDLE="/path/to/ca.pem"    # 可选的自定义 CA 证书包路径,当验证保持启用时使用
# 注意:如果两者都设置了,GERRIT_CA_BUNDLE 将优先,并且使用该包进行验证。

或者创建一个 .env 文件:

GERRIT_HOST=gerrit.example.com
GERRIT_USER=your-username
GERRIT_HTTP_PASSWORD=your-http-password
GERRIT_EXCLUDED_PATTERNS=\.pbxproj$,\.xcworkspace$,node_modules/
GERRIT_SSL_VERIFY=true
GERRIT_CA_BUNDLE=/path/to/ca.pem
# 如果两者都设置了,CA 证书包优先。
  1. 生成 HTTP 密码:
  • 登录到你的 Gerrit 网页界面
  • 前往设置 > HTTP 凭证
  • 生成新密码
  • 将密码复制到你的环境或 .env 文件中
  1. 配置文件排除(可选):
  • 设置 GERRIT_EXCLUDED_PATTERNS 以排除特定类型的文件从变更审阅
  • 使用逗号分隔的正则表达式模式(例如,\.pbxproj$,\.xcworkspace$,node_modules/
  • 空白或未设置以使用默认排除
  • 这有助于防止大型文件导致无限循环

MCP 配置

要使用此 MCP 服务器与 Cursor 或 RooCode,你需要将其配置添加到你的 ~/.cursor/mcp.json.roo/mcp.json 文件中。以下是所需配置:

{
  "mcpServers": {
    "gerrit-review-mcp": {
      "command": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin/python",
      "args": [
        "/path/to/your/workspace/gerrit-code-review-mcp/server.py",
        "--transport",
        "stdio"
      ],
      "cwd": "/path/to/your/workspace/gerrit-code-review-mcp",
      "env": {
        "PYTHONPATH": "/path/to/your/workspace/gerrit-code-review-mcp",
        "VIRTUAL_ENV": "/path/to/your/workspace/gerrit-code-review-mcp/.venv",
        "PATH": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin:/usr/local/bin:/usr/bin:/bin"
      },
      "stdio": true
    }
  }
}

/path/to/your/workspace 替换为你的实际工作区路径。例如,如果你的项目在 /Users/username/projects/gerrit-code-review-mcp,使用那个路径代替。

确保配置中的所有路径指向:

  • 你的虚拟环境的 Python 解释器
  • 项目的 server.py 文件
  • 正确的工作目录
  • 虚拟环境的 bin 目录在 PATH 中

实现细节

该服务器使用 Gerrit REST API 与 Gerrit 交互,提供:

  • 快速可靠的变更信息检索
  • 使用 HTTP 消息摘要认证的安全身份验证
  • 支持各种 Gerrit REST 端点
  • 清晰且易于维护的代码库
  • HTTPS 加密以实现安全通信

故障排除

如果你遇到连接问题:

  1. 验证你的 HTTP 密码是否正确设置在 GERRIT_HTTP_PASSWORD
  2. 检查 GERRIT_HOST 设置(仅主机名,不带 https://)
  3. 确保 Gerrit 服务器上启用了 HTTPS 访问
  4. 使用带有 /a/ 前缀的 curl 测试认证 API 调用连接:
    curl -u "your-username:your-http-password" https://your-gerrit-server.com/a/changes/?q=status:open
    
  5. 验证你的账户对 Gerrit 的访问权限

HTTP 凭证认证问题

如果你在认证方面遇到问题,请检查你的 Gerrit 配置是否有 gitBasicAuthPolicy = HTTP(或 HTTP_LDAP)。

使用自签名证书

  • GERRIT_SSL_VERIFY=false 在 Gerrit 使用内部颁发的证书且缺少所需的主题备用名称(SAN)条目时禁用 TLS 验证。
  • 通过 GERRIT_CA_BUNDLE=/path/to/ca.pem 提供自定义证书包以保持验证启用同时信任私有 CA。
  • 将禁用验证视为临时解决方案,直到为所访问的 Gerrit 主机名发布具有匹配 SAN 的证书为止。

许可

本项目根据 MIT 许可证授权。

测试

该项目包括使用 testcontainers-python 的全面 Docker 集成测试,以实现可靠的跨平台测试。

运行测试

要运行完整的测试套件:

# 安装开发依赖项
pip install -e ".[dev]"

# 运行所有测试
pytest

# 仅运行集成测试
pytest -m integration

# 以详细输出运行
pytest -v

# 以覆盖率运行
pytest --cov=. --cov-report=html

测试环境变量

可以使用以下环境变量来配置测试行为:

  • TEST_STARTUP_TIMEOUT: 容器启动超时时间(秒,默认值:30)
  • TEST_LOGS_SETTLE_DELAY: 检查日志之前的延迟时间(秒,默认值:0)
  • DOCKER_HOST: 远程 Docker 的 Docker 守护进程主机(可选)

示例:

# 使用自定义超时运行测试
TEST_STARTUP_TIMEOUT=60 TEST_LOGS_SETTLE_DELAY=1 pytest tests/test_docker_integration.py -v

Docker 要求

Docker 集成测试需要:

  • 运行并可访问的 Docker 守护进程
  • Docker 套接字位于 /var/run/docker.sock(Linux/macOS)或设置 DOCKER_HOST
  • 构建和运行容器的足够权限

如果没有 Docker,测试将自动跳过。

CI/CD 集成

对于 CI/CD 环境,请确保:

  • 可用的 Docker-in-Docker (DinD) 服务
  • 挂载的 Docker 套接字或配置了 DOCKER_HOST
  • 为较慢的环境设置了足够的超时值

贡献

我们欢迎贡献!请:

  1. 分叉仓库
  2. 创建一个功能分支
  3. 进行你的更改
  4. 运行测试套件以确保一切正常
  5. 提交拉取请求