Skip to main content
Glama

GitLab MCP Server

GitHub Release License: MIT Platform

CI Quality Gate Coverage Go Reference

Glama MCP Score

MCP Badge MCP Toplist Cursor Directory Hosted endpoint

将你的 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.json

  • Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

  • Windows: %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 面上的 无状态流式 HTTPPOST 是传输方式,对其执行 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(gitlab_find_actiongitlab_execute_action

Token 成本最低;通过 find/execute 触达完整目录。

Meta-toolsmeta

32 基础版 / 49 Ultimate / 50 GitLab.com Ultimate

按领域分组的调度器,带 action 参数。

Individualindividual

~847 Free/CE · ~999 Premium · 1065–1071 Ultimate

每个 GitLab 操作对应一个 MCP 工具;需要较大的上下文窗口。

工具数量会随你的 GitLab 版本(GITLAB_TIER)而变化;更高的版本层级会暴露更多操作。有关排序模型、安全防护和完整目录,请参阅 Dynamic ToolsetMeta-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=dynamicCAPABILITY_SURFACE=fullMETA_TOOLS 未设置、META_PARAM_SCHEMA=opaque,且 GITLAB_TIER 未设置(自动检测,回退为 free)时,服务器使用 dynamic find/execute 表面。只有当你明确需要领域 meta-tools 时才使用 TOOL_SURFACE=meta;只有当你的客户端能够处理完整工具目录时才使用 TOOL_SURFACE=individual

配置(TOOL_SURFACE / CAPABILITY_SURFACE

Tier

可见工具

可触达操作

META_PARAM_SCHEMA

工具 schema Token 数

共享 Token 数

总 Token 数

dynamic / full(默认)

Free/CE

2

851

n/a

1,499

8,720

10,219

dynamic / minimal

Free/CE

2

851

n/a

1,499

170

1,669

dynamic / full(默认)

Premium

2

1,003

n/a

1,499

8,720

10,219

dynamic / minimal

Premium

2

1,003

n/a

1,499

170

1,669

dynamic / full(默认)

Ultimate

2

1,069

n/a

1,499

8,720

10,219

dynamic / minimal

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 的 logging 能力,该能力已弃用(SEP-2577),且刻意不对外公布

进度

工具执行进度报告

引导

4 个交互式创建向导

订阅

通过轮询支持 resources/updated,26 种资源类型

已在以下环境中测试: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

claude-haiku-4-5-20251001

OK

100.0%

100.0%(2/2)

555 次操作中最终 100.0%

Google

gemini-flash-latest

OK

100.0%

100.0%(4/4)

555 次操作中最终 100.0%

OpenAI

gpt-5.4-nano

Review

99.3%

84.6%(11/13)

555 次操作中最终 98.0%

Qwen

qwen3.6-flash

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

claude-haiku-4-5-20251001

OK

100.0%

100.0%(1/1)

84 次操作中最终 100.0%

Google

gemini-flash-latest

Review

78.2%

100.0%(7/7)

84 次操作中最终 100.0%

OpenAI

gpt-5.4-nano

Review

100.0%

100.0%(4/4)

84 次操作中最终 100.0%

Qwen

qwen3.6-flash

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

claude-haiku-4-5-20251001

OK

100.0%

100.0%(1/1)

202 次操作中最终 100.0%

Google

gemini-flash-latest

OK

100.0%

100.0%(2/2)

202 次操作中最终 100.0%

OpenAI

gpt-5.4-nano

OK

100.0%

无修复

202 次操作中最终 100.0%

Qwen

qwen3.6-flash

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。如需查找特定领域的权威参考,请使用此导航表:

文档

描述

入门指南

下载、设置向导、分客户端配置

IDE 配置

各客户端的 stdio、HTTP 旧版和 HTTP OAuth 示例

配置

环境变量、传输模式、TLS

环境变量

包含默认值和示例的详尽环境变量表

CLI 参考

所有命令行标志、退出代码和运行时示例

HTTP 服务器模式

共享 HTTP 部署、身份验证、服务器池隔离

OAuth 应用设置

GitLab OAuth 应用、作用域、重定向 URI,以及哪些客户端可以完成流程

CI/CD

在 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=premiumGITLAB_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

github.com/modelcontextprotocol/go-sdk v1.7.0

GitLab 客户端

gitlab.com/gitlab-org/api/client-go/v2 v2.59.0

传输方式

stdio(默认)、HTTP(Streamable HTTP)

隐私政策

服务器完全在您的机器上运行,没有自己的遥测、分析或后端——数据仅在您的 MCP 客户端与您配置的 GitLab 实例之间流动(外加一次可选的、针对 GitHub Releases 的签名二进制更新检查)。您的 token 仅用于对 GitLab 请求进行身份验证,绝不会被记录。完整详情:PRIVACY.md

贡献与安全

仓库镜像:GitHub 是权威仓库。为了便于发现,GitLab.com 上提供只读镜像;请在 GitHub 上提交贡献。

文件数量

类别

文件数

行数

源码(.go,非测试)

992

202,107

单元测试(_test.go

553

314,659

端到端测试

182

47,508

总计

1,727

564,274

函数

类别

数量

源码函数

7,693

— 导出的(公开)

2,675

— 未导出的(私有)

5,018

单元测试函数(TestXxx

11,985

子测试(t.Run(...)

2,986

端到端测试函数

439

值得注意的比率

观察项

测试行数与源码行数之比

测试行数是源码行数的 1.56 倍

源码文件平均长度

~203 行

测试文件平均长度

~569 行

源码中的注释行数

23,569(占源码的 ~11.7%)

每个源码函数对应的测试函数数

1.6×

代码模式

模式

数量

if err != nil 检查

6,715

defer 语句

934

定义的 struct 类型

2,743

//nolint 抑制

263

TODO / FIXME / HACK 注释

2

项目

指标

Go 包

237

直接依赖(go.mod

17

间接依赖

47

纪录榜

纪录

文件

最长的源码文件

internal/tools/projects/projects.go — 3,846 行

最长的测试文件

internal/tools/projects/projects_test.go — 8,183 行

为什么不呢

事实

按每页 55 行打印的源码

~3,674 页 A4

提到 "gitlab" 的源码行数

12,629(无法避免)

源码中最长的函数名

`assertDynamicCompatibilityPolicyOwned

Available Tools

2 tools
gitlab_execute_actionGitLab Execute ActionA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesCanonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close.
paramsYesRequired action-specific parameters object validated by the selected action schema. Use an empty object for actions with no parameters.
confirmNoSet top-level confirm=true to explicitly approve destructive actions. Do not put confirm inside params for gitlab_execute_action.

Output Schema

ParametersJSON Schema
NameRequiredDescription
next_stepsNoOptional. Suggested follow-up actions or tool calls for the LLM, contextual to the result.
paginationNoPresent on list actions. Use `has_more` and `next_page` to paginate through results.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ActionA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of matches to return. Defaults to 20 and is capped at 50.
queryYesSearch 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.
explainNoWhen true, include deterministic scoring reasons for each returned action. Defaults to false to keep responses compact.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of returned matches.
queryYesOriginal search query.
resultsYesMatching GitLab catalog actions with schemas and execute examples.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 2 tool updatesv3.0.0
    • Changedgitlab_execute_action1 field changed
      • changedInput schema / properties / confirm / description
        Previous 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."
    • Changedgitlab_find_action2 fields changed
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / maxLength
        Added value: +256
  2. 1 tool updatev2.7.5
    • Changedgitlab_execute_action1 field changed
      • changedInput schema / properties / action / x-mcp-header
        Previous value: -"Mcp-Param-Action"New value: +"Action"
  3. 1 tool updatev2.6.0
    • Addedgitlab_execute_action
  4. 1 tool updatev2.5.2
    • Removedgitlab_execute_action
  5. 3 tool updatesv2.1.3
    • Addedgitlab_execute_action
    • Removedgitlab_execute_tool
    • Changedgitlab_find_action4 fields changed
      • changedOutput schema / properties / results / items / properties / example / description
        Previous value: -"Example gitlab_execute_tool call."New value: +"Example gitlab_execute_action call."
      • changedOutput schema / properties / results / items / properties / example / properties / arguments / description
        Previous value: -"Example arguments for gitlab_execute_tool."New value: +"Example arguments for gitlab_execute_action."
      • changedOutput schema / properties / results / items / properties / id / description
        Previous value: -"Canonical action ID to pass to gitlab_execute_tool."New value: +"Canonical action ID to pass to gitlab_execute_action."
      • changedOutput schema / properties / results / items / properties / required_params / description
        Previous value: -"Required parameter names captured from the input schema."New value: +"Required action-specific parameter names to place inside gitlab_execute_action params."
  6. 2 tool updatesv2.0.2
    • Changedgitlab_execute_tool3 fields changed
      • changedInput schema / properties / action / description
        Previous 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."
      • changedInput schema / properties / confirm / description
        Previous 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."
      • changedOutput 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"
        +}
    • Changedgitlab_find_action1 field changed
      • changedInput schema / properties / query / description
        Previous 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

A4.5/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency5/5

Both tools follow the same gitlab_<verb>_action pattern, creating a predictable and consistent naming convention. The verb prefixes accurately indicate the operation type.

Tool Count3/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A 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 npm
    2
    -
  • A
    license
    B
    quality
    C
    maintenance
    A 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.
    32
    6 npm
    11
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Full-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 npm
    6
    Apache 2.0