MCP server de GitLab
Commit 14 nov 2026Permite que los clientes de IA interactúen con repositorios, issues, merge requests y pipelines de CI/CD de GitLab a través de la API REST de GitLab.
También conocido como ralscha/gitlab-mcp
- Stars
- 1
- Herramientas
- 33
- Descargas, 30 días
- —
- Última versión
- —
- Último commit
- 14 nov 2026
- Licencia
- MIT
¿Qué es GitLab MCP?
GitLab es un MCP server. Permite que los clientes de IA interactúen con repositorios, issues, merge requests y pipelines de CI/CD de GitLab a través de la API REST de GitLab. Expone 33 herramientas, como gitlab_get_metadata, gitlab_get_current_user, gitlab_list_projects.
Resumen generado a partir del README del proyecto
Acerca del MCP server de GitLab
Gestionar repositorios, issues y pipelines de CI/CD de GitLab mediante un cliente de IA es posible con este MCP server. Se conecta tanto a GitLab.com como a instancias self-managed utilizando la API REST v4 de GitLab. Los desarrolladores pueden elegir entre un modo de solo lectura (readonly) para inspeccionar código y metadatos, o un modo de lectura y escritura (readwrite) para realizar acciones como crear issues, gestionar merge requests o ejecutar pipelines.
La configuración requiere un token de acceso personal, de proyecto o de grupo de GitLab, el cual se proporciona mediante la variable de entorno GITLAB_TOKEN. El servidor admite dos métodos de transporte: stdio para integración local con clientes como Claude Desktop o VS Code, y streamable HTTP para conexiones remotas. Al usar HTTP, se utiliza un token de autenticación MCP independiente para proteger el endpoint. El servidor gestiona tareas complejas como resultados paginados, codificación de archivos para contenido que no sea UTF-8 y reintentos automáticos para solicitudes con límite de tasa.
Escrito a partir del README del proyecto. Cada caso de uso se verifica con una cita del mismo.
Herramientas de GitLab MCP 33
Detectado desde el READMEgitlab_get_metadatagitlab_get_current_usergitlab_list_projectsgitlab_get_projectgitlab_list_issuesgitlab_get_issuegitlab_list_issue_notesgitlab_list_merge_requestsgitlab_get_merge_requestgitlab_list_merge_request_diffsgitlab_list_merge_request_notesgitlab_list_repository_tree
| gitlab_get_metadata | — | |
| gitlab_get_current_user | — | |
| gitlab_list_projects | — | |
| gitlab_get_project | — | |
| gitlab_list_issues | — | |
| gitlab_get_issue | — | |
| gitlab_list_issue_notes | — | |
| gitlab_list_merge_requests | — | |
| gitlab_get_merge_request | — | |
| gitlab_list_merge_request_diffs | — | |
| gitlab_list_merge_request_notes | — | |
| gitlab_list_repository_tree | — |
Mostrar las 33 herramientasMostrar menos herramientas
gitlab_get_filegitlab_list_branchesgitlab_list_commitsgitlab_get_commitgitlab_list_pipelinesgitlab_get_pipelinegitlab_list_pipeline_jobsgitlab_get_jobgitlab_get_job_tracegitlab_searchgitlab_create_issuegitlab_update_issuegitlab_add_issue_notegitlab_create_merge_requestgitlab_update_merge_requestgitlab_add_merge_request_notegitlab_accept_merge_requestgitlab_create_branchgitlab_create_commitgitlab_create_pipelinegitlab_retry_pipeline
| gitlab_get_file | — | |
| gitlab_list_branches | — | |
| gitlab_list_commits | — | |
| gitlab_get_commit | — | |
| gitlab_list_pipelines | — | |
| gitlab_get_pipeline | — | |
| gitlab_list_pipeline_jobs | — | |
| gitlab_get_job | — | |
| gitlab_get_job_trace | — | |
| gitlab_search | — | |
| gitlab_create_issue | — | |
| gitlab_update_issue | — | |
| gitlab_add_issue_note | — | |
| gitlab_create_merge_request | — | |
| gitlab_update_merge_request | — | |
| gitlab_add_merge_request_note | — | |
| gitlab_accept_merge_request | — | |
| gitlab_create_branch | — | |
| gitlab_create_commit | — | |
| gitlab_create_pipeline | — | |
| gitlab_retry_pipeline | — |
Configuración
GITLAB_BASE_URLGITLAB_MODEGITLAB_TOKEN
| Nombre | Descripción | Tipo |
|---|---|---|
| GITLAB_BASE_URL | — | |
| GITLAB_MODE | — | |
| GITLAB_TOKEN | — |
Verificaciones automáticas
Ejecutado 14 nov 2026Informe completo →Aún no verificado. Un servidor necesita una puntuación de 80, ningún hallazgo grave y suficientes datos para que podamos revisarlo. Cómo funcionan las verificaciones · Qué corregir para obtener más puntos
- Repositorio de origen vinculado y accesibleralscha/gitlab-mcp is public and reachablegithub.com/ralscha/gitlab-mcp ↗Aprobado
- El paquete indica este repositorio como su origenNo verificado
- Procedencia de la compilación (atestación de Sigstore)No verificado
- Licencia de código abierto (OSI)MITspdx.org/licenses/MIT.html ↗Aprobado
- Commit o lanzamiento en el último añoLast commit or release 2026-11-14github.com/ralscha/gitlab-mcp ↗Aprobado
- OpenSSF ScorecardNo verificado
- El nombre del paquete no es similar a un paquete popularNo verificado
- No hay avisos críticos en el paquete ni en sus dependenciasNo verificado
- Sin instrucciones ocultas para el modelo33 tool descriptions and the README read; no override phrases, credential paths or hidden charactersAprobado
- Las herramientas destructivas están etiquetadasNo tool named like delete, drop or execAprobado
- El endpoint remoto responde al handshake de MCPNo verificado
README
Ver en GitHubgitlab-mcp
A Model Context Protocol server for the
current GitLab REST API v4, written in Go
with the official
github.com/modelcontextprotocol/go-sdk.
It supports GitLab.com and GitLab Self-Managed, stdio and streamable HTTP
transports, paginated results, and separate readonly and readwrite modes.
The default is readonly.
Quick start
Using binary releases
Download a pre-built binary from the releases page:
export GITLAB_TOKEN=glpat-your-token
./gitlab-mcp --mode=readonly --transport=http --http-addr=127.0.0.1:8080 \
--auth-token=choose-a-separate-mcp-token
Building from source
Create a GitLab personal, project, or group access token, then run:
export GITLAB_TOKEN=glpat-your-token
go run ./cmd/gitlab-mcp --mode=readonly --transport=http --http-addr=127.0.0.1:8080 \
--auth-token=choose-a-separate-mcp-token
For a self-managed instance:
export GITLAB_BASE_URL=https://gitlab.example.com
export GITLAB_TOKEN=glpat-your-token
go run ./cmd/gitlab-mcp
GITLAB_BASE_URL is the instance URL, without /api/v4; the server appends
the stable GitLab REST API path itself.
Configuration
Flags override environment variables.
| Environment variable | CLI flag | Default | Description |
|---|---|---|---|
GITLAB_BASE_URL |
--gitlab-base-url |
https://gitlab.com |
GitLab instance URL |
GITLAB_TOKEN |
--gitlab-token |
required | Personal, project, or group access token |
GITLAB_MODE |
--mode |
readonly |
readonly or readwrite |
MCP_TRANSPORT |
--transport |
stdio |
stdio or http |
MCP_HTTP_ADDR |
--http-addr |
:8080 |
HTTP listen address |
MCP_AUTH_TOKEN |
--auth-token |
empty | Bearer token required from HTTP MCP clients |
Run gitlab-mcp --version to print the build version.
Tools
Project arguments accept either a numeric project ID or an unescaped full path
such as group/subgroup/project.
Read-only tools
| Tool | Purpose |
|---|---|
gitlab_get_metadata |
Get the connected GitLab version and instance metadata |
gitlab_get_current_user |
Get the user represented by the configured token |
gitlab_list_projects |
List and filter visible projects |
gitlab_get_project |
Get a project by ID or path |
gitlab_list_issues |
List issues in a project or across projects |
gitlab_get_issue |
Get an issue by project and IID |
gitlab_list_issue_notes |
List issue comments and system notes |
gitlab_list_merge_requests |
List merge requests in a project or across projects |
gitlab_get_merge_request |
Get a merge request by project and IID |
gitlab_list_merge_request_diffs |
List the changed files and patches in a merge request |
gitlab_list_merge_request_notes |
List merge request notes |
gitlab_list_repository_tree |
Browse a repository tree |
gitlab_get_file |
Read a repository file at a ref, defaulting to the default branch |
gitlab_list_branches |
List repository branches |
gitlab_list_commits |
List repository commits |
gitlab_get_commit |
Get one commit |
gitlab_list_pipelines |
List project pipelines |
gitlab_get_pipeline |
Get one pipeline |
gitlab_list_pipeline_jobs |
List jobs in a pipeline |
gitlab_get_job |
Get a CI/CD job by its job ID |
gitlab_get_job_trace |
Read a CI/CD job log (up to 1 MiB) |
gitlab_search |
Search globally or within a group or project |
Write tools
These tools are registered only when GITLAB_MODE=readwrite or
--mode=readwrite is set.
| Tool | Purpose |
|---|---|
gitlab_create_issue |
Create an issue |
gitlab_update_issue |
Update, close, or reopen an issue |
gitlab_add_issue_note |
Add an issue note |
gitlab_create_merge_request |
Create a merge request |
gitlab_update_merge_request |
Update, close, or reopen a merge request |
gitlab_add_merge_request_note |
Add a merge request note |
gitlab_accept_merge_request |
Merge now or automatically when all checks pass |
gitlab_create_branch |
Create a branch from a ref |
gitlab_create_commit |
Commit a batch of file create/update/move/delete/chmod actions |
gitlab_create_pipeline |
Run a pipeline, optionally with variables and typed inputs |
gitlab_retry_pipeline |
Retry failed or canceled pipeline jobs |
Issue and merge-request descriptions and notes use GitLab Flavored Markdown
directly, including quick actions
that can change project state. Repository files are capped at 25 MiB decoded.
gitlab_get_file returns encoding: "text" for UTF-8 content and
encoding: "base64" for content that is not valid UTF-8, preserving the bytes
returned by GitLab. Omit
ref to read from HEAD (the project's default branch).
The job tools use the GitLab Jobs API.
Job logs larger than 1 MiB return a size-limit error instead of a partial log;
use the job's web_url to view larger logs in GitLab.
Rate-limited 429 responses are retried up to three times for all replayable
requests. Ambiguous 502, 503, and 504 responses are retried only for
GET, HEAD, OPTIONS, and DELETE requests. Creates and updates are not
retried on these errors, because even updates can execute quick actions more
than once. Retries honor Retry-After, capped at 30 seconds per retry.
Commit actions distinguish omitted content from an empty string. Create and
update actions require content; use "" to create or truncate an empty file.
For move actions, omitting content preserves the file's contents, while ""
empties the moved file.
Merge requests use GitLab's Draft: title convention for draft state. The
merge tool accepts auto_merge to merge when all checks pass; the deprecated
merge_when_pipeline_succeeds input remains available as an alias.
Authentication and token scopes
The server sends the configured token in GitLab's recommended PRIVATE-TOKEN
header. Use the narrowest token and project membership that supports the tools
you enable:
readonly: useread_api; addread_repositorywhen repository content is needed and the token type supports that scope.readwrite: useapi, because issue, merge request, repository, and pipeline writes require API write access.
GitLab authorization still applies to every request. A token cannot access or modify resources that its user, project, or group membership cannot access.
Transports
stdio
gitlab-mcp --transport=stdio
Streamable HTTP
gitlab-mcp --transport=http --http-addr=127.0.0.1:8080 \
--auth-token=choose-a-separate-mcp-token
HTTP clients must then send Authorization: Bearer <mcp-token>. This token
protects the MCP endpoint and is separate from GITLAB_TOKEN. If no MCP auth
token is configured, the HTTP endpoint has no application-level
authentication. The server logs a warning when that is combined with
readwrite mode.
Cross-origin browser POST requests are rejected. Native MCP clients without an
Origin header and same-origin browser clients are supported.
MCP client configuration
Claude Desktop:
{
"mcpServers": {
"gitlab": {
"command": "gitlab-mcp",
"args": [],
"env": {
"GITLAB_BASE_URL": "https://gitlab.com",
"GITLAB_TOKEN": "glpat-your-token",
"GITLAB_MODE": "readonly"
}
}
}
}
VS Code .vscode/mcp.json:
{
"servers": {
"gitlab": {
"command": "gitlab-mcp",
"args": [],
"env": {
"GITLAB_BASE_URL": "https://gitlab.com",
"GITLAB_TOKEN": "glpat-your-token",
"GITLAB_MODE": "readonly"
}
}
}
}
Development
Requires Go 1.27.3 or newer, matching go.mod.
go build ./...
go test ./...
go vet ./...
Tests cover configuration, authentication, project-path and file-path
encoding, pagination headers and links, API errors, safe retry handling, merge
request drafts and diffs, binary file preservation, empty-file commit actions,
job details and logs, tool mode gating, secret-safe CLI help, and end-to-end
stdio and HTTP MCP connections. CI also runs the race detector and go vet.
License
MIT. See LICENSE.
Preguntas sobre GitLab MCP
¿Qué herramientas proporciona GitLab MCP?
Expone 33 herramientas, incluidas gitlab_get_metadata, gitlab_get_current_user, gitlab_list_projects, gitlab_get_project, gitlab_list_issues.
¿Este servidor es compatible con instancias de GitLab self-managed?
Sí, es compatible tanto con GitLab.com como con instancias de GitLab Self-Managed.
¿Puedo usar este servidor para modificar datos de GitLab?
Sí, pero debes configurar explícitamente el modo en 'readwrite' para habilitar herramientas de escritura, como la creación de issues o merge requests.
¿Qué ocurre si el log de un job de GitLab es muy grande?
Si un log de job supera 1 MiB, el servidor devuelve un error de límite de tamaño en lugar de un log parcial.
¿Cómo gestiona el servidor los límites de tasa (rate limits) de la API?
El servidor reintenta automáticamente las respuestas 429 por límite de tasa hasta tres veces.