GitLab (archived)
GitLab (archived) is the retired reference MCP server Anthropic published on npm as @modelcontextprotocol/server-gitlab. It wrapped GitLab's REST API so an assistant could read and write issues, merge requests, branches and repository files on gitlab.com or a self-managed instance. npm now flags the package as no longer supported, and it refuses to start without a GitLab personal access token.
How we started it
npx -y @modelcontextprotocol/server-gitlabSkip it. When we booted it with a clean environment on 2026-08-19 it printed one line about a missing GITLAB_PERSONAL_ACCESS_TOKEN and exited with code 1 before initialize completed, so we never saw a tools/list at all. Give it a token and it will probably run, since the code is a thin REST wrapper and thin REST wrappers age slowly. The reason against is the npm deprecation notice sitting right above that error: nobody is going to fix this one when GitLab changes an endpoint, and you would be pinning your merge-request automation to an abandoned package.
Use it if
Skip it if
The bill for your context window
There is no context tax to report, and that is the honest reading of the record: toolsCount 0, estTokens 0, because the server exited before it could answer tools/list. That zero is an absence of measurement, not a virtue. Nothing was weighed, so nothing can be quoted about which tools carry the weight here. Judging by the source, this is a plain REST wrapper with one tool per GitLab endpoint, so a booted run would sit in the ordinary middle of this batch rather than near Notion at the top. If you give it a token and run it yourself, the tools/list payload is the thing to measure first.
Setup reality
One env var stands between you and a boot: GITLAB_PERSONAL_ACCESS_TOKEN, which is the only name the process leaked to stderr before quitting. The README also documents GITLAB_API_URL for self-managed instances, defaulting to gitlab.com. Transport is stdio, launched through npx, and the install emits a deprecation warning for the package plus one for a transitive node-domexception dependency. The token needs api scope for writes, read_api if you only want it reading, and it inherits every project your user can see, which is the usual over-broad grant problem with GitLab PATs. There is no OAuth path here.
GITLAB_PERSONAL_ACCESS_TOKENQuestions people ask
Why did the GitLab MCP server fail to start when you measured it?
Our harness runs every server with a clean environment and no credentials, on purpose. This one checks for GITLAB_PERSONAL_ACCESS_TOKEN at startup, finds nothing, prints a message and exits with code 1 before the MCP initialize handshake. It is a configuration failure, not a crash.
Is @modelcontextprotocol/server-gitlab still maintained?
No. npm returns a deprecation notice during install saying the package is no longer supported and pointing at npm support, which is the generic message left behind when a package is retired. Treat it as frozen source code you can read, not a dependency you should add.
What should I use for GitLab MCP instead?
GitLab ships its own MCP support in recent releases, and there are community servers covering issues and merge requests. Whichever you pick, check that it boots on your GitLab version and that its token scope matches what you actually want an agent doing to your repositories.
Other dev tools servers we started
| Server | Vendor | Boots | Context tax |
|---|---|---|---|
| CircleCI | CircleCI | ✓ | ~12,932 tokens |
| Everything (test server) | Anthropic (reference) | ✓ | ~1,913 tokens |
| Git | Anthropic (reference) | ✓ | ~1,477 tokens |
| GitHub (archived npm server) | Anthropic (archived) | ✓ | ~3,964 tokens |
How this page is made: the server is spawned as an unprivileged user with a clean environment and no credentials, then asked for its tools, resources and prompts over stdio. Token figures are estimates at four characters per token, not a tokenizer count. One run, one machine. Corrections: contact the desk.