Prototype · This site is a prototype showing 100 real servers from the official registry, not all of them yet.
PopNx MCPMCP servers for people who use AI · explained in plain words

GitLab MCP Server

by zereightversion 2.3.21i★ 2,085iRuns on your computer
Registry nameio.github.zereight/gitlab-mcp

Overview

Description from the maker (original English)

GitLab MCP server for projects, merge requests, issues, pipelines, wiki, releases, and more.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Developer tools
  • You need to fill in: GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_JOB_TOKEN

Install

Pick the AI app you use, then copy the settings.

You need

  • npmNode.js installed (for the npx command)

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": [
        "-y",
        "@zereight/mcp-gitlab"
      ],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your-value",
        "GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "your-value",
        "GITLAB_JOB_TOKEN": "your-value",
        "GITLAB_AUTH_COOKIE_PATH": "your-value",
        "GITLAB_USE_OAUTH": "your-value",
        "GITLAB_OAUTH_CLIENT_ID": "your-value",
        "GITLAB_OAUTH_TOKEN_SCRIPT": "your-value",
        "GITLAB_API_URL": "your-value",
        "GITLAB_ALLOWED_PROJECT_IDS": "your-value",
        "GITLAB_PERMISSION_MODE": "your-value",
        "GITLAB_TOOLSETS": "your-value",
        "GITLAB_TOOLS": "your-value",
        "GITLAB_DENIED_TOOLS_REGEX": "your-value",
        "GITLAB_TOOL_POLICY_APPROVE": "your-value",
        "GITLAB_TOOL_POLICY_HIDDEN": "your-value",
        "NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
        "GITLAB_CA_CERT_PATH": "your-value",
        "GITLAB_MASKING_ENABLED": "your-value",
        "GITLAB_MASKING_CONFIG": "your-value",
        "GITLAB_MASKING_POLICY_FILE": "your-value",
        "GITLAB_MASKING_WORKSPACE_DIR": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add gitlab --env GITLAB_PERSONAL_ACCESS_TOKEN=your-value --env GITLAB_PERSONAL_ACCESS_TOKEN_FILE=your-value --env GITLAB_JOB_TOKEN=your-value --env GITLAB_AUTH_COOKIE_PATH=your-value --env GITLAB_USE_OAUTH=your-value --env GITLAB_OAUTH_CLIENT_ID=your-value --env GITLAB_OAUTH_TOKEN_SCRIPT=your-value --env GITLAB_API_URL=your-value --env GITLAB_ALLOWED_PROJECT_IDS=your-value --env GITLAB_PERMISSION_MODE=your-value --env GITLAB_TOOLSETS=your-value --env GITLAB_TOOLS=your-value --env GITLAB_DENIED_TOOLS_REGEX=your-value --env GITLAB_TOOL_POLICY_APPROVE=your-value --env GITLAB_TOOL_POLICY_HIDDEN=your-value --env NODE_TLS_REJECT_UNAUTHORIZED=your-value --env GITLAB_CA_CERT_PATH=your-value --env GITLAB_MASKING_ENABLED=your-value --env GITLAB_MASKING_CONFIG=your-value --env GITLAB_MASKING_POLICY_FILE=your-value --env GITLAB_MASKING_WORKSPACE_DIR=your-value -- npx -y @zereight/mcp-gitlab

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": [
        "-y",
        "@zereight/mcp-gitlab"
      ],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your-value",
        "GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "your-value",
        "GITLAB_JOB_TOKEN": "your-value",
        "GITLAB_AUTH_COOKIE_PATH": "your-value",
        "GITLAB_USE_OAUTH": "your-value",
        "GITLAB_OAUTH_CLIENT_ID": "your-value",
        "GITLAB_OAUTH_TOKEN_SCRIPT": "your-value",
        "GITLAB_API_URL": "your-value",
        "GITLAB_ALLOWED_PROJECT_IDS": "your-value",
        "GITLAB_PERMISSION_MODE": "your-value",
        "GITLAB_TOOLSETS": "your-value",
        "GITLAB_TOOLS": "your-value",
        "GITLAB_DENIED_TOOLS_REGEX": "your-value",
        "GITLAB_TOOL_POLICY_APPROVE": "your-value",
        "GITLAB_TOOL_POLICY_HIDDEN": "your-value",
        "NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
        "GITLAB_CA_CERT_PATH": "your-value",
        "GITLAB_MASKING_ENABLED": "your-value",
        "GITLAB_MASKING_CONFIG": "your-value",
        "GITLAB_MASKING_POLICY_FILE": "your-value",
        "GITLAB_MASKING_WORKSPACE_DIR": "your-value"
      }
    }
  }
}

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@zereight/mcp-gitlab"
      ],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your-value",
        "GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "your-value",
        "GITLAB_JOB_TOKEN": "your-value",
        "GITLAB_AUTH_COOKIE_PATH": "your-value",
        "GITLAB_USE_OAUTH": "your-value",
        "GITLAB_OAUTH_CLIENT_ID": "your-value",
        "GITLAB_OAUTH_TOKEN_SCRIPT": "your-value",
        "GITLAB_API_URL": "your-value",
        "GITLAB_ALLOWED_PROJECT_IDS": "your-value",
        "GITLAB_PERMISSION_MODE": "your-value",
        "GITLAB_TOOLSETS": "your-value",
        "GITLAB_TOOLS": "your-value",
        "GITLAB_DENIED_TOOLS_REGEX": "your-value",
        "GITLAB_TOOL_POLICY_APPROVE": "your-value",
        "GITLAB_TOOL_POLICY_HIDDEN": "your-value",
        "NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
        "GITLAB_CA_CERT_PATH": "your-value",
        "GITLAB_MASKING_ENABLED": "your-value",
        "GITLAB_MASKING_CONFIG": "your-value",
        "GITLAB_MASKING_POLICY_FILE": "your-value",
        "GITLAB_MASKING_WORKSPACE_DIR": "your-value"
      }
    }
  }
}

Values you fill in

  • GITLAB_PERSONAL_ACCESS_TOKEN secret env
    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_CO…
  • GITLAB_PERSONAL_ACCESS_TOKEN_FILE env
    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…
  • GITLAB_JOB_TOKEN secret env
    Optional GitLab CI job token to use instead of a personal access token when running inside GitLab CI.
  • GITLAB_AUTH_COOKIE_PATH env
    Optional path to a GitLab authentication cookie file for cookie-based authentication.
  • GITLAB_USE_OAUTH env
    Set to true to start with GitLab OAuth instead of a personal access token, job token, or cookie file.
  • GITLAB_OAUTH_CLIENT_ID env
    GitLab OAuth application ID. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_TOKEN_SCRIPT.
  • GITLAB_OAUTH_TOKEN_SCRIPT env
    Command that prints an OAuth access token. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_CLIENT_ID.
  • GITLAB_API_URL env
    GitLab API base URL. Use https://gitlab.com/api/v4 for GitLab.com or your self-managed GitLab API URL.
  • GITLAB_ALLOWED_PROJECT_IDS env
    Optional comma-separated list of GitLab project IDs that this server is allowed to access.
  • GITLAB_PERMISSION_MODE env
    Tool exposure. Allowed values are readonly, modify, and full. Unset uses full. readonly keeps read-only tools. modify blocks delete and teardown tools.
  • GITLAB_TOOLSETS env
    Optional comma-separated list of toolsets to enable, such as projects, issues, merge_requests, pipelines, releases, users, groups, wiki, or search.
  • GITLAB_TOOLS env
    Optional comma-separated list of individual tool names to add on top of enabled toolsets.
  • GITLAB_DENIED_TOOLS_REGEX env
    Optional regular expression used to hide matching tools from the server.
  • GITLAB_TOOL_POLICY_APPROVE env
    Optional comma-separated list of tool names that require explicit approval before execution.
  • GITLAB_TOOL_POLICY_HIDDEN env
    Optional comma-separated list of tool names to hide from tools/list.
  • NODE_TLS_REJECT_UNAUTHORIZED env
    Set to 0 only when you intentionally need to connect to a GitLab instance with invalid or self-signed TLS certificates.
  • GITLAB_CA_CERT_PATH env
    Optional path to a custom CA certificate file for self-managed GitLab instances.
  • GITLAB_MASKING_ENABLED env
    Set to true to mask text tool results and returned errors using built-in or configured rules.
  • GITLAB_MASKING_CONFIG env
    Optional path to a response-masking JSON configuration file.
  • GITLAB_MASKING_POLICY_FILE env
    Optional protected server-owned JSON file containing managed masking policies.
  • GITLAB_MASKING_WORKSPACE_DIR env
    Directory used to resolve response-masking configuration paths.

Values marked secret are keys to your account. Never share them or paste them into a chat.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 5, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account zereight, which owns the repo

  • ✓ Pass

    Still maintained

    Code last changed today

  • ✓ Pass

    Has a licence

    Uses MIT

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Needs the server’s tool list first; this check starts in the next step

Compared with others in Developer toolsi

  • More stars than 62% of the other 13 servers in this category
  • Published to the registry more recently than 92% of the other 13 servers in this category
  • Basic checks equal to or better than 100% of the other 13 servers in this category

Compared only with servers in this prototype, not the whole registry.

Common questions

Is GitLab MCP Server safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_JOB_TOKEN

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed today, and the latest version (2.3.21) reached the registry yesterday.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js, Docker on your computer.

What can I use instead?

In the same category: GitHub, Desktop Commander, Cloudflare MCP

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

GitHub

by github

GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.

Computer or cloud★ 34,245MITUpdated 2 days ago

Desktop Commander

by wonderwhy-er

MCP server for terminal commands, file operations, and process management

Runs on your computer★ 10,225MITUpdated 14 days ago

Cloudflare MCP

by cloudflare

Cloudflare MCP servers

Runs in the cloud★ 4,446Apache-2.0Updated 14 months ago

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

GitLab MCP Server

English | 한국어 | 简体中文 | Português (Brasil)

📖 [Documentation →](https://zereight.github.io/gitlab-mcp/) · llms.txt · llms-full.txt

Default: 40 tools (38 core + discover_tools + help). 288 tools exist in total (285 in toolsets + execute_graphql + discover_tools + help). Start lean; call discover_tools to activate more for this session.

Token budget: MCP clients send the whole tools/list to the model at session start. Keep the default (~40 tools, ~12k schema tokens). Call discover_tools to activate a category for this session (session-only; with OAUTH_STATELESS_MODE=true persist a named GITLAB_TOOLSETS list), or use Skill + CLI and skip MCP schemas. Do not set `GITLAB_TOOLSETS=all` — it loads ~all tools and costs ~73k schema tokens. See tools/list size and comparison.

Install the zereight-mcp-gitlab binary first with npm install -g @zereight/mcp-gitlab, or Homebrew brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp and brew install zereight/gitlab-mcp/zereight-mcp-gitlab. Official MCP Registry listing: io.github.zereight/gitlab-mcp. One-liner: npx -y @zereight/mcp-gitlab@latest.

Without → With
Without this MCPWith this MCP
Paste MR URLs and diffs into chatlist_merge_request_changed_files → batched get_merge_request_file_diff
Hunt job logs in the GitLab UIget_pipeline_job_output with pagination
Re-explain the project path every turnproject_id=group%2Fproject and merge_request_iid=123
Three install paths
PathWhenHow
Local IDECursor, Claude Code, Codex on your machinestdio + PAT or local OAuth
Shared HTTPTeam or hosted MCPStreamable HTTP URL + remote auth or MCP OAuth
Claude.aiClaude web connectorsPublic HTTPS + GITLAB_MCP_OAUTH
Install

Install the binary first (npm install -g @zereight/mcp-gitlab, or Homebrew brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp then brew install zereight/gitlab-mcp/zereight-mcp-gitlab). Read the token without echo:

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

Other clients: VS Code · GitHub Copilot · JSON clients · Cursor details

Agent paste-prompt

Copy this into an agent that can edit MCP config:

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 set GITLAB_TOOLSETS=all (loads ~all schemas, ~73k tokens). 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.

Remote HTTP

First-class option for a hosted or self-hosted server. Point the client at a Streamable HTTP URL:

{

"mcpServers": { "gitlab": { "type": "http", "url": "https://mcp.example.com/mcp" } } }

  • Hosted / Claude.ai: GITLAB_MCP_OAUTH=true on the server (see MCP OAuth)
  • Per-user PAT headers: REMOTE_AUTHORIZATION=true (see Remote Authorization)
  • Local Docker examples are in Usage
Skill + CLI (no MCP required)

Skill + CLI is an equal path, not a fallback. Same workflows, full payloads in a terminal, no MCP registration.

npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill

zereight-mcp-gitlab user whoami zereight-mcp-gitlab mr list

See CLI without MCP and skills/gitlab-mcp/.

MCP vs Human CLI
Use MCP whenUse the CLI when
The agent needs structured tools in chatYou need the full payload (diffs, logs, artifacts)
jmespath or compact results are enoughGITLAB_MCP_COMPACT_RESULTS is on and you want the rest in a terminal
You already registered the serverYou have a PAT or ran auth and do not want MCP

Human CLI is never compacted. Destructive tools and GITLAB_TOOL_POLICY_APPROVE tools need --yes.

Tips

project_id is a numeric ID or a URL-encoded path. Example: group group, project project, merge request !123 → project_id=group%2Fproject, merge_request_iid=123. Nested groups use %2F between every segment (group%2Fsubgroup%2Fproject).

FAQ

How do I authenticate? Local desktop: GITLAB_PERSONAL_ACCESS_TOKEN (or GITLAB_PERSONAL_ACCESS_TOKEN_FILE) is the simplest. Local OAuth is GITLAB_USE_OAUTH=true. Remote Claude.ai uses GITLAB_MCP_OAUTH. Multi-user HTTP uses REMOTE_AUTHORIZATION and a per-request token header.

Why do I only see ~40 tools? The default core toolset is 38 tools plus always-on discover_tools and help. That is intentional: a client sends every listed schema to the model up front. Call discover_tools with no args to list categories, then pass a category (pipelines, wiki, …) to activate it for this session. Session-only; with OAUTH_STATELESS_MODE=true persist a named GITLAB_TOOLSETS list. Do not set `GITLAB_TOOLSETS=all` — it loads ~all schemas (~73k tokens) and still does not enable api.

Local OAuth vs MCP OAuth vs remote auth? Local OAuth opens a browser on the same machine as the server. MCP OAuth is for a public HTTPS server and clients such as Claude.ai. Remote authorization forwards the caller's PAT or job token; there is no OAuth dance.

How do I shrink huge replies? Pass jmespath on any tool call. Or set GITLAB_MCP_COMPACT_RESULTS=true so oversized MCP replies become a preview plus a CLI command. Use the CLI when you need the full payload.

Why is the `api` toolset dangerous? gitlab_api_request bypasses group/project allowlists, other tool filters, and per-tool safety checks. Prompt injection can drive it. Enable it only by listing api in GITLAB_TOOLSETS. all, discover_tools, and GITLAB_TOOLS do not.

Cursor rule / CLAUDE.md snippet
GitLab merge requests, issues, and pipelines go through this MCP (@zereight/mcp-gitlab).

Start with the default core tools. Call discover_tools to expand. Do not set GITLAB_TOOLSETS=all. 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-workflow-optimized GitLab MCP — manage projects, merge requests, issues, pipelines, wiki, releases, tags, milestones, and more through stdio, SSE, and Streamable HTTP.

Supports PAT, OAuth, read-only mode, dynamic API URLs, and remote authorization for VS Code, Claude, Cursor, Copilot, and other MCP clients.

Why use this GitLab MCP?
  • Default 40 tools (38 `core` + `discover_tools` + `help`); 288 total — start lean; call discover_tools to activate more without CQRS-style grouping. GITLAB_TOOLSETS=all loads ~all schemas (~73k tokens); prefer discover-on-demand or Skill + CLI
  • MR 2-step review — list_merge_request_changed_files → batched get_merge_request_file_diff
  • Agent Skill built in — workflow guidance in skills/gitlab-mcp/
  • Flexible auth — Personal Access Token, local OAuth2 browser flow, MCP OAuth proxy, and per-request remote authorization
  • Multiple transports — stdio for local clients, SSE for legacy clients, and Streamable HTTP for modern remote deployments
  • Client-friendly setup — examples for Claude Code, Codex, Antigravity, OpenCode, Copilot, Cline, Roo Code, Cursor, Kilo Code, and Amp Code
  • Self-hosted ready — works with custom GitLab instances, proxy settings, and dynamic API URL routing
  • JMESPath result filtering — optional jmespath on tool calls (see tools/list) shrinks JSON results without changing GitLab API requests; when response masking is enabled, JMESPath runs on masked data.
How we compare
@zereight/mcp-gitlabGitLab MCP A (community CQRS-style)GitLab official MCP server
Best forAI agent workflowsEnterprise multi-instance / grouped toolsBuilt into GitLab, no separate install
Tool model288 tools: 285 in toolsets + execute_graphql + discover_tools + help~50–60 grouped browse_* / manage_* tools

Only the beginning is shown; read the rest in the repo

Ask PopNx