GitLab合并请求评论服务器

一个从GitLab获取合并请求评论的MCP服务器,包括文件名、行号和评论文本。

  • by AmirhosseinHanifehzadeh
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 AmirhosseinHanifehzadeh/gitlab-mcp

使用说明

GitLab MR评论MCP服务器

一个模型上下文协议(MCP)服务器,从GitLab获取合并请求注释,包括文件名、行号和注释文本。

特性

  • 通过GitLab API从GitLab合并请求中获取评论
  • 返回具有以下内容的结构化数据:
    • 文件名(如果注释位于特定文件上)
    • 行号(如果注释在特定行上)
    • 评论文本
    • 作者信息
    • 创建时间戳
    • 决议状态
  • 支持分页
  • 可选过滤已解决的评论
  • SSL验证控制

安装

npm install
npm run build

配置

设置以下环境变量:

必需

  • GITLAB_HOST 或 GITLAB_BASE_URL:您的GitLab实例URL(例如。, https://gitlab.com)
  • GITLAB_TOKEN 或 GITLAB_PERSONAL_ACCESS_TOKEN:您的GitLab个人访问令牌

可选的

  • GITLAB_SSL_VERIFY:SSL证书验证。吃起来 0, false,或 no 禁用(默认:启用)

用法

作为MCP服务器

添加到您的MCP客户端配置中(例如,Claude Desktop、Cline):

{
  "mcpServers": {
    "gitlab-mr-comments": {
      "command": "node",
      "args": ["/path/to/gitlab-mr-comments/dist/index.js"],
      "env": {
        "GITLAB_HOST": "https://gitlab.com",
        "GITLAB_TOKEN": "your-gitlab-token-here"
      }
    }
  }
}

使用AI助手

当您将GitLab合并请求URL粘贴到已配置此MCP服务器的AI助手时,AI应自动:

  1. 解析URL以提取项目路径和MR IID
  2. 使用正确的参数调用工具
  3. 以可读格式返回评论

示例提示:

Show me the comments from this merge request:
https://mars-gitlab.systemgroup.net/mars/general-market/-/merge_requests/7380

AI将提取:

  • 项目: mars/general-market
  • IID先生: 7380

并相应地调用该工具。

工具: gitlab.get_merge_request_comments

获取特定合并请求的注释。

参数

  • project_id (string):数字项目ID或完整路径(例如。, "123" 或 "mygroup/myproject")
  • merge_request_iid (string):合并请求的内部IID(例如。, "456")
  • per_page (数字,可选):每页讨论数(1-100,默认值:GitLab默认值为20)
  • page (数字,可选):要获取的讨论页面(默认值:1)
  • include_resolved (布尔值,可选):包括已解析的注释(默认值: false)

从GitLab URL提取参数

给定一个合并请求URL,如下所示:

https://mars-gitlab.systemgroup.net/mars/general-market/-/merge_requests/7380

提取参数如下:

  • project_id: "mars/general-market" (域和之间的路径 /-/merge_requests/)
  • merge_request_iid: "7380" (后面的数字 /merge_requests/)

例子:

{
  "project_id": "mars/general-market",
  "merge_request_iid": "7380"
}

示例响应

[
  {
    "file": "src/index.ts",
    "line": 42,
    "text": "Consider refactoring this function for better readability",
    "author": "john.doe",
    "created_at": "2024-11-08T10:30:00.000Z",
    "resolved": false
  },
  {
    "file": "README.md",
    "line": 10,
    "text": "This documentation needs to be updated",
    "author": "jane.smith",
    "created_at": "2024-11-07T14:20:00.000Z",
    "resolved": true
  },
  {
    "file": null,
    "line": null,
    "text": "Overall, this looks good to merge!",
    "author": "bob.wilson",
    "created_at": "2024-11-08T09:00:00.000Z",
    "resolved": false
  }
]

发展

构建

npm run build

跑

npm start

API详细信息

此服务器使用GitLab REST API v4:

  • 端点: /api/v4/projects/{project_id}/merge_requests/{merge_request_iid}/discussions
  • 身份验证:通过个人访问令牌 PRIVATE-TOKEN 头球

调试与故障排除

查看日志

所有日志都将写入 标准错误 带有前缀 [MCP]在MCP客户端中运行时,这些日志通常会出现在客户端的日志文件或控制台中。

启动日志示例:

[MCP] ====================================
[MCP] GitLab MR Comments MCP Server
[MCP] Version: 0.1.0
[MCP] ====================================
[MCP] Node version: v20.x.x
[MCP] Platform: linux
[MCP] CWD: /path/to/project
[MCP] Creating stdio transport...
[MCP] Connecting server to transport...
[MCP] ====================================
[MCP] Server successfully connected!
[MCP] Ready to receive tool calls
[MCP] ====================================

调用工具时的日志示例:

[MCP] Tool called with args: {
  "project_id": "mygroup/myproject",
  "merge_request_iid": 123
}
[MCP] Starting fetchMergeRequestComments
[MCP] Resolving GitLab host from environment
[MCP] Resolved host: https://gitlab.com
[MCP] Resolving GitLab token from environment
[MCP] Token found (length: 20)
[MCP] SSL verification: enabled (default)
[MCP] Project ID: mygroup%2Fmyproject
[MCP] MR IID: 123
[MCP] Request URL: https://gitlab.com/api/v4/projects/mygroup%2Fmyproject/merge_requests/123/discussions
[MCP] Sending request to GitLab API...
[MCP] Response status: 200 OK
[MCP] Parsing response JSON...
[MCP] Received 5 discussions
[MCP] Include resolved: false
[MCP] Processed 12 comments
[MCP] Successfully fetched 12 comments

常见问题

1.未设置环境变量

症状:

[MCP] ERROR: GITLAB_HOST environment variable not set
[MCP] Available env vars: []

解决方案: 确保设置 GITLAB_HOST 和 GITLAB_TOKEN 在MCP客户端配置中:

{
  "env": {
    "GITLAB_HOST": "https://gitlab.com",
    "GITLAB_TOKEN": "your-token-here"
  }
}

2.身份验证错误

症状:

[MCP] Response status: 401 Unauthorized
[MCP] Error response body: {"message":"401 Unauthorized"}

解决方案:

  • 检查您的GitLab令牌是否有效
  • 确保令牌具有 api 或 read_api 范围
  • 验证您为GitLab实例使用的令牌是否正确

3.未找到项目

症状:

[MCP] Response status: 404 Not Found
[MCP] Error response body: {"message":"404 Project Not Found"}

解决方案:

  • 验证项目ID或路径是否正确
  • 确保您有权访问该项目
  • 对于带有特殊字符的项目路径,它们将自动进行URL编码

4.SSL证书问题

症状:

Error: self signed certificate in certificate chain

解决方案: 禁用SSL验证(仅用于开发/测试):

{
  "env": {
    "GITLAB_SSL_VERIFY": "0"
  }
}

本地测试

使用附带的测试脚本验证您的配置:

# Set environment variables
export GITLAB_HOST="https://gitlab.com"
export GITLAB_TOKEN="your-token-here"

# Run test
./test-mcp.sh

服务器将启动并显示所有初始化日志。按Ctrl+C停止。

检查MCP客户端日志

不同的MCP客户端将日志存储在不同的位置:

克劳德桌面(macOS):

tail -f ~/Library/Logs/Claude/mcp*.log

克劳德桌面(Linux):

tail -f ~/.config/Claude/logs/mcp*.log

临床(VS代码):

  • 检查VS代码输出面板
  • 从下拉菜单中选择“Cline”

许可证

麻省理工学院