GitLab MCP Server

Registre officiel Outils de développement

Go MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

Remote (streamable-http)
Claude Code
claude mcp add --transport http gitlab-mcp-server 'https://mcp.jmrp.io/gitlab' --header 'Authorization: <Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as '\''Bearer glpat-...'\'', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>'
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "type": "http",
            "url": "https://mcp.jmrp.io/gitlab",
            "headers": {
                "Authorization": "<Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as 'Bearer glpat-...', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>"
            }
        }
    }
}
MCPB package https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-darwin.mcpb

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
MCPB package https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-windows.mcpb

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
MCPB package https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-linux.mcpb

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
OCI package ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
Claude Code
claude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- docker run -i --rm ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c"
            ],
            "env": {
                "GITLAB_URL": "https://gitlab.com",
                "GITLAB_TOKEN": "<your gitlab_token>",
                "GITLAB_MCP_SKIP_TLS_VERIFY": "false",
                "GITLAB_MCP_TOOL_SURFACE": "dynamic",
                "GITLAB_MCP_CAPABILITY_SURFACE": "full",
                "GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
                "GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
                "GITLAB_MCP_READ_ONLY": "false",
                "GITLAB_MCP_SAFE_MODE": "false",
                "GITLAB_MCP_EMBEDDED_RESOURCES": "true",
                "GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
                "GITLAB_MCP_IGNORE_SCOPES": "false",
                "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
                "GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
                "GITLAB_MCP_RATE_LIMIT_RPS": "0",
                "GITLAB_MCP_RATE_LIMIT_BURST": "40",
                "GITLAB_MCP_LOG_LEVEL": "info"
            }
        }
    }
}

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_CAPABILITY_SURFACE Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full
  • GITLAB_MCP_META_PARAM_SCHEMA Meta-tool input schema detail: opaque, compact, or full (default: opaque)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_EMBEDDED_RESOURCES Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)
  • GITLAB_MCP_EXCLUDE_TOOLS Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)
  • GITLAB_MCP_IGNORE_SCOPES Skip the scope filter and the read_api narrowing and register all tools regardless of token permissions; a token carrying neither read_api nor api is still refused (default: false)
  • GITLAB_MCP_UPLOAD_MAX_FILE_SIZE Largest local file an upload or file-reading action accepts, in bytes or with a KB, MB or GB suffix (e.g. 2GB); at most 1 TB (default: 2147483648, 2 GB)
  • GITLAB_MCP_ALLOWED_UPLOAD_DIRS Extra OS path-list-separated directories an action may read a local file from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS Extra OS path-list-separated directories an action may write a downloaded file into; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_IMPORT_DIRS Extra OS path-list-separated directories a project or group import archive may be read from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_RATE_LIMIT_RPS Rate limit per credential, in requests per second, on every call that reaches GitLab, with tools/list charged to a bucket of its own; 0, the default on stdio, disables it (default: 0)
  • GITLAB_MCP_RATE_LIMIT_BURST Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
OCI package docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
Claude Code
claude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- docker run -i --rm docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c"
            ],
            "env": {
                "GITLAB_URL": "https://gitlab.com",
                "GITLAB_TOKEN": "<your gitlab_token>",
                "GITLAB_MCP_SKIP_TLS_VERIFY": "false",
                "GITLAB_MCP_TOOL_SURFACE": "dynamic",
                "GITLAB_MCP_CAPABILITY_SURFACE": "full",
                "GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
                "GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
                "GITLAB_MCP_READ_ONLY": "false",
                "GITLAB_MCP_SAFE_MODE": "false",
                "GITLAB_MCP_EMBEDDED_RESOURCES": "true",
                "GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
                "GITLAB_MCP_IGNORE_SCOPES": "false",
                "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
                "GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
                "GITLAB_MCP_RATE_LIMIT_RPS": "0",
                "GITLAB_MCP_RATE_LIMIT_BURST": "40",
                "GITLAB_MCP_LOG_LEVEL": "info"
            }
        }
    }
}

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_CAPABILITY_SURFACE Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full
  • GITLAB_MCP_META_PARAM_SCHEMA Meta-tool input schema detail: opaque, compact, or full (default: opaque)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_EMBEDDED_RESOURCES Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)
  • GITLAB_MCP_EXCLUDE_TOOLS Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)
  • GITLAB_MCP_IGNORE_SCOPES Skip the scope filter and the read_api narrowing and register all tools regardless of token permissions; a token carrying neither read_api nor api is still refused (default: false)
  • GITLAB_MCP_UPLOAD_MAX_FILE_SIZE Largest local file an upload or file-reading action accepts, in bytes or with a KB, MB or GB suffix (e.g. 2GB); at most 1 TB (default: 2147483648, 2 GB)
  • GITLAB_MCP_ALLOWED_UPLOAD_DIRS Extra OS path-list-separated directories an action may read a local file from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS Extra OS path-list-separated directories an action may write a downloaded file into; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_IMPORT_DIRS Extra OS path-list-separated directories a project or group import archive may be read from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_RATE_LIMIT_RPS Rate limit per credential, in requests per second, on every call that reaches GitLab, with tools/list charged to a bucket of its own; 0, the default on stdio, disables it (default: 0)
  • GITLAB_MCP_RATE_LIMIT_BURST Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
NPM package @jmrp.io/gitlab-mcp-server
Claude Code
claude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- npx -y @jmrp.io/gitlab-mcp-server@3.3.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "command": "npx",
            "args": [
                "-y",
                "@jmrp.io/gitlab-mcp-server@3.3.0"
            ],
            "env": {
                "GITLAB_URL": "https://gitlab.com",
                "GITLAB_TOKEN": "<your gitlab_token>",
                "GITLAB_MCP_SKIP_TLS_VERIFY": "false",
                "GITLAB_MCP_TOOL_SURFACE": "dynamic",
                "GITLAB_MCP_CAPABILITY_SURFACE": "full",
                "GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
                "GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
                "GITLAB_MCP_READ_ONLY": "false",
                "GITLAB_MCP_SAFE_MODE": "false",
                "GITLAB_MCP_EMBEDDED_RESOURCES": "true",
                "GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
                "GITLAB_MCP_IGNORE_SCOPES": "false",
                "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
                "GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
                "GITLAB_MCP_RATE_LIMIT_RPS": "0",
                "GITLAB_MCP_RATE_LIMIT_BURST": "40",
                "GITLAB_MCP_LOG_LEVEL": "info"
            }
        }
    }
}

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_CAPABILITY_SURFACE Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full
  • GITLAB_MCP_META_PARAM_SCHEMA Meta-tool input schema detail: opaque, compact, or full (default: opaque)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_EMBEDDED_RESOURCES Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)
  • GITLAB_MCP_EXCLUDE_TOOLS Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)
  • GITLAB_MCP_IGNORE_SCOPES Skip the scope filter and the read_api narrowing and register all tools regardless of token permissions; a token carrying neither read_api nor api is still refused (default: false)
  • GITLAB_MCP_UPLOAD_MAX_FILE_SIZE Largest local file an upload or file-reading action accepts, in bytes or with a KB, MB or GB suffix (e.g. 2GB); at most 1 TB (default: 2147483648, 2 GB)
  • GITLAB_MCP_ALLOWED_UPLOAD_DIRS Extra OS path-list-separated directories an action may read a local file from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS Extra OS path-list-separated directories an action may write a downloaded file into; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_IMPORT_DIRS Extra OS path-list-separated directories a project or group import archive may be read from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_RATE_LIMIT_RPS Rate limit per credential, in requests per second, on every call that reaches GitLab, with tools/list charged to a bucket of its own; 0, the default on stdio, disables it (default: 0)
  • GITLAB_MCP_RATE_LIMIT_BURST Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
PYPI package jmrplens-gitlab-mcp-server
Claude Code
claude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- uvx jmrplens-gitlab-mcp-server==3.3.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "command": "uvx",
            "args": [
                "jmrplens-gitlab-mcp-server==3.3.0"
            ],
            "env": {
                "GITLAB_URL": "https://gitlab.com",
                "GITLAB_TOKEN": "<your gitlab_token>",
                "GITLAB_MCP_SKIP_TLS_VERIFY": "false",
                "GITLAB_MCP_TOOL_SURFACE": "dynamic",
                "GITLAB_MCP_CAPABILITY_SURFACE": "full",
                "GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
                "GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
                "GITLAB_MCP_READ_ONLY": "false",
                "GITLAB_MCP_SAFE_MODE": "false",
                "GITLAB_MCP_EMBEDDED_RESOURCES": "true",
                "GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
                "GITLAB_MCP_IGNORE_SCOPES": "false",
                "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
                "GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
                "GITLAB_MCP_RATE_LIMIT_RPS": "0",
                "GITLAB_MCP_RATE_LIMIT_BURST": "40",
                "GITLAB_MCP_LOG_LEVEL": "info"
            }
        }
    }
}

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_CAPABILITY_SURFACE Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full
  • GITLAB_MCP_META_PARAM_SCHEMA Meta-tool input schema detail: opaque, compact, or full (default: opaque)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_EMBEDDED_RESOURCES Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)
  • GITLAB_MCP_EXCLUDE_TOOLS Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)
  • GITLAB_MCP_IGNORE_SCOPES Skip the scope filter and the read_api narrowing and register all tools regardless of token permissions; a token carrying neither read_api nor api is still refused (default: false)
  • GITLAB_MCP_UPLOAD_MAX_FILE_SIZE Largest local file an upload or file-reading action accepts, in bytes or with a KB, MB or GB suffix (e.g. 2GB); at most 1 TB (default: 2147483648, 2 GB)
  • GITLAB_MCP_ALLOWED_UPLOAD_DIRS Extra OS path-list-separated directories an action may read a local file from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS Extra OS path-list-separated directories an action may write a downloaded file into; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_IMPORT_DIRS Extra OS path-list-separated directories a project or group import archive may be read from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_RATE_LIMIT_RPS Rate limit per credential, in requests per second, on every call that reaches GitLab, with tools/list charged to a bucket of its own; 0, the default on stdio, disables it (default: 0)
  • GITLAB_MCP_RATE_LIMIT_BURST Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)
NUGET package gitlab-mcp-server
Claude Code
claude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- dnx gitlab-mcp-server@3.3.0 --yes
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "gitlab-mcp-server": {
            "command": "dnx",
            "args": [
                "gitlab-mcp-server@3.3.0",
                "--yes"
            ],
            "env": {
                "GITLAB_URL": "https://gitlab.com",
                "GITLAB_TOKEN": "<your gitlab_token>",
                "GITLAB_MCP_SKIP_TLS_VERIFY": "false",
                "GITLAB_MCP_TOOL_SURFACE": "dynamic",
                "GITLAB_MCP_CAPABILITY_SURFACE": "full",
                "GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
                "GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
                "GITLAB_MCP_READ_ONLY": "false",
                "GITLAB_MCP_SAFE_MODE": "false",
                "GITLAB_MCP_EMBEDDED_RESOURCES": "true",
                "GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
                "GITLAB_MCP_IGNORE_SCOPES": "false",
                "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
                "GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
                "GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
                "GITLAB_MCP_RATE_LIMIT_RPS": "0",
                "GITLAB_MCP_RATE_LIMIT_BURST": "40",
                "GITLAB_MCP_LOG_LEVEL": "info"
            }
        }
    }
}

Variables d'environnement

  • GITLAB_URL GitLab instance URL (default: https://gitlab.com; set for self-managed instances)
  • GITLAB_TOKEN obligatoire secret GitLab Personal Access Token (glpat-...)
  • GITLAB_MCP_SKIP_TLS_VERIFY Skip TLS certificate verification for self-signed certs (default: false)
  • GITLAB_MCP_TOOL_SURFACE Tool catalog selector: dynamic, meta, or individual (default: dynamic)
  • GITLAB_MCP_CAPABILITY_SURFACE Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full
  • GITLAB_MCP_META_PARAM_SCHEMA Meta-tool input schema detail: opaque, compact, or full (default: opaque)
  • GITLAB_MCP_TIER GitLab tier: free/ce, premium or ultimate, used as given. When unset, detected from the instance license, then from the plans of the namespaces the token administers, then, on GitLab.com, from the top-level groups the token is a member of, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools
  • GITLAB_MCP_READ_ONLY Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)
  • GITLAB_MCP_SAFE_MODE Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)
  • GITLAB_MCP_EMBEDDED_RESOURCES Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)
  • GITLAB_MCP_EXCLUDE_TOOLS Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)
  • GITLAB_MCP_IGNORE_SCOPES Skip the scope filter and the read_api narrowing and register all tools regardless of token permissions; a token carrying neither read_api nor api is still refused (default: false)
  • GITLAB_MCP_UPLOAD_MAX_FILE_SIZE Largest local file an upload or file-reading action accepts, in bytes or with a KB, MB or GB suffix (e.g. 2GB); at most 1 TB (default: 2147483648, 2 GB)
  • GITLAB_MCP_ALLOWED_UPLOAD_DIRS Extra OS path-list-separated directories an action may read a local file from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS Extra OS path-list-separated directories an action may write a downloaded file into; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_ALLOWED_IMPORT_DIRS Extra OS path-list-separated directories a project or group import archive may be read from; the working directory (unless it is the filesystem root or your home directory) and the OS temp directory are always allowed. Unused in HTTP mode, which refuses local paths
  • GITLAB_MCP_RATE_LIMIT_RPS Rate limit per credential, in requests per second, on every call that reaches GitLab, with tools/list charged to a bucket of its own; 0, the default on stdio, disables it (default: 0)
  • GITLAB_MCP_RATE_LIMIT_BURST Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)
  • GITLAB_MCP_LOG_LEVEL Logging verbosity (default: info)

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. GitLab MCP Server
  2. Why this server
  3. Install
  4. Documentation
  5. Contributing, security and licence

GitLab MCP Server

All of GitLab for your AI assistant. Up to 1,103 actions over GitLab's REST and GraphQL APIs, from Free to Ultimate and on GitLab.com, in one self-contained binary that works with Claude, Cursor, VS Code, Codex and any other MCP client. You ask in plain language; it does the GitLab work.

11,343 tokens of startup context by default, the same on every GitLab tier (1,941 with GITLAB_MCP_CAPABILITY_SURFACE=minimal). Two tools reach the whole catalog, where listing every tool as its own costs from 576,788 to 734,051 tokens. Measured with the cl100k_base tokenizer and checked in CI. How it is measured

"Review merge request !15: is it safe to merge?" · "Why did the last pipeline fail?" · "List open issues assigned to me" · "Generate release notes from v1.0 to v2.0"

Why this server

  • Every tier and every instance. Free/CE, Premium and Ultimate, self-managed or GitLab.com with its Orbit knowledge graph. The tier is detected and the catalog follows it.
  • The token you already have. A personal, project or group access token with api, or read_api for the actions GitLab accepts from it; a fine-grained token, judged action by action from its grant; OAuth in HTTP mode. Each action's tool reference entry says which scope and which fine-grained permissions it needs.
  • Guard rails. Read-only mode, safe mode (a preview of each write instead of the write), tools excluded by name, and a confirmation before anything destructive.
  • Three surfaces, two transports. Two discovery tools by default, one tool per domain or one per action; stdio for a desktop client, or HTTP for a shared deployment that keeps each credential apart. 45 resources and 37 prompts besides.
  • Releases you can verify. Signed checksums, an SBOM per binary and build provenance for every artifact.

Install

The buttons register the Docker image, so they need Docker; the Claude Desktop row downloads a native extension instead. Create a personal access token with the api scope (or read_api for the actions GitLab accepts from it; add GITLAB_MCP_READ_ONLY=true when nothing may be written).

Client One-click button Token step

VS Code

prompts you (masked)

Cursor

edit YOUR_GITLAB_TOKEN

LM Studio

edit YOUR_GITLAB_TOKEN

Kiro

edit YOUR_GITLAB_TOKEN

Claude Desktop

settings UI

Claude Code. The registration command never carries the token: -e GITLAB_TOKEN forwards it from the environment Claude Code hands docker.

export GITLAB_TOKEN=glpat-xxxx
claude mcp add gitlab --transport stdio \
  -- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest

Any other client runs one of these as the server's command, with GITLAB_TOKEN in the environment it passes:

npx -y @jmrp.io/gitlab-mcp-server                   # npm, nothing installed first
uvx jmrplens-gitlab-mcp-server                      # PyPI, nothing installed first
dnx gitlab-mcp-server                               # NuGet (.NET 10 SDK), nothing installed first
brew install jmrplens/tap/gitlab-mcp-server         # Homebrew, macOS and Linux
winget install --id jmrplens.gitlab-mcp-server -e   # winget, Windows
docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest

For a self-managed instance, set GITLAB_URL=https://gitlab.example.com beside the token; with the Docker image, also forward it by adding -e GITLAB_URL to the docker arguments, since the container receives only the variables named there (Docker install). Every channel, per-client configuration and verification step is in the installation guide, and an assistant installing it for you will find the same in llms.txt.

To try it first, a public instance runs at https://mcp.jmrp.io/gitlab, and the browser inspector calls it read-only after an OAuth sign-in. Your token and every request pass through that machine, so run it yourself to keep using it; the hosted endpoint page says what it is and is not.

Documentation

Everything else is at docs.jmrp.io/gitlab-mcp-server, in English and Spanish: getting started, configuration, tool surfaces, HTTP server mode, security, privacy and troubleshooting.

Contributing, security and licence

Contributions are welcome here on GitHub; CONTRIBUTING.md describes the workflow, and CODE_OF_CONDUCT.md applies. Report a vulnerability privately, as SECURITY.md describes. The server is MIT licensed (LICENSE).


Maintained by José M. Requena Plens · Project page · Hosted instance: mcp.jmrp.io/gitlab

Questions fréquentes

Qu'est-ce que GitLab MCP Server ?

Go MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.

Comment installer GitLab MCP Server ?

Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http gitlab-mcp-server 'https://mcp.jmrp.io/gitlab' --header 'Authorization: <Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as '\''Bearer glpat-...'\'', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour GitLab MCP Server ?

Oui. Il attend GITLAB_TOKEN, Authorization, à renseigner dans sa configuration.

GitLab MCP Server est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient GitLab MCP Server ?

Il est publié par jmrplens. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.