mcpField
M
mcp-gitlab

mcp-gitlab

本地服务
github.com/vish288版本控制66 天前更新

关于 mcp-gitlab

mcp-gitlab 是一个将 AI 客户端连接到 GitLab REST API 的 MCP 服务。它提供用于代码库工作的工具、资源和提示词,并可通过只读模式隐藏写入工具。

主要功能

  1. 01管理项目、议题和合并请求
  2. 02处理流水线与 CI/CD 变量
  3. 03审查代码和审批
  4. 04提供工具、资源和提示词
  5. 05只读模式下隐藏写入工具

适用场景

  1. 01审查合并请求和议题
  2. 02检查流水线及 CI/CD 活动
  3. 03管理托管式 GitLab 实例中的项目
  4. 04为 Agent 提供 GitLab 只读访问

MCP 相关

该服务通过 MCP 工具、资源和提示词公开 GitLab REST API 操作。它支持 stdio 和 streamable HTTP 传输,并可配置为只读运行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"vish288-mcp-gitlab": {
"command": "uvx",
"args": [
"mcp-gitlab"
],
"env": {
"GITLAB_TOKEN": "<GITLAB_TOKEN>",
"GITLAB_URL": "<GITLAB_URL>",
"GITLAB_READ_ONLY": "<GITLAB_READ_ONLY>",
"MCP_READ_ONLY": "<MCP_READ_ONLY>",
"GITLAB_AUTH": "<GITLAB_AUTH>",
"GITLAB_OAUTH_CLIENT_ID": "<GITLAB_OAUTH_CLIENT_ID>",
"GITLAB_OAUTH_CLIENT_SECRET": "<GITLAB_OAUTH_CLIENT_SECRET>",
"GITLAB_OAUTH_BASE_URL": "<GITLAB_OAUTH_BASE_URL>",
"GITLAB_OAUTH_SCOPES": "<GITLAB_OAUTH_SCOPES>",
"GITLAB_OAUTH_JWT_KEY": "<GITLAB_OAUTH_JWT_KEY>",
"GITLAB_HTTP_BEARER_TOKEN": "<GITLAB_HTTP_BEARER_TOKEN>"
}
}
}
}
启动命令uvx mcp-gitlab
需要配置的环境变量
GITLAB_TOKEN密钥GitLab personal access token (token mode). Optional after `mcp-gitlab auth login`; also accepts GITLAB_PAT, GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_API_TOKEN
GITLAB_URLGitLab instance URL (e.g. https://gitlab.com)
GITLAB_READ_ONLYAlias for MCP_READ_ONLY. Any value other than false/0/no/off/empty locks the server read-only; --read-only can only raise the lock
MCP_READ_ONLYLocks the server read-only: write tools and write-workflow prompts are not listed and nothing lifts the lock at runtime. Shared name across the mcp-* servers; set it in the deployer's env
GITLAB_AUTH密钥Authentication mode: token (default) or oauth (OAuth 2.1 proxy; streamable-http only)
GITLAB_OAUTH_CLIENT_ID密钥Application ID of the GitLab OAuth app (oauth mode, or local sign-in on a self-managed instance)
GITLAB_OAUTH_CLIENT_SECRET密钥Secret of the GitLab OAuth app (oauth mode)
GITLAB_OAUTH_BASE_URL密钥Public URL of this server, no trailing slash (oauth mode); redirect URI is <base>/auth/callback
GITLAB_OAUTH_SCOPES密钥Space-separated GitLab scopes required on every request (oauth mode; default api)
GITLAB_OAUTH_JWT_KEY密钥FastMCP JWT signing key, >=32 random chars (oauth mode; defaults to one derived from the client secret)
GITLAB_HTTP_BEARER_TOKEN密钥Bearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send it as 'Authorization: Bearer <token>' (token mode; --auth oauth has its own sign-in)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-gitlab0.21.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-gitlab

PyPI version PyPI downloads Python License: MIT CI MCP Registry

mcp-gitlab 是一个面向 GitLab REST API 的 Model Context Protocol (MCP) 服务。它为 AI 助手提供 91 个工具、7 个资源和 6 个提示词,用于管理项目、合并请求、流水线、CI/CD 变量、审批、议题和代码审查。适用于 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot,以及任何兼容 MCP 的客户端。支持两种运行模式:允许写入,或锁定为只读模式(MCP_READ_ONLY=true),这样模型就不会获得 57 个写入工具。

支持 GitLab.com 和自托管的 GitLab 实例(CE/EE)。无需 GitLab Duo 或 Premium。

支持 MCP 2026-07-28 规范(通常称为 MCP 2.0),并兼容 2025-11-25 客户端。

基于 FastMCP 4.x、httpx 和 Pydantic 构建。

安装: uvx mcp-gitlab | PyPI | MCP Registry | 更新日志

uvx mcp-gitlab                          # with writes
MCP_READ_ONLY=true uvx mcp-gitlab       # locked read-only: write tools are not listed

一键安装

在 Cursor 中安装

在 VS Code 中安装 在 VS Code Insiders 中安装

💡 提示: 其他 AI 助手(Claude Code、Windsurf、IntelliJ、Gemini CLI)的安装方法,请访问 GitLab MCP 安装入口。

手动配置指南(点击展开)

前置条件:请先安装 uv(所有 uvx 安装流程都需要)。安装 uv。

Claude Code
# with writes
claude mcp add gitlab -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
# locked read-only
claude mcp add gitlab -e MCP_READ_ONLY=true -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
Windsurf 和 IntelliJ

Windsurf: 添加到 ~/.codeium/windsurf/mcp_config.json IntelliJ: 添加到 Settings | Tools | MCP Servers

注意: 实际服务配置从 mcpServers 对象中的 gitlab 开始。移除 MCP_READ_ONLY 即可允许写入。

{
  "mcpServers": {
    "gitlab": {
      "command": "uvx",
      "args": ["mcp-gitlab"],
      "env": {
        "GITLAB_URL": "https://gitlab.example.com",
        "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "MCP_READ_ONLY": "true"
      }
    }
  }
}
Gemini CLI
# with writes
gemini mcp add -s user -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx gitlab uvx mcp-gitlab
# locked read-only
gemini mcp add -s user -e MCP_READ_ONLY=true -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx gitlab uvx mcp-gitlab
VS Code

添加到 .vscode/mcp.json。移除 MCP_READ_ONLY 即可允许写入。

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-gitlab"],
      "env": {
        "GITLAB_URL": "https://gitlab.example.com",
        "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "MCP_READ_ONLY": "true"
      }
    }
  }
}
Codex
# with writes
codex mcp add gitlab --env GITLAB_URL=https://gitlab.example.com --env GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
# locked read-only
codex mcp add gitlab --env MCP_READ_ONLY=true --env GITLAB_URL=https://gitlab.example.com --env GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
pip / uv
uv pip install mcp-gitlab

移除 MCP_READ_ONLY 即可允许写入。在共享或托管的服务上,应将其设置在部署者的环境中,而不是客户端配置中。

## 配置
变量必填默认值描述
GITLAB_URL是-GitLab 实例 URL(例如 https://gitlab.example.com)
GITLAB_TOKEN是,除非已使用 mcp-gitlab auth login 登录-身份验证令牌(见下文)
MCP_READ_ONLY否falsemcp-* 服务共享的名称。任何不属于 false/0/no/off/空值的值都会将服务锁定为只读:57 个写入工具和写入工作流提示词不会列出,且运行时无法解除锁定
GITLAB_READ_ONLY否falseMCP_READ_ONLY 的服务专用别名;任一变量都会将服务锁定为只读。--read-only 只能启用锁定
GITLAB_HTTP_BEARER_TOKEN否-将 HTTP 传输绑定到非环回主机所需的 Bearer 令牌(至少 16 个字符);客户端发送 Authorization: Bearer <token>;仅令牌模式
GITLAB_TIMEOUT否30请求超时时间,单位为秒
GITLAB_SSL_VERIFY否true设置为 false 可跳过 SSL 验证
GITLAB_AUTH否tokentoken(来自环境变量的 PAT)或 oauth(OAuth 2.1 代理;见下文)
支持的令牌类型

服务按顺序检查这些环境变量——采用第一个匹配项:

  1. GITLAB_TOKEN
  2. GITLAB_PAT
  3. GITLAB_PERSONAL_ACCESS_TOKEN
  4. GITLAB_API_TOKEN

这些变量接受以下任意令牌类型:

令牌类型格式使用场景
个人访问令牌glpat-xxx具有 api 范围的用户级访问
OAuth2 令牌oauth-xxxOAuth 应用集成
CI 作业令牌$CI_JOB_TOKENGitLab CI 流水线访问

无令牌登录

当你通过 stdio 为自己运行服务且没有个人访问令牌时,可使用此方式。mcp-gitlab auth login 会将你登录到 GitLab,作为公共 OAuth 客户端,并在本地存储令牌。服务随后会在启动时读取令牌,并自行刷新。这不是 OAuth 模式;服务仍处于令牌模式,MCP 通信线路上的内容也不会改变。

三个命令:

mcp-gitlab auth login     # device flow by default; add --web for the browser flow
mcp-gitlab auth status    # show the stored account, scopes, and token freshness
mcp-gitlab auth logout    # revoke the token at GitLab and delete the local copy

auth login 会输出一个代码和一个 URL。打开该 URL,输入代码并批准。随后只需设置 GITLAB_URL,无需令牌,服务即可运行。

客户端 ID

每次登录都需要 OAuth 应用 ID。解析顺序为:--client-id,然后是 GITLAB_OAUTH_CLIENT_ID,最后是 https://gitlab.com 的内置默认值。

gitlab.com 的默认值尚未注册。在注册之前,gitlab.com 也需要设置 GITLAB_OAUTH_CLIENT_ID 或传入 --client-id。

注册应用(自管理实例,或默认值发布前的 gitlab.com)

在 用户设置 → 应用程序 → 添加新应用程序 下创建应用,并使用以下设置:

字段值
名称mcp-gitlab
重定向 URIhttp://127.0.0.1/callback(环回 IP,不含端口)
机密不勾选(公共客户端)
范围api、read_api

请使用 127.0.0.1,不要使用 localhost。设备授权流程需要 GitLab 17.9 或更高版本;较旧的实例请使用 mcp-gitlab auth login --web。

存储与优先级

凭据存储在 ~/.config/mcp-gitlab/credentials.json 中,每个 GitLab URL 对应一个条目,权限模式为 0600。环境令牌始终优先:如果设置了 GITLAB_TOKEN,服务会使用它并忽略存储的凭据。

传入 --scopes read_api 可启用只读会话;随后服务会在进行任何 API 调用之前阻止写入工具。

OAuth 2.1(远程部署)

对于由多人共用的服务,--auth oauth 会将 mcp-gitlab 设为 MCP 2026-07-28 资源服务器,并以 GitLab 作为上游 OAuth 提供方:每位用户都使用自己的 GitLab 账户登录,每个请求都使用该用户的令牌运行,服务器上无需配置个人访问令牌。适用于只托管一次服务器、由多位用户连接的场景;单用户本地设置请保留默认的 --auth token。

OAuth 模式需要 --transport streamable-http(OAuth 仅适用于 HTTP;stdio 仍使用环境令牌)。

1. 注册 GitLab OAuth 应用程序(用户设置 → 应用程序,或群组/实例应用程序)。将重定向 URI 设为 <base>/auth/callback(例如 https://mcp.example.com/auth/callback),标记为机密,并授予 api 作用域(只读部署可使用 read_api)。复制应用程序 ID 和密钥。

2. 配置服务:

变量必需默认值描述
GITLAB_URL是-GitLab 实例;同时也是上游授权服务器
GITLAB_OAUTH_CLIENT_ID是-应用程序 ID(oauth 模式或本地登录)
GITLAB_OAUTH_CLIENT_SECRET是-应用程序密钥
GITLAB_OAUTH_BASE_URL是-此服务的公开 URL,末尾不带斜杠(例如 https://mcp.example.com)。资源 URL 为 <base>/mcp
GITLAB_OAUTH_SCOPES否api每个请求所需的 GitLab 作用域,以空格分隔。对于只读 OAuth 部署,请在此处设为 read_api,并且设置 MCP_READ_ONLY=true,这样写入工具会在整个服务范围内隐藏,且每位用户的令牌都不具备写入作用域
GITLAB_OAUTH_JWT_KEY否派生值FastMCP JWT 签名密钥,至少 32 个随机字符。在生产环境中设置此值,以便客户端密钥轮换后仍保留客户端注册信息
FASTMCP_HOME否平台数据目录加密令牌存储于 $FASTMCP_HOME/oauth-proxy/<fingerprint>/
GITLAB_URL=https://gitlab.com GITLAB_AUTH=oauth \
  GITLAB_OAUTH_CLIENT_ID=... GITLAB_OAUTH_CLIENT_SECRET=... \
  GITLAB_OAUTH_BASE_URL=https://mcp.example.com \
  uvx mcp-gitlab --transport streamable-http

将 MCP 客户端(或 MCP Inspector,pnpm dlx @modelcontextprotocol/inspector)指向 <base>/mcp;客户端会发现授权服务器并运行 OAuth 流程,之后每次工具调用都会使用该用户的 GitLab 令牌。仅具备 read_api 的令牌可以读取,但写入请求会被拒绝,并提供可执行的提示。

完整指南、客户端设置和故障排除:docs/oauth.md。

兼容性

客户端支持安装方式
Claude Desktop是claude_desktop_config.json
Claude Code是claude mcp add
Cursor是一键深层链接或 .cursor/mcp.json
VS Code Copilot是一键深层链接或 .vscode/mcp.json
Windsurf是~/.codeium/windsurf/mcp_config.json
任意 MCP 客户端是stdio 或 HTTP 传输

协议支持

mcp-gitlab 实现了模型上下文协议(Model Context Protocol)。它支持 2026-07-28 规范,通常称为 MCP 2.0,并兼容 2025-11-25 客户端。

  • 规范:MCP 2026-07-28(MCP 2.0)。已通过 stdio 和 streamable-http 验证。
  • 旧版客户端:2025-11-25 客户端仍可使用。
  • 基于:FastMCP 4.x 和 MCP Python SDK 2.x。
  • 传输方式:stdio(默认)和 streamable-http(远程连接推荐)。sse(HTTP+SSE)传输仍可使用,但 2026-07-28 规范已将其弃用。使用时,服务会打印警告。
  • 功能:工具、资源和提示词。服务不使用 roots、sampling、logging、elicitation 或资源订阅,因此 2026-07-28 的弃用不会影响它。
错误结果

预期中的失败(404、401、验证错误,或触发只读保护的写入操作)会作为工具结果返回,并设置协议级别的 isError 标志,因此客户端可以检测到错误并自行纠正,而不必从原本成功的结果中解析 "error" 键。在锁定的只读模式下,写入工具会被隐藏,因此调用这类工具会返回 Unknown tool 错误;只读封装是保护机制自身的响应,仅当客户端仍然调用了写入工具时才会返回(例如,客户端使用了缓存的工具列表,或未来出现了未标记的工具)。响应正文是包含 error,以及在有帮助时还包含 status_code、body 和可执行 hint 的 JSON 对象。该对象就是结果的文本内容;错误不会设置 structuredContent,因为严格客户端(TypeScript MCP SDK)即使在 isError 结果中也会根据工具的输出架构验证 structuredContent,而该架构会拒绝错误正文。意外错误同样会设置 isError,但只包含 TypeName: message 文本,也不会设置 structuredContent。

成功的结果会在美化后的文本内容和 structuredContent 中都以 JSON 对象形式携带响应(即对象本身,而不是严格客户端会拒绝的旧版 {"result": "<json string>"} 封装)。工具不会声明 outputSchema:上游 GitLab 字段会以无类型形式传递,因此新增 API 字段不会导致架构校验失败;如果客户端需要类型化架构,可通过每个工具的 output_schema= 选择启用。

工具(91)

类别数量工具
项目4获取、创建、删除、更新合并设置
项目审批10获取/更新配置、CRUD 审批规则(项目 + MR)
群组6列表、获取、共享/取消共享项目、共享/取消共享群组
分支3列表、创建、删除
提交4列表、获取(含差异)、创建、比较
仓库文件4获取文件(指定 ref 和行范围)、列出目录树、搜索代码、查看归属
合并请求15列表、获取、创建、更新、合并、合并序列、变基、查看变更、批准、取消批准、获取审批、列出流水线、列出提交、订阅、取消订阅
MR 评论6列表、添加、删除、更新、授予表情、移除表情
MR 讨论4列表、创建(内联 + 多行)、回复、解决
草稿评论4创建(内联,自动填充 SHAs)、列表、发布全部、删除
流水线5列表、获取(含作业)、创建、重试、取消
作业4重试、运行、取消、获取日志
标签4列表、获取、创建、删除
发布5列表、获取、创建、更新、删除
CI/CD 变量8CRUD 项目变量、CRUD 群组变量
议题5列表、获取、创建、更新、添加评论
完整工具参考(点击展开)
项目
工具描述
gitlab_get_project获取项目详情
gitlab_create_project创建新项目
gitlab_delete_project删除项目
gitlab_update_project_merge_settings更新合并设置
项目审批
工具描述
gitlab_get_project_approvals获取审批配置
gitlab_update_project_approvals更新审批设置
gitlab_list_project_approval_rules列出审批规则
gitlab_create_project_approval_rule创建审批规则
gitlab_update_project_approval_rule更新审批规则
gitlab_delete_project_approval_rule删除审批规则
gitlab_list_mr_approval_rules列出 MR 审批规则
gitlab_create_mr_approval_rule创建 MR 审批规则
gitlab_update_mr_approval_rule更新 MR 审批规则
gitlab_delete_mr_approval_rule删除 MR 审批规则
群组
工具描述
gitlab_list_groups列出群组
gitlab_get_group获取群组详情
gitlab_share_project_with_group与群组共享项目
gitlab_unshare_project_with_group取消与群组共享项目
gitlab_share_group_with_group与群组共享群组
gitlab_unshare_group_with_group取消与群组共享群组
分支
工具描述
gitlab_list_branches列出分支
gitlab_create_branch创建分支
gitlab_delete_branch删除分支
提交
工具描述
gitlab_list_commits列出提交
gitlab_get_commit获取提交(可选包含差异)
gitlab_create_commit使用文件操作创建提交
gitlab_compare比较分支/标签/提交
仓库文件
工具描述
gitlab_get_file获取指定引用处解码后的文件内容(可选行范围),并包含元数据
gitlab_list_tree列出指定引用处的仓库树条目(文件和目录)
gitlab_search_code搜索项目代码(scope=blobs);取决于实例的搜索后端
gitlab_get_blame获取指定引用处文件的 git blame,可选限制行范围
合并请求
工具描述
gitlab_list_mrs列出合并请求
gitlab_get_mr获取 MR 详情
gitlab_create_mr创建合并请求
gitlab_update_mr更新合并请求
gitlab_merge_mr合并合并请求
gitlab_merge_mr_sequence按顺序合并多个 MR
gitlab_rebase_mr对合并请求执行变基
gitlab_mr_changes获取 MR 文件变更
gitlab_approve_mr批准合并请求
gitlab_unapprove_mr撤销对合并请求的批准
gitlab_get_mr_approvals获取 MR 批准状态
gitlab_list_mr_pipelines列出 MR 流水线
gitlab_list_mr_commits列出 MR 提交
gitlab_subscribe_mr订阅 MR 通知
gitlab_unsubscribe_mr取消订阅 MR 通知
MR 评论
工具描述
gitlab_list_mr_notes列出 MR 评论
gitlab_add_mr_note向 MR 添加评论
gitlab_delete_mr_note删除 MR 评论
gitlab_update_mr_note更新 MR 评论
gitlab_award_emoji为评论添加表情
gitlab_remove_emoji从评论中移除表情
MR 讨论
工具描述
gitlab_list_mr_discussions列出讨论
gitlab_create_mr_discussion创建讨论(行内及多行;根据 MR 差异解析 old_line/new_line 对)
gitlab_reply_to_discussion回复讨论
gitlab_resolve_discussion解决/取消解决讨论
草稿评论
工具描述
gitlab_create_draft_note创建未发布的草稿评论(SHA 来自 MR 的最新版本,配对行号来自其差异)
gitlab_list_draft_notes列出当前用户未发布的草稿评论
gitlab_publish_draft_notes一次性发布所有待处理的草稿评论(“提交审查”)
gitlab_delete_draft_note删除单条未发布的草稿评论
流水线
工具描述
gitlab_list_pipelines列出流水线
gitlab_get_pipeline获取流水线(可选包含作业)
gitlab_create_pipeline触发流水线
gitlab_retry_pipeline重试失败的作业
gitlab_cancel_pipeline取消流水线
作业
工具描述
gitlab_retry_job重试作业
gitlab_play_job触发手动作业
gitlab_cancel_job取消作业
gitlab_get_job_log获取作业日志输出(默认显示最后 200 行;tail_lines=0 表示获取全部)
标签
工具描述
gitlab_list_tags列出标签
gitlab_get_tag获取标签详情
gitlab_create_tag创建标签
gitlab_delete_tag删除标签
发布版本
工具描述
gitlab_list_releases列出发布版本
gitlab_get_release获取发布版本详情
gitlab_create_release创建发布版本
gitlab_update_release更新发布版本
gitlab_delete_release删除发布版本
CI/CD 变量
工具描述
gitlab_list_variables列出项目变量
gitlab_create_variable创建项目变量
gitlab_update_variable更新项目变量
gitlab_delete_variable删除项目变量
gitlab_list_group_variables列出群组变量
gitlab_create_group_variable创建群组变量
gitlab_update_group_variable更新群组变量
gitlab_delete_group_variable删除群组变量
问题
工具描述
gitlab_list_issues列出问题
gitlab_get_issue获取问题详情
gitlab_create_issue创建问题
gitlab_update_issue更新问题
gitlab_add_issue_comment为问题添加评论

资源(7)

该服务将精心整理的工作流指南作为 MCP 资源提供,客户端可按需读取。

URI名称描述
resource://rules/gitlab-ciGitLab CI/CD 流水线模式阶段设计、作业规则、缓存、制品、needs DAG、多项目流水线
resource://rules/git-workflowGit 工作流规范分支命名、主干开发流程、合并与变基、受保护分支
resource://rules/mr-hygiene合并请求最佳实践MR 大小、描述模板、审查清单、讨论串处理
resource://rules/conventional-commitsConventional Commits 规范提交类型、作用域、破坏性变更、变更日志生成
resource://guides/code-review代码审查规范审查优先级、行内评论、审批工作流、细枝末节与阻塞问题
resource://guides/codeownersGitLab CODEOWNERS 参考语法、分区所有者、审批规则、模式匹配
resource://guides/approval-workflow审批工作流指南审批类型、项目级与 MR 级规则、SHA 安全性、合并就绪状态

提示词(6)

该服务提供 MCP 提示词——可复用的多工具工作流模板,客户端可将其显示为斜杠命令。

提示词参数工作流
review_mrproject_id、mr_iid获取 MR → 检查流水线 → 审查变更 → 撰写讨论备注
approve_mrproject_id、mr_iid检查审批 → 验证流水线 → 审查变更 → 批准或请求修改
diagnose_pipelineproject_id、pipeline_id获取流水线 → 识别失败作业 → 获取日志 → 建议修复方案
prepare_releaseproject_id、tag_name、ref比较自上一个标签以来的提交 → 起草变更日志 → 创建标签和发布版本
setup_branch_protectionproject_id检查设置 → 配置合并方式 → 设置审批规则
triage_issuesproject_id、label列出未解决的问题 → 分类 → 排定优先级 → 识别重复项

使用示例

项目与分支
"Get details for project my-org/api-gateway"
→ gitlab_get_project(project_id="my-org/api-gateway")

"Create a feature branch from main"
→ gitlab_create_branch(project_id="123", branch_name="feat/login", ref="main")

"Delete all branches merged into main"
→ gitlab_list_branches(project_id="123") → filter merged → gitlab_delete_branch for each
合并请求与代码审查
"Open a merge request from feat/login to main"
→ gitlab_create_mr(project_id="123", source_branch="feat/login", target_branch="main", title="Add login")

"Review MR !42 — list changes and add inline comments"
→ gitlab_mr_changes(project_id="123", mr_iid=42)
→ gitlab_create_mr_discussion(project_id="123", mr_iid=42, body="nit: ...", new_path="src/auth.py", new_line=15)
  # old_line is filled from the diff when line 15 is unchanged

"Merge MR !42 after resolving all threads"
→ gitlab_list_mr_discussions(project_id="123", mr_iid=42) → resolve unresolved
→ gitlab_merge_mr(project_id="123", mr_iid=42, squash=True)
流水线与 CI/CD
"Show failed pipelines on main this week"
→ gitlab_list_pipelines(project_id="123", ref="main", status="failed")

"Retry a failed pipeline"
→ gitlab_retry_pipeline(project_id="123", pipeline_id=456)

"Get the build log for job 789"
→ gitlab_get_job_log(project_id="123", job_id=789, tail_lines=100)
问题
"Create a bug report in project 123"
→ gitlab_create_issue(project_id="123", title="Login page 500 error", labels=["bug","P1"])

"Find open issues assigned to me"
→ gitlab_list_issues(project_id="123", state="opened", assignee_username="johndoe")

安全注意事项

  • 令牌范围:使用所需的最小范围。api 范围授予完整访问权限;只读部署优先使用 read_api。
  • 只读模式:在你控制的启动配置中设置 MCP_READ_ONLY=true(或 GITLAB_READ_ONLY=true),服务启动后便会锁定:57 个写入工具和写入工作流提示词不会列出,调用这些工具会返回 "Unknown tool",而防护机制会拒绝任何仍然到达服务的写入操作。运行时无法解除锁定——无论是其他来源提供的 false、.env 文件还是工具参数都不行;任何不是 false/0/no/off/空值的值都会锁定,而 --read-only 只能加强锁定。锁定强度取决于启动配置:应在用户无法编辑的位置设置,例如托管的 MCP 配置(如 Claude Code managed-mcp.json)、容器、k8s 或 systemd 环境,或托管的 HTTP 部署。自行启动服务的用户可以控制其环境。在 OAuth 模式下,还应设置 GITLAB_OAUTH_SCOPES=read_api,使每位用户的 GitLab 令牌都不具备写入范围。
  • SSL 验证:默认值为 GITLAB_SSL_VERIFY=true。仅在可信网络中使用自签名证书时才禁用。
  • CI/CD 变量遮蔽:gitlab_list_variables 和 gitlab_list_group_variables 会自动遮蔽 GitLab 中标记为已遮蔽的变量值,并返回 ***MASKED***,而非实际值。
  • MCP 工具注释:每个工具都会声明 readOnlyHint、destructiveHint 和 idempotentHint,供客户端显示权限提示。
  • 凭据存储:服务从环境中读取 GITLAB_TOKEN,且绝不会写入该值。mcp-gitlab auth login 会将 OAuth 令牌存储在 ~/.config/mcp-gitlab/credentials.json(模式为 0600)中,并在原位置刷新令牌。

速率限制与权限

速率限制

GitLab 会对每位用户实施速率限制(已认证用户默认每分钟 2000 次请求)。触发速率限制时,工具会返回 429 错误,并提示等待后重试。分页端点每页默认返回 20 条结果;使用 per_page(最大值为 100)可减少 API 调用次数。

所需权限
操作GitLab 最低角色
读取项目、MR、流水线、议题、文件/树/blame/代码搜索Reporter
创建分支、MR、议题、草稿备注(创建/发布/删除)Developer
合并 MR、管理 CI/CD 变量Maintainer
删除项目、管理审批规则Maintainer/Owner
共享项目/群组Owner(或 Admin)

CLI 与传输选项

# Default: stdio transport (for MCP clients)
uvx mcp-gitlab

# HTTP transport — streamable-http is recommended for remote use
uvx mcp-gitlab --transport streamable-http --port 9000

# SSE transport — deprecated by MCP 2026-07-28; still works, prints a warning
uvx mcp-gitlab --transport sse --host 127.0.0.1 --port 8000

# OAuth 2.1 mode (per-user GitLab sign-in; streamable-http only) — see "OAuth 2.1" above
uvx mcp-gitlab --auth oauth --transport streamable-http

# Local sign-in for stdio without a token — see "Sign in without a token" above
mcp-gitlab auth login|status|logout

# CLI overrides for config
GITLAB_TOKEN=glpat-xxx uvx mcp-gitlab --gitlab-url https://gitlab.example.com --read-only

--gitlab-token 仍可使用,但已弃用并从 --help 中隐藏:它会将令牌暴露在 ps 和 Shell 历史记录中。请使用 GITLAB_TOKEN。

--auth {token,oauth} 用于选择身份验证模式(默认值为 token); oauth 需要 --transport streamable-http。

在 token 模式下,HTTP 传输会使用唯一的 GITLAB_TOKEN 向任何能够访问该端口的人提供所有工具,因此除非设置 GITLAB_HTTP_BEARER_TOKEN(至少 16 个字符;客户端通过 Authorization: Bearer <token> 发送)或切换到 --auth oauth 进行逐用户登录,否则服务会拒绝绑定到非环回的 --host。 默认绑定地址 127.0.0.1 无需上述设置。

服务会通过 python-dotenv 自动从工作目录加载 .env 文件。

Docker

精简的非 root 镜像可直接从此仓库构建(uv、已提交的 uv.lock)。镜像默认锁定为只读模式(MCP_READ_ONLY=true);覆盖此设置即可允许写入。

docker build -t mcp-gitlab .

# locked read-only (the image default) — stdio for an MCP client
docker run --rm -i \
  -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
  mcp-gitlab

# allow writes: override the read-only default
docker run --rm -i \
  -e MCP_READ_ONLY=false \
  -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
  mcp-gitlab

对于 HTTP 传输,追加 --transport streamable-http --host 0.0.0.0;在 token 模式下绑定到非环回地址需要设置 GITLAB_HTTP_BEARER_TOKEN(至少 16 个字符)或 GITLAB_AUTH=oauth(见上文)。

常见问题

mcp-gitlab 支持 MCP 2.0 吗?

支持。它符合 MCP 2026-07-28 规范,该规范通常称为 MCP 2.0。它也继续兼容 2025-11-25 客户端。

它能与可自托管的 GitLab 配合使用吗?

可以。它适用于 GitLab.com 和可自托管的 GitLab(CE 和 EE)。它不需要 GitLab Duo 或 Premium。

它支持哪些传输方式?

它支持 stdio(默认)和 streamable-http。sse 传输方式仍然可用,但 2026-07-28 规范已将其弃用。OAuth 2.1 模式(--auth oauth)仅适用于 streamable-http。

我可以以只读模式运行 mcp-gitlab,让助手无法合并、推送或评论吗?

可以。使用 MCP_READ_ONLY=true(或 GITLAB_READ_ONLY=true)启动它。此时,57 个写入工具和写入工作流提示词都不会列出,因此模型看不到它们;调用这些工具会返回“Unknown tool”,且进程运行期间无法重新启用写入功能。请在由你控制的启动配置中设置此变量,例如托管的 MCP 配置、容器或 systemd 环境变量,或者托管部署;因为自行启动服务的用户可以不设置此变量。

它需要哪些令牌权限范围?

如需完整访问权限,请使用具有 api 权限范围的令牌。只读部署请使用具有 read_api 权限范围的令牌。服务会从环境变量读取 GITLAB_TOKEN,且不会写入该变量;通过 mcp-gitlab auth login 获取的令牌会存储在 ~/.config/mcp-gitlab/credentials.json 中。

它适用于哪些 AI 助手?

它适用于 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot,以及任何兼容 MCP 的客户端。

如何安装 mcp-gitlab?

运行 uvx mcp-gitlab,或将它添加到 MCP 客户端配置中。请参阅上文的安装部分。

相关 MCP 服务

  • mcp-atlassian-extended — Jira + Confluence 集成(22 个工具、15 个资源、5 个提示词)
  • mcp-coda — Coda 集成(53 个工具、12 个资源、5 个提示词)
  • mcp-argocd — Argo CD 集成(37 个工具、7 个资源、7 个提示词)

开发

git clone https://github.com/vish288/mcp-gitlab.git
cd mcp-gitlab
uv sync --all-extras

uv run pytest --cov
uv run ruff check .
uv run ruff format --check .

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。