GitLab代码审查工具

一个基于Model Context Protocol (MCP)的GitLab代码审查和项目管理工具,提供与GitLab项目、合并请求、问题和代码审查交互的全面功能。

  • by midodimori
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 midodimori/gitlab-review-mcp

使用说明

Gitlab 代码审查 MCP(MCP可能代表某个特定的流程、方法或团队,但在此上下文中未给出具体含义,故保留原样)

一个用于GitLab代码审查和项目管理的模型上下文协议(MCP)服务器。它提供了通过Claude AI与GitLab项目、合并请求、问题和代码审查进行交互的全面工具。

特点/特性

  • GitLab 集成 使用python-gitlab完成GitLab API的集成
  • 代码审查工具 - 列出项目、合并请求(MRs)、查看差异并添加评论
  • 合并请求管理 - 创建、更新和审查合并请求
  • 建议支持 - 查看并应用代码更改建议
  • 问题跟踪 - 获取并管理GitLab问题
  • 行内评论 - 为特定行添加精确的代码审查评论
  • 评论管理 - 更新现有评论并回复讨论
  • 单例模式 - 在所有工具间高效重用连接
  • 类型安全 - 使用结构化模型进行完整的 Pydantic 验证
  • 错误处理 - 全面的错误报告和优雅的故障处理模式
  • 记录日志 - 集中化日志配置,可选控制台输出

安装

使用uvx(推荐)

uvx gitlab-review-mcp

使用紫外线

uv add gitlab-review-mcp
uv run gitlab-review-mcp

配置

环境变量

要求:

  • GITLAB_URL - GitLab 实例 URL(默认: https://gitlab.com)
  • GITLAB_PRIVATE_TOKEN - 您的GitLab个人访问令牌

可选:

  • GITLAB_REVIEW_MCP_SHOW_LOGS - 设置为 "true" 以启用详细日志记录(默认: false)

获取您的GitLab令牌

  1. 访问您的GitLab实例(例如,https://gitlab.com)
  2. 导航至 设置 → 访问令牌
  3. 创建一个具有以下范围的新令牌:
    • api - 完整的API访问权限
    • read_api - 读取API(如果您只需要读取操作)
  4. 复制令牌并将其添加到您的环境配置中

运输类型

  1. stdio (默认) - 标准输入/输出,客户端自动启动服务器
  2. http (建议用于远程)- 现代HTTP传输(别名: streamable-http, streamable_http)
  3. sse (遗留功能)- 服务器发送事件传输(已弃用)

🚀 快速启动(uvx)

Stdio 传输

{
  "mcpServers": {
    "gitlab-review-mcp": {
      "command": "uvx",
      "args": ["--no-progress", "gitlab-review-mcp"],
      "env": {
        "GITLAB_URL": "https://gitlab.com",
        "GITLAB_PRIVATE_TOKEN": "your-token-here",
        "GITLAB_REVIEW_MCP_SHOW_LOGS": "false"
      }
    }
  }
}

HTTP传输

启动服务器:

uvx --no-progress gitlab-review-mcp --transport http --port 8000 --host 0.0.0.0

客户端配置:

{
  "mcpServers": {
    "gitlab-review-mcp": {
      "url": "http://localhost:8000/mcp",
      "transport": "http"
    }
  }
}

SSE运输(或译为:苏格兰电力运输)

启动服务器:

uvx --no-progress gitlab-review-mcp --transport sse --port 8000 --host 0.0.0.0

客户端配置:

{
  "mcpServers": {
    "gitlab-review-mcp": {
      "url": "http://localhost:8000/sse",
      "transport": "sse"
    }
  }
}

🔧 替代命令

带有 Stdio 的(工具/软件/系统等) uv run --with

{
  "mcpServers": {
    "gitlab-review-mcp": {
      "command": "uv",
      "args": ["run", "--with", "gitlab-review-mcp", "gitlab-review-mcp"],
      "env": {
"GITLAB_REVIEW_MCP_SHOW_LOGS": "false"
      }
    }
  }
}

带有Stdio的 uv run --directory (本地开发)

{
  "mcpServers": {
    "gitlab-review-mcp": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/gitlab-review-mcp", "gitlab-review-mcp"],
      "env": {
"GITLAB_REVIEW_MCP_SHOW_LOGS": "true"
      }
    }
  }
}

HTTP/SSE 替代命令

所有运输类型均可使用这些替代命令:

# Using uv run --with
uv run --with gitlab-review-mcp gitlab-review-mcp --transport http --port 8000

# Using uv run --directory (local development)
cd /path/to/gitlab-review-mcp
uv run gitlab-review-mcp --transport http --port 8000

可用工具

项目管理

search_projects

按关键词搜索GitLab项目,并支持分页。

搜索功能:

  • 在项目名称、路径、命名空间和描述中执行子字符串匹配

  • 注不支持正则表达式或精确匹配,仅支持简单关键词搜索

  • 参数:

    • search (必填)- 用于子字符串匹配的搜索关键字
    • owned (可选)- 仅显示已拥有的项目(默认: false)
    • membership (可选)- 仅显示您是成员的项目(默认: true)
    • page (可选)- 用于分页的页码(默认: 1)
    • per_page (可选)- 每页结果数(默认: 20,最大值: 100)
    • order_by (可选)- 按以下排序: id, name, created_at, star_count, last_activity_at (默认)
    • sort (可选)- 排序顺序: asc 或者 desc (默认)
  • 退货格式化后的项目列表,包含项目ID、名称、描述、URL、默认分支和分页信息

合并请求操作

list_merge_requests

列出特定项目的合并请求,并支持分页功能。

  • 参数:
    • project_id (必填)- GitLab 项目ID
    • state (可选)- 按状态过滤: opened, closed, merged, all
    • author_id (可选)- 按作者用户ID筛选
    • assignee_id (可选)- 按负责人用户ID过滤
    • labels (可选)- 按标签名称(逗号分隔)过滤
    • page (可选)- 分页时的页码(默认: 1)
    • per_page (可选)- 每页结果数(默认: 20,最大值: 100)
  • 退货带有IID、标题、状态、作者、分支、URL和分页信息的MR(合并请求)格式化列表

get_merge_request

获取详细的合并请求信息。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必填) - 合并请求IID(例如,!123)
  • 退货MR(合并请求)的详细信息,包括标题、描述、状态、分支、作者和时间戳

get_merge_request_diffs

获取带有分页支持的合并请求的代码更改(差异)。

  • 参数:
    • project_id (必需)- GitLab 项目 ID
    • mr_iid (必填) - 合并请求IID(或:合并请求唯一标识)
    • page (可选)- 分页的页码(默认: 1)
    • per_page (可选)- 每页结果数(默认: 20,最大值: 100)
  • 退货完整的差异信息,包括文件路径、提交哈希(SHA)、代码更改以及分页信息

add_merge_request_comment

为合并请求添加一条通用评论。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必需)- 合并请求 IID
    • comment (必填)- 评论内容
  • 回报确认并附上评论ID和详情

add_merge_request_line_comment

在合并请求代码中添加针对特定行的注释。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必填)- 合并请求IID(内部标识符)
    • file_path (必需)- 仓库中的文件路径
    • line_number (必填)- 新版本中的行号
    • comment (必填)- 评论内容
    • base_sha (必需)- 基础提交的SHA值(来自差异)
    • head_sha (必需)- 最新提交的 SHA 值(来自差异信息)
    • start_sha (必填)- 开始提交的 SHA(来自差异)
    • old_line (可选)- 旧版本中的行号
  • 回报确认信息,附带讨论ID和评论详情

get_merge_request_comments

获取合并请求中的所有评论和讨论,包括建议,并支持分页。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必填)- 合并请求IID(内部标识符)
    • page (可选)- 分页时的页码(默认: 1)
    • per_page (可选)- 每页结果数(默认: 20,最大值: 100)
  • 退货所有包含注释ID、讨论ID、作者、时间戳、嵌入建议和分页信息的评论

get_merge_request_commits

获取合并请求中的所有提交记录,并支持分页。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必填) - 合并请求IID(内部标识符)
    • page (可选)- 分页时的页码(默认: 1)
    • per_page (可选)- 每页结果数(默认: 20,最大值: 100)
  • 退货包含SHA、标题、消息、作者、时间戳和分页信息的提交列表

update_merge_request_comment

更新现有的合并请求评论。

  • 参数:
    • project_id (必需)- GitLab 项目 ID
    • mr_iid (必填)- 合并请求IID(内部标识符)
    • note_id (必填)- 要更新的备注ID
    • comment (必填)- 更新后的评论文本
  • 回报确认并附上更新后的评论详情

reply_to_merge_request_comment

回复现有的讨论串。

  • 参数:
    • project_id (必需)- GitLab 项目 ID
    • mr_iid (必填) - 合并请求IID(内部标识符)
    • discussion_id (必填)- 要回复的讨论ID
    • comment (必填)- 回复评论文本
  • 退货确认并附上回复详情

update_merge_request

更新合并请求的标题和/或描述。

  • 参数:
    • project_id (必填)- GitLab 项目 ID
    • mr_iid (必填)- 合并请求IID(内部标识符)
    • title (可选)- 新标题
    • description (可选)- 新描述
  • 回报更新了MR(可能指“材料需求计划”或具体上下文中的其他含义)的详细信息

建议管理

apply_suggestion

应用一个单一的代码修改建议。

  • 参数:
    • suggestion_id (必填)- 要应用的建议ID
  • 退货确认并附上提交ID

apply_suggestions

批量应用多个代码修改建议。

  • 参数:
    • suggestion_ids (必填)- 要应用的建议ID列表
  • 退货确认并附上提交ID及已应用的建议ID

问题管理

get_issue

获取详细的问题信息。

  • 参数:
    • project_id (必填)- GitLab 项目ID
    • issue_iid (必填)- 问题IID(例如,#123)
  • 退货问题详情,包括标题、描述、状态、负责人、标签和时间戳

测试

该项目包括全面测试:

# Run all tests
make test

# Run with coverage
make test-cov

发展

设置开发环境

# Clone the repository
git clone https://github.com/midodimori/gitlab-review-mcp.git
cd gitlab-review-mcp

# Install with development dependencies
make install-dev

# Run tests
make test

# Format and lint code
make format

# Check code style and types
make lint

# Run the server locally
make run

# See all available commands
make help

项目结构

gitlab-review-mcp/
├── src/gitlab_review_mcp/
│   ├── __init__.py
│   ├── server.py                  # MCP server implementation
│   ├── config.py                  # Configuration settings
│   ├── services/                  # Business logic layer
│   │   ├── __init__.py
│   │   └── gitlab_service.py      # GitLab API service
│   ├── tools/                     # MCP tool implementations
│   │   ├── __init__.py
│   │   └── gitlab_tools.py        # GitLab tools (14 tools)
│   └── utils/                     # Utility modules
│       ├── __init__.py
│       └── logging.py             # Logging configuration
├── tests/
│   ├── __init__.py
│   ├── test_server.py             # Tool function tests with mocks
│   ├── test_pagination.py         # Pagination-specific tests
│   └── test_mcp_integration.py    # MCP integration tests
├── LICENSE
├── Makefile
├── PUBLISHING.md                  # Publishing guide
├── pyproject.toml                 # Project configuration
├── pytest.ini
└── README.md

做出贡献

  1. 为仓库创建分支(或“克隆仓库”)
  2. 创建一个特性分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推送到分支(git push origin feature/amazing-feature)
  5. 提交一个拉取请求

许可证

这个项目遵循MIT许可证授权——详见 许可证 文件中有详细信息。

链接

支持

对于问题、议题或贡献:

  • 在GitHub上打开一个议题(或问题)
  • 查看综合测试套件中的使用示例