关于 GitLab MCP Server
GitLab MCP Server 将 GitLab 项目、合并请求、议题和 CI 等操作提供给 AI Agent,适用于需要在对话中处理 GitLab 工作流的团队。它以精简的默认工具集启动,并可按需发现更多工具。
主要功能
- 01管理项目、合并请求和议题
- 02查看流水线与作业日志
- 03处理 Wiki、发布和标签
- 04按需发现并启用工具集
- 05支持 PAT、OAuth 和远程授权
- 06提供 JMESPath 结果筛选
适用场景
- 01批量查看合并请求变更文件与差异
- 02分页读取流水线作业输出
- 03在对话中更新 GitLab 项目与议题
- 04按工作流启用额外工具集
MCP 相关
作为 MCP 服务,它通过 stdio、SSE 和 Streamable HTTP 向客户端提供 GitLab 工具。默认提供核心工具,并支持通过 discover_tools 动态启用其他工具集。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @zereight/mcp-gitlabGITLAB_PERSONAL_ACCESS_TOKEN密钥GitLab personal access token for local stdio use. A non-empty value overrides GITLAB_PERSONAL_ACCESS_TOKEN_FILE. One of this token, GITLAB_PERSONAL_ACCESS_TOKEN_FILE, GITLAB_JOB_TOKEN, GITLAB_AUTH_COOKIE_PATH, or GITLAB_USE_OAUTH=true must be set. Create a token with the GitLab scopes the tools need, such as api or read_api.GITLAB_PERSONAL_ACCESS_TOKEN_FILE密钥Path to a file that contains the personal access token. Read once at startup and trimmed. Ignored when GITLAB_PERSONAL_ACCESS_TOKEN or --token is non-empty. A missing, unreadable, or empty file stops startup. Does not replace job token, OAuth, cookie, or remote authorization.GITLAB_JOB_TOKEN密钥Optional GitLab CI job token to use instead of a personal access token when running inside GitLab CI.GITLAB_AUTH_COOKIE_PATH密钥Optional path to a GitLab authentication cookie file for cookie-based authentication.GITLAB_USE_OAUTH密钥Set to true to start with GitLab OAuth instead of a personal access token, job token, or cookie file.GITLAB_OAUTH_CLIENT_ID密钥GitLab OAuth application ID. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_TOKEN_SCRIPT.GITLAB_OAUTH_TOKEN_SCRIPT密钥Command that prints an OAuth access token. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_CLIENT_ID.GITLAB_API_URLGitLab API base URL. Use https://gitlab.com/api/v4 for GitLab.com or your self-managed GitLab API URL.GITLAB_ALLOWED_PROJECT_IDSOptional comma-separated list of GitLab project IDs that this server is allowed to access.GITLAB_PERMISSION_MODETool exposure. Allowed values are readonly, modify, and full. Unset uses full. readonly keeps read-only tools. modify blocks delete and teardown tools.GITLAB_TOOLSETSOptional comma-separated list of toolsets to enable, such as projects, issues, merge_requests, pipelines, releases, users, groups, wiki, or search.GITLAB_TOOLSOptional comma-separated list of individual tool names to add on top of enabled toolsets.GITLAB_DENIED_TOOLS_REGEXOptional regular expression used to hide matching tools from the server.GITLAB_TOOL_POLICY_APPROVEOptional comma-separated list of tool names that require explicit approval before execution.GITLAB_TOOL_POLICY_HIDDENOptional comma-separated list of tool names to hide from tools/list.NODE_TLS_REJECT_UNAUTHORIZED密钥Set to 0 only when you intentionally need to connect to a GitLab instance with invalid or self-signed TLS certificates.GITLAB_CA_CERT_PATHOptional path to a custom CA certificate file for self-managed GitLab instances.GITLAB_MASKING_ENABLEDSet to true to mask text tool results and returned errors using built-in or configured rules.GITLAB_MASKING_CONFIGOptional path to a response-masking JSON configuration file.GITLAB_MASKING_POLICY_FILEOptional protected server-owned JSON file containing managed masking policies.GITLAB_MASKING_WORKSPACE_DIRDirectory used to resolve response-masking configuration paths.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
GitLab MCP 服务
English | 한국어 | 简体中文 | Português (Brasil)
📖 文档 → · llms.txt · llms-full.txt
默认:40 个工具(38 个 core + discover_tools + help)。总共有 278 个工具(工具集中的 275 个 + execute_graphql + discover_tools + help)。从精简配置开始;调用 discover_tools,即可在本次会话中启用更多工具。
首先使用 npm install -g @zereight/mcp-gitlab 安装 zereight-mcp-gitlab 二进制文件,或使用 Homebrew 执行 brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp 和 brew install zereight/gitlab-mcp/zereight-mcp-gitlab。官方 MCP Registry 列表:io.github.zereight/gitlab-mcp。一行命令:npx -y @zereight/mcp-gitlab@latest。
无此 MCP → 使用此 MCP
| 无此 MCP | 使用此 MCP |
|---|---|
| 将 MR URL 和差异内容粘贴到聊天中 | list_merge_request_changed_files → 批量调用 get_merge_request_file_diff |
| 在 GitLab UI 中查找作业日志 | 使用分页功能调用 get_pipeline_job_output |
| 每轮都重新说明项目路径 | project_id=group%2Fproject 和 merge_request_iid=123 |
三种安装方式
| 方式 | 适用场景 | 方法 |
|---|---|---|
| 本地 IDE | 在你的计算机上使用 Cursor、Claude Code、Codex | stdio + PAT 或本地 OAuth |
| 共享 HTTP | 团队或托管的 MCP | Streamable HTTP URL + 远程身份验证或 MCP OAuth |
| Claude.ai | Claude 网页连接器 | 公共 HTTPS + GITLAB_MCP_OAUTH |
安装
首先安装二进制文件(npm install -g @zereight/mcp-gitlab,或使用 Homebrew 执行 brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp,然后执行 brew install zereight/gitlab-mcp/zereight-mcp-gitlab)。读取令牌时不回显:
read -rs GITLAB_PERSONAL_ACCESS_TOKEN && export GITLAB_PERSONAL_ACCESS_TOKEN
# Claude Code
claude mcp add gitlab --transport stdio --scope local --env GITLAB_PERSONAL_ACCESS_TOKEN="$GITLAB_PERSONAL_ACCESS_TOKEN" --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab
# Codex
codex mcp add gitlab --env GITLAB_PERSONAL_ACCESS_TOKEN="$GITLAB_PERSONAL_ACCESS_TOKEN" --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab
其他客户端:VS Code · GitHub Copilot · JSON 客户端 · Cursor 详细说明
Agent 粘贴提示词
将以下内容复制到能够编辑 MCP 配置的 Agent 中:
Install the GitLab MCP server (@zereight/mcp-gitlab) for this workspace.
Binary: zereight-mcp-gitlab (npm i -g @zereight/mcp-gitlab, or npx -y @zereight/mcp-gitlab@latest).
Auth: GITLAB_PERSONAL_ACCESS_TOKEN plus GITLAB_API_URL=https://gitlab.com/api/v4 (or GITLAB_USE_OAUTH=true).
Local: claude mcp add gitlab --transport stdio --scope local --env GITLAB_PERSONAL_ACCESS_TOKEN="$GITLAB_PERSONAL_ACCESS_TOKEN" --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab
Or: codex mcp add gitlab --env GITLAB_PERSONAL_ACCESS_TOKEN="$GITLAB_PERSONAL_ACCESS_TOKEN" --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab
Cursor: use the README deeplink or docs/clients/cursor.md.
Remote HTTP: point the client at https://mcp.example.com/mcp (Streamable HTTP). Claude.ai needs GITLAB_MCP_OAUTH on that host.
Default list: 40 tools (38 core + discover_tools + help). Call discover_tools to expand. Do not enable the api toolset unless you accept its bypass risk.
Equal non-MCP path: npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill plus the zereight-mcp-gitlab CLI.
远程 HTTP
这是托管或可自托管服务的首选方案。将客户端指向 Streamable HTTP URL:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://mcp.example.com/mcp"
}
}
}
- 托管服务 / Claude.ai:在服务端设置
GITLAB_MCP_OAUTH=true(参见 MCP OAuth) - 按用户提供 PAT 请求头:设置
REMOTE_AUTHORIZATION=true(参见远程授权) - 本地 Docker 示例见使用方法
技能 + CLI(无需 MCP)
技能 + CLI 是平等的使用方式,并非备用方案。工作流相同,可在终端中获取完整负载,无需注册 MCP。
npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill
zereight-mcp-gitlab user whoami
zereight-mcp-gitlab mr list
请参阅 无需 MCP 的 CLI 和 skills/gitlab-mcp/。
MCP 与人工 CLI
| 使用 MCP 的情况 | 使用 CLI 的情况 |
|---|---|
| Agent 需要在聊天中使用结构化工具 | 需要完整负载(差异、日志、构件) |
jmespath 或精简结果已足够 | 已启用 GITLAB_MCP_COMPACT_RESULTS,且希望在终端中查看其余内容 |
| 已注册服务 | 有 PAT,或已运行 auth,且不想使用 MCP |
人工 CLI 的结果永远不会被精简。破坏性工具和 GITLAB_TOOL_POLICY_APPROVE 工具需要使用 --yes。
提示
project_id 是数字 ID 或经过 URL 编码的路径。例如:group group、project project、merge request !123 → project_id=group%2Fproject、merge_request_iid=123。嵌套组的每个层级之间都要使用 %2F(group%2Fsubgroup%2Fproject)。
常见问题
如何进行身份验证? 本地桌面环境中,GITLAB_PERSONAL_ACCESS_TOKEN(或 GITLAB_PERSONAL_ACCESS_TOKEN_FILE)是最简单的方式。本地 OAuth 使用 GITLAB_USE_OAUTH=true。远程 Claude.ai 使用 GITLAB_MCP_OAUTH。多用户 HTTP 使用 REMOTE_AUTHORIZATION 和每个请求附带的令牌标头。
为什么我只能看到大约 40 个工具? 默认的 core 工具集包含 38 个工具,另有始终启用的 discover_tools 和 help。不带参数调用 discover_tools 可列出类别,然后传入某个类别(pipelines、wiki 等)即可在本次会话中启用它。GITLAB_TOOLSETS=all 仍然不会启用 api。
本地 OAuth、MCP OAuth 和远程身份验证有什么区别? 本地 OAuth 会在与服务相同的机器上打开浏览器。MCP OAuth 面向公共 HTTPS 服务,以及 Claude.ai 等客户端。远程授权会转发调用方的 PAT 或作业令牌;无需进行 OAuth 授权流程。
如何缩小超大的回复? 在任意工具调用中传入 jmespath。或者设置 GITLAB_MCP_COMPACT_RESULTS=true,让过大的 MCP 回复变为预览内容加一条 CLI 命令。需要完整负载时请使用 CLI。
为什么 api 工具集有风险? gitlab_api_request 会绕过组/项目允许列表、其他工具筛选器和每个工具的安全检查。提示词注入可能驱动它。只有将 api 列入 GITLAB_TOOLSETS 时才启用它。all、discover_tools 和 GITLAB_TOOLS 都不会启用它。
Cursor 规则 / CLAUDE.md 片段
GitLab merge requests, issues, and pipelines go through this MCP (@zereight/mcp-gitlab).
Start with the default core tools. Call discover_tools to expand.
Prefer list_merge_request_changed_files, then batched get_merge_request_file_diff.
Use jmespath or compact results; use the CLI for full diffs and job logs.
@zereight/mcp-gitlab
针对 Agent 工作流优化的 GitLab MCP——通过 stdio、SSE 和 Streamable HTTP 管理项目、合并请求、议题、流水线、wiki、发布、标签、里程碑等。
支持 PAT、OAuth、只读模式、动态 API URL,以及面向 VS Code、Claude、Cursor、Copilot 和其他 MCP 客户端的远程授权。
为什么选择这个 GitLab MCP?
- 默认提供 40 个工具(38 个
core工具 +discover_tools+help);共 278 个工具 — 从精简配置开始;调用discover_tools即可激活更多工具,无需采用 CQRS 式分组 - MR 两步审查 —
list_merge_request_changed_files→ 批量调用get_merge_request_file_diff - 内置 Agent Skill — 在
skills/gitlab-mcp/中提供工作流指导 - 灵活的身份验证 — Personal Access Token、本地 OAuth2 浏览器流程、MCP OAuth 代理,以及按请求进行远程授权
- 支持多种传输方式 — 面向本地客户端的 stdio、面向旧版客户端的 SSE,以及面向现代远程部署的 Streamable HTTP
- 便于客户端配置 — 提供 Claude Code、Codex、Antigravity、OpenCode、Copilot、Cline、Roo Code、Cursor、Kilo Code 和 Amp Code 的示例
- 可用于自托管环境 — 支持自定义 GitLab 实例、代理设置和动态 API URL 路由
- JMESPath 结果筛选 — 在工具调用中可选使用
jmespath(参见tools/list),无需更改 GitLab API 请求即可缩减 JSON 结果;启用响应遮蔽后,JMESPath 会对已遮蔽的数据运行。
对比一览
| @zereight/mcp-gitlab | GitLab MCP A(社区版 CQRS 式) | GitLab 官方 MCP 服务 | |
|---|---|---|---|
| 适用场景 | AI Agent 工作流 | 企业级多实例/分组工具 | 内置于 GitLab,无需单独安装 |
| 工具模型 | 278 个工具:工具集中的 275 个工具 + execute_graphql + discover_tools + help | 约 50–60 个分组的 browse_*/manage_* 工具 | 通过 HTTP 请求头选择工具集 |
| MR 审查 | 两步批量差异查看 | 不一而同 | 使用 get_merge_request 获取差异 |
| Node.js | >=20.0.0 | 通常要求 >=24 | 通过 mcp-remote 使用 stdio 时需要 Node.js 20+ |
| 许可证 | MIT | 不一而同 | GitLab 的组成部分 |
tools/list 大小(测量于 2026-10-24)
客户端会在会话开始时将整个 tools/list 结果发送给模型。Token 估算值为 UTF-8 字节数 / 4。
| 配置 | 工具数 | JSON 字节数 | 估算 Token 数 |
|---|---|---|---|
默认(core + discover_tools + help) | 40 | 50,682 | 12,671 |
GITLAB_TOOL_PROFILE=slim | 39 | 49,646 | 12,412 |
GITLAB_TOOLSETS=all | 276 | 285,677 | 71,420 |
修改描述或架构后,使用 npm run test:mock(test/tools-list-budget.test.ts)重新测量。
GitLab 也提供官方 MCP 服务。
- Free、Premium 和 Ultimate。已在 GitLab 19.2 中从 Premium 移至 Free。在 GitLab 19.5 中正式可用。
- 在 GitLab.com 上,顶级群组的 Owner 可允许访问 MCP 服务。在 GitLab Self-Managed 和 GitLab Dedicated 上,由管理员控制实例设置。默认规则请参阅官方页面。
- 远程客户端通过 HTTP
https://<gitlab.example.com>/api/v4/mcp使用 OAuth 2.0 动态客户端注册。 - stdio 通过
mcp-remote连接,并需要 Node.js 20 或更高版本。 - 工具集使用
X-Gitlab-Enabled-Mcp-Server-Toolsets标头。可选的X-Gitlab-Mcp-Server-Tool-Name-Prefix标头会保留工具名称前缀的前 32 个字符。
快速开始:选择下方的个人访问令牌或 OAuth2 设置,安装 @zereight/mcp-gitlab,并在 MCP 客户端配置中使用 zereight-mcp-gitlab。
客户端设置指南
- Claude Code 设置指南
- VS Code 设置指南
- GitHub Copilot 设置指南
- Codex 设置指南
- Cursor 设置指南
- 基于 JSON 的 MCP 客户端设置指南 - 适用于 Factory AI Droid、OpenClaw 和 OpenCode 风格的客户端
- OAuth2 身份验证设置指南
- 环境变量参考
- 无状态模式 — 多 Pod HPA
- 自定义 Agent 和多个 PAT 设置
使用方法
设置概览
身份验证方式
服务支持四种身份验证方式:
用于本地/桌面使用(最常见):
- 个人访问令牌(
GITLAB_PERSONAL_ACCESS_TOKEN或GITLAB_PERSONAL_ACCESS_TOKEN_FILE)——设置最简单 - OAuth2 — 本地浏览器(
GITLAB_USE_OAUTH)——推荐,安全性更高
用于服务端/远程部署:
- OAuth2 — MCP 代理(
GITLAB_MCP_OAUTH)——适用于 Claude.ai 等远程 MCP 客户端 - 远程授权(
REMOTE_AUTHORIZATION)——多用户部署时,每个调用方都提供自己的令牌
快速设置路径
- Claude Code:请参阅 Claude Code 设置指南
- VS Code:请参阅 VS Code 设置指南
- GitHub Copilot:请参阅 GitHub Copilot 设置指南
- Codex:请参阅 Codex 设置指南
- Cursor:请参阅 Cursor 设置指南
- Factory AI Droid / OpenClaw / OpenCode 风格的客户端:请参阅 基于 JSON 的 MCP 客户端设置指南
- OAuth 浏览器流程详情:请参阅 OAuth2 身份验证设置指南
- 不使用 localhost 回调的 OAuth(SSO、远程 Shell、后台客户端):运行
zereight-mcp-gitlab auth(GitLab 17.9+ 使用设备流程;17.2–17.8 需要oauth2_device_grant_flow),然后使用GITLAB_USE_OAUTH=true启动服务。请参阅独立设备流程命令。
最简单的本地设置方式是从个人访问令牌开始。本地浏览器身份验证请使用 OAuth2。对于远程或多用户部署,请继续阅读本 README 后续的 MCP OAuth 和远程授权部分。
安装一次服务:
brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp
brew install zereight/gitlab-mcp/zereight-mcp-gitlab
或使用 npm:
npm install -g @zereight/mcp-gitlab
或使用 Nix,将此 flake 添加到你自己的配置中:
# flake.nix
inputs.gitlab-mcp.url = "github:zereight/gitlab-mcp";
# wherever you configure your MCP client:
command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
存储路径由锁定文件固定;使用 nix flake update gitlab-mcp 更新。
示例使用 zereight-mcp-gitlab,这是一个不易冲突的别名,指向旧版 mcp-gitlab 二进制文件。如果你的 MCP 客户端找不到它,请使用 which zereight-mcp-gitlab 返回的绝对路径。
不想全局安装?将 npx 固定到上一个稳定版本(本文档推荐的版本),例如 npx -y @zereight/[email protected]。如果始终想使用最新版本,请改用 npx -y @zereight/mcp-gitlab@latest。若要在下一个稳定版本发布前试用已合并到 main 的修复,请使用 npx -y @zereight/mcp-gitlab@next。这是预发布构建,不适用于生产环境。服务启动时,如果有更新版本可用,会向 stderr 输出提示(使用 GITLAB_DISABLE_VERSION_CHECK=true 可禁用)。
Claude Desktop 一键安装(MCP Bundle)
v2.3.1 之后的每个 GitHub 版本都会附带一个 gitlab-mcp.mcpb MCP Bundle。下载最新 Bundle,并使用 Claude Desktop 打开(或将其拖入 Settings → Extensions)。Claude Desktop 会要求你提供个人访问令牌(以敏感值存储),并允许你设置 GITLAB_API_URL、GITLAB_PERMISSION_MODE、GITLAB_TOOLSETS 和 GITLAB_MASKING_ENABLED。无需单独安装 Node.js 或 npm。
要从源代码构建 Bundle,请运行 npm run pack:mcpb(生成 gitlab-mcp.mcpb)。
使用 CLI 参数(适用于环境变量有问题的客户端)
某些 MCP 客户端(如 GitHub Copilot CLI)在使用环境变量时会遇到问题。请改用 CLI 参数:
{
"mcpServers": {
"gitlab": {
"command": "zereight-mcp-gitlab",
"args": ["--token=YOUR_GITLAB_TOKEN", "--api-url=https://gitlab.com/api/v4"],
"tools": ["*"]
}
}
}
可用的 CLI 参数:
--token- GitLab 个人访问令牌(替代GITLAB_PERSONAL_ACCESS_TOKEN)--api-url- GitLab API URL(替代GITLAB_API_URL)--read-only=true- 已弃用(将在下一个主版本(v3.0.0)中移除);请改用--permission-mode=readonly(替代GITLAB_READ_ONLY_MODE)--permission-mode- 权限级别:readonly、modify(不含删除或拆除工具),或full(替代GITLAB_PERMISSION_MODE,默认值为full)--toolsets=all- 启用命名工具集,但不包括仅显式启用的api工具集(替代GITLAB_TOOLSETS;未设置时使用精简的core默认值)。gitlab_api_request需要--toolsets=api--tools=list_issues- 添加单个工具(替代GITLAB_TOOLS)--use-wiki=true- 已弃用(将在下一个主版本(v3.0.0)中移除);请改用--toolsets=core,wiki(替代USE_GITLAB_WIKI)--use-milestone=true- 已弃用(将在下一个主版本(v3.0.0)中移除);请改用--toolsets=core,milestones(替代USE_MILESTONE)--use-pipeline=true- 已弃用(将在下一个主版本(v3.0.0)中移除);请改用--toolsets=core,pipelines,并将validate_ci_lint,validate_project_ci_lint追加到现有的--tools列表中(如果该列表未设置,则设置--tools=validate_ci_lint,validate_project_ci_lint)(替代USE_PIPELINE)--disable-version-check=true- 禁用启动时的新版本提示(替代GITLAB_DISABLE_VERSION_CHECK)--masking-enabled=true- 启用文本响应遮蔽(替代GITLAB_MASKING_ENABLED)--masking-config- 遮蔽配置文件的路径(替代GITLAB_MASKING_CONFIG)--masking-policy-file- 受保护的托管策略文件的路径(替代GITLAB_MASKING_POLICY_FILE)--masking-workspace-dir- 用于解析遮蔽文件的目录(替代GITLAB_MASKING_WORKSPACE_DIR)--download-dir-download_attachment和download_job_artifacts保存文件的目录(替代GITLAB_DOWNLOAD_DIR;默认值为.gitlab-mcp-downloads)--compact-results=true- 截断过大的 MCP 工具回复,并附上用于获取完整负载的 CLI 命令(替代GITLAB_MCP_COMPACT_RESULTS;默认关闭)--compact-result-chars- 启用紧凑处理的字符数阈值(替代GITLAB_MCP_COMPACT_RESULT_CHARS;默认值为4000)--compact-tools- 以逗号分隔的工具名称列表;仅在回复过大时对这些工具进行紧凑处理,不会开启全局紧凑处理(替代GITLAB_MCP_COMPACT_TOOLS)--list-summary-default=true-list_*工具和mr_discussions会将省略的summary参数视为true;summary: false仍会返回完整 JSON(替代GITLAB_MCP_LIST_SUMMARY_DEFAULT;默认关闭)--tool-profile-full(默认值)或slim。slim会从初始列表中移除草稿注释、表情回应、标签、CI 目录工具和create_group。设置了GITLAB_TOOLSETS时,此选项会被忽略(替代GITLAB_TOOL_PROFILE)
如果已设置 GITLAB_TOOLSETS 或 --toolsets,请将 wiki、milestones 或 pipelines 追加到该列表中,而不是替换它。如果已设置 GITLAB_TOOLS 或 --tools,请将 validate_ci_lint 和 validate_project_ci_lint 追加到该列表中,而不是替换它。显式列表会替代默认的 core 工具集,而不会与之合并。
CLI 参数优先于环境变量。
zereight-mcp-gitlab auth 是一个子命令(不是 MCP 服务标志)。它会运行 GitLab 设备授权流程,然后退出。请参阅CLI 参数。
同一个二进制文件也可用作类似 gh 的 GitLab CLI(tool <name> 或 mr list 等精选形式)。无需注册 MCP——设置 PAT,或运行 auth 并设置 GITLAB_USE_OAUTH=true:请参阅 无需 MCP 使用 CLI。setup --cursor / setup --claude 会输出客户端配置;doctor 会检查令牌、API URL、工具集和版本。在终端中使用它可获取完整负载。MCP 回复会保留在聊天中,除非设置 GITLAB_MCP_COMPACT_RESULTS=true(或使用 --compact-results),此时超大的工具回复会替换为预览和 CLI 命令。人类 CLI 的回复永远不会被精简。权限模式、工具集、拒绝工具正则表达式和工具策略过滤器均相同。破坏性工具和 GITLAB_TOOL_POLICY_APPROVE 工具需要使用 --yes。请参阅人类 CLI。
**精细的工具过滤:**使用
GITLAB_PERMISSION_MODE=modify,允许创建/更新,同时 阻止所有删除工具和破坏性拆除工具(cancel_pipeline、cancel_pipeline_job、stop_environment、stop_stale_environments、unprotect_branch、unprotect_tag)—— 也包括通过execute_graphql和push_files的delete/move操作执行的破坏性变更(删除和拆除动词)——或者使用GITLAB_PERMISSION_MODE=readonly进行只读 访问。你也可以 使用GITLAB_TOOLSETS=<group,…>启用工具集组,使用GITLAB_TOOLS=<tool,…>将单个工具加入允许列表(例如,只读组加上少数特定写入工具),并使用GITLAB_DENIED_TOOLS_REGEX按模式加入拒绝列表。旧版USE_GITLAB_WIKI/USE_MILESTONE/USE_PIPELINE标志已弃用(将在下一个主要版本 v3.0.0 中移除)。 请改用GITLAB_TOOLSETS=core,wiki、core,milestones或core,pipelines(USE_PIPELINE还需要将validate_ci_lint,validate_project_ci_lint追加到现有的GITLAB_TOOLS列表,而不是替换该列表)。 如果你已设置GITLAB_TOOLSETS,请将工具集追加到现有列表,而不是替换列表。 如果未设置GITLAB_TOOLS,请设置GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint。如果已设置,请追加validate_ci_lint,validate_project_ci_lint,而不是替换该列表。 请参阅工具参考和 环境变量。
注意
gitlab_api_request(工具集api)会绕过GITLAB_ALLOWED_GROUPS和其他组限制、项目允许列表、工具级限制(其他工具上的GITLAB_TOOLS、GITLAB_DENIED_TOOLS_REGEX)以及单个工具的安全检查。完整的令牌权限范围都会暴露。提示词注入可能会驱动此工具。依赖这些限制的运维人员切勿启用此工具。 只有将api列入GITLAB_TOOLSETS时才能启用此工具(GITLAB_TOOLSETS=all、discover_tools、GITLAB_TOOLS、旧版USE_*标志和GITLAB_TOOL_PROFILE均不能启用它)。设置了GITLAB_ALLOWED_PROJECT_IDS或会话项目范围时,只接受针对允许项目的/projects/:id路径。诸如/search、/users、/groups/:id和/runners等端点会被拒绝。不会检查指定其他项目的请求体和查询参数。不会强制执行GITLAB_PROJECT_ID和 OAuth 组允许列表。
- sse
只传入变量名。Docker 客户端会将已导出的 GITLAB_PERSONAL_ACCESS_TOKEN 复制到容器中。
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_PERSONAL_ACCESS_TOKEN \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
-e SSE=true \
-e SSE_AUTH_TOKEN=your_mcp_sse_token \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "sse",
"url": "http://localhost:3333/sse",
"headers": {
"Authorization": "Bearer your_mcp_sse_token"
}
}
}
}
- streamable-http
docker run -i --rm \
-e HOST=0.0.0.0 \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
-e STREAMABLE_HTTP=true \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "streamable-http",
"url": "http://localhost:3333/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
使用 MCP OAuth 代理(GITLAB_MCP_OAUTH)
**仅用于服务端/远程部署。**此模式要求将 MCP 服务部署到可公开访问的 HTTPS URL。对于本地/桌面使用,请参阅上文的
GITLAB_USE_OAUTH。
适用于支持 MCP OAuth 规范的远程 MCP 客户端(例如 Claude.ai)。
服务端充当完整的 OAuth 2.0 授权服务器——未经身份验证的请求
会收到 401 + WWW-Authenticate 响应,从而自动触发客户端侧的 OAuth 浏览器流程。
OpenCode、MCPJam 和 Claude.ai 等远程 MCP 客户端可以在授权时发送各自的回调 URL。如果无法在 GitLab 中注册每个客户端的回调 URL,请启用 GITLAB_OAUTH_CALLBACK_PROXY=true。在回调代理模式下,GitLab 只需注册一个重定向 URI:{MCP_SERVER_URL}/callback。
GITLAB_OAUTH_REDIRECT_URI 仅用于本地 OAuth(GITLAB_USE_OAUTH)。它不会覆盖远程 MCP OAuth 客户端的回调 URL,也不应用于修复远程 Unregistered redirect_uri 错误。
之所以有此变量,是因为本地 OAuth 流会在与 MCP 服务相同的机器上启动浏览器,并在本地 HTTP 服务上监听回调,例如 http://127.0.0.1:8888/callback。
远程 MCP OAuth 则不同。在 GITLAB_MCP_OAUTH=true 模式下,MCP 客户端会在 /authorize 期间提供自己的回调 URL。GITLAB_OAUTH_REDIRECT_URI 不会替换客户端提供的 URL。
| 模式 | 启用方式 | 回调变量 | GitLab 重定向 URI |
|---|---|---|---|
| 本地 OAuth | GITLAB_USE_OAUTH=true | GITLAB_OAUTH_REDIRECT_URI | http://127.0.0.1:8888/callback 或你的本地回调 |
| 远程 MCP OAuth | GITLAB_MCP_OAUTH=true | GITLAB_OAUTH_CALLBACK_PROXY=true | {MCP_SERVER_URL}/callback |
仅当 MCP 服务本身管理本地浏览器回调时,才使用 GITLAB_OAUTH_REDIRECT_URI。当远程 MCP 客户端管理回调 URL 时,使用 GITLAB_OAUTH_CALLBACK_PROXY=true。
工作原理:将此 MCP 服务部署到具有公开 HTTPS URL 的位置。MCP 客户端连接到 {MCP_SERVER_URL}/mcp。服务负责处理 OAuth 2.0 流程,代表客户端与 GitLab 交换凭据。
先决条件:
- 可公开访问的 HTTPS 服务 URL(
MCP_SERVER_URL)——本地测试时可使用 ngrok - 预先注册的 GitLab OAuth 应用,并具有
api(或read_api)作用域 — 前往Admin area→Applications,将重定向 URI 设为{MCP_SERVER_URL}/callback| 环境变量 | 必需 | 描述 | | ----------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- | |GITLAB_MCP_OAUTH| ✅ | 设置为true以启用 | |GITLAB_API_URL| ✅ | GitLab API 基础 URL。请勿在 URL 中嵌入凭据(user:pass@);这些凭据会被忽略。密码中的逗号必须写为%2C。 | |GITLAB_OAUTH_APP_ID| ✅ | GitLab OAuth 应用程序 ID | |MCP_SERVER_URL| ✅ | 此 MCP 服务的公开 HTTPS URL | |STREAMABLE_HTTP| ✅ | 必须为true| |GITLAB_OAUTH_CALLBACK_PROXY| 可选 | 设置为true以使用 MCP 服务固定的/callbackURL | |GITLAB_OAUTH_ALLOWED_REDIRECT_URIS| 可选 | 回调代理模式将重定向到的客户端回调 URL(默认值:Claude、ChatGPT、Cursor 和 loopback 回调;使用defaults,<url>添加一个) | |GITLAB_OAUTH_SCOPES| 可选 | 以逗号分隔的作用域(默认值:api,read_api,read_user) | |GITLAB_OAUTH_ALLOWED_GROUPS| 可选 | 以逗号分隔的群组完整路径 — 只有成员(及子群组成员)可以使用此服务(替代已弃用的GITLAB_ALLOWED_GROUPS) | |OAUTH_DISABLE_REFRESH_TOKEN| 可选 | 设置为true,不签发刷新令牌:每次 GitLab 访问令牌过期(2 h)时,用户都必须在浏览器中重新授权,无论会话 TTL 如何 |
当 STREAMABLE_HTTP=true 时,服务端 GitLab 凭据(GITLAB_PERSONAL_ACCESS_TOKEN、GITLAB_JOB_TOKEN、GITLAB_AUTH_COOKIE_PATH 或 GITLAB_USE_OAUTH)需要 REMOTE_AUTHORIZATION=true、GITLAB_MCP_OAUTH=true 或 STREAMABLE_HTTP_AUTH_TOKEN。
排查
Unregistered redirect_uri检查浏览器 URL 中的
redirect_uri。如果它指向客户端回调, 例如http://127.0.0.1:xxxxx/.../callback,请启用:GITLAB_OAUTH_CALLBACK_PROXY=true请勿通过更改
GITLAB_OAUTH_REDIRECT_URI来修复远程 MCP OAuth。 此变量仅用于本地 OAuth(GITLAB_USE_OAUTH)。
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_CALLBACK_PROXY=true \
-e STREAMABLE_HTTP=true \
-e MCP_SERVER_URL=https://your-server.example.com \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_OAUTH_APP_ID=your_app_id \
-p 3000:3002 \
zereight050/gitlab-mcp
MCP 客户端配置:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://your-server.example.com/mcp"
}
}
}
使用远程授权(REMOTE_AUTHORIZATION)
仅适用于服务端/远程部署。 每个 HTTP 调用方都在请求标头中直接提供自己的 GitLab 令牌,不涉及 OAuth 流程。
适用于多用户或多租户部署,此类部署中的每个调用方都会在 HTTP 请求标头中提供自己的 GitLab 令牌。无需 OAuth 流程——MCP 服务会代表调用方将令牌转发给 GitLab。
标头优先级:Private-Token > JOB-TOKEN > Authorization: Bearer
| 环境变量 | 必需 | 描述 |
|---|---|---|
REMOTE_AUTHORIZATION | ✅ | 设置为 true 以启用 |
STREAMABLE_HTTP | ✅ | 必须为 true |
ENABLE_DYNAMIC_API_URL | 可选 | 允许通过 X-GitLab-API-URL 标头为每个请求指定 GitLab URL |
GITLAB_ALLOWED_HOSTS | 可选 | 以逗号分隔的允许使用 X-GitLab-API-URL 的主机;始终允许使用 GITLAB_API_URL 的主机。也会将这些主机视为可信下载重定向目标(发布资源、作业制品、上传的附件);请在此处列出专用网络主机 |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY | 可选 | 仅允许未经身份验证的 initialize、notifications/initialized、tools/list 和 server/discover(调用工具仍需身份验证) |
MCP_SERVER_URL / MCP_ALLOWED_HOSTS / MCP_ALLOWED_ORIGINS | 可选 | 用于 DNS 重绑定防护的允许公开 /mcp 主机/来源值 |
MCP_TRUST_PROXY | 可选 | 在反向代理后信任 Forwarded / X-Forwarded-* 标头(下载 URL、Express req.ip、/mcp IP 速率限制、OAuth 速率限制) |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY=true 适用于需要在用户提供 GitLab 令牌前检查工具元数据的 MCP 网关或管理员界面。除非部署中公开工具列表是安全的,否则请保持禁用。
未设置 MCP_SERVER_URL 时,远程下载 URL 会回退到本地
服务地址。仅当服务器可通过可信反向代理访问,且 MCP 服务不允许客户端直接访问时,才设置 MCP_TRUST_PROXY=true。
这会为 Streamable HTTP 和 SSE 启用 Express trust proxy,根据 Forwarded / X-Forwarded-Proto / X-Forwarded-Host /
X-Forwarded-Prefix 生成公开下载 URL,并在代理发送的 X-Forwarded-For 中包含客户端端口(例如 1.2.3.4:5678)时,确保 OAuth 端点速率限制正常工作。
引入此标志后,现有的 OAuth + 代理部署必须显式设置该标志。
请求标头示例:
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
或使用 Bearer 令牌:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
⚠️
REMOTE_AUTHORIZATION不兼容 SSE 传输。必须设置STREAMABLE_HTTP=true。
环境变量
如需查看完整的环境变量列表,请参阅专门的参考文档:
大多数用户只需从以下配置组合中选择一种:
- 本地 PAT:
GITLAB_PERSONAL_ACCESS_TOKEN、GITLAB_API_URL - 本地 OAuth:
GITLAB_USE_OAUTH=true、GITLAB_OAUTH_CLIENT_ID、GITLAB_OAUTH_REDIRECT_URI、GITLAB_API_URL - 远程多用户 HTTP:
STREAMABLE_HTTP=true、REMOTE_AUTHORIZATION=true(或GITLAB_MCP_OAUTH=true)、MCP_TRUST_PROXY=true(位于反向代理后时)、MAX_REQUESTS_PER_MINUTE=300、MCP_SERVER_URL或MCP_ALLOWED_HOSTS、HOST、PORT - 多个并行部署:为每个实例设置不同的
MCP_SERVER_NAME(例如gitlab-selfhosted-readonly),以便客户端、日志和遥测数据能够区分它们 - 多 Pod HPA(无状态):在上述配置基础上添加
OAUTH_STATELESS_MODE=true和OAUTH_STATELESS_SECRET(所有 Pod 的值必须相同)。请参阅无状态模式。
常用变量:
GITLAB_API_URLGITLAB_PERSONAL_ACCESS_TOKENGITLAB_USE_OAUTHREMOTE_AUTHORIZATIONMCP_TRUST_PROXYMAX_REQUESTS_PER_MINUTEMAX_SESSIONSMCP_ALLOWED_HOSTSMCP_ALLOWED_ORIGINSGITLAB_MCP_OAUTHGITLAB_OAUTH_CALLBACK_PROXYGITLAB_OAUTH_ALLOWED_REDIRECT_URISOAUTH_REGISTER_RATE_LIMIT_PER_HOUROAUTH_DISABLE_REFRESH_TOKENOAUTH_STATELESS_MODEOAUTH_STATELESS_SECRET
参考文档还介绍了:
- 身份验证和 OAuth 变量
- MCP OAuth 代理变量
- 项目和工具筛选变量
- 通过
discover_tools动态发现工具(按需启用工具集) - 传输和会话变量
- 代理和 TLS 变量
有关回调代理模式的详细信息,请参阅 GitLab MCP OAuth 回调代理。
SSE 会话限制
GET /sse 受与 Streamable HTTP 相同的远程传输控制约束:
- **容量:**并发 SSE 会话数最多为
MAX_SESSIONS(默认值为 1000);超出后,新连接会收到503。 - **创建速率限制:**每个客户端 IP 的新连接速率限制为
MAX_REQUESTS_PER_MINUTE(默认值为 60);超出后,新连接会收到429。 - 空闲超时:如果会话在
SESSION_TIMEOUT_SECONDS(默认值为 1 小时)内未收到POST /messages请求,则会关闭该会话。因此,空闲客户端必须重新连接,而不能继续占用容量名额。与 Streamable HTTP 不同,保持 SSE 流打开不算活动。 - 实例达到容量上限时,
/health会返回503,且状态为status: "degraded"。
可通过 MAX_SESSIONS、MAX_REQUESTS_PER_MINUTE 和 SESSION_TIMEOUT_SECONDS 调整这些设置。
远程授权设置(多用户支持)
使用 REMOTE_AUTHORIZATION=true 时,MCP 服务可以支持多个用户,每位用户都可通过 HTTP 标头传入自己的 GitLab 令牌。这适用于:
- 每位用户都需要使用自己的 GitLab 访问权限的共享 MCP 服务实例
- 能够将用户专属令牌注入 MCP 请求的 IDE 集成
设置示例:
# Start server with remote authorization
docker run -d \
-e HOST=0.0.0.0 \
-e STREAMABLE_HTTP=true \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e SESSION_TIMEOUT_SECONDS=3600 \
-p 3333:3002 \
zereight050/gitlab-mcp
客户端配置:
你的 IDE 或 MCP 客户端必须在每个请求中发送以下标头之一:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
或
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
令牌会按会话存储(会话由 mcp-session-id 标头标识),并用于同一会话中的后续请求。会话归属于该令牌对应的 GitLab 用户:使用其他用户的令牌发起请求会收到 404 Session not found;不带令牌的 GET / DELETE /mcp 请求会收到 401。
使用 Cursor 的远程授权客户端配置示例
{
"mcpServers": {
"GitLab": {
"url": "http(s)://<your_mcp_gitlab_server>/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
重要说明:
- 远程授权仅适用于 Streamable HTTP 传输
- 每个会话彼此隔离,一个会话的令牌无法访问另一个会话的数据。 会话关闭时,令牌会自动清理。
- **会话超时:**身份验证令牌在
SESSION_TIMEOUT_SECONDS指定的无活动时长后过期(默认 1 小时)。超时后,客户端必须重新发送身份验证标头。传输会话仍保持活动状态。 - 每个请求都会重置该会话的超时计时器。
- 速率限制:
/mcp请求受客户端 IP 的MAX_REQUESTS_PER_MINUTE限制;使用 OAuth 或远程授权时,还受每个 MCP 会话的该限制约束(默认 60)。请参阅 environment-variables.md。 - **容量限制:**服务最多接受
MAX_SESSIONS个并发会话(默认 1000)
MCP OAuth 设置(Claude.ai 原生 OAuth)
使用 GITLAB_MCP_OAUTH=true 时,服务会充当连接到你的 GitLab 实例的 OAuth 代理。Claude.ai(以及任何符合 MCP 规范的客户端)会自动处理整个浏览器身份验证流程,无需手动管理个人访问令牌。
前提条件:
必须有一个预先注册的 GitLab OAuth 应用。GitLab 将动态注册的(未经验证的)应用限制为 mcp 范围,这不足以调用 API(需要 api 或 read_api)。
- 前往你的 GitLab 实例 → 管理区域 > 应用程序(实例范围)或 用户设置 > 应用程序(个人)
- 创建一个新应用,并设置:
- 机密:取消勾选
- 范围:
api、read_api、read_user(或你打算通过GITLAB_OAUTH_SCOPES请求的范围)
- 保存并复制应用程序 ID——这就是你的
GITLAB_OAUTH_APP_ID
工作原理:
- 用户在 Claude.ai 中添加你的 MCP 服务 URL
- Claude.ai 通过
/.well-known/oauth-authorization-server发现 OAuth 端点 - Claude.ai 通过动态客户端注册(
POST /register)注册自身——由 MCP 服务在本地处理(每个客户端都会获得一个虚拟客户端 ID) - Claude.ai 使用预先注册的 OAuth 应用,将用户的浏览器重定向到 GitLab 登录页面
- 用户完成身份验证;GitLab 将用户重定向回
https://claude.ai/api/mcp/auth_callback - Claude.ai 在每个 MCP 请求中发送
Authorization: Bearer <token> - 服务向 GitLab 验证令牌,并按会话存储令牌
服务设置:
docker run -d \
-e STREAMABLE_HTTP=true \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_APP_ID="your-gitlab-oauth-app-client-id" \
-e GITLAB_API_URL="https://gitlab.example.com/api/v4" \
-e MCP_SERVER_URL="https://your-mcp-server.example.com" \
-p 3002:3002 \
zereight050/gitlab-mcp
本地开发时(允许使用 HTTP):
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL=true \
STREAMABLE_HTTP=true \
GITLAB_MCP_OAUTH=true \
GITLAB_OAUTH_APP_ID=your-gitlab-oauth-app-client-id \
MCP_SERVER_URL=http://localhost:3002 \
GITLAB_API_URL=https://gitlab.com/api/v4 \
node build/index.js
Claude.ai 配置:
{
"mcpServers": {
"GitLab": {
"url": "https://your-mcp-server.example.com/mcp"
}
}
}
无需 headers 字段——Claude.ai 会通过 OAuth 自动获取令牌。
环境变量:
| 变量 | 必填 | 描述 |
|---|---|---|
GITLAB_MCP_OAUTH | 是 | 设置为 true 以启用 |
GITLAB_OAUTH_APP_ID | 是 | 预先注册的 GitLab OAuth 应用的客户端 ID |
MCP_SERVER_URL | 是 | MCP 服务的公共 HTTPS URL;也允许用于 /mcp Host/Origin 检查 |
GITLAB_API_URL | 是 | 你的 GitLab 实例 API URL(例如 https://gitlab.com/api/v4)。请勿在 URL 中嵌入凭据(user:pass@);这些凭据会被忽略。密码中的逗号必须写作 %2C。 |
STREAMABLE_HTTP | 是 | 必须为 true(不支持 SSE) |
GITLAB_OAUTH_SCOPES | 否 | 以逗号分隔的 GitLab 权限范围(例如 api,read_user)。默认为 api(或在有效权限模式为 readonly 时默认为 read_api)。预先注册的应用必须配置至少这些权限范围。 |
OAUTH_REGISTER_RATE_LIMIT_PER_HOUR | 否 | 动态客户端注册(POST /register)的每 IP 滚动限制。默认为每小时 20 次;范围为 1–1000。如果客户端(例如多个 IDE 窗口)触发注册限流,请调高此值。这不是 GitLab API 限制。 |
OAUTH_DISABLE_REFRESH_TOKEN | 否 | 设置为 true,即可从 /token 响应中移除 refresh_token,并以 invalid_grant 拒绝刷新授权,使用户在 GitLab 访问令牌过期时通过浏览器重新授权。默认为 false。在回调代理模式下,遵循此服务流程的 MCP 客户端永远不会收到 GitLab 刷新令牌(在直通模式下,客户端可以直接从 GitLab 获取刷新令牌)。这是面向标准 MCP 客户端的重新授权策略,不是安全边界。启用此选项前签发的刷新令牌仍然有效,直到在 GitLab 的 用户设置 → 应用程序 → 已授权的应用程序 → 撤销 中撤销为止。 |
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL | 否 | 仅用于本地 HTTP 开发时设置为 true |
重要说明:
- MCP OAuth 仅适用于 Streamable HTTP 传输(
SSE=true不兼容) - 每个用户会话都存储自己的 OAuth 令牌——会话完全隔离
- 会话超时、速率限制和容量限制与
REMOTE_AUTHORIZATION模式完全相同(SESSION_TIMEOUT_SECONDS、MAX_REQUESTS_PER_MINUTE、MAX_SESSIONS) - DCR 速率限制:
POST /register按客户端 IP 限制为每小时OAUTH_REGISTER_RATE_LIMIT_PER_HOUR次(默认每小时 20 次)。此限制独立于/mcp限制和 GitLab API 配额。详见 environment-variables.md。 - **请求头认证回退:**如果请求中包含
Private-Token或JOB-TOKEN请求头,则跳过 OAuth 验证,并在该会话中直接使用原始令牌。这使 PAT 和 CI 作业令牌可以与 OAuth 流程同时用于同一服务器实例。Authorization: Bearer始终被视为 OAuth 令牌——使用Private-Token进行基于 PAT 的请求头认证。
Agent 技能文件
技能 + CLI 是与 MCP 并列的使用方式(参见 技能 + CLI)。对于支持加载技能/指令的 AI Agent(Claude Code、GitHub Copilot、Cursor 等),可使用 skills/gitlab-mcp/ 中预先构建的技能文件。
- SKILL.md — 核心指南(约 800 个令牌),包含工具集概览、关键工作流和参数提示
- reference/ — 代码审查、合并请求、议题、流水线和漏洞分流的详细工作流文档
使用 skills CLI 安装:
npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill
在 AI 客户端中注册技能目录,即可获得最佳工具使用指导,而无需仅依赖完整的 ListTools 响应。
工具 🛠️
点击展开
Wiki 页面标题与 slug
GitLab 会根据页面标题生成 Wiki 页面的 slug(其 URL 为 /-/wikis/<slug>)。因此,向 update_wiki_page / update_group_wiki_page 传入 title 会重命名页面并更改其 URL;对于嵌套页面,还可能将页面移至其他路径,从而导致现有链接失效。
若要仅更改显示的标题并保持 URL 不变,请勿传入 title。请改为将显示标题存储在页面内容的 YAML front matter 中,并更新内容:
---
title: My Custom Display Title
---
Page body…
GitLab 会保持 slug/URL 不变,并在界面中显示 front matter 中的标题。使用 get_wiki_page 并设置 render_html: true 可读取该标题,此时会填充 front_matter 字段;普通的 title 字段始终反映根据 slug 生成的值。
测试 🧪
该项目包含全面的测试覆盖,包括远程授权:
# Run all tests (API validation + remote auth)
npm test
# Run only remote authorization tests
npm run test:remote-auth
# Run all tests including readonly MCP tests
npm run test:all
# Run only API validation
npm run test:integration
所有远程授权测试均使用模拟的 GitLab 服务,无需实际的 GitLab 凭据。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
