Gitlab MCP Server
GitLab MCP Server
将你的 AI 助手连接到 GitLab,让它可以用自然语言审查合并请求、处理流水线、管理议题并起草发布说明。 一个静态二进制文件(或容器),通过完整的 REST + GraphQL API 提供 1000+ 个 GitLab 工具,可与 Claude、Cursor、VS Code 以及任何 MCP 客户端配合使用。
你只需与 AI 助手对话,GitLab 的工作由它来完成。无需记住项目 ID、API 端点或 JSON。
"审查合并请求 !15 —— 可以安全合并吗?" · "上一次流水线为什么失败?" · "列出分配给我的公开议题" · "生成从 v1.0 到 v2.0 的发布说明"
🤖 正在使用 AI 助手? 把这个仓库的 URL 交给它,让它为你的客户端安装服务器。模型要无头完成这件事所需的一切 —— 声明式的各客户端配置、
claude mcp add单行命令和默认值 —— 都在llms.txt中(无需交互式向导)。
60 秒内完成安装
任选一种方式。无论哪条路径,最后都是你向助手输入一条提示。
一键安装
每个按钮都会注册基于 Docker 的服务器(首次运行时会自动拉取镜像;你需要安装 Docker)。Claude Desktop 那一行则是下载原生 .mcpb 桌面扩展(macOS 通用版 + Windows,无需 Docker)—— 用 Claude Desktop 打开它并填写设置。需要令牌?创建一个具有 api 作用域的个人访问令牌。使用自托管 GitLab?安装后在客户端的 MCP 配置中添加 GITLAB_URL 环境变量。
Claude Code (claude mcp add)
Docker(无需安装 —— 首次运行时会拉取镜像):
claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx --transport stdio \
-- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest --http=false或者先安装原生二进制文件,再注册它:
# macOS/Linux (Homebrew)
brew install jmrplens/tap/gitlab-mcp-server
# Linux/macOS (script)
curl -fsSL https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.sh | sh
# Windows (winget)
winget install --id jmrplens.gitlab-mcp-server -e
# Windows (PowerShell)
irm https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.ps1 | iex
claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx -- gitlab-mcp-server使用自托管 GitLab?添加 --env GITLAB_URL=https://gitlab.example.com(如果是自签名证书,再加上 --env GITLAB_SKIP_TLS_VERIFY=true)。
引导式设置(适用于任何客户端,无需记住参数)
该二进制文件自带一个 设置向导,它会收集你的 GitLab 令牌并为你配置 MCP 客户端 —— 如果你不想手改 JSON,这会很方便:
gitlab-mcp-server --setup它会自动检测 VS Code、Claude Desktop、Claude Code、Cursor 和 Windsurf,并写入正确的配置。在 Windows 上,双击 .exe 即可启动它。
手动 JSON(Claude Desktop、Cursor、VS Code 等)
原生二进制文件(Claude Desktop 的 mcpServers、Cursor 等):
{
"mcpServers": {
"gitlab": {
"command": "/path/to/gitlab-mcp-server",
"env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
}
}
}VS Code(.vscode/mcp.json,注意 servers + type):
{
"servers": {
"gitlab": {
"type": "stdio",
"command": "/path/to/gitlab-mcp-server",
"env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
}
}
}Docker 变体 —— 将 "command"/"args" 替换为:
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITLAB_TOKEN", "ghcr.io/jmrplens/gitlab-mcp-server:latest", "--http=false"]Cline(VS Code)—— 打开 Cline 侧边栏 → MCP 服务器图标 → 编辑全局 MCP,或者直接编辑设置文件:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonLinux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonWindows:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
对于原生二进制文件,Cline 使用上面所示的 mcpServers 结构。
如需共享、长期运行的 HTTP 部署,而不是每用户的 stdio,请参阅 HTTP 服务器模式。
无需安装即可试用(托管端点)
一个公共实例运行在 https://mcp.jmrp.io/gitlab —— 无需安装任何组件,除了你自己的 GitLab 令牌外无需任何账号。让任何支持 HTTP 的 MCP 客户端指向它:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://mcp.jmrp.io/gitlab",
"headers": { "PRIVATE-TOKEN": "glpat-xxxxxxxxxxxx" }
}
}
}PRIVATE-TOKEN 是必需的,并随每个请求传递 —— 它永远不会存储在服务器上。GITLAB-URL 是可选的,默认值为 https://gitlab.com;设置它可以访问另一个实例(该实例必须能从公共互联网访问)。
这是试用服务器最快的方式,但长期使用的正确方式仍然是 本地运行(上面任一选项)—— 之所以这样说,是出于一个具体原因,而不是作为免责声明:你的令牌和每个请求都会经过别人的机器。 在本地运行意味着你的凭据和 GitLab 流量永远不会离开你的电脑,这也使其成为私有自托管实例唯一明智的选择。
该端点是默认 dynamic 面上的 无状态流式 HTTP:POST 是传输方式,对其执行 GET 按设计返回 405,而 https://mcp.jmrp.io/gitlab/health 返回 200 及 {"status":"ok",…}。自托管的 HTTP 部署还可以运行 --auth-mode=oauth --gitlab-url=https://gitlab.com --public-url=https://mcp.example.com(两者都是必需的:OAuth 需要一个固定的实例,以及一个可从外部访问的源,RFC 9728 用它来标识资源)。在这种模式下,客户端通过该元数据发现 GitLab 为授权服务器,并在浏览器中完成授权,而不是复制令牌 —— 请参阅 OAuth 应用设置。它是 mcp.jmrp.io 上列出的服务器之一,该目录收录了我维护的 MCP 服务器,每个服务器都可以通过自己的端点访问;https://mcp.jmrp.io/servers.json 是面向自动化客户端的同一份列表。
然后直接提问: 打开你的 AI 客户端,试试 “列出我的 GitLab 项目。” 关于各客户端的详细信息,请参阅入门指南和更多示例提示。
Related MCP server: GitLab MCP Server
为什么选择这个服务器
自然语言操作 GitLab。 AI 会把“MR !15 可以安全合并吗?”转换成正确的 API 调用。你无需接触端点、ID 或 JSON。
覆盖整个平台 — 1000+ 工具。 广泛支持 GitLab REST v4 + GraphQL:项目、分支、标签、发布、合并请求、问题、流水线、作业、群组、用户、Wiki、环境、部署、包、容器镜像仓库、Runner、功能开关、CI/CD 变量、安全、管理、令牌等。
默认低 Token 消耗。 默认的 dynamic 表面只暴露 2 个工具(
find+execute),但能触达完整目录 — 因此适合任何客户端的上下文窗口。(Token 占用 →)经真实模型验证。 自动化评估器针对真实 GitLab 实例运行 Anthropic、Google、OpenAI 和 Qwen:在数千次操作中实现 99.5% 的总体成功率。(结果 →)
设计上安全。 只读模式、安全模式(每次变更的 dry-run 预览)、针对自托管 GitLab 的 TLS 选项,以及持续的 SonarCloud 质量/安全门禁。
随处运行。 单个静态二进制文件或容器;支持 Windows、Linux 和 macOS;amd64 和 arm64;stdio(桌面端)和 HTTP(远程)。
45 个 MCP 资源(只读数据:项目、问题、流水线、MR、分支、成员、感知工具表面的
gitlab://tools清单,以及工作流最佳实践指南)。另有 26 种单对象类型支持订阅。37 个 MCP 提示词(代码审查、流水线状态、风险评估、发布说明、站会、分析、审计等)。
4 个引导向导(交互式创建问题/MR/发布/项目)。
4 项 MCP 能力(补全、进度、引导,以及资源订阅 — 通过轮询支持的实时
resources/updated通知)和 51 个工具图标(50 个领域图标加项目标志),用于在 MCP 客户端中进行可视化识别。每个列表端点均支持分页,并附带完整元数据。
工具表面
服务器可以通过三种形态呈现 GitLab,由 TOOL_SURFACE 控制。默认形态无需任何配置。
表面 | 可见工具 | 适用场景 |
Dynamic(默认) | 2( | Token 成本最低;通过 find/execute 触达完整目录。 |
Meta-tools( | 32 基础版 / 49 Ultimate / 50 GitLab.com Ultimate | 按领域分组的调度器,带 |
Individual( | ~847 Free/CE · ~999 Premium · 1065–1071 Ultimate | 每个 GitLab 操作对应一个 MCP 工具;需要较大的上下文窗口。 |
工具数量会随你的 GitLab 版本(GITLAB_TIER)而变化;更高的版本层级会暴露更多操作。有关排序模型、安全防护和完整目录,请参阅 Dynamic Toolset 和 Meta-Tools Reference。在动态模式下,如果资源占用了大部分上下文,请设置 CAPABILITY_SURFACE=minimal。
Token 占用
基于当前目录,使用 go run ./cmd/audit_tokens/ -footprint 进行测量。总数估算 MCP 客户端启动时可见的上下文:可见的工具 schema 加上共享资源和提示词,使用 cl100k_base 分词器(GPT-4/GPT-3.5 编码)。完整矩阵(meta 和 individual 表面、所有 META_PARAM_SCHEMA 模式)请参阅 Token Footprint Reference。
默认配置:当 TOOL_SURFACE 未设置或为 TOOL_SURFACE=dynamic、CAPABILITY_SURFACE=full、META_TOOLS 未设置、META_PARAM_SCHEMA=opaque,且 GITLAB_TIER 未设置(自动检测,回退为 free)时,服务器使用 dynamic find/execute 表面。只有当你明确需要领域 meta-tools 时才使用 TOOL_SURFACE=meta;只有当你的客户端能够处理完整工具目录时才使用 TOOL_SURFACE=individual。
配置( | Tier | 可见工具 | 可触达操作 |
| 工具 schema Token 数 | 共享 Token 数 | 总 Token 数 |
| Free/CE | 2 | 851 | n/a | 1,499 | 8,720 | 10,219 |
| Free/CE | 2 | 851 | n/a | 1,499 | 170 | 1,669 |
| Premium | 2 | 1,003 | n/a | 1,499 | 8,720 | 10,219 |
| Premium | 2 | 1,003 | n/a | 1,499 | 170 | 1,669 |
| Ultimate | 2 | 1,069 | n/a | 1,499 | 8,720 | 10,219 |
| Ultimate | 2 | 1,069 | n/a | 1,499 | 170 | 1,669 |
除非 Tier 列另有说明,各行均使用基础 Community Edition 目录。GITLAB_TIER 控制哪些操作可用;更高的版本层级会暴露更多工具,从而提供更多可触达的操作。
兼容性
MCP 能力 | 支持情况 |
工具 | 最多 1071 个 individual / 32–50 个 meta |
资源 | 45 个(静态 + 模板) |
提示词 | 37 个模板 |
补全 | 17 种参数类型:项目、群组、用户、分支、标签(tags)、MR、问题、流水线、作业、标签(labels)、里程碑、SHA |
服务器日志 | 结构化(text/JSON)输出到 stderr — 不是 MCP 的 |
进度 | 工具执行进度报告 |
引导 | 4 个交互式创建向导 |
订阅 | 通过轮询支持 |
已在以下环境中测试:VS Code + GitHub Copilot、Claude Desktop、Claude Code、Cursor、Windsurf、JetBrains IDE、Zed、Kiro、Cline。完整的 Compatibility Matrix 请参见此处。
AI 模型工具调用评估
该项目包含一个自动化评估器,用于评估面向模型的 MCP 质量。它可以对工具目录执行仅限 schema 的检查,也可以通过 MCP 对填充了 fixtures 的 Docker GitLab CE 或已授权 Enterprise 实例执行经过验证的模型工具调用。它衡量每个模型是否选择了正确的操作、发送了有效的参数、能从可操作的 GitLab 错误中恢复,以及是否遵守破坏性操作防护 — 覆盖 Anthropic、Google、OpenAI 和 Qwen。
当前发布结果:Docker CE dynamic 20260627-232303。
提供商 | 模型 | 兼容性 | 工具准确率 | 恢复 | Docker 实时状态 |
Anthropic |
| OK | 100.0% | 100.0%(2/2) | 555 次操作中最终 100.0% |
| OK | 100.0% | 100.0%(4/4) | 555 次操作中最终 100.0% | |
OpenAI |
| Review | 99.3% | 84.6%(11/13) | 555 次操作中最终 98.0% |
Qwen |
| OK | 100.0% | 100.0%(5/5) | 555 次操作中最终 100.0% |
已发布的模型评估集涵盖 596 次任务尝试和 2220 个预期 MCP 操作。在所选报告中,模型在 2265 次模型请求中产生了 2265 次工具调用,总体最终成功率为 99.5%。详细的最新矩阵请参阅 AI Model Evaluation Results。
当前发布结果:Docker Enterprise meta 20260527。
提供商 | 模型 | 兼容性 | 工具准确率 | 恢复 | Docker 实时状态 |
Anthropic |
| OK | 100.0% | 100.0%(1/1) | 84 次操作中最终 100.0% |
| Review | 78.2% | 100.0%(7/7) | 84 次操作中最终 100.0% | |
OpenAI |
| Review | 100.0% | 100.0%(4/4) | 84 次操作中最终 100.0% |
Qwen |
| OK | 100.0% | 100.0%(1/1) | 84 次操作中最终 100.0% |
已发布的模型评估集涵盖 92 次任务尝试和 336 个预期 MCP 操作。在所选报告中,模型在 350 次模型请求中产生了 345 次工具调用,总体最终成功率为 100.0%。详细的最新矩阵请参阅 AI Model Evaluation Results。
当前发布结果:Docker Enterprise dynamic 20260628-015421。
提供商 | 模型 | 兼容性 | 工具准确率 | 恢复 | Docker 实时状态 |
Anthropic |
| OK | 100.0% | 100.0%(1/1) | 202 次操作中最终 100.0% |
| OK | 100.0% | 100.0%(2/2) | 202 次操作中最终 100.0% | |
OpenAI |
| OK | 100.0% | 无修复 | 202 次操作中最终 100.0% |
Qwen |
| OK | 100.0% | 100.0%(1/1) | 202 次操作中最终 100.0% |
已发布的模型评估集涵盖 124 次任务尝试和 808 个预期 MCP 操作。在所选报告中,模型在 817 次模型请求中产生了 817 次工具调用,总体最终成功率为 100.0%。详细的最新矩阵请参阅 AI Model Evaluation Results。
文档
完整文档位于 jmrp.io/docs/gitlab-mcp-server。如需查找特定领域的权威参考,请使用此导航表:
文档 | 描述 |
下载、设置向导、分客户端配置 | |
各客户端的 stdio、HTTP 旧版和 HTTP OAuth 示例 | |
环境变量、传输模式、TLS | |
包含默认值和示例的详尽环境变量表 | |
所有命令行标志、退出代码和运行时示例 | |
共享 HTTP 部署、身份验证、服务器池隔离 | |
GitLab OAuth 应用、作用域、重定向 URI,以及哪些客户端可以完成流程 | |
在 GitLab CI 和 GitHub Actions 管道中运行服务器 | |
每个工具都遵循的响应约定:内容块、分页、后续步骤 | |
错误分类、GitLab 消息提取,以及工具返回的提示 | |
所有单独的工具及其输入/输出模式,包括仅限 GitLab.com 的 Orbit | |
32/49/50 个领域元工具,支持操作分派 | |
2 工具低 token 模式,包含规范操作目录、安全模型和示例 | |
全部 45 个资源及其 URI 模板 | |
全部 37 个提示词及其参数和输出格式 | |
自更新机制、模式和发布格式 | |
单元测试、E2E、Schema 模型评估、Docker 模型评估,以及精选模型结果 | |
安全模型、token 作用域、输入验证 | |
系统架构、组件设计、数据流 | |
构建、测试、CI/CD、贡献 | |
常见的启动、token、TLS、传输和工具发现问题 |
常见问题
是的。将 GITLAB_URL 设置为您实例的 URL。省略 GITLAB_URL 时,stdio 模式使用 https://gitlab.com。通过 GITLAB_SKIP_TLS_VERIFY=true 支持自签名 TLS 证书。
当您自行运行时——在本地通过 stdio,或在您自己的基础设施上通过 HTTP——所有 API 调用都会直接发送到您的 GitLab 实例。唯一会发往其他地方的请求是针对 GitHub Releases 的更新检查,该检查默认开启,可通过 AUTO_UPDATE=false 关闭。
例外是托管端点:使用 https://mcp.jmrp.io/gitlab 意味着您的 token 和每个请求都会经过那台机器。那里不会存储任何内容,但那是别人的服务器,这正是托管部分建议您继续在本地使用它的原因。
关于更新检查具体发送的内容,请参阅 PRIVACY.md;关于安全模型,请参阅 SECURITY.md。
可以。设置 GITLAB_READ_ONLY=true 可禁用所有变更类工具(创建、更新、删除)。此时只有只读操作可用。
或者,设置 GITLAB_SAFE_MODE=true 进入试运行模式:变更类工具仍然可见,但会返回结构化的 JSON 预览,而不会实际执行。适用于审计、培训或审查 AI 助手会执行的操作。
社区版(CE)和企业版(EE)均受支持。在 stdio 模式下设置 GITLAB_TIER=premium 或 GITLAB_TIER=ultimate,可为 Premium/Ultimate 功能(DORA 指标、漏洞、合规性等)启用附加工具;不设置时,则根据实例许可证检测层级(回退为 free)。在 HTTP 模式下,--tier 可以强制指定层级,否则会根据许可证按每个 token+URL 池条目进行检测。
服务器包含针对 GitLab API 速率限制的带退避的重试逻辑。错误会被分类为临时性(可重试)或永久性,并在错误消息中提供可操作的提示。
任何兼容 MCP 的客户端:VS Code + GitHub Copilot、Claude Desktop、Cursor、Claude Code、Windsurf、JetBrains IDE、Zed、Kiro 等。内置的设置向导可以自动配置大多数客户端。
从源码构建
git clone https://github.com/jmrplens/gitlab-mcp-server.git
cd gitlab-mcp-server
make build已发布的容器镜像是 ghcr.io/jmrplens/gitlab-mcp-server:latest。有关交叉编译、Docker Compose 和贡献指南,请参阅开发指南。
组件 | 技术 |
语言 | Go 1.27+ |
MCP SDK |
|
GitLab 客户端 |
|
传输方式 | stdio(默认)、HTTP(Streamable HTTP) |
隐私政策
服务器完全在您的机器上运行,没有自己的遥测、分析或后端——数据仅在您的 MCP 客户端与您配置的 GitLab 实例之间流动(外加一次可选的、针对 GitHub Releases 的签名二进制更新检查)。您的 token 仅用于对 GitLab 请求进行身份验证,绝不会被记录。完整详情:PRIVACY.md。
贡献与安全
贡献:有关开发指南、分支命名、提交约定和 PR 流程,请参阅 CONTRIBUTING.md。
安全:有关安全策略和漏洞报告,请参阅 SECURITY.md。
行为准则:请参阅 CODE_OF_CONDUCT.md(贡献者公约 v2.1)。
仓库镜像:GitHub 是权威仓库。为了便于发现,GitLab.com 上提供只读镜像;请在 GitHub 上提交贡献。
文件数量
类别 | 文件数 | 行数 |
源码( | 992 | 202,107 |
单元测试( | 553 | 314,659 |
端到端测试 | 182 | 47,508 |
总计 | 1,727 | 564,274 |
函数
类别 | 数量 |
源码函数 | 7,693 |
— 导出的(公开) | 2,675 |
— 未导出的(私有) | 5,018 |
单元测试函数( | 11,985 |
子测试( | 2,986 |
端到端测试函数 | 439 |
值得注意的比率
观察项 | 值 |
测试行数与源码行数之比 | 测试行数是源码行数的 1.56 倍 |
源码文件平均长度 | ~203 行 |
测试文件平均长度 | ~569 行 |
源码中的注释行数 | 23,569(占源码的 ~11.7%) |
每个源码函数对应的测试函数数 | 1.6× |
代码模式
模式 | 数量 |
| 6,715 |
| 934 |
定义的 | 2,743 |
| 263 |
| 2 |
项目
指标 | 值 |
Go 包 | 237 |
直接依赖( | 17 |
间接依赖 | 47 |
纪录榜
纪录 | 文件 |
最长的源码文件 |
|
最长的测试文件 |
|
为什么不呢
事实 | 值 |
按每页 55 行打印的源码 | ~3,674 页 A4 |
提到 | 12,629(无法避免) |
源码中最长的函数名 | `assertDynamicCompatibilityPolicyOwned |
Available Tools
2 toolsgitlab_execute_actionGitLab Execute ActionADestructiveInspect
Execute one GitLab catalog action by canonical ID or alias. Always pass params as an object. Destructive actions require top-level confirm=true. Use find first only when action or params are unclear.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Canonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close. | |
| params | Yes | Required action-specific parameters object validated by the selected action schema. Use an empty object for actions with no parameters. | |
| confirm | No | Set top-level confirm=true to explicitly approve destructive actions. Do not put confirm inside params for gitlab_execute_action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next_steps | No | Optional. Suggested follow-up actions or tool calls for the LLM, contextual to the result. |
| pagination | No | Present on list actions. Use `has_more` and `next_page` to paginate through results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds an important behavioral requirement: destructive actions require top-level confirm=true. It also signals that the tool is general-purpose by saying 'one GitLab catalog action,' which helps set expectations versus a specialized tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the first states the core function, the second gives a required parameter convention, and the third gives the key safety and routing rule. Every sentence contributes new, actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic action-executor with an open-world catalog, the description provides full operational context: how to identify actions, how to pass parameters, how to handle destructive actions, and when to fall back to the sibling discovery tool. The output schema covers return-value expectations, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents action, params, and confirm with clear descriptions. The description mostly restates these constraints ('Always pass params as an object', confirm requirement) rather than adding new parameter semantics, but it does reinforce the canonical-vs-alias action concept.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Execute one GitLab catalog action by canonical ID or alias.' It also names the sibling relationship indirectly by saying to use find first when actions are unclear, which distinguishes this execution tool from gitlab_find_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage rules: pass params as an object, set top-level confirm=true for destructive actions, and use find first only when action or params are unclear. This gives an agent clear decision criteria for when to call this tool versus gitlab_find_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_find_actionGitLab Find ActionARead-onlyIdempotentInspect
Search the local GitLab action catalog. Read-only and no GitLab API call. Use when the action ID or params are unclear. Returns schemas, hints, destructive flags, and execute examples.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. Defaults to 20 and is capped at 50. | |
| query | Yes | Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable. At most 256 characters: a longer query is refused, not truncated. | |
| explain | No | When true, include deterministic scoring reasons for each returned action. Defaults to false to keep responses compact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of returned matches. |
| query | Yes | Original search query. |
| results | Yes | Matching GitLab catalog actions with schemas and execute examples. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds valuable behavioral detail beyond that: it states 'no GitLab API call' (a specific limitation not in the annotations) and describes what the tool returns ('schemas, hints, destructive flags, and execute examples'). This gives the agent a concrete understanding of the tool's behavior and output without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—three sentences, each serving a distinct purpose: the first states the core function and read-only nature, the second gives the use case trigger, and the third lists return content. It is front-loaded with the most important information and contains no filler or redundant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (read-only, no API call, no side effects) and the presence of an output schema that covers return structure, the description fully equips an agent: it knows what the tool does, when to invoke it, and what to expect back. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter is already well-documented in the input schema, including examples for query. The description does not add any additional meaning beyond the schema; it just restates the query pattern. Per the rubric, baseline 3 is appropriate when the schema carries the full parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action (search) and resource (local GitLab action catalog), and explicitly notes it is read-only and makes no API call. It distinguishes itself from the sibling gitlab_execute_action by implying this tool is for lookup when the action ID or params are unclear, so an agent can easily tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'Use when the action ID or params are unclear.' This clearly indicates when to use the tool, and implicitly that if you have the action ID you would use the execute sibling instead. It stops short of naming the sibling or giving an explicit 'when not to use' rule, but the guidance is clear enough for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v3.0.0- Changed
gitlab_execute_action1 field changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Set top-level confirm=true to explicitly approve destructive actions; do not put confirm inside params for gitlab_execute_action."New value: +"Set top-level confirm=true to explicitly approve destructive actions. Do not put confirm inside params for gitlab_execute_action."
- Changed
gitlab_find_action2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable."New value: +"Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable. At most 256 characters: a longer query is refused, not truncated." - added
Input schema / properties / query / maxLengthAdded value: +256
1 tool update
v2.7.5- Changed
gitlab_execute_action1 field changed- changed
Input schema / properties / action / x-mcp-headerPrevious value: -"Mcp-Param-Action"New value: +"Action"
1 tool update
v2.6.0- Added
gitlab_execute_action
1 tool update
v2.5.2- Removed
gitlab_execute_action
3 tool updates
v2.1.3- Added
gitlab_execute_action - Removed
gitlab_execute_tool - Changed
gitlab_find_action4 fields changed- changed
Output schema / properties / results / items / properties / example / descriptionPrevious value: -"Example gitlab_execute_tool call."New value: +"Example gitlab_execute_action call." - changed
Output schema / properties / results / items / properties / example / properties / arguments / descriptionPrevious value: -"Example arguments for gitlab_execute_tool."New value: +"Example arguments for gitlab_execute_action." - changed
Output schema / properties / results / items / properties / id / descriptionPrevious value: -"Canonical action ID to pass to gitlab_execute_tool."New value: +"Canonical action ID to pass to gitlab_execute_action." - changed
Output schema / properties / results / items / properties / required_params / descriptionPrevious value: -"Required parameter names captured from the input schema."New value: +"Required action-specific parameter names to place inside gitlab_execute_action params."
2 tool updates
v2.0.2- Changed
gitlab_execute_tool3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Canonical action ID returned by gitlab_find_action, such as project.list."New value: +"Canonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Set true to explicitly confirm destructive actions."New value: +"Set top-level confirm=true to explicitly approve destructive actions; do not put confirm inside params for gitlab_execute_tool." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Result envelope. Top-level shape varies per action and matches the chosen action's typed output. Includes optional cross-cutting fields documented below.", + "properties": { + "next_steps": { + "description": "Optional. Suggested follow-up actions or tool calls for the LLM, contextual to the result.", + "items": { + "type": "string" + }, + "type": "array" + }, + "pagination": { + "additionalProperties": true, + "description": "Present on list actions. Use `has_more` and `next_page` to paginate through results.", + "properties": { + "has_more": { + "description": "True when more pages are available after the current one.", + "type": "boolean" + }, + "next_page": { + "description": "Next page index when `has_more` is true.", + "type": "integer" + }, + "page": { + "description": "Current 1-based page index.", + "type": "integer" + }, + "per_page": { + "description": "Items per page.", + "type": "integer" + }, + "prev_page": { + "description": "Previous page index when applicable.", + "type": "integer" + }, + "total": { + "description": "Total item count when known (some endpoints omit it for performance).", + "type": "integer" + }, + "total_pages": { + "description": "Total page count when known.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
gitlab_find_action1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search terms for GitLab actions, such as project create, merge request approve, pipeline retry, or ci variable."New value: +"Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable."
TDQS
Scored across 2 tools
gitlab_execute_action and gitlab_find_action have clearly distinct roles: one executes catalog actions, the other searches the local catalog without making API calls. There is no meaningful overlap or ambiguity between them.
Both tools follow the same gitlab_<verb>_action pattern, creating a predictable and consistent naming convention. The verb prefixes accurately indicate the operation type.
Two tools is a minimal surface and feels thin for a GitLab server, even though the find/execute split is functional. The generic executor and catalog search reduce the impact, but the count is still borderline.
The two tools form a complete discovery-and-execution loop: find_action provides schemas, hints, and examples, while execute_action runs the selected action. Assuming the underlying catalog covers the needed GitLab operations, there are no obvious dead ends.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
GitLab MCP — wraps the GitLab REST API v4 (BYO API key)
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityAmaintenanceFirst gitlab mcp for you, building together11870,206 npm1,987MIT
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables AI assistants to interact with GitLab repositories, allowing tasks like managing merge requests, searching projects, and creating comments through RESTful API integration.5 npm2-
- AlicenseBqualityCmaintenanceA Model Context Protocol (MCP) server for GitLab and Jira integration. This server allows AI agents like gemini-cli to interact with your GitLab and Jira instances.326 npm11MIT
- AlicenseNot gradedqualityAmaintenanceFull-coverage GitLab MCP server with 44 tools across 18 resource types. Agent-optimized CQRS design — one tool call handles complete multi-step operations. Supports OAuth 2.1, read-only mode, stdio/SSE/StreamableHTTP transports, and GraphQL-native work items with full hierarchy (epics,issues,etc)1,922 npm6Apache 2.0