Installation
GitLab MCP Server is one self-contained Go binary. Every channel on this page delivers that same binary, or a container that wraps it, and the same gitlab-mcp-server command, so the choice is about what you already have on the machine and how you want upgrades to arrive, not about features. Whatever you pick, the server needs one value to run: a GitLab personal access token in GITLAB_TOKEN (api scope; a read_api token also works, paired with GITLAB_MCP_READ_ONLY=true so the tool surface matches it, since over stdio the server does not narrow the surface to the token’s scope; only HTTP mode and the hosted endpoint do that on their own). GITLAB_URL defaults to https://gitlab.com, so set it only for a self-managed instance.
Pick a channel
Section titled “Pick a channel”| Channel | What you get | Needs | Upgrade path | Platforms |
|---|---|---|---|---|
| Native binary | The release binary, placed by an install script or by hand | Nothing (the script needs curl or wget; PowerShell on Windows) | Re-run the script, or download the newer release | Linux, macOS, Windows; amd64 and arm64 |
| Homebrew | The release binary, installed by a formula from the jmrplens/tap tap | Homebrew | brew upgrade | macOS and Linux; Apple Silicon, Intel and arm64 |
| Windows (winget) | The release executable as a portable package with a PATH alias | winget | winget upgrade | Windows; x64 and arm64 |
| Docker | A container image on GHCR, mirrored on Docker Hub | Docker or a compatible runtime | Pull a newer tag and recreate the container | linux/amd64 and linux/arm64 images, wherever Docker runs |
| npm and npx | A launcher package plus one platform package carrying the binary | Node.js 18 or newer | npm update -g; npx -y resolves the newest version on a cold run | Linux (glibc), macOS, Windows; x64 and arm64 |
| PyPI, uvx and pipx | A wheel that places the binary on the environment’s scripts path | Python 3.9 or newer (uv or pipx optional) | pipx upgrade, pip install -U or uv tool upgrade; uvx resolves the newest version on a cold run | Linux (glibc), macOS 11 or newer, Windows; x64 and arm64 |
| NuGet and dnx | A .NET tool whose entry point is the binary, one package per runtime identifier | The .NET 10 SDK or newer | dotnet tool update -g; dnx resolves the newest version on every launch | Linux (glibc), macOS, Windows; x64 and arm64 |
| Agent Plugins | A plugin manifest that runs the Docker image over stdio | A conformant host (Cursor, Claude Code, VS Code, OpenCode) and Docker | The image’s latest tag, pulled again | Wherever the host and Docker run |
| Claude Desktop (.mcpb) | A desktop extension bundling the macOS universal binary and the Windows executable | Claude Desktop 0.10.0 or newer | A new extension version ships with every release | macOS (Apple Silicon and Intel), Windows (x64) |
| Hosted endpoint | Nothing installed: a public streamable HTTP endpoint | An HTTP-capable MCP client and a GitLab.com token | Moves on its own, normally to the newest release | Any |
Which one?
Section titled “Which one?”- You want the smallest footprint and no runtime. The native binary. Homebrew and winget install that same binary and take care of upgrades.
- Your client already launches servers with
npx,uvxordnx. The npm, PyPI and NuGet packages: nothing to install ahead of time, and the client resolves the newest version on its own. - You would rather not put anything on the host, or you are deploying for a team. Docker, over stdio for one client or in HTTP mode behind a port.
- You use Claude Desktop. The
.mcpbextension: one click, and the token lives in the operating system keychain. - You just want to look first. The hosted endpoint, from any HTTP-capable client or straight from the browser inspector.
After installing
Section titled “After installing”Every channel ends at the same place: your MCP client launches gitlab-mcp-server (or the docker, npx, uvx or dnx command that wraps it) with GITLAB_TOKEN in its environment. Each channel page closes with the minimal client snippet for its command, and the Quick Start has the per-client tabs for VS Code, Claude Desktop, Cursor, Claude Code, Windsurf, JetBrains, Zed, Kiro and Cline.
Two things worth knowing before the first run:
- If you start the binary in a terminal, or double-click it on Windows, without both
GITLAB_URLandGITLAB_TOKENset, it prints what it is and the two values it needs, then waits for Enter. An MCP client never sees that screen, because it connects pipes rather than a terminal. There is no setup wizard. - The token can stay out of client JSON entirely: an explicit environment variable wins over the file
GITLAB_MCP_ENV_FILEnames, which wins over~/.gitlab-mcp-server.env(oneKEY=valueper line). A.envin the working directory is not read. See Configuration.
Then open your client and ask “Who am I on GitLab?”. On the default dynamic surface the assistant calls gitlab_find_action and then gitlab_execute_action with the user.current action, and answers with your GitLab profile.