This document compares @zereight/mcp-gitlab with GitLab MCP A: a label for community GitLab
MCP servers that use a CQRS-style tool model — grouped read tools (browse_*) and write tools
(manage_*) with an action parameter instead of one tool per API endpoint.
We use a neutral name so the comparison stays about architecture and trade-offs, not a specific vendor or fork.
| Dimension | @zereight/mcp-gitlab | GitLab MCP A (CQRS-style) |
|---|---|---|
| Tool count (listed) | ~217 granular tools | ~50–60 grouped tools |
| Operations | 1 tool ≈ 1 API call | 1 tool × many action values |
| Token control | discover_tools, GITLAB_TOOLSETS, GITLAB_TOOLS |
Smaller default tool list |
| Tool discovery | Explicit names (get_merge_request, list_pipelines, …) |
Category + action (browse_merge_requests, …) |
| MR code review | 2-step batched diff workflow | Often single browse tool per domain |
| Multi-instance | Design in progress | Often built-in (env/YAML) |
| Connection resilience | Basic health check | Often state machine + reconnect |
| GitLab version awareness | health_check reports version |
Often filters schemas by version/tier |
| Remote / OAuth | Deep (stateless HPA, callback proxy, remote auth) | Varies |
| Agent Skill | Yes (skills/gitlab-mcp/) |
Rare |
| Node.js | >=18 | Often >=24 |
| License | MIT | Varies |
Each major GitLab operation is a named MCP tool. Agents can call get_merge_request or
list_pipeline_jobs directly when they know the tool name.
Token budget is managed without collapsing the model:
- Default toolsets — only expose categories you need via
GITLAB_TOOLSETS discover_tools— activate categories at runtime; server sendslist_changed- Agent Skill — workflow guidance without loading every tool description
Tools are grouped by domain (projects, merge requests, pipelines, …). Each tool accepts an
action argument (list, get, create, …). Fewer tool names appear in tools/list, which
can reduce context size for clients that load all schemas up front.
Trade-off: agents must learn the action vocabulary inside each group instead of scanning flat tool names.
- MR review workflows — changed-files list, then batched per-file diffs (token-efficient without CQRS)
- Agent-first setups — Skill +
discover_toolscover “start small, grow on demand” - Broad API surface — dependency proxy, vulnerability triage, work items, draft notes, etc.
- Deployment flexibility — stdio / SSE / Streamable HTTP, remote auth, stateless OAuth
- Lower Node requirement — Node 18+
- Multi-instance today — several self-hosted GitLab URLs in one MCP process (we are designing this; see multi-instance design)
- Strict tool list cap — hard limit on
tools/listsize without runtime discovery - Version/tier schema filtering — hide tools unsupported on your GitLab tier automatically
- Platform-team UX — YAML config files, VS Code install badges, generated tool catalogs
Both approaches typically cover:
- Projects, groups, merge requests, issues, pipelines
- PAT and OAuth authentication
- Self-hosted GitLab (
GITLAB_API_URL) - Read-only or permission-restricted modes
Differentiators to verify per server:
| Area | @zereight/mcp-gitlab | Check on GitLab MCP A |
|---|---|---|
| MR batched diff review | Yes | Varies |
discover_tools runtime activation |
Yes | Uncommon |
| Stateless OAuth / HPA | Yes | Varies |
| Runners / registry / audit APIs | Partial / issue-driven | Often broader in enterprise variants |
| Multi-instance | Planned | Often yes |
A survey of other GitLab MCP implementations (Oct 2026) surfaced concrete features we don't have yet. Confidence noted since some marketplace tool-count claims are self-reported and unverified.
| Gap | Where it exists | Confidence |
|---|---|---|
| True multi-instance (multiple GitLab URLs, per-instance OAuth/rate limit) | @structured-world/gitlab-mcp (GITLAB_INSTANCES/GITLAB_INSTANCES_FILE) |
High |
| Auto schema filtering by GitLab edition/tier | @structured-world/gitlab-mcp |
High |
| MCP prompts/resources as first-class primitives (not just tools) | python-gitlab-mcp (PyPI) |
Medium |
| GraphQL API option alongside REST | vish288/mcp-gitlab, jmrplens/gitlab-mcp-server |
Low–Medium (tool-count claims unverified) |
| OAuth Dynamic Client Registration (self-register against the GitLab instance, no manual app setup) | Official GitLab MCP (Premium/Ultimate, Beta) | Medium |
Note: protected branches (list_protected_branches, get_protected_branch, protect_branch,
unprotect_branch) were already covered by yoda-digital/mcp-gitlab-server at survey time — we
already have equivalent tools, so it isn't a real gap.
Not found anywhere in the ecosystem — likely a gap for everyone, not just us: epics, SAST/security-scan integration, webhook management, service desk, merge trains, GitLab Pages management.
Of the remaining gaps, all require real architectural changes (new auth flow, multi-tenant config, a GraphQL client, or an MCP prompts/resources layer) — none is a small, drop-in addition.
If you are evaluating a switch in either direction:
- Compare your actual prompts — MR review and pipeline debug are the most sensitive flows
- Map toolsets —
GITLAB_TOOLSETS=allon our side vs CQRSbrowse_*groups on theirs - Check auth — PAT-only multi-instance is simpler; OAuth multi-instance needs extra design
- Run
health_checkon both against the same GitLab instance
- Comparison overview
- Environment variables (
GITLAB_TOOLSETS,GITLAB_TOOLS) - Multi-instance design
- VS Code setup