GitLab代码审查工具

一个基于MCP协议的AI驱动GitLab合并请求代码审查服务器,提供结构化、易访问的GitLab MR数据。

  • by Arthur-Sk
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 Arthur-Sk/mcp-gitlab-review

使用说明

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 范围

设置

  1. 克隆存储库:

    git clone <repo-url>
    cd mcp-gitlab-review
    
  2. 创建一个 .env 示例中的文件:

    cp .env.example .env
    
  3. 编辑 .env 并设置您的GitLab令牌:

    GITLAB_PERSONAL_ACCESS_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
    GITLAB_API_URL=https://gitlab.com/api/v4
    
  4. 构建:

    go build -o mcp-gitlab-review ./cmd/server
    

用法

作为MCP服务器(stdio传输)

服务器使用MCP协议通过stdin/stdout进行通信:

./mcp-gitlab-review

MCP客户端配置

添加到您的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

技术栈

许可证

麻省理工学院