{
  "slug": "io-github-jmrplens-gitlab-mcp-server",
  "name": "io.github.jmrplens/gitlab-mcp-server",
  "title": "GitLab MCP Server",
  "description": "Go MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.",
  "version": "3.3.0",
  "publishedAt": "2026-10-20T06:59:57.285403Z",
  "updatedAt": "2026-10-20T06:59:57.285403Z",
  "repoUrl": "https://github.com/jmrplens/gitlab-mcp-server",
  "websiteUrl": "https://docs.jmrp.io/gitlab-mcp-server",
  "namespace": {
    "type": "github",
    "owner": "jmrplens"
  },
  "kind": "both",
  "packages": [
    {
      "registryType": "mcpb",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-darwin.mcpb",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "mcpb",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-windows.mcpb",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "mcpb",
      "identifier": "https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-linux.mcpb",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "oci",
      "identifier": "ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c",
      "version": null,
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "oci",
      "identifier": "docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c",
      "version": null,
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "npm",
      "identifier": "@jmrp.io/gitlab-mcp-server",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": "npx"
    },
    {
      "registryType": "pypi",
      "identifier": "jmrplens-gitlab-mcp-server",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": "uvx"
    },
    {
      "registryType": "nuget",
      "identifier": "gitlab-mcp-server",
      "version": "3.3.0",
      "transport": "stdio",
      "runtimeHint": "dnx"
    }
  ],
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://mcp.jmrp.io/gitlab"
    }
  ],
  "envVars": [
    {
      "name": "GITLAB_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "GitLab instance URL (default: https://gitlab.com; set for self-managed instances)"
    },
    {
      "name": "GITLAB_TOKEN",
      "isSecret": true,
      "isRequired": true,
      "description": "GitLab Personal Access Token (glpat-...)"
    },
    {
      "name": "GITLAB_MCP_SKIP_TLS_VERIFY",
      "isSecret": false,
      "isRequired": false,
      "description": "Skip TLS certificate verification for self-signed certs (default: false)"
    },
    {
      "name": "GITLAB_MCP_TOOL_SURFACE",
      "isSecret": false,
      "isRequired": false,
      "description": "Tool catalog selector: dynamic, meta, or individual (default: dynamic)"
    },
    {
      "name": "GITLAB_MCP_TIER",
      "isSecret": false,
      "isRequired": false,
      "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, 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"
    },
    {
      "name": "GITLAB_MCP_READ_ONLY",
      "isSecret": false,
      "isRequired": false,
      "description": "Read-only mode: removes every mutating action from the served surface; reads keep working (default: false)"
    },
    {
      "name": "GITLAB_MCP_SAFE_MODE",
      "isSecret": false,
      "isRequired": 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",
      "isSecret": false,
      "isRequired": false,
      "description": "Logging verbosity (default: info)"
    },
    {
      "name": "GITLAB_MCP_CAPABILITY_SURFACE",
      "isSecret": false,
      "isRequired": false,
      "description": "Resource and prompt catalog selector: full or minimal (default: full); resource subscriptions require full"
    },
    {
      "name": "GITLAB_MCP_META_PARAM_SCHEMA",
      "isSecret": false,
      "isRequired": false,
      "description": "Meta-tool input schema detail: opaque, compact, or full (default: opaque)"
    },
    {
      "name": "GITLAB_MCP_EMBEDDED_RESOURCES",
      "isSecret": false,
      "isRequired": false,
      "description": "Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)"
    },
    {
      "name": "GITLAB_MCP_EXCLUDE_TOOLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)"
    },
    {
      "name": "GITLAB_MCP_IGNORE_SCOPES",
      "isSecret": false,
      "isRequired": 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",
      "isSecret": false,
      "isRequired": false,
      "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",
      "isSecret": false,
      "isRequired": false,
      "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"
    },
    {
      "name": "GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS",
      "isSecret": false,
      "isRequired": false,
      "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"
    },
    {
      "name": "GITLAB_MCP_ALLOWED_IMPORT_DIRS",
      "isSecret": false,
      "isRequired": false,
      "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"
    },
    {
      "name": "GITLAB_MCP_RATE_LIMIT_RPS",
      "isSecret": false,
      "isRequired": false,
      "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",
      "isSecret": false,
      "isRequired": false,
      "description": "Token-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)"
    }
  ],
  "category": "dev-tools",
  "subcategory": "git",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/jmrplens/gitlab-mcp-server"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "https-remote",
      "label": "Remote uses HTTPS",
      "result": "pass",
      "detail": "All remote endpoints use https://"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "info",
      "detail": "Asks for 1 secret: GITLAB_TOKEN"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account jmrplens"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "info",
      "detail": "Package could not be read (too large)"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"gitlab-mcp-server\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"-e\",\n        \"GITLAB_TOKEN\",\n        \"ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c\"\n      ],\n      \"env\": {\n        \"GITLAB_TOKEN\": \"<your value>\"\n      }\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"gitlab-mcp-server\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"-e\",\n        \"GITLAB_TOKEN\",\n        \"docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c\"\n      ],\n      \"env\": {\n        \"GITLAB_TOKEN\": \"<your value>\"\n      }\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"gitlab-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@jmrp.io/gitlab-mcp-server@3.3.0\"\n      ],\n      \"env\": {\n        \"GITLAB_TOKEN\": \"<your value>\"\n      }\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (pypi)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"gitlab-mcp-server\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"jmrplens-gitlab-mcp-server==3.3.0\"\n      ],\n      \"env\": {\n        \"GITLAB_TOKEN\": \"<your value>\"\n      }\n    }\n  }\n}"
    },
    {
      "label": "Claude Code (streamable-http)",
      "kind": "claude_code_cli",
      "text": "claude mcp add --transport http gitlab-mcp-server https://mcp.jmrp.io/gitlab"
    }
  ],
  "curated": true,
  "stars": 45,
  "archived": false,
  "pushedAt": "2026-10-29T02:31:15Z",
  "health": {
    "score": 75,
    "parts": {
      "popularity": 0.43758395016977125,
      "activity": 1,
      "issues": 0.8104166666666667,
      "security": 1
    },
    "fail": 0,
    "warn": 0,
    "raw": {
      "stars": 45,
      "forks": 8,
      "downloads": 388,
      "hn": {
        "n": 0,
        "pts": 0,
        "t": []
      },
      "issuesOpen": 91,
      "issuesClosed": 389,
      "prsMerged": 980,
      "commits90": 805,
      "release": "2026-10-31T01:06:49Z",
      "pushed": "2026-10-29T02:31:15Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:42:38.200Z"
  },
  "icon": "/icons/s/io-github-jmrplens-gitlab-mcp-server.png"
}
