MCP GitLab评测
用于AI驱动的GitLab合并请求代码审查的MCP(模型上下文协议)服务器。它提供了对GitLab MR数据的干净、结构化、对代理友好的访问——没有原始差异,也没有解析难题。
特性
- 结构化差异分析 --将原始的统一差异转换为带有行号、更改类型和大块边界的干净JSON
- 文件优先级 --按审阅重要性(高/中/低/跳过)自动对更改的文件进行分类,过滤掉生成的代码、供应商文件和锁定文件
- 延迟加载 --为增量探索设计的工具:从概述开始,深入特定文件
- 内存缓存 -具有可配置TTL的GitLab API响应的主动缓存
- 干净的建筑 --采用fx依赖注入的模块化Go设计,按领域关注点分隔
工具
| 工具 | 说明 |
|---|---|
get_mr_summary | MR元数据:标题、描述、作者、分支、提交消息、状态 |
get_changed_files | 所有已更改文件的优先级列表,包括更改类型、优先级、语言、行数 |
get_file_context | 源分支的完整文件内容+特定文件的结构化解析差异 |
get_architecture_view | 源分支处的存储库文件夹/文件树,可选择过滤到子目录 |
post_review_comment | 在MR上发布一般或特定行的审查意见 |
建筑
cmd/server/ → Entry point
internal/
app/ → Application wiring (fx)
module/
gitlab/ → GitLab API client, caching service
domain/ → Domain models, MR URL parser
repository/ → HTTP client for GitLab REST API
service/ → Business logic with caching layer
diff/ → Diff parsing and file classification
domain/ → Diff models (hunks, lines, priorities)
service/ → Unified diff parser, file prioritizer
mcp/ → MCP server and tool handlers
presentation/ → Tool definitions, request handlers
service/ → Orchestration service
platform/
config/ → Configuration loading (YAML + env vars)
logger/ → Zap logger with pretty console output
cache/ → In-memory TTL cache
config/
base.yaml → Base configuration file先决条件
- 转到1.21+
- GitLab个人访问令牌
api范围
设置
- 克隆存储库:
git clone
cd mcp-gitlab-review- 创建一个
.env示例中的文件:
cp .env.example .env- 编辑
.env并设置您的GitLab令牌:
GITLAB_PERSONAL_ACCESS_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
GITLAB_API_URL=https://gitlab.com/api/v4- 构建:
go build -o mcp-gitlab-review ./cmd/server用法
作为MCP服务器(stdio传输)
服务器使用MCP协议通过stdin/stdout进行通信:
./mcp-gitlab-reviewMCP客户端配置
添加到您的MCP客户端配置中(例如,Claude Desktop、Cursor等):
{
"mcpServers": {
"gitlab-review": {
"command": "/path/to/mcp-gitlab-review",
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}工具示例
获取MR摘要:
{
"tool": "get_mr_summary",
"arguments": {
"mr_url": "https://gitlab.com/group/project/-/merge_requests/123"
}
}获取已更改的文件(按优先级排列):
{
"tool": "get_changed_files",
"arguments": {
"mr_url": "https://gitlab.com/group/project/-/merge_requests/123"
}
}获取具有结构化差异的文件:
{
"tool": "get_file_context",
"arguments": {
"mr_url": "https://gitlab.com/group/project/-/merge_requests/123",
"file_path": "internal/service/handler.go"
}
}获取架构视图:
{
"tool": "get_architecture_view",
"arguments": {
"mr_url": "https://gitlab.com/group/project/-/merge_requests/123",
"path": "internal"
}
}发表评论:
{
"tool": "post_review_comment",
"arguments": {
"mr_url": "https://gitlab.com/group/project/-/merge_requests/123",
"body": "This function needs error handling for the nil case.",
"file_path": "internal/service/handler.go",
"new_line": 42
}
}文件优先级分类
更改的文件会自动分类,以帮助AI代理专注于重要的事情:
| 优先级 | 文件 |
|---|---|
| 高 | 新文件、业务逻辑、已删除文件 |
| 中等 | 测试文件 |
| 低 | 配置文件、迁移 |
| 跳过 | 生成的代码(.pb.go, _gen.go)、供应商/、锁定文件(go.sum, package-lock.json) |
配置
配置从加载 config/base.yaml 随着环境变量的扩展:
gitlab:
apiURL: "${GITLAB_API_URL:https://gitlab.com/api/v4}"
token: "${GITLAB_PERSONAL_ACCESS_TOKEN}"
cache:
ttl: 5m
maxSize: 1000
mcp:
name: "gitlab-review"
version: "1.0.0"测试
go test ./... -v技术栈
- mark3labs/mcp go --MCP协议实现
- go.uber.org/fx --依赖注入
- go.uber.org/zap --结构化日志记录
- go.uber.org/config --YAML配置
- 复发 --环境变量加载
- thesem/zap漂亮控制台 --控制台输出不错
- 担架/作证 --测试断言
许可证
麻省理工学院
