← Back to directory
G

GitLab MCP Server

Community
A comprehensive GitLab MCP server for AI clients.
Category
Dev Tools #121 of 438
Stars
★ 2.0k Very popular
Transport
stdio (local process) · SSE · Streamable HTTP
Runtime
Node.js · Docker · Prebuilt binary · Hosted (no local runtime)
Credentials
API key / credential required
License
MIT
Last commit
Tools
100
60FMRS · C

The supplied sources describe a non-official GitLab MCP server maintained by zereight, version 2.1.43, under the MIT license. It provides broad GitLab administration, collaboration, code, and CI/CD coverage. Users should restrict token scopes and exposed tools to the actual workflow and configure appropriate HTTP authentication and security controls for remote deployments.

Strongest · Documentation 16/20 Weakest · Reliability 9/20

Reliability
9/20
Security and permissions
11/20
Maintenance
11/20
Documentation
16/20
Setup experience
13/20
Why each score
Reliability 9/20
The manifest identifies an npm package, version, stdio transport, and required authentication variable; the README also describes tests, error controls, tool filtering, and session mechanisms. However, only the manifest and README were supplied, with no verifiable CI workflows, test files, or implementation. The README claims 216 tools while the manifest declares no tools, so initialization, tool-list behavior, and tool correctness cannot be confirmed.
Security and permissions 11/20
Secrets are marked as secret, and the material describes read-only mode, permission modes, project restrictions, allow/deny tool filtering, session isolation, timeouts, rate limits, host checks, and custom CA support. Points are deducted because full permissions are the stated default, the tool surface includes extensive create, update, delete, variable, pipeline, and GraphQL operations, and the material does not clearly establish mandatory pre-execution confirmation for dangerous actions. Remote authorization, dynamic API URLs, and TLS relaxation also require careful deployment. No evidence meets a red-line threshold for malware, credential theft, or default remote command execution.
Maintenance 11/20
The repository is not archived, states an MIT license, and provides a versioned npm package at 2.1.43 with a GitHub repository and documentation entry point, indicating a basic release path. Points are deducted because no commit history, release cadence, dependency-update evidence, maintainer response process, vulnerability disclosure policy, or security-response channel is supplied.
Documentation 16/20
The README covers installation, PAT/OAuth/remote authorization, stdio/SSE/Streamable HTTP, client configuration, environment variables, permission modes, tool filtering, sessions, rate limits, TLS, callback proxying, troubleshooting, and extensive tool descriptions, including several limitations. Points are deducted because the hosted documentation is not included, and cost, GitLab API quotas, and per-tool error semantics remain incomplete.
Setup experience 13/20
The project provides npm, Homebrew, and Docker paths, multiple mainstream-client configuration examples, stdio and remote transport examples, and several authentication methods. These are sufficient for a plausible connection setup. Points are deducted because remote OAuth and multi-user deployment require many variables and proxy considerations, while no verifiable installation or connection execution evidence is included.

Static review · not runListed 2026-07-29

Read the FMRS scoring method →

Fit and risk

What it can accessReads local filesWrites / deletes local filesUses the networkChanges third-party account data

Best for

  • Teams that want AI clients to operate GitLab project-management and collaboration workflows.
  • Users working with GitLab.com and self-managed GitLab instances.
  • Deployments needing read-only mode, toolsets, individual tool filters, or deny patterns.
  • Developers needing local stdio or remote HTTP MCP access.

Not for

  • Projects that do not use GitLab or need GitLab API operations.
  • Static code-reading scenarios where GitLab credentials should not be granted.
  • Deployments that require REMOTE_AUTHORIZATION together with SSE.
  • Environments unable to securely manage personal, OAuth, cookie, or remote authorization credentials.

Required permissions

  • GITLAB_PERSONAL_ACCESS_TOKEN is required unless another supported authentication method is used.
  • The token should have scopes required by the selected tools, such as api or read_api.
  • Write, delete, pipeline, and project-management tools require corresponding GitLab permissions.
  • GITLAB_READ_ONLY_MODE can expose only read-only tools.
  • Access can be constrained with GITLAB_ALLOWED_PROJECT_IDS, GITLAB_TOOLSETS, GITLAB_TOOLS, and GITLAB_DENIED_TOOLS_REGEX.
  • Wiki tools require USE_GITLAB_WIKI or the relevant toolset to be enabled.

Risks and side effects

  • Tokens with the api scope or write tools may permit creating, changing, merging, or deleting GitLab resources.
  • Personal access tokens, job tokens, cookies, and OAuth tokens are sensitive credentials and should not be exposed in logs or shared configuration.
  • NODE_TLS_REJECT_UNAUTHORIZED=0 weakens TLS certificate validation and should only be used intentionally for invalid or self-signed certificates.
  • Remote HTTP deployments require correctly configured authentication, sessions, origins, hosts, and proxy trust settings.
  • download_job_artifacts and other download tools may save content to local paths.

Setup

Before you start

Runtime:Node.js · Docker · Prebuilt binary · Hosted (no local runtime)

GITLAB_PERSONAL_ACCESS_TOKEN requiredsecret GitLab personal access token created in GitLab user settings → Access Tokens with scopes such as api or read_api.
GITLAB_JOB_TOKEN optionalsecret Optional GitLab CI job token used instead of a PAT when running inside GitLab CI.
SSE_AUTH_TOKEN optionalsecret Authentication token for MCP clients over SSE transport.
Other optional settings (25)
GITLAB_API_URL optional GitLab API base URL — https://gitlab.com/api/v4 for GitLab.com or your self-managed instance URL.
GITLAB_AUTH_COOKIE_PATH optional Optional path to a GitLab auth cookie file for cookie-based authentication.
GITLAB_ALLOWED_PROJECT_IDS optional Optional comma-separated list of project IDs the server is allowed to access.
GITLAB_READ_ONLY_MODE optional Set to true to expose only read-only tools and block write operations.
USE_GITLAB_WIKI optional Set to true to enable wiki tools (legacy flag; prefer GITLAB_TOOLSETS=wiki).
GITLAB_TOOLSETS optional Optional comma-separated toolset list such as projects, issues, merge_requests, pipelines, wiki.
GITLAB_TOOLS optional Optional comma-separated individual tool names enabled on top of toolsets.
GITLAB_DENIED_TOOLS_REGEX optional Optional regex used to hide matching tools from the server.
GITLAB_TOOL_POLICY_APPROVE optional Optional comma-separated tool names requiring explicit approval before execution.
GITLAB_TOOL_POLICY_HIDDEN optional Optional comma-separated tool names hidden from tools/list.
NODE_TLS_REJECT_UNAUTHORIZED optional Set to 0 only when connecting to a GitLab instance with invalid or self-signed TLS certificates.
GITLAB_CA_CERT_PATH optional Optional custom CA certificate file path for self-managed GitLab instances.
GITLAB_PERMISSION_MODE optional Permission level: readonly, modify (no delete tools), or full.
GITLAB_USE_OAUTH optional Set to true to enable the local browser OAuth2 flow.
GITLAB_OAUTH_CLIENT_ID optional Client ID of the GitLab OAuth application used for local OAuth.
GITLAB_OAUTH_REDIRECT_URI optional Local OAuth callback URL, e.g. http://127.0.0.1:8888/callback.
GITLAB_MCP_OAUTH optional Set to true so the server acts as an MCP OAuth proxy for remote clients like Claude.ai.
GITLAB_OAUTH_APP_ID optional Client ID of a pre-registered GitLab OAuth application.
GITLAB_OAUTH_CALLBACK_PROXY optional Set to true to use the server's fixed /callback URL as the OAuth callback.
GITLAB_OAUTH_SCOPES optional Comma-separated OAuth scopes to request; defaults to api,read_api,read_user.
MCP_SERVER_URL optional Public HTTPS URL of the MCP server, used for OAuth and Host checks.
STREAMABLE_HTTP optional Set to true to enable Streamable HTTP transport.
REMOTE_AUTHORIZATION optional Set to true for multi-user remote authorization where each caller supplies their own GitLab token in HTTP headers.
GITLAB_DISABLE_VERSION_CHECK optional Set to true to disable the startup new-version notice.
SSE optional Set to true to enable SSE transport.

Install @zereight/mcp-gitlab with npm or use the Homebrew method shown in the repository documentation. Set GITLAB_PERSONAL_ACCESS_TOKEN to a token with the GitLab scopes required by the tools you will use, and set GITLAB_API_URL when needed. Configure the MCP client to launch zereight-mcp-gitlab over stdio. For remote deployments, SSE or Streamable HTTP can be used; REMOTE_AUTHORIZATION requires Streamable HTTP.

.mcp.json
{"mcpServers":{"gitlab":{"command":"zereight-mcp-gitlab","args":[],"env":{"GITLAB_PERSONAL_ACCESS_TOKEN":"YOUR_GITLAB_TOKEN","GITLAB_API_URL":"https://gitlab.com/api/v4"}}}}

Shown for Claude Code. Other clients may use a different file or key (VS Code uses "servers") — the configurator below converts it.

.vscode/mcp.json
{
  "servers": {
    "gitlab": {
      "command": "zereight-mcp-gitlab",
      "args": [],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "YOUR_GITLAB_TOKEN",
        "GITLAB_API_URL": "https://gitlab.com/api/v4"
      }
    }
  }
}

Goes in your project's .vscode/mcp.json (VS Code uses a "servers" key).

Terminal
claude mcp add gitlab -e GITLAB_PERSONAL_ACCESS_TOKEN=YOUR_GITLAB_TOKEN -e GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab

Run it in a terminal; replace any <…> placeholders with your own values first.

Check that it works

The client's tool list should show the gitlab server's tools (e.g. get_project, list_issues, health_check); calling health_check confirms authentication succeeded and reports the GitLab instance version.

Troubleshooting

  1. Confirm that zereight-mcp-gitlab is discoverable by the MCP client; use which zereight-mcp-gitlab for its absolute path when necessary.
  2. Check GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_API_URL, and token scopes.
  3. For self-managed GitLab, use the corresponding /api/v4 API URL; configure GITLAB_CA_CERT_PATH for a custom CA certificate.
  4. Use SSE=true for SSE; REMOTE_AUTHORIZATION and MCP OAuth require STREAMABLE_HTTP=true.
  5. For OAuth callback errors, distinguish local OAuth's GITLAB_OAUTH_REDIRECT_URI from remote OAuth's GITLAB_OAUTH_CALLBACK_PROXY.
  6. If tools are missing, check GITLAB_TOOLSETS, GITLAB_TOOLS, GITLAB_DENIED_TOOLS_REGEX, tool policies, and discover_tools.

Things to try

Once connected, you can ask your AI assistant things like:

  • List all open merge requests in the gitlab-mcp project and summarize the changed files for each.
  • Show the details of issue #42 and add a comment via create_issue_note saying we've started working on it.
  • Compare the diffs between the main and feature/login branches and tell me which files were added.
  • List the recent pipelines for this project and retry any that failed.

Tools 100

merge_merge_request writes
Merge a merge request in a GitLab project.
approve_merge_request writes
unapprove_merge_request writes
get_merge_request_approval_state read-only
get_merge_request_conflicts read-only
list_merge_request_pipelines read-only
execute_graphql writes
create_or_update_file writes
Create or update one file in a project.
Show 92 more tools
search_repositories read-only
Search GitLab projects.
create_repository writes
create_group writes
get_file_contents read-only
Get file or directory contents from a project.
push_files writes
Push multiple files in one commit.
create_issue writes
Create an issue in a GitLab project.
create_merge_request writes
Create a merge request in a GitLab project.
fork_repository writes
create_branch writes
get_branch read-only
list_branches read-only
delete_branch destructive
list_protected_branches read-only
get_protected_branch read-only
protect_branch writes
unprotect_branch writes
update_default_branch writes
get_merge_request read-only
Get merge request details with deployment, commit, and approval summaries.
get_merge_request_diffs read-only
Get merge request changes and diffs.
list_merge_request_changed_files read-only
list_merge_request_diffs read-only
get_merge_request_file_diff read-only
Get diffs for one or more merge request files.
list_merge_request_versions read-only
get_merge_request_version read-only
get_branch_diffs read-only
update_merge_request writes
create_note writes
create_merge_request_thread writes
resolve_merge_request_thread writes
mr_discussions read-only
delete_merge_request_discussion_note destructive
update_merge_request_discussion_note writes
create_merge_request_discussion_note writes
create_merge_request_note writes
delete_merge_request_note destructive
get_merge_request_note read-only
get_merge_request_notes read-only
update_merge_request_note writes
get_draft_note read-only
list_draft_notes read-only
create_draft_note writes
update_draft_note writes
delete_draft_note destructive
publish_draft_note writes
bulk_publish_draft_notes writes
list_merge_request_emoji_reactions read-only
list_merge_request_note_emoji_reactions read-only
create_merge_request_emoji_reaction writes
delete_merge_request_emoji_reaction destructive
create_merge_request_note_emoji_reaction writes
delete_merge_request_note_emoji_reaction destructive
update_issue_note writes
create_issue_note writes
list_issue_emoji_reactions read-only
list_issue_note_emoji_reactions read-only
create_issue_emoji_reaction writes
delete_issue_emoji_reaction destructive
create_issue_note_emoji_reaction writes
delete_issue_note_emoji_reaction destructive
list_issues read-only
List issues with filters.
my_issues read-only
get_issue read-only
Get details for a specific issue.
update_issue writes
Update an issue in a GitLab project.
update_issue_description_patch writes
delete_issue destructive
list_todos read-only
mark_todo_done writes
mark_all_todos_done writes
list_issue_links read-only
list_issue_discussions read-only
get_issue_link read-only
create_issue_link writes
delete_issue_link destructive
list_namespaces read-only
get_namespace read-only
verify_namespace read-only
get_project read-only
Get project details.
list_projects read-only
List projects accessible to the current user.
update_project writes
list_project_members read-only
list_labels read-only
get_label read-only
create_label writes
update_label writes
delete_label destructive
list_group_projects read-only
list_wiki_pages read-only
List project wiki pages.
get_wiki_page read-only
Get details of a wiki page.
create_wiki_page writes
Create a project wiki page.
update_wiki_page writes
delete_wiki_page destructive
list_group_wiki_pages read-only

Use cases

Browse GitLab projects, repository files, commits, and branches.
Create, review, approve, and merge merge requests.
Manage issues, discussions, comments, labels, and milestones.
Inspect, create, retry, or cancel CI/CD pipelines and jobs.
Manage wikis, releases, tags, work items, and vulnerabilities.
Provide remote MCP access for self-managed or multi-user GitLab deployments.

Supported clients

Claude Code
VS Code
GitHub Copilot
Codex
Cursor
ClinePartial support
Roo CodePartial support
Kilo CodePartial support
Amp CodePartial support
Claude.aiPartial support
OpenCodePartial support
Factory AI DroidPartial support
OpenClawPartial support

Listed from the project's documentation, not tested by this site.

Overview

A GitLab MCP server that exposes project management, repository browsing, merge requests, issues, pipelines, wiki, releases, tags, milestones, users, groups, work items, webhooks, variables, dependency proxy, and vulnerability operations through MCP. It supports stdio, SSE, and Streamable HTTP for GitLab.com and self-managed GitLab.

Similar servers

Context7 80 · B

Upstash's official server providing up-to-date third-party library docs for AI coding assistants

★ 63.3k · Tools 2 Compare with this →

Source revision 9569a836d64c Data synced 2026-10-19 Read the FMRS scoring method