GitLab MCP Server
Go MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.
التثبيت
أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: .cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).
claude mcp add --transport http gitlab-mcp-server 'https://mcp.jmrp.io/gitlab' --header 'Authorization: <Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as '\''Bearer glpat-...'\'', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>'
{
"mcpServers": {
"gitlab-mcp-server": {
"type": "http",
"url": "https://mcp.jmrp.io/gitlab",
"headers": {
"Authorization": "<Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as 'Bearer glpat-...', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>"
}
}
}
}
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-darwin.mcpbمتغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-windows.mcpbمتغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
https://github.com/jmrplens/gitlab-mcp-server/releases/download/v3.3.0/gitlab-mcp-server-linux.mcpbمتغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19cclaude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- docker run -i --rm ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
{
"mcpServers": {
"gitlab-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c"
],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_TOKEN": "<your gitlab_token>",
"GITLAB_MCP_SKIP_TLS_VERIFY": "false",
"GITLAB_MCP_TOOL_SURFACE": "dynamic",
"GITLAB_MCP_CAPABILITY_SURFACE": "full",
"GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
"GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
"GITLAB_MCP_READ_ONLY": "false",
"GITLAB_MCP_SAFE_MODE": "false",
"GITLAB_MCP_EMBEDDED_RESOURCES": "true",
"GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
"GITLAB_MCP_IGNORE_SCOPES": "false",
"GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
"GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
"GITLAB_MCP_RATE_LIMIT_RPS": "0",
"GITLAB_MCP_RATE_LIMIT_BURST": "40",
"GITLAB_MCP_LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_CAPABILITY_SURFACEResource and prompt catalog selector: full or minimal (default: full); resource subscriptions require fullGITLAB_MCP_META_PARAM_SCHEMAMeta-tool input schema detail: opaque, compact, or full (default: opaque)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_EMBEDDED_RESOURCESAppend EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)GITLAB_MCP_EXCLUDE_TOOLSComma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)GITLAB_MCP_IGNORE_SCOPESSkip 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)GITLAB_MCP_UPLOAD_MAX_FILE_SIZELargest 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)GITLAB_MCP_ALLOWED_UPLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_DOWNLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_IMPORT_DIRSExtra 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 pathsGITLAB_MCP_RATE_LIMIT_RPSRate 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)GITLAB_MCP_RATE_LIMIT_BURSTToken-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19cclaude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- docker run -i --rm docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c
{
"mcpServers": {
"gitlab-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/jmrplens/gitlab-mcp-server:3.3.0@sha256:88784f176a65d934c4a181eb832a525e94f106f49189cb9c6fde907dd00cf19c"
],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_TOKEN": "<your gitlab_token>",
"GITLAB_MCP_SKIP_TLS_VERIFY": "false",
"GITLAB_MCP_TOOL_SURFACE": "dynamic",
"GITLAB_MCP_CAPABILITY_SURFACE": "full",
"GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
"GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
"GITLAB_MCP_READ_ONLY": "false",
"GITLAB_MCP_SAFE_MODE": "false",
"GITLAB_MCP_EMBEDDED_RESOURCES": "true",
"GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
"GITLAB_MCP_IGNORE_SCOPES": "false",
"GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
"GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
"GITLAB_MCP_RATE_LIMIT_RPS": "0",
"GITLAB_MCP_RATE_LIMIT_BURST": "40",
"GITLAB_MCP_LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_CAPABILITY_SURFACEResource and prompt catalog selector: full or minimal (default: full); resource subscriptions require fullGITLAB_MCP_META_PARAM_SCHEMAMeta-tool input schema detail: opaque, compact, or full (default: opaque)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_EMBEDDED_RESOURCESAppend EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)GITLAB_MCP_EXCLUDE_TOOLSComma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)GITLAB_MCP_IGNORE_SCOPESSkip 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)GITLAB_MCP_UPLOAD_MAX_FILE_SIZELargest 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)GITLAB_MCP_ALLOWED_UPLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_DOWNLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_IMPORT_DIRSExtra 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 pathsGITLAB_MCP_RATE_LIMIT_RPSRate 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)GITLAB_MCP_RATE_LIMIT_BURSTToken-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
@jmrp.io/gitlab-mcp-serverclaude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- npx -y @jmrp.io/gitlab-mcp-server@3.3.0
{
"mcpServers": {
"gitlab-mcp-server": {
"command": "npx",
"args": [
"-y",
"@jmrp.io/gitlab-mcp-server@3.3.0"
],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_TOKEN": "<your gitlab_token>",
"GITLAB_MCP_SKIP_TLS_VERIFY": "false",
"GITLAB_MCP_TOOL_SURFACE": "dynamic",
"GITLAB_MCP_CAPABILITY_SURFACE": "full",
"GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
"GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
"GITLAB_MCP_READ_ONLY": "false",
"GITLAB_MCP_SAFE_MODE": "false",
"GITLAB_MCP_EMBEDDED_RESOURCES": "true",
"GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
"GITLAB_MCP_IGNORE_SCOPES": "false",
"GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
"GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
"GITLAB_MCP_RATE_LIMIT_RPS": "0",
"GITLAB_MCP_RATE_LIMIT_BURST": "40",
"GITLAB_MCP_LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_CAPABILITY_SURFACEResource and prompt catalog selector: full or minimal (default: full); resource subscriptions require fullGITLAB_MCP_META_PARAM_SCHEMAMeta-tool input schema detail: opaque, compact, or full (default: opaque)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_EMBEDDED_RESOURCESAppend EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)GITLAB_MCP_EXCLUDE_TOOLSComma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)GITLAB_MCP_IGNORE_SCOPESSkip 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)GITLAB_MCP_UPLOAD_MAX_FILE_SIZELargest 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)GITLAB_MCP_ALLOWED_UPLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_DOWNLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_IMPORT_DIRSExtra 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 pathsGITLAB_MCP_RATE_LIMIT_RPSRate 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)GITLAB_MCP_RATE_LIMIT_BURSTToken-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
jmrplens-gitlab-mcp-serverclaude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- uvx jmrplens-gitlab-mcp-server==3.3.0
{
"mcpServers": {
"gitlab-mcp-server": {
"command": "uvx",
"args": [
"jmrplens-gitlab-mcp-server==3.3.0"
],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_TOKEN": "<your gitlab_token>",
"GITLAB_MCP_SKIP_TLS_VERIFY": "false",
"GITLAB_MCP_TOOL_SURFACE": "dynamic",
"GITLAB_MCP_CAPABILITY_SURFACE": "full",
"GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
"GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
"GITLAB_MCP_READ_ONLY": "false",
"GITLAB_MCP_SAFE_MODE": "false",
"GITLAB_MCP_EMBEDDED_RESOURCES": "true",
"GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
"GITLAB_MCP_IGNORE_SCOPES": "false",
"GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
"GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
"GITLAB_MCP_RATE_LIMIT_RPS": "0",
"GITLAB_MCP_RATE_LIMIT_BURST": "40",
"GITLAB_MCP_LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_CAPABILITY_SURFACEResource and prompt catalog selector: full or minimal (default: full); resource subscriptions require fullGITLAB_MCP_META_PARAM_SCHEMAMeta-tool input schema detail: opaque, compact, or full (default: opaque)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_EMBEDDED_RESOURCESAppend EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)GITLAB_MCP_EXCLUDE_TOOLSComma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)GITLAB_MCP_IGNORE_SCOPESSkip 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)GITLAB_MCP_UPLOAD_MAX_FILE_SIZELargest 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)GITLAB_MCP_ALLOWED_UPLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_DOWNLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_IMPORT_DIRSExtra 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 pathsGITLAB_MCP_RATE_LIMIT_RPSRate 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)GITLAB_MCP_RATE_LIMIT_BURSTToken-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
gitlab-mcp-serverclaude mcp add gitlab-mcp-server -e 'GITLAB_URL=https://gitlab.com' -e 'GITLAB_TOKEN=<your gitlab_token>' -e 'GITLAB_MCP_SKIP_TLS_VERIFY=false' -e 'GITLAB_MCP_TOOL_SURFACE=dynamic' -e 'GITLAB_MCP_CAPABILITY_SURFACE=full' -e 'GITLAB_MCP_META_PARAM_SCHEMA=opaque' -e 'GITLAB_MCP_TIER=<GITLAB_MCP_TIER>' -e 'GITLAB_MCP_READ_ONLY=false' -e 'GITLAB_MCP_SAFE_MODE=false' -e 'GITLAB_MCP_EMBEDDED_RESOURCES=true' -e 'GITLAB_MCP_EXCLUDE_TOOLS=<GITLAB_MCP_EXCLUDE_TOOLS>' -e 'GITLAB_MCP_IGNORE_SCOPES=false' -e 'GITLAB_MCP_UPLOAD_MAX_FILE_SIZE=2147483648' -e 'GITLAB_MCP_ALLOWED_UPLOAD_DIRS=<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS=<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>' -e 'GITLAB_MCP_ALLOWED_IMPORT_DIRS=<GITLAB_MCP_ALLOWED_IMPORT_DIRS>' -e 'GITLAB_MCP_RATE_LIMIT_RPS=0' -e 'GITLAB_MCP_RATE_LIMIT_BURST=40' -e 'GITLAB_MCP_LOG_LEVEL=info' -- dnx gitlab-mcp-server@3.3.0 --yes
{
"mcpServers": {
"gitlab-mcp-server": {
"command": "dnx",
"args": [
"gitlab-mcp-server@3.3.0",
"--yes"
],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_TOKEN": "<your gitlab_token>",
"GITLAB_MCP_SKIP_TLS_VERIFY": "false",
"GITLAB_MCP_TOOL_SURFACE": "dynamic",
"GITLAB_MCP_CAPABILITY_SURFACE": "full",
"GITLAB_MCP_META_PARAM_SCHEMA": "opaque",
"GITLAB_MCP_TIER": "<GITLAB_MCP_TIER>",
"GITLAB_MCP_READ_ONLY": "false",
"GITLAB_MCP_SAFE_MODE": "false",
"GITLAB_MCP_EMBEDDED_RESOURCES": "true",
"GITLAB_MCP_EXCLUDE_TOOLS": "<GITLAB_MCP_EXCLUDE_TOOLS>",
"GITLAB_MCP_IGNORE_SCOPES": "false",
"GITLAB_MCP_UPLOAD_MAX_FILE_SIZE": "2147483648",
"GITLAB_MCP_ALLOWED_UPLOAD_DIRS": "<GITLAB_MCP_ALLOWED_UPLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS": "<GITLAB_MCP_ALLOWED_DOWNLOAD_DIRS>",
"GITLAB_MCP_ALLOWED_IMPORT_DIRS": "<GITLAB_MCP_ALLOWED_IMPORT_DIRS>",
"GITLAB_MCP_RATE_LIMIT_RPS": "0",
"GITLAB_MCP_RATE_LIMIT_BURST": "40",
"GITLAB_MCP_LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
GITLAB_URLGitLab instance URL (default: https://gitlab.com; set for self-managed instances)GITLAB_TOKENإلزامي سري GitLab Personal Access Token (glpat-...)GITLAB_MCP_SKIP_TLS_VERIFYSkip TLS certificate verification for self-signed certs (default: false)GITLAB_MCP_TOOL_SURFACETool catalog selector: dynamic, meta, or individual (default: dynamic)GITLAB_MCP_CAPABILITY_SURFACEResource and prompt catalog selector: full or minimal (default: full); resource subscriptions require fullGITLAB_MCP_META_PARAM_SCHEMAMeta-tool input schema detail: opaque, compact, or full (default: opaque)GITLAB_MCP_TIERGitLab 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 toolsGITLAB_MCP_READ_ONLYRead-only mode: removes every mutating action from the served surface; reads keep working (default: false)GITLAB_MCP_SAFE_MODESafe mode: a mutating action returns a preview card naming the action and echoing its arguments instead of running; reads keep working (default: false)GITLAB_MCP_EMBEDDED_RESOURCESAppend EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)GITLAB_MCP_EXCLUDE_TOOLSComma-separated tool names, group names or canonical action IDs to exclude, on every surface (e.g. gitlab_admin,gitlab_runner)GITLAB_MCP_IGNORE_SCOPESSkip 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)GITLAB_MCP_UPLOAD_MAX_FILE_SIZELargest 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)GITLAB_MCP_ALLOWED_UPLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_DOWNLOAD_DIRSExtra 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 pathsGITLAB_MCP_ALLOWED_IMPORT_DIRSExtra 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 pathsGITLAB_MCP_RATE_LIMIT_RPSRate 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)GITLAB_MCP_RATE_LIMIT_BURSTToken-bucket burst size when GITLAB_MCP_RATE_LIMIT_RPS is greater than 0 (default: 40)GITLAB_MCP_LOG_LEVELLogging verbosity (default: info)
التوثيق
مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.
GitLab MCP Server
All of GitLab for your AI assistant. Up to 1,103 actions over GitLab's REST and GraphQL APIs, from Free to Ultimate and on GitLab.com, in one self-contained binary that works with Claude, Cursor, VS Code, Codex and any other MCP client. You ask in plain language; it does the GitLab work.
11,343 tokens of startup context by default, the same on every GitLab tier (1,941 with GITLAB_MCP_CAPABILITY_SURFACE=minimal). Two tools reach the whole catalog, where listing every tool as its own costs from 576,788 to 734,051 tokens. Measured with the cl100k_base tokenizer and checked in CI. How it is measured
"Review merge request !15: is it safe to merge?" · "Why did the last pipeline fail?" · "List open issues assigned to me" · "Generate release notes from v1.0 to v2.0"
Why this server
- Every tier and every instance. Free/CE, Premium and Ultimate, self-managed or GitLab.com with its Orbit knowledge graph. The tier is detected and the catalog follows it.
- The token you already have. A personal, project or group access token with
api, orread_apifor the actions GitLab accepts from it; a fine-grained token, judged action by action from its grant; OAuth in HTTP mode. Each action's tool reference entry says which scope and which fine-grained permissions it needs. - Guard rails. Read-only mode, safe mode (a preview of each write instead of the write), tools excluded by name, and a confirmation before anything destructive.
- Three surfaces, two transports. Two discovery tools by default, one tool per domain or one per action; stdio for a desktop client, or HTTP for a shared deployment that keeps each credential apart. 45 resources and 37 prompts besides.
- Releases you can verify. Signed checksums, an SBOM per binary and build provenance for every artifact.
Install
The buttons register the Docker image, so they need Docker; the Claude Desktop row downloads a native extension instead. Create a personal access token with the api scope (or read_api for the actions GitLab accepts from it; add GITLAB_MCP_READ_ONLY=true when nothing may be written).
Client One-click button Token step
VS Code
prompts you (masked)
Cursor
edit YOUR_GITLAB_TOKEN
LM Studio
edit YOUR_GITLAB_TOKEN
Kiro
edit YOUR_GITLAB_TOKEN
Claude Desktop
settings UI
Claude Code. The registration command never carries the token: -e GITLAB_TOKEN forwards it from the environment Claude Code hands docker.
export GITLAB_TOKEN=glpat-xxxx
claude mcp add gitlab --transport stdio \
-- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest
Any other client runs one of these as the server's command, with GITLAB_TOKEN in the environment it passes:
npx -y @jmrp.io/gitlab-mcp-server # npm, nothing installed first
uvx jmrplens-gitlab-mcp-server # PyPI, nothing installed first
dnx gitlab-mcp-server # NuGet (.NET 10 SDK), nothing installed first
brew install jmrplens/tap/gitlab-mcp-server # Homebrew, macOS and Linux
winget install --id jmrplens.gitlab-mcp-server -e # winget, Windows
docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest
For a self-managed instance, set GITLAB_URL=https://gitlab.example.com beside the token; with the Docker image, also forward it by adding -e GITLAB_URL to the docker arguments, since the container receives only the variables named there (Docker install). Every channel, per-client configuration and verification step is in the installation guide, and an assistant installing it for you will find the same in llms.txt.
To try it first, a public instance runs at https://mcp.jmrp.io/gitlab, and the browser inspector calls it read-only after an OAuth sign-in. Your token and every request pass through that machine, so run it yourself to keep using it; the hosted endpoint page says what it is and is not.
Documentation
Everything else is at docs.jmrp.io/gitlab-mcp-server, in English and Spanish: getting started, configuration, tool surfaces, HTTP server mode, security, privacy and troubleshooting.
Contributing, security and licence
Contributions are welcome here on GitHub; CONTRIBUTING.md describes the workflow, and CODE_OF_CONDUCT.md applies. Report a vulnerability privately, as SECURITY.md describes. The server is MIT licensed (LICENSE).
Maintained by José M. Requena Plens · Project page · Hosted instance: mcp.jmrp.io/gitlab
الأسئلة الشائعة
ما هو GitLab MCP Server؟
Go MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.
كيف أثبّت GitLab MCP Server؟
يعمل كخادم بعيد. في Claude Code: claude mcp add --transport http gitlab-mcp-server 'https://mcp.jmrp.io/gitlab' --header 'Authorization: <Bearer <token>. The endpoint runs in OAuth mode: a client that speaks the OAuth flow needs no header at all and discovers the authorization server from the 401 challenge. A GitLab personal access token also works here, sent as '\''Bearer glpat-...'\'', which keeps clients with no OAuth flow working. It travels per request and is never stored server-side.>'. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.
هل يحتاج GitLab MCP Server إلى مفتاح API؟
نعم. يتطلب GITLAB_TOKEN, Authorization، وتضبطها في إعداداته.
هل GitLab MCP Server مفتوح المصدر؟
نعم. شيفرته متاحة على GitHub بترخيص MIT.
من يصون GitLab MCP Server؟
ينشره jmrplens. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.
من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.