protogrid

Search / io.github.jmrplens/gitlab-mcp-server

GitLab MCP Server

R2· OAuth, once

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

v3.2.0 · active · repository · website · descriptor JSON · versions

An agent can connect after a one-time OAuth consent by a human.Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.
Quality92strong
Trust96of 100
Uptime, 30 days97%
Latency p50646 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "gitlab-mcp-server": {
      "type": "http",
      "url": "https://mcp.jmrp.io/gitlab",
      "headers": {
        "Authorization": "Bearer ${GITLAB_MCP_SERVER_TOKEN}"
      }
    }
  }
}
claude mcp add --transport http gitlab-mcp-server https://mcp.jmrp.io/gitlab --header "Authorization: Bearer ${GITLAB_MCP_SERVER_TOKEN}"
[mcp_servers.gitlab-mcp-server]
url = "https://mcp.jmrp.io/gitlab"
bearer_token_env_var = "GITLAB_MCP_SERVER_TOKEN"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gitlab-mcp-server": {
      "type": "remote",
      "url": "https://mcp.jmrp.io/gitlab",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:GITLAB_MCP_SERVER_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "gitlab-mcp-server": {
      "type": "http",
      "url": "https://mcp.jmrp.io/gitlab",
      "headers": {
        "Authorization": "Bearer ${GITLAB_MCP_SERVER_TOKEN}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=gitlab-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmptcnAuaW8vZ2l0bGFiIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyICR7R0lUTEFCX01DUF9TRVJWRVJfVE9LRU59In19"
}
{
  "servers": {
    "gitlab-mcp-server": {
      "type": "http",
      "url": "https://mcp.jmrp.io/gitlab",
      "headers": {
        "Authorization": "Bearer ${GITLAB_MCP_SERVER_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "gitlab-mcp-server": {
      "httpUrl": "https://mcp.jmrp.io/gitlab",
      "headers": {
        "Authorization": "Bearer ${GITLAB_MCP_SERVER_TOKEN}"
      }
    }
  }
}
extensions:
  "gitlab-mcp-server":
    enabled: true
    name: "gitlab-mcp-server"
    type: streamable_http
    uri: "https://mcp.jmrp.io/gitlab"
    headers:
      "Authorization": "Bearer ${GITLAB_MCP_SERVER_TOKEN}"
    timeout: 300

Placeholders to fill from your own secret store: ${GITLAB_MCP_SERVER_TOKEN}. The registry never accepts secret values.

Quality 92 / 100strong

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorization83 · weight 15
  • pass
    auth.prmProtected Resource Metadata (RFC 9728) published
  • pass
    auth.as_metadataauthorization server metadata reachable
  • warn
    auth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
  • n/a
    auth.secret_in_urlno templated URL
tool hygienen/a · weight 30
  • n/a
    tools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool list unknown
dependencies100 · weight 15
  • pass
    deps.known_vulnsno known advisory in 7 resolved packages
  • n/a
    deps.mcp_sdk_versionthe official MCP SDK is not in the dependency graph
  • pass
    deps.resolvable@jmrp.io/[email protected] resolved: 7 packages

Tool list unknown · checked 2026-10-20 06:17 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 96 / 100

provenance90
liveness99
freshness100
hygiene95

+repository +namespace-matches-repo +website +reachable +uptime-97% +updated-10d-ago -unpinned-packages(2)

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@jmrp.io/[email protected] npm6 dependencies, resolved · advisories checked 2026-10-19

No known advisory affects this dependency graph.

[email protected] PyPIthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.jmrp.io/gitlab streamable-httpoauth2 AS: https://gitlab.comyes97%646 ms–2026-10-20
packageregistryversionruntimesecrets
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-darwin.mcpbmcpb3.2.0–GITLAB_TOKEN
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-windows.mcpbmcpb3.2.0–GITLAB_TOKEN
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-linux.mcpbmcpb3.2.0–GITLAB_TOKEN
ghcr.io/jmrplens/gitlab-mcp-server:3.2.0@sha256:054f99756efb1182aff73effb2a8861ddde8c90146d2e2b3efafd459647d69f8ociunpinned–GITLAB_TOKEN
docker.io/jmrplens/gitlab-mcp-server:3.2.0@sha256:054f99756efb1182aff73effb2a8861ddde8c90146d2e2b3efafd459647d69f8ociunpinned–GITLAB_TOKEN
@jmrp.io/gitlab-mcp-servernpm3.2.0npxGITLAB_TOKEN
jmrplens-gitlab-mcp-serverpypi3.2.0uvxGITLAB_TOKEN
gitlab-mcp-servernuget3.2.0dnxGITLAB_TOKEN

Tools (0)

No tools observed. Tools appear once a credential-free probe can list them.

Schemas: list_tools.

Similar MCP servers

More from io.github.jmrplens

Official server.json
{
  "name": "io.github.jmrplens/gitlab-mcp-server",
  "icons": [
    {
      "src": "https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/site/public/favicon.svg",
      "sizes": [
        "any"
      ],
      "mimeType": "image/svg+xml"
    },
    {
      "src": "https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/site/public/logo-400.png",
      "sizes": [
        "400x400"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "GitLab MCP Server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.jmrp.io/gitlab",
      "type": "streamable-http",
      "headers": [
        {
          "name": "Authorization",
          "isSecret": true,
          "description": "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.",
          "placeholder": "Bearer glpat-xxxxxxxxxxxxxxxxxxxx"
        }
      ]
    }
  ],
  "version": "3.2.0",
  "packages": [
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "e878d36137861bced210310a4f706969895b3229123ac6d5af1219a2957eb22c",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-darwin.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "3946f927f703d84fd01e18dbe8e160b75084835129a453a313c515765f316575",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-windows.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "4740db9d1a9a81b668e0f7c6ee5ae0e47bca604f51fce05f65a051ea0dfcbded",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.2.0/gitlab-mcp-server-linux.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "transport": {
        "type": "stdio"
      },
      "identifier": "ghcr.io/jmrplens/gitlab-mcp-server:3.2.0@sha256:054f99756efb1182aff73effb2a8861ddde8c90146d2e2b3efafd459647d69f8",
      "registryType": "oci",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_CAPABILITY_SURFACE",
          "choices": [
            "full",
            "minimal"
          ],
          "default": "full",
          "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
        },
        {
          "name": "GITLAB_MCP_META_PARAM_SCHEMA",
          "choices": [
            "opaque",
            "compact",
            "full"
          ],
          "default": "opaque",
          "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
          "format": "boolean",
          "default": "true",
          "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
        },
        {
          "name": "GITLAB_MCP_EXCLUDE_TOOLS",
          "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)",
          "placeholder": "gitlab_admin,gitlab_runner"
        },
        {
          "name": "GITLAB_MCP_IGNORE_SCOPES",
          "format": "boolean",
          "default": "false",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE",
          "default": "2147483648",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_UPLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/files:/another/path/to/files"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/downloads:/another/path/to/downloads"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
          "description": "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",
          "placeholder": "/path/to/exports:/another/path/to/exports"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_RPS",
          "format": "number",
          "default": "0",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_BURST",
          "format": "number",
          "default": "40",
          "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "transport": {
        "type": "stdio"
      },
      "identifier": "docker.io/jmrplens/gitlab-mcp-server:3.2.0@sha256:054f99756efb1182aff73effb2a8861ddde8c90146d2e2b3efafd459647d69f8",
      "registryType": "oci",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_CAPABILITY_SURFACE",
          "choices": [
            "full",
            "minimal"
          ],
          "default": "full",
          "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
        },
        {
          "name": "GITLAB_MCP_META_PARAM_SCHEMA",
          "choices": [
            "opaque",
            "compact",
            "full"
          ],
          "default": "opaque",
          "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
          "format": "boolean",
          "default": "true",
          "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
        },
        {
          "name": "GITLAB_MCP_EXCLUDE_TOOLS",
          "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)",
          "placeholder": "gitlab_admin,gitlab_runner"
        },
        {
          "name": "GITLAB_MCP_IGNORE_SCOPES",
          "format": "boolean",
          "default": "false",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE",
          "default": "2147483648",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_UPLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/files:/another/path/to/files"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/downloads:/another/path/to/downloads"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
          "description": "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",
          "placeholder": "/path/to/exports:/another/path/to/exports"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_RPS",
          "format": "number",
          "default": "0",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_BURST",
          "format": "number",
          "default": "40",
          "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@jmrp.io/gitlab-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_CAPABILITY_SURFACE",
          "choices": [
            "full",
            "minimal"
          ],
          "default": "full",
          "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
        },
        {
          "name": "GITLAB_MCP_META_PARAM_SCHEMA",
          "choices": [
            "opaque",
            "compact",
            "full"
          ],
          "default": "opaque",
          "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
          "format": "boolean",
          "default": "true",
          "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
        },
        {
          "name": "GITLAB_MCP_EXCLUDE_TOOLS",
          "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)",
          "placeholder": "gitlab_admin,gitlab_runner"
        },
        {
          "name": "GITLAB_MCP_IGNORE_SCOPES",
          "format": "boolean",
          "default": "false",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE",
          "default": "2147483648",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_UPLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/files:/another/path/to/files"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/downloads:/another/path/to/downloads"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
          "description": "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",
          "placeholder": "/path/to/exports:/another/path/to/exports"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_RPS",
          "format": "number",
          "default": "0",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_BURST",
          "format": "number",
          "default": "40",
          "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "jmrplens-gitlab-mcp-server",
      "runtimeHint": "uvx",
      "registryType": "pypi",
      "registryBaseUrl": "https://pypi.org",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_CAPABILITY_SURFACE",
          "choices": [
            "full",
            "minimal"
          ],
          "default": "full",
          "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
        },
        {
          "name": "GITLAB_MCP_META_PARAM_SCHEMA",
          "choices": [
            "opaque",
            "compact",
            "full"
          ],
          "default": "opaque",
          "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
          "format": "boolean",
          "default": "true",
          "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
        },
        {
          "name": "GITLAB_MCP_EXCLUDE_TOOLS",
          "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)",
          "placeholder": "gitlab_admin,gitlab_runner"
        },
        {
          "name": "GITLAB_MCP_IGNORE_SCOPES",
          "format": "boolean",
          "default": "false",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE",
          "default": "2147483648",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_UPLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/files:/another/path/to/files"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/downloads:/another/path/to/downloads"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
          "description": "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",
          "placeholder": "/path/to/exports:/another/path/to/exports"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_RPS",
          "format": "number",
          "default": "0",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_BURST",
          "format": "number",
          "default": "40",
          "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    },
    {
      "version": "3.2.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "gitlab-mcp-server",
      "runtimeHint": "dnx",
      "registryType": "nuget",
      "registryBaseUrl": "https://api.nuget.org/v3/index.json",
      "environmentVariables": [
        {
          "name": "GITLAB_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)",
          "placeholder": "https://gitlab.com"
        },
        {
          "name": "GITLAB_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "GitLab Personal Access Token (glpat-...)",
          "placeholder": "glpat-xxxxxxxxxxxxxxxxxxxx"
        },
        {
          "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
          "format": "boolean",
          "default": "false",
          "description": "Skip TLS certificate verification for self-signed certs (default: false)"
        },
        {
          "name": "GITLAB_MCP_TOOL_SURFACE",
          "choices": [
            "meta",
            "individual",
            "dynamic"
          ],
          "default": "dynamic",
          "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
        },
        {
          "name": "GITLAB_MCP_CAPABILITY_SURFACE",
          "choices": [
            "full",
            "minimal"
          ],
          "default": "full",
          "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
        },
        {
          "name": "GITLAB_MCP_META_PARAM_SCHEMA",
          "choices": [
            "opaque",
            "compact",
            "full"
          ],
          "default": "opaque",
          "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
        },
        {
          "name": "GITLAB_MCP_TIER",
          "choices": [
            "free",
            "ce",
            "premium",
            "ultimate"
          ],
          "description": "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, falling back to free. Gates Premium and Ultimate actions; GitLab.com Ultimate also serves the Orbit Knowledge Graph tools"
        },
        {
          "name": "GITLAB_MCP_READ_ONLY",
          "format": "boolean",
          "default": "false",
          "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_SAFE_MODE",
          "format": "boolean",
          "default": "false",
          "description": "Safe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)"
        },
        {
          "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
          "format": "boolean",
          "default": "true",
          "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
        },
        {
          "name": "GITLAB_MCP_EXCLUDE_TOOLS",
          "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)",
          "placeholder": "gitlab_admin,gitlab_runner"
        },
        {
          "name": "GITLAB_MCP_IGNORE_SCOPES",
          "format": "boolean",
          "default": "false",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_UPLOAD_MAX_FILE_SIZE",
          "default": "2147483648",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_UPLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/files:/another/path/to/files"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
          "description": "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",
          "placeholder": "/path/to/downloads:/another/path/to/downloads"
        },
        {
          "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
          "description": "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",
          "placeholder": "/path/to/exports:/another/path/to/exports"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_RPS",
          "format": "number",
          "default": "0",
          "description": "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)"
        },
        {
          "name": "GITLAB_MCP_RATE_LIMIT_BURST",
          "format": "number",
          "default": "40",
          "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
        },
        {
          "name": "GITLAB_MCP_LOG_LEVEL",
          "choices": [
            "debug",
            "info",
            "warn",
            "error"
          ],
          "default": "info",
          "description": "Logging verbosity (default: info)"
        }
      ]
    }
  ],
  "repository": {
    "id": "1208139072",
    "url": "https://github.com/jmrplens/gitlab-mcp-server",
    "source": "github"
  },
  "websiteUrl": "https://jmrp.io/docs/gitlab-mcp-server",
  "description": "Go MCP server for GitLab: 2 dynamic tools reach ~872 actions on Free/CE, up to ~1098 on Ultimate."
}