使用说明
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令牌
- 访问您的GitLab实例(例如,https://gitlab.com)
- 导航至 设置 → 访问令牌
- 创建一个具有以下范围的新令牌:
api- 完整的API访问权限read_api- 读取API(如果您只需要读取操作)
- 复制令牌并将其添加到您的环境配置中
运输类型
stdio(默认) - 标准输入/输出,客户端自动启动服务器http(建议用于远程)- 现代HTTP传输(别名:streamable-http,streamable_http)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 项目IDstate(可选)- 按状态过滤:opened,closed,merged,allauthor_id(可选)- 按作者用户ID筛选assignee_id(可选)- 按负责人用户ID过滤labels(可选)- 按标签名称(逗号分隔)过滤page(可选)- 分页时的页码(默认:1)per_page(可选)- 每页结果数(默认:20,最大值:100)
- 退货带有IID、标题、状态、作者、分支、URL和分页信息的MR(合并请求)格式化列表
get_merge_request
获取详细的合并请求信息。
- 参数:
project_id(必填)- GitLab 项目 IDmr_iid(必填) - 合并请求IID(例如,!123)
- 退货MR(合并请求)的详细信息,包括标题、描述、状态、分支、作者和时间戳
get_merge_request_diffs
获取带有分页支持的合并请求的代码更改(差异)。
- 参数:
project_id(必需)- GitLab 项目 IDmr_iid(必填) - 合并请求IID(或:合并请求唯一标识)page(可选)- 分页的页码(默认:1)per_page(可选)- 每页结果数(默认:20,最大值:100)
- 退货完整的差异信息,包括文件路径、提交哈希(SHA)、代码更改以及分页信息
add_merge_request_comment
为合并请求添加一条通用评论。
- 参数:
project_id(必填)- GitLab 项目 IDmr_iid(必需)- 合并请求 IIDcomment(必填)- 评论内容
- 回报确认并附上评论ID和详情
add_merge_request_line_comment
在合并请求代码中添加针对特定行的注释。
- 参数:
project_id(必填)- GitLab 项目 IDmr_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 项目 IDmr_iid(必填)- 合并请求IID(内部标识符)page(可选)- 分页时的页码(默认:1)per_page(可选)- 每页结果数(默认:20,最大值:100)
- 退货所有包含注释ID、讨论ID、作者、时间戳、嵌入建议和分页信息的评论
get_merge_request_commits
获取合并请求中的所有提交记录,并支持分页。
- 参数:
project_id(必填)- GitLab 项目 IDmr_iid(必填) - 合并请求IID(内部标识符)page(可选)- 分页时的页码(默认:1)per_page(可选)- 每页结果数(默认:20,最大值:100)
- 退货包含SHA、标题、消息、作者、时间戳和分页信息的提交列表
update_merge_request_comment
更新现有的合并请求评论。
- 参数:
project_id(必需)- GitLab 项目 IDmr_iid(必填)- 合并请求IID(内部标识符)note_id(必填)- 要更新的备注IDcomment(必填)- 更新后的评论文本
- 回报确认并附上更新后的评论详情
reply_to_merge_request_comment
回复现有的讨论串。
- 参数:
project_id(必需)- GitLab 项目 IDmr_iid(必填) - 合并请求IID(内部标识符)discussion_id(必填)- 要回复的讨论IDcomment(必填)- 回复评论文本
- 退货确认并附上回复详情
update_merge_request
更新合并请求的标题和/或描述。
- 参数:
project_id(必填)- GitLab 项目 IDmr_iid(必填)- 合并请求IID(内部标识符)title(可选)- 新标题description(可选)- 新描述
- 回报更新了MR(可能指“材料需求计划”或具体上下文中的其他含义)的详细信息
建议管理
apply_suggestion
应用一个单一的代码修改建议。
- 参数:
suggestion_id(必填)- 要应用的建议ID
- 退货确认并附上提交ID
apply_suggestions
批量应用多个代码修改建议。
- 参数:
suggestion_ids(必填)- 要应用的建议ID列表
- 退货确认并附上提交ID及已应用的建议ID
问题管理
get_issue
获取详细的问题信息。
- 参数:
project_id(必填)- GitLab 项目IDissue_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
做出贡献
- 为仓库创建分支(或“克隆仓库”)
- 创建一个特性分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 提交一个拉取请求
许可证
这个项目遵循MIT许可证授权——详见 许可证 文件中有详细信息。
链接
支持
对于问题、议题或贡献:
- 在GitHub上打开一个议题(或问题)
- 查看综合测试套件中的使用示例