GitLab MCP server for projects, merge requests, issues, pipelines, wiki, releases, and more.
Connect Runs on your machine
claude mcp add gitlab-mcp -e GITLAB_PERSONAL_ACCESS_TOKEN=<GITLAB_PERSONAL_ACCESS_TOKEN> -e GITLAB_PERSONAL_ACCESS_TOKEN_FILE=<GITLAB_PERSONAL_ACCESS_TOKEN_FILE> -e GITLAB_JOB_TOKEN=<GITLAB_JOB_TOKEN> -e GITLAB_AUTH_COOKIE_PATH=<GITLAB_AUTH_COOKIE_PATH> -e GITLAB_USE_OAUTH=<GITLAB_USE_OAUTH> -e GITLAB_OAUTH_CLIENT_ID=<GITLAB_OAUTH_CLIENT_ID> -e GITLAB_OAUTH_TOKEN_SCRIPT=<GITLAB_OAUTH_TOKEN_SCRIPT> -e GITLAB_API_URL=<GITLAB_API_URL> -e GITLAB_ALLOWED_PROJECT_IDS=<GITLAB_ALLOWED_PROJECT_IDS> -e GITLAB_PERMISSION_MODE=<GITLAB_PERMISSION_MODE> -e GITLAB_TOOLSETS=<GITLAB_TOOLSETS> -e GITLAB_TOOLS=<GITLAB_TOOLS> -e GITLAB_DENIED_TOOLS_REGEX=<GITLAB_DENIED_TOOLS_REGEX> -e GITLAB_TOOL_POLICY_APPROVE=<GITLAB_TOOL_POLICY_APPROVE> -e GITLAB_TOOL_POLICY_HIDDEN=<GITLAB_TOOL_POLICY_HIDDEN> -e NODE_TLS_REJECT_UNAUTHORIZED=<NODE_TLS_REJECT_UNAUTHORIZED> -e GITLAB_CA_CERT_PATH=<GITLAB_CA_CERT_PATH> -e GITLAB_MASKING_ENABLED=<GITLAB_MASKING_ENABLED> -e GITLAB_MASKING_CONFIG=<GITLAB_MASKING_CONFIG> -e GITLAB_MASKING_POLICY_FILE=<GITLAB_MASKING_POLICY_FILE> -e GITLAB_MASKING_WORKSPACE_DIR=<GITLAB_MASKING_WORKSPACE_DIR> -- npx -y @zereight/[email protected]
{
"mcpServers": {
"gitlab-mcp": {
"command": "npx",
"args": [
"-y",
"@zereight/[email protected]"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<GITLAB_PERSONAL_ACCESS_TOKEN>",
"GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "<GITLAB_PERSONAL_ACCESS_TOKEN_FILE>",
"GITLAB_JOB_TOKEN": "<GITLAB_JOB_TOKEN>",
"GITLAB_AUTH_COOKIE_PATH": "<GITLAB_AUTH_COOKIE_PATH>",
"GITLAB_USE_OAUTH": "<GITLAB_USE_OAUTH>",
"GITLAB_OAUTH_CLIENT_ID": "<GITLAB_OAUTH_CLIENT_ID>",
"GITLAB_OAUTH_TOKEN_SCRIPT": "<GITLAB_OAUTH_TOKEN_SCRIPT>",
"GITLAB_API_URL": "<GITLAB_API_URL>",
"GITLAB_ALLOWED_PROJECT_IDS": "<GITLAB_ALLOWED_PROJECT_IDS>",
"GITLAB_PERMISSION_MODE": "<GITLAB_PERMISSION_MODE>",
"GITLAB_TOOLSETS": "<GITLAB_TOOLSETS>",
"GITLAB_TOOLS": "<GITLAB_TOOLS>",
"GITLAB_DENIED_TOOLS_REGEX": "<GITLAB_DENIED_TOOLS_REGEX>",
"GITLAB_TOOL_POLICY_APPROVE": "<GITLAB_TOOL_POLICY_APPROVE>",
"GITLAB_TOOL_POLICY_HIDDEN": "<GITLAB_TOOL_POLICY_HIDDEN>",
"NODE_TLS_REJECT_UNAUTHORIZED": "<NODE_TLS_REJECT_UNAUTHORIZED>",
"GITLAB_CA_CERT_PATH": "<GITLAB_CA_CERT_PATH>",
"GITLAB_MASKING_ENABLED": "<GITLAB_MASKING_ENABLED>",
"GITLAB_MASKING_CONFIG": "<GITLAB_MASKING_CONFIG>",
"GITLAB_MASKING_POLICY_FILE": "<GITLAB_MASKING_POLICY_FILE>",
"GITLAB_MASKING_WORKSPACE_DIR": "<GITLAB_MASKING_WORKSPACE_DIR>"
}
}
}
}
{
"mcpServers": {
"gitlab-mcp": {
"command": "npx",
"args": [
"-y",
"@zereight/[email protected]"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<GITLAB_PERSONAL_ACCESS_TOKEN>",
"GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "<GITLAB_PERSONAL_ACCESS_TOKEN_FILE>",
"GITLAB_JOB_TOKEN": "<GITLAB_JOB_TOKEN>",
"GITLAB_AUTH_COOKIE_PATH": "<GITLAB_AUTH_COOKIE_PATH>",
"GITLAB_USE_OAUTH": "<GITLAB_USE_OAUTH>",
"GITLAB_OAUTH_CLIENT_ID": "<GITLAB_OAUTH_CLIENT_ID>",
"GITLAB_OAUTH_TOKEN_SCRIPT": "<GITLAB_OAUTH_TOKEN_SCRIPT>",
"GITLAB_API_URL": "<GITLAB_API_URL>",
"GITLAB_ALLOWED_PROJECT_IDS": "<GITLAB_ALLOWED_PROJECT_IDS>",
"GITLAB_PERMISSION_MODE": "<GITLAB_PERMISSION_MODE>",
"GITLAB_TOOLSETS": "<GITLAB_TOOLSETS>",
"GITLAB_TOOLS": "<GITLAB_TOOLS>",
"GITLAB_DENIED_TOOLS_REGEX": "<GITLAB_DENIED_TOOLS_REGEX>",
"GITLAB_TOOL_POLICY_APPROVE": "<GITLAB_TOOL_POLICY_APPROVE>",
"GITLAB_TOOL_POLICY_HIDDEN": "<GITLAB_TOOL_POLICY_HIDDEN>",
"NODE_TLS_REJECT_UNAUTHORIZED": "<NODE_TLS_REJECT_UNAUTHORIZED>",
"GITLAB_CA_CERT_PATH": "<GITLAB_CA_CERT_PATH>",
"GITLAB_MASKING_ENABLED": "<GITLAB_MASKING_ENABLED>",
"GITLAB_MASKING_CONFIG": "<GITLAB_MASKING_CONFIG>",
"GITLAB_MASKING_POLICY_FILE": "<GITLAB_MASKING_POLICY_FILE>",
"GITLAB_MASKING_WORKSPACE_DIR": "<GITLAB_MASKING_WORKSPACE_DIR>"
}
}
}
}
{
"servers": {
"gitlab-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@zereight/[email protected]"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<GITLAB_PERSONAL_ACCESS_TOKEN>",
"GITLAB_PERSONAL_ACCESS_TOKEN_FILE": "<GITLAB_PERSONAL_ACCESS_TOKEN_FILE>",
"GITLAB_JOB_TOKEN": "<GITLAB_JOB_TOKEN>",
"GITLAB_AUTH_COOKIE_PATH": "<GITLAB_AUTH_COOKIE_PATH>",
"GITLAB_USE_OAUTH": "<GITLAB_USE_OAUTH>",
"GITLAB_OAUTH_CLIENT_ID": "<GITLAB_OAUTH_CLIENT_ID>",
"GITLAB_OAUTH_TOKEN_SCRIPT": "<GITLAB_OAUTH_TOKEN_SCRIPT>",
"GITLAB_API_URL": "<GITLAB_API_URL>",
"GITLAB_ALLOWED_PROJECT_IDS": "<GITLAB_ALLOWED_PROJECT_IDS>",
"GITLAB_PERMISSION_MODE": "<GITLAB_PERMISSION_MODE>",
"GITLAB_TOOLSETS": "<GITLAB_TOOLSETS>",
"GITLAB_TOOLS": "<GITLAB_TOOLS>",
"GITLAB_DENIED_TOOLS_REGEX": "<GITLAB_DENIED_TOOLS_REGEX>",
"GITLAB_TOOL_POLICY_APPROVE": "<GITLAB_TOOL_POLICY_APPROVE>",
"GITLAB_TOOL_POLICY_HIDDEN": "<GITLAB_TOOL_POLICY_HIDDEN>",
"NODE_TLS_REJECT_UNAUTHORIZED": "<NODE_TLS_REJECT_UNAUTHORIZED>",
"GITLAB_CA_CERT_PATH": "<GITLAB_CA_CERT_PATH>",
"GITLAB_MASKING_ENABLED": "<GITLAB_MASKING_ENABLED>",
"GITLAB_MASKING_CONFIG": "<GITLAB_MASKING_CONFIG>",
"GITLAB_MASKING_POLICY_FILE": "<GITLAB_MASKING_POLICY_FILE>",
"GITLAB_MASKING_WORKSPACE_DIR": "<GITLAB_MASKING_WORKSPACE_DIR>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
GITLAB_PERSONAL_ACCESS_TOKENOptional, secret | GitLab personal access token for local stdio use. A non-empty value overrides GITLAB_PERSONAL_ACCESS_TOKEN_FILE. One of this token, GITLAB_PERSONAL_ACCESS_TOKEN_FILE, GITLAB_JOB_TOKEN, GITLAB_AUTH_COOKIE_PATH, or GITLAB_USE_OAUTH=true must be set. Create a token with the GitLab scopes the tools nee… |
GITLAB_PERSONAL_ACCESS_TOKEN_FILEOptional | Path to a file that contains the personal access token. Read once at startup and trimmed. Ignored when GITLAB_PERSONAL_ACCESS_TOKEN or --token is non-empty. A missing, unreadable, or empty file stops startup. Does not replace job token, OAuth, cookie, or remote authorization. |
GITLAB_JOB_TOKENOptional, secret | Optional GitLab CI job token to use instead of a personal access token when running inside GitLab CI. |
GITLAB_AUTH_COOKIE_PATHOptional | Optional path to a GitLab authentication cookie file for cookie-based authentication. |
GITLAB_USE_OAUTHOptional | Set to true to start with GitLab OAuth instead of a personal access token, job token, or cookie file. |
GITLAB_OAUTH_CLIENT_IDOptional | GitLab OAuth application ID. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_TOKEN_SCRIPT. |
GITLAB_OAUTH_TOKEN_SCRIPTOptional | Command that prints an OAuth access token. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_CLIENT_ID. |
GITLAB_API_URLOptional | GitLab API base URL. Use https://gitlab.com/api/v4 for GitLab.com or your self-managed GitLab API URL. |
GITLAB_ALLOWED_PROJECT_IDSOptional | Optional comma-separated list of GitLab project IDs that this server is allowed to access. |
GITLAB_PERMISSION_MODEOptional | Tool exposure. Allowed values are readonly, modify, and full. Unset uses full. readonly keeps read-only tools. modify blocks delete and teardown tools. |
GITLAB_TOOLSETSOptional | Optional comma-separated toolset ids (projects, issues, merge_requests, …). Unset keeps the lean core default plus discover_tools. Do not set all unless you accept loading ~all schemas (~73k tokens). |
GITLAB_TOOLSOptional | Optional comma-separated list of individual tool names to add on top of enabled toolsets. |
GITLAB_DENIED_TOOLS_REGEXOptional | Optional regular expression used to hide matching tools from the server. |
GITLAB_TOOL_POLICY_APPROVEOptional | Optional comma-separated list of tool names that require explicit approval before execution. |
GITLAB_TOOL_POLICY_HIDDENOptional | Optional comma-separated list of tool names to hide from tools/list. |
NODE_TLS_REJECT_UNAUTHORIZEDOptional | Set to 0 only when you intentionally need to connect to a GitLab instance with invalid or self-signed TLS certificates. |
GITLAB_CA_CERT_PATHOptional | Optional path to a custom CA certificate file for self-managed GitLab instances. |
GITLAB_MASKING_ENABLEDOptional | Set to true to mask text tool results and returned errors using built-in or configured rules. |
GITLAB_MASKING_CONFIGOptional | Optional path to a response-masking JSON configuration file. |
GITLAB_MASKING_POLICY_FILEOptional | Optional protected server-owned JSON file containing managed masking policies. |
GITLAB_MASKING_WORKSPACE_DIROptional | Directory used to resolve response-masking configuration paths. |
Details
| Package | @zereight/[email protected] (NPM, stdio) |
| Package | docker.io/zereight050/gitlab-mcp:2.3.26 (OCI, stdio) |
| First published | 12 Nov 2026 |
| Last updated | 12 Nov 2026 |
| Registry name | io.github.zereight/gitlab-mcp |
More developer tools servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
