Better GitLab MCP Server
Un servidor MCP de GitLab mejorado con correcciones de errores y mejoras para acceder a recursos de GitLab.
Documentación
Servidor MCP de GitLab
📖 Documentación → Guías de configuración, variables de entorno y la referencia completa de herramientas están disponibles en el sitio de documentación alojado.
@zereight/mcp-gitlab
GitLab MCP optimizado para flujos de trabajo de agentes — gestiona proyectos, solicitudes de fusión, incidencias, pipelines, wiki, versiones, etiquetas, hitos y más a través de stdio, SSE y HTTP Streamable.
Soporta PAT, OAuth, modo de solo lectura, URLs de API dinámicas y autorización remota para VS Code, Claude, Cursor, Copilot y otros clientes MCP.
¿Por qué usar este GitLab MCP?
- 261 herramientas +
discover_tools— comienza con un conjunto pequeño de herramientas; activa más en tiempo de ejecución sin agrupación estilo CQRS - Revisión de MR en 2 pasos —
list_merge_request_changed_files→ diff por lotesget_merge_request_file_diff - Habilidad de agente integrada — guía de flujo de trabajo en
skills/gitlab-mcp/ - Autenticación flexible — Token de Acceso Personal, flujo de navegador OAuth2 local, proxy OAuth MCP y autorización remota por solicitud
- Múltiples transportes — stdio para clientes locales, SSE para clientes heredados y HTTP Streamable para implementaciones remotas modernas
- Configuración amigable para clientes — ejemplos para Claude Code, Codex, Antigravity, OpenCode, Copilot, Cline, Roo Code, Cursor, Kilo Code y Amp Code
- Listo para autoalojamiento — funciona con instancias personalizadas de GitLab, configuraciones de proxy y enrutamiento dinámico de URLs de API
Cómo nos comparamos
| @zereight/mcp-gitlab | GitLab MCP A (comunidad estilo CQRS) | |
|---|---|---|
| Mejor para | Flujos de trabajo de agentes de IA | Empresas multi-instancia / herramientas agrupadas |
| Modelo de herramientas | ~261 herramientas granulares + discover_tools | ~50–60 herramientas agrupadas browse_* / manage_* |
| Revisión de MR | Diff por lotes en 2 pasos | Varía |
| Node.js | >=18.17 | A menudo >=24 |
| Licencia | MIT | Varía |
Inicio rápido: elige entre Token de Acceso Personal o configuración OAuth2 a continuación, instala @zereight/mcp-gitlab y usa zereight-mcp-gitlab en la configuración de tu cliente MCP.
Guías de Configuración de Clientes
- Guía de Configuración de Claude Code
- Guía de Configuración de VS Code
- Guía de Configuración de GitHub Copilot
- Guía de Configuración de Codex
- Guía de Configuración de Cursor
- Guía de Configuración de Clientes MCP Basados en JSON - para clientes estilo Factory AI Droid, OpenClaw y OpenCode
- Guía de Configuración de Autenticación OAuth2
- Referencia de Variables de Entorno
- Modo Sin Estado — HPA Multi-Pod
- Configuración de Agentes Personalizados y Múltiples PAT
Uso
Descripción General de Configuración
Métodos de Autenticación
El servidor soporta cuatro métodos de autenticación:
Para uso local/de escritorio (más común):
- Token de Acceso Personal (
GITLAB_PERSONAL_ACCESS_TOKEN) — configuración más simple - OAuth2 — Navegador Local (
GITLAB_USE_OAUTH) — recomendado para mayor seguridad
Para implementaciones de servidor/remotas:
- OAuth2 — Proxy MCP (
GITLAB_MCP_OAUTH) — para clientes MCP remotos como Claude.ai - Autorización Remota (
REMOTE_AUTHORIZATION) — implementaciones multi-usuario donde cada llamador proporciona su propio token
Rutas de configuración rápida
- Claude Code: consulta la Guía de Configuración de Claude Code
- VS Code: consulta la Guía de Configuración de VS Code
- GitHub Copilot: consulta la Guía de Configuración de GitHub Copilot
- Codex: consulta la Guía de Configuración de Codex
- Cursor: consulta la Guía de Configuración de Cursor
- Clientes estilo Factory AI Droid / OpenClaw / OpenCode: consulta la Guía de Configuración de Clientes MCP Basados en JSON
- Detalles del flujo de navegador OAuth: consulta la Guía de Configuración de Autenticación OAuth2
- OAuth sin callback de localhost (SSO, shell remoto, clientes en segundo plano): ejecuta
zereight-mcp-gitlab auth(flujo de dispositivo GitLab 17.9+; 17.2–17.8 necesitanoauth2_device_grant_flow), luego inicia el servidor conGITLAB_USE_OAUTH=true. Consulta el comando de flujo de dispositivo independiente.
Para la configuración local más simple, comienza con un Token de Acceso Personal. Para autenticación local basada en navegador, usa OAuth2. Para implementaciones remotas o multi-usuario, continúa con las secciones de OAuth MCP y Autorización Remota más adelante en este README.
Instala el servidor una vez:
brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp
brew install zereight/gitlab-mcp/zereight-mcp-gitlab
O con npm:
npm install -g @zereight/mcp-gitlab
O con Nix, añadiendo este flake al tuyo propio:
# flake.nix
inputs.gitlab-mcp.url = "github:zereight/gitlab-mcp";
# wherever you configure your MCP client:
command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
La ruta de almacenamiento está fijada por tu archivo de bloqueo; actualízala con nix flake update gitlab-mcp.
Los ejemplos usan zereight-mcp-gitlab, un alias menos propenso a colisiones para el binario heredado mcp-gitlab. Si tu cliente MCP no puede encontrarlo, usa la ruta absoluta de which zereight-mcp-gitlab.
¿Sin instalación global? Fija npx a la versión estable anterior (la versión que recomiendan estos documentos), por ejemplo npx -y @zereight/mcp-gitlab@2.1.60. Si siempre quieres la versión más reciente, usa npx -y @zereight/mcp-gitlab@latest en su lugar. El servidor imprime un aviso en stderr al inicio cuando hay una versión más nueva disponible (desactívalo con GITLAB_DISABLE_VERSION_CHECK=true).
Uso de Argumentos CLI (para clientes con problemas de variables de entorno)
Algunos clientes MCP (como GitHub Copilot CLI) tienen problemas con las variables de entorno. Usa argumentos CLI en su lugar:
{
"mcpServers": {
"gitlab": {
"command": "zereight-mcp-gitlab",
"args": ["--token=YOUR_GITLAB_TOKEN", "--api-url=https://gitlab.com/api/v4"],
"tools": ["*"]
}
}
}
Argumentos CLI disponibles:
--token- Token de Acceso Personal de GitLab (reemplazaGITLAB_PERSONAL_ACCESS_TOKEN)--api-url- URL de API de GitLab (reemplazaGITLAB_API_URL)--read-only=true- Habilita el modo de solo lectura (reemplazaGITLAB_READ_ONLY_MODE, obsoleto — prefiere--permission-mode=readonly)--permission-mode- Nivel de permiso:readonly,modify(sin herramientas de eliminación) ofull(reemplazaGITLAB_PERMISSION_MODE, predeterminadofull)--use-wiki=true- Habilita la API de wiki (reemplazaUSE_GITLAB_WIKI, heredado — prefiereGITLAB_TOOLSETS=wiki)--use-milestone=true- Habilita la API de hitos (reemplazaUSE_MILESTONE, heredado — prefiereGITLAB_TOOLSETS=milestones)--use-pipeline=true- Habilita la API de pipelines (reemplazaUSE_PIPELINE, heredado — prefiereGITLAB_TOOLSETS=pipelines)--disable-version-check=true- Desactiva el aviso de nueva versión al inicio (reemplazaGITLAB_DISABLE_VERSION_CHECK)
Los argumentos CLI tienen prioridad sobre las variables de entorno.
zereight-mcp-gitlab auth es un subcomando (no una bandera del servidor MCP). Ejecuta el flujo de dispositivo de GitLab y sale. Consulta Argumentos CLI.
Filtrado fino de herramientas: usa
GITLAB_PERMISSION_MODE=modifypara permitir crear/actualizar mientras bloqueas cada herramienta de eliminación (incluyendo mutaciones de eliminación a través deexecute_graphqly accionespush_filesdelete/move), oGITLAB_PERMISSION_MODE=readonlypara acceso de solo lectura. También puedes habilitar grupos de conjuntos de herramientas conGITLAB_TOOLSETS=<group,…>, permitir herramientas individuales conGITLAB_TOOLS=<tool,…>(por ejemplo, grupos de solo lectura más algunas herramientas de escritura específicas), y denegar por patrón conGITLAB_DENIED_TOOLS_REGEX. Las banderas heredadasUSE_GITLAB_WIKI/USE_MILESTONE/USE_PIPELINEse mantienen solo para compatibilidad hacia atrás. Consulta la Referencia de Herramientas y Variables de Entorno.
- sse
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=wiki,milestones,pipelines \
-e SSE=true \
-e SSE_AUTH_TOKEN=your_mcp_sse_token \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "sse",
"url": "http://localhost:3333/sse",
"headers": {
"Authorization": "Bearer your_mcp_sse_token"
}
}
}
}
- streamable-http
docker run -i --rm \
-e HOST=0.0.0.0 \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=wiki,milestones,pipelines \
-e STREAMABLE_HTTP=true \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "streamable-http",
"url": "http://localhost:3333/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
Uso del Proxy OAuth MCP (GITLAB_MCP_OAUTH)
Solo para implementaciones de servidor/remotas. Este modo requiere que el servidor MCP se implemente con una URL HTTPS públicamente accesible. Para uso local/de escritorio, consulta
GITLAB_USE_OAUTHarriba.
Para clientes MCP remotos que soportan la especificación OAuth MCP (por ejemplo, Claude.ai).
El servidor actúa como un servidor de autorización OAuth 2.0 completo — las solicitudes no autenticadas
reciben una respuesta 401 + WWW-Authenticate, que activa el flujo de navegador OAuth
automáticamente en el lado del cliente.
Los clientes MCP remotos como OpenCode, MCPJam y Claude.ai pueden enviar su propia
URL de callback durante la autorización. Si no puedes registrar cada URL de callback de cliente
en GitLab, habilita GITLAB_OAUTH_CALLBACK_PROXY=true. Con el modo de proxy de callback,
GitLab solo necesita una URI de redirección registrada: {MCP_SERVER_URL}/callback.
GITLAB_OAUTH_REDIRECT_URI es solo para OAuth local (GITLAB_USE_OAUTH). No
anula las URLs de callback de clientes OAuth MCP remotos y no debe usarse para corregir
errores remotos de Unregistered redirect_uri.
Esta variable existe porque el flujo OAuth local inicia un navegador en la misma
máquina que el servidor MCP y escucha el callback en un servidor HTTP local,
por ejemplo http://127.0.0.1:8888/callback.
El OAuth MCP remoto es diferente. En modo GITLAB_MCP_OAUTH=true, el cliente MCP
proporciona su propia URL de callback durante /authorize. GITLAB_OAUTH_REDIRECT_URI
no reemplaza esa URL proporcionada por el cliente.
| Modo | Habilitar con | Variable de callback | URI de redirección de GitLab |
|---|---|---|---|
| OAuth local | GITLAB_USE_OAUTH=true | GITLAB_OAUTH_REDIRECT_URI | http://127.0.0.1:8888/callback o tu callback local |
| OAuth MCP remoto | GITLAB_MCP_OAUTH=true | GITLAB_OAUTH_CALLBACK_PROXY=true | {MCP_SERVER_URL}/callback |
Usa GITLAB_OAUTH_REDIRECT_URI solo cuando el propio servidor MCP posee el
callback del navegador local. Usa GITLAB_OAUTH_CALLBACK_PROXY=true cuando un cliente MCP remoto
posee la URL de callback.
Cómo funciona: Implementas este servidor MCP en algún lugar con una URL HTTPS pública. Los clientes
MCP se conectan a {MCP_SERVER_URL}/mcp. El servidor maneja el flujo OAuth 2.0,
intercambiando credenciales con GitLab en nombre del cliente.
Requisitos previos:
- Una URL de servidor HTTPS públicamente accesible (
MCP_SERVER_URL) — usa ngrok para pruebas locales - Una aplicación OAuth de GitLab pre-registrada con alcances
api(oread_api) — Ve aAdmin area→Applications, establece la URI de redirección a{MCP_SERVER_URL}/callback
| Variable de Entorno | Requerida | Descripción |
|---|---|---|
GITLAB_MCP_OAUTH | ✅ | Establece a true para habilitar |
GITLAB_API_URL | ✅ | URL base de la API de GitLab |
GITLAB_OAUTH_APP_ID | ✅ | ID de la Aplicación OAuth de GitLab |
MCP_SERVER_URL | ✅ | URL HTTPS pública de este servidor MCP |
STREAMABLE_HTTP | ✅ | Debe ser true |
GITLAB_OAUTH_CALLBACK_PROXY | opcional | Establece a true para usar la URL fija /callback del servidor MCP |
GITLAB_OAUTH_SCOPES | opcional | Alcances separados por comas (predeterminado: api,read_api,read_user) |
GITLAB_OAUTH_ALLOWED_GROUPS | opcional | Rutas completas de grupos separadas por comas — solo los miembros (y miembros de subgrupos) pueden obtener un token (reemplaza el obsoleto GITLAB_ALLOWED_GROUPS) |
Cuando STREAMABLE_HTTP=true, las credenciales de GitLab del lado del servidor (GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_JOB_TOKEN, GITLAB_AUTH_COOKIE_PATH o GITLAB_USE_OAUTH) requieren REMOTE_AUTHORIZATION=true, GITLAB_MCP_OAUTH=true o STREAMABLE_HTTP_AUTH_TOKEN.
Solución de problemas
Unregistered redirect_uriVerifica el
redirect_urien la URL del navegador. Si apunta a un callback de cliente comohttp://127.0.0.1:xxxxx/.../callback, habilita:GITLAB_OAUTH_CALLBACK_PROXY=trueNo corrijas OAuth remoto de MCP cambiando
GITLAB_OAUTH_REDIRECT_URI. Esa variable es solo para OAuth local (GITLAB_USE_OAUTH).
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_CALLBACK_PROXY=true \
-e STREAMABLE_HTTP=true \
-e MCP_SERVER_URL=https://your-server.example.com \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_OAUTH_APP_ID=your_app_id \
-p 3000:3002 \
zereight050/gitlab-mcp
Configuración del cliente MCP:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://your-server.example.com/mcp"
}
}
}
Uso de Autorización Remota (REMOTE_AUTHORIZATION)
Solo para implementaciones de servidor/remoto. Cada llamador HTTP proporciona su propio token de GitLab directamente en los encabezados de la solicitud — sin flujo OAuth involucrado.
Para implementaciones multiusuario o multiinquilino donde cada llamador proporciona su propio token de GitLab en el encabezado de la solicitud HTTP. Sin flujo OAuth — el servidor MCP reenvía el token a GitLab en nombre del llamador.
Prioridad de encabezados: Private-Token > JOB-TOKEN > Authorization: Bearer
| Variable de Entorno | Requerida | Descripción |
|---|---|---|
REMOTE_AUTHORIZATION | ✅ | Establecer en true para habilitar |
STREAMABLE_HTTP | ✅ | Debe ser true |
ENABLE_DYNAMIC_API_URL | opcional | Permitir URL de GitLab por solicitud mediante el encabezado X-GitLab-API-URL |
GITLAB_ALLOWED_HOSTS | opcional | Hosts X-GitLab-API-URL permitidos separados por comas; los hosts GITLAB_API_URL siempre están permitidos |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY | opcional | Permitir solo initialize, notifications/initialized, tools/list y server/discover no autenticados (las llamadas a herramientas aún requieren autenticación) |
MCP_SERVER_URL / MCP_ALLOWED_HOSTS / MCP_ALLOWED_ORIGINS | opcional | Valores permitidos de host/origen público /mcp para protección contra rebinding de DNS |
MCP_TRUST_PROXY | opcional | Confiar en los encabezados Forwarded / X-Forwarded-* detrás de un proxy inverso (URLs de descarga, req.ip de Express, límites de tasa IP /mcp, límites de tasa OAuth) |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY=true está destinado a puertas de enlace MCP
o interfaces de administración que necesitan inspeccionar metadatos de herramientas antes de que un usuario proporcione un token de GitLab.
Déjalo deshabilitado a menos que la lista de herramientas sea segura de exponer en tu implementación.
Cuando MCP_SERVER_URL no está establecido, las URLs de descarga remota recurren a la
dirección del servidor local. Establece MCP_TRUST_PROXY=true solo si el servidor es accesible a través de un
proxy inverso confiable y el acceso directo del cliente al servidor MCP está bloqueado.
Esto habilita trust proxy de Express para Streamable HTTP y SSE, deriva
URLs de descarga públicas de Forwarded / X-Forwarded-Proto / X-Forwarded-Host /
X-Forwarded-Prefix, y mantiene el límite de tasa del endpoint OAuth funcionando cuando
los proxies envían X-Forwarded-For con un puerto de cliente (por ejemplo 1.2.3.4:5678).
Las implementaciones existentes de OAuth+proxy deben establecer esto explícitamente después de que se
introdujo la bandera.
Ejemplo de encabezados de solicitud:
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
o usando un token Bearer:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
⚠️
REMOTE_AUTHORIZATIONno es compatible con el transporte SSE. Se requiereSTREAMABLE_HTTP=true.
Variables de Entorno
Usa la referencia dedicada para la lista completa de variables de entorno:
La mayoría de los usuarios solo necesitan uno de estos conjuntos iniciales:
- PAT local:
GITLAB_PERSONAL_ACCESS_TOKEN,GITLAB_API_URL - OAuth local:
GITLAB_USE_OAUTH=true,GITLAB_OAUTH_CLIENT_ID,GITLAB_OAUTH_REDIRECT_URI,GITLAB_API_URL - HTTP remoto multiusuario:
STREAMABLE_HTTP=true,REMOTE_AUTHORIZATION=true(oGITLAB_MCP_OAUTH=true),MCP_TRUST_PROXY=true(detrás de un proxy inverso),MAX_REQUESTS_PER_MINUTE=300,MCP_SERVER_URLoMCP_ALLOWED_HOSTS,HOST,PORT - Múltiples implementaciones lado a lado: establece un
MCP_SERVER_NAMEdistinto por instancia (por ejemplogitlab-selfhosted-readonly) para que clientes, registros y telemetría puedan distinguirlas - HPA multipod (sin estado): lo anterior +
OAUTH_STATELESS_MODE=true,OAUTH_STATELESS_SECRET(igual en todos los pods). Consulta Modo Sin Estado.
Variables comúnmente referenciadas:
GITLAB_API_URLGITLAB_PERSONAL_ACCESS_TOKENGITLAB_USE_OAUTHREMOTE_AUTHORIZATIONMCP_TRUST_PROXYMAX_REQUESTS_PER_MINUTEMAX_SESSIONSMCP_ALLOWED_HOSTSMCP_ALLOWED_ORIGINSGITLAB_MCP_OAUTHGITLAB_OAUTH_CALLBACK_PROXYOAUTH_REGISTER_RATE_LIMIT_PER_HOUROAUTH_STATELESS_MODEOAUTH_STATELESS_SECRET
El documento de referencia también cubre:
- variables de autenticación y OAuth
- variables de proxy OAuth de MCP
- variables de filtrado de proyectos y herramientas
- descubrimiento dinámico de herramientas mediante
discover_tools(activación de conjuntos de herramientas bajo demanda) - variables de transporte y sesión
- variables de proxy y TLS
Para detalles del modo de proxy de callback, consulta Proxy de Callback OAuth de GitLab MCP.
Configuración de Autorización Remota (Soporte Multiusuario)
Al usar REMOTE_AUTHORIZATION=true, el servidor MCP puede soportar múltiples usuarios, cada uno con su propio token de GitLab pasado mediante encabezados HTTP. Esto es útil para:
- Instancias de servidor MCP compartidas donde cada usuario necesita su propio acceso a GitLab
- Integraciones de IDE que pueden inyectar tokens específicos de usuario en solicitudes MCP
Ejemplo de Configuración:
# Start server with remote authorization
docker run -d \
-e HOST=0.0.0.0 \
-e STREAMABLE_HTTP=true \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e SESSION_TIMEOUT_SECONDS=3600 \
-p 3333:3002 \
zereight050/gitlab-mcp
Configuración del Cliente:
Tu IDE o cliente MCP debe enviar uno de estos encabezados con cada solicitud:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
o
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
El token se almacena por sesión (identificada por el encabezado mcp-session-id) y se reutiliza para solicitudes posteriores en la misma sesión.
Ejemplo de Configuración de Cliente de Autorización Remota con Cursor
{
"mcpServers": {
"GitLab": {
"url": "http(s)://<your_mcp_gitlab_server>/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
Notas Importantes:
- La autorización remota solo funciona con transporte Streamable HTTP
- Cada sesión está aislada: los tokens de una sesión no pueden acceder a los datos de otra sesión Los tokens se limpian automáticamente cuando las sesiones se cierran
- Tiempo de espera de sesión: Los tokens de autenticación expiran después de
SESSION_TIMEOUT_SECONDS(predeterminado 1 hora) de inactividad. Después del tiempo de espera, el cliente debe enviar los encabezados de autenticación nuevamente. La sesión de transporte permanece activa. - Cada solicitud restablece el temporizador de tiempo de espera para esa sesión
- Límite de tasa: Las solicitudes
/mcpestán limitadas aMAX_REQUESTS_PER_MINUTEpor IP de cliente, y por sesión MCP cuando se usa OAuth o autorización remota (predeterminado 60). Consulta environment-variables.md. - Límite de capacidad: El servidor acepta hasta
MAX_SESSIONSsesiones concurrentes (predeterminado 1000)
Configuración de OAuth de MCP (OAuth Nativo de Claude.ai)
Al usar GITLAB_MCP_OAUTH=true, el servidor actúa como un proxy OAuth hacia tu instancia de GitLab.
Claude.ai (y cualquier cliente compatible con la especificación MCP) maneja todo el flujo
de autenticación del navegador automáticamente — sin necesidad de gestión manual de Tokens de Acceso Personal.
Requisitos previos:
Se requiere una aplicación OAuth de GitLab pre-registrada. GitLab restringe las aplicaciones
registradas dinámicamente (no verificadas) al alcance mcp, que es insuficiente para llamadas
a la API (se necesita api o read_api).
- Ve a tu instancia de GitLab → Área de Administración > Aplicaciones (a nivel de instancia) o Configuración de Usuario > Aplicaciones (personal)
- Crea una nueva aplicación con:
- Confidencial: sin marcar
- Alcances:
api,read_api,read_user(o los alcances que pretendas solicitar medianteGITLAB_OAUTH_SCOPES)
- Guarda y copia el ID de Aplicación — este es tu
GITLAB_OAUTH_APP_ID
Cómo funciona:
- El usuario agrega la URL de tu servidor MCP en Claude.ai
- Claude.ai descubre los endpoints OAuth mediante
/.well-known/oauth-authorization-server - Claude.ai se registra mediante Registro Dinámico de Clientes (
POST /register) — manejado localmente por el servidor MCP (cada cliente obtiene un ID de cliente virtual) - Claude.ai redirige el navegador del usuario a la página de inicio de sesión de GitLab usando la aplicación OAuth pre-registrada
- El usuario se autentica; GitLab redirige de vuelta a
https://claude.ai/api/mcp/auth_callback - Claude.ai envía
Authorization: Bearer <token>en cada solicitud MCP - El servidor valida el token con GitLab y lo almacena por sesión
Configuración del servidor:
docker run -d \
-e STREAMABLE_HTTP=true \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_APP_ID="your-gitlab-oauth-app-client-id" \
-e GITLAB_API_URL="https://gitlab.example.com/api/v4" \
-e MCP_SERVER_URL="https://your-mcp-server.example.com" \
-p 3002:3002 \
zereight050/gitlab-mcp
Para desarrollo local (HTTP permitido):
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL=true \
STREAMABLE_HTTP=true \
GITLAB_MCP_OAUTH=true \
GITLAB_OAUTH_APP_ID=your-gitlab-oauth-app-client-id \
MCP_SERVER_URL=http://localhost:3002 \
GITLAB_API_URL=https://gitlab.com/api/v4 \
node build/index.js
Configuración de Claude.ai:
{
"mcpServers": {
"GitLab": {
"url": "https://your-mcp-server.example.com/mcp"
}
}
}
No se necesita el campo headers — Claude.ai obtiene el token mediante OAuth automáticamente.
Variables de entorno:
| Variable | Requerida | Descripción |
|---|---|---|
GITLAB_MCP_OAUTH | Sí | Establecer en true para habilitar |
GITLAB_OAUTH_APP_ID | Sí | ID de cliente de la aplicación OAuth de GitLab pre-registrada |
MCP_SERVER_URL | Sí | URL HTTPS pública de tu servidor MCP; también permitida para verificaciones de Host/Origen /mcp |
GITLAB_API_URL | Sí | URL de la API de tu instancia de GitLab (por ejemplo https://gitlab.com/api/v4) |
STREAMABLE_HTTP | Sí | Debe ser true (SSE no es compatible) |
GITLAB_OAUTH_SCOPES | No | Alcances de GitLab separados por comas a solicitar (por ejemplo api,read_user). Predeterminado a api (o read_api cuando GITLAB_READ_ONLY_MODE=true). La aplicación pre-registrada debe estar configurada con al menos estos alcances. |
OAUTH_REGISTER_RATE_LIMIT_PER_HOUR | No | Límite continuo por IP para Registro Dinámico de Clientes (POST /register). Predeterminado 20/hora; rango 1–1000. Auméntalo cuando los clientes (por ejemplo, múltiples ventanas de IDE) alcancen la limitación de registro. No es un límite de API de GitLab. |
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL | No | Establecer true solo para desarrollo HTTP local |
Notas Importantes:
- MCP OAuth solo funciona con transporte HTTP Streamable (
SSE=truees incompatible) - Cada sesión de usuario almacena su propio token OAuth — las sesiones están completamente aisladas
- El tiempo de espera de sesión, la limitación de velocidad y los límites de capacidad se aplican de manera idéntica al
modo
REMOTE_AUTHORIZATION(SESSION_TIMEOUT_SECONDS,MAX_REQUESTS_PER_MINUTE,MAX_SESSIONS) - Limitación de velocidad DCR:
POST /registerestá limitado aOAUTH_REGISTER_RATE_LIMIT_PER_HOURpor IP de cliente (predeterminado 20/hora). Separado de los límites de/mcpy las cuotas de la API de GitLab. Consulta environment-variables.md. - Alternativa de autenticación por encabezado: cuando los encabezados de solicitud
Private-TokenoJOB-TOKENestán presentes, se omite la validación OAuth y el token sin procesar se usa directamente para esa sesión. Esto permite que los PAT y los tokens de trabajo de CI se usen junto con el flujo OAuth en la misma instancia del servidor.Authorization: Bearersiempre se trata como un token OAuth — usaPrivate-Tokenpara la autenticación por encabezado basada en PAT.
Archivos de habilidades del agente
Los archivos de habilidades precompilados están disponibles en skills/gitlab-mcp/ para agentes de IA que admiten la carga de habilidades/instrucciones (Claude Code, GitHub Copilot, Cursor, etc.).
- SKILL.md — Guía principal (~800 tokens) con descripción general del conjunto de herramientas, flujos de trabajo clave y sugerencias de parámetros
- reference/ — Documentación detallada de flujos de trabajo para revisión de código, solicitudes de fusión, problemas, pipelines y clasificación de vulnerabilidades
Instala con la CLI skills:
npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill
Registra el directorio de habilidades en tu cliente de IA para obtener una guía óptima de uso de herramientas sin depender únicamente de la respuesta completa de ListTools.
Herramientas 🛠️
Haz clic para expandir
merge_merge_request- Fusionar una solicitud de fusión (merge request)approve_merge_request- Aprobar una solicitud de fusiónunapprove_merge_request- Desaprobar una solicitud de fusiónget_merge_request_approval_state- Obtener detalles de aprobación de una solicitud de fusión, incluidos los aprobadoresget_merge_request_conflicts- Obtener los conflictos de una solicitud de fusiónlist_merge_request_pipelines- Listar pipelines de una solicitud de fusión con paginaciónexecute_graphql- Ejecutar una consulta GraphQL de GitLabcreate_or_update_file- Crear o actualizar un archivo en un proyecto de GitLabsearch_repositories- Buscar proyectos de GitLabcreate_repository- Crear un nuevo proyecto de GitLabcreate_group- Crear un nuevo grupo o subgrupoget_file_contents- Obtener el contenido de un archivo o directorio de un proyecto de GitLabpush_files- Subir múltiples archivos en un solo commitcreate_issue- Crear un nuevo issuecreate_merge_request- Crear una nueva solicitud de fusiónfork_repository- Hacer fork de un proyecto a tu cuenta o namespace especificadocreate_branch- Crear una nueva ramaget_branch- Obtener detalles de la rama (commit, estado de protección)list_branches- Listar ramas en el proyecto con filtro de búsquedadelete_branch- Eliminar rama del proyectolist_protected_branches- Listar ramas protegidas en un proyecto, admite filtro de búsquedaget_protected_branch- Obtener detalles de una rama protegida individual (niveles de acceso, configuración de push forzado)protect_branch- Proteger una rama del repositorio (establecer niveles de acceso de push/merge/desprotección)unprotect_branch- Eliminar la protección de una rama previamente protegidaupdate_default_branch- Cambiar la rama predeterminada de un proyectoget_merge_request- Obtener detalles de una solicitud de fusión (se requiere mergeRequestIid o branchName). Establece include_summaries=true para resúmenes de despliegue/commit/aprobaciónget_merge_request_diffs- Obtener los cambios/diffs de una solicitud de fusión (se requiere mergeRequestIid o branchName)list_merge_request_changed_files- Listar rutas de archivos modificados en una solicitud de fusión sin contenido de diff (se requiere mergeRequestIid o branchName)list_merge_request_diffs- Listar diffs de solicitudes de fusión con paginación (se requiere mergeRequestIid o branchName)get_merge_request_file_diff- Obtener diffs de archivos específicos de una solicitud de fusión (se requiere mergeRequestIid o branchName)list_merge_request_versions- Listar todas las versiones de una solicitud de fusiónget_merge_request_version- Obtener una versión específica de una solicitud de fusiónget_branch_diffs- Obtener diffs entre dos ramas o commitsupdate_merge_request- Actualizar una solicitud de fusión (se requiere mergeRequestIid o branchName)create_note- Crear una nueva nota (comentario) en un issue o solicitud de fusióncreate_merge_request_thread- Crear un nuevo hilo en una solicitud de fusiónresolve_merge_request_thread- Resolver un hilo en una solicitud de fusiónmr_discussions- Listar elementos de discusión de una solicitud de fusióndelete_merge_request_discussion_note- Eliminar una nota de discusión en una solicitud de fusiónupdate_merge_request_discussion_note- Actualizar una nota de discusión en una solicitud de fusióncreate_merge_request_discussion_note- Agregar una nueva nota de discusión a un hilo existente de solicitud de fusióncreate_merge_request_note- Agregar una nueva nota a una solicitud de fusióndelete_merge_request_note- Eliminar una nota existente de solicitud de fusiónget_merge_request_note- Obtener una nota específica de una solicitud de fusiónget_merge_request_notes- Listar notas de una solicitud de fusiónupdate_merge_request_note- Modificar una nota existente de solicitud de fusiónget_draft_note- Obtener una nota borrador individual de una solicitud de fusiónlist_draft_notes- Listar notas borrador de una solicitud de fusióncreate_draft_note- Crear una nota borrador para una solicitud de fusiónupdate_draft_note- Actualizar una nota borrador existentedelete_draft_note- Eliminar una nota borradorpublish_draft_note- Publicar una nota borrador individualbulk_publish_draft_notes- Publicar todas las notas borrador de una solicitud de fusión. Opcionalmente establece reviewer_state y publica una nota de resumen (GitLab 19.2+). Puede establecer reviewer_state incluso sin borradores.list_merge_request_emoji_reactions- Listar todas las reacciones emoji en una solicitud de fusiónlist_merge_request_note_emoji_reactions- Listar todas las reacciones emoji en una nota de solicitud de fusión. Pasa discussion_id para respuestas en hilos de discusión.create_merge_request_emoji_reaction- Agregar una reacción emoji a una solicitud de fusión (p. ej., thumbsup, rocket, eyes)delete_merge_request_emoji_reaction- Eliminar una reacción emoji de una solicitud de fusióncreate_merge_request_note_emoji_reaction- Agregar una reacción emoji a una nota de solicitud de fusión. Pasa discussion_id para respuestas en hilos de discusión.delete_merge_request_note_emoji_reaction- Eliminar una reacción emoji de una nota de solicitud de fusión. Pasa discussion_id para respuestas en hilos de discusión.update_issue_note- Modificar una nota de hilo existente de un issuecreate_issue_note- Agregar una nota a un issue, opcionalmente respondiendo a un hilo de discusiónlist_issue_emoji_reactions- Listar todas las reacciones emoji en un issuelist_issue_note_emoji_reactions- Listar todas las reacciones emoji en una nota de issue. Pasa discussion_id para respuestas en hilos de discusión.create_issue_emoji_reaction- Agregar una reacción emoji a un issue (p. ej., thumbsup, rocket, eyes)delete_issue_emoji_reaction- Eliminar una reacción emoji de un issuecreate_issue_note_emoji_reaction- Agregar una reacción emoji a una nota de issue. Pasa discussion_id para respuestas en hilos de discusión.delete_issue_note_emoji_reaction- Eliminar una reacción emoji de una nota de issue. Pasa discussion_id para respuestas en hilos de discusión.list_issues- Listar issues (predeterminado: creados por el usuario actual; usa scope='all' para todos)my_issues- Listar issues asignados al usuario autenticadoget_issue- Obtener detalles de un issue específico. Devuelve un milestone resumido por defecto; establece full_response=true para el objeto milestone completoupdate_issue- Actualizar un issue. Devuelve una confirmación resumida por defecto; establece full_response=true para el objeto de issue actualizado completoupdate_issue_description_patch- Aplicar un parche (buscar/reemplazar o diff unificado) a la descripción de un issue. Reduce el uso de tokens al permitir cambios pequeños sin enviar la descripción completa. Admite dry_run para previsualizar cambios y create_note para resumir actualizaciones.delete_issue- Eliminar un issuelist_todos- Listar elementos de tareas pendientes (to-do) de GitLab para el usuario actualmark_todo_done- Marcar un elemento de tareas pendientes de GitLab como completadomark_all_todos_done- Marcar todos los elementos de tareas pendientes de GitLab como completados para el usuario actuallist_issue_links- Listar todos los enlaces de issue para un issue específicolist_issue_discussions- Listar discusiones de un issueget_issue_link- Obtener un enlace de issue específicocreate_issue_link- Crear un enlace de issue entre dos issuesdelete_issue_link- Eliminar un enlace de issuelist_namespaces- Listar todos los namespaces (usuarios y grupos) disponibles para el usuario actual. Filtra por kind='group' para solo grupos.get_namespace- Obtener detalles de un namespace (usuario o grupo) por ID o ruta. Los grupos son namespaces con kind='group'.verify_namespace- Verificar si existe una ruta de namespace. Usa parent_id para limitar la verificación a un namespace principal específico: requerido para namespaces anidados donde la misma ruta puede existir bajo diferentes padres.get_project- Obtener detalles de un proyecto específicolist_projects- Listar proyectos accesibles por el usuario actualupdate_project- Actualizar configuraciones del proyecto como descripción, visibilidad, rama predeterminada y niveles de acceso a funcioneslist_project_members- Listar miembros de un proyecto de GitLablist_group_members- Listar miembros de un grupo de GitLab con búsqueda opcional por nombre o nombre de usuariolist_labels- Listar etiquetas de un proyectoget_label- Obtener una etiqueta individual de un proyectocreate_label- Crear una nueva etiqueta en un proyectoupdate_label- Actualizar una etiqueta existente en un proyectodelete_label- Eliminar una etiqueta de un proyectolist_group_projects- Listar proyectos en un grupolist_wiki_pages- Listar páginas wiki en un proyectoget_wiki_page- Obtener detalles de una página wiki específicacreate_wiki_page- Crear una página wiki en un proyectoupdate_wiki_page- Actualizar una página wiki en un proyectodelete_wiki_page- Eliminar una página wiki de un proyectolist_group_wiki_pages- Listar páginas wiki en un grupoget_group_wiki_page- Obtener detalles de una página wiki específica de un grupocreate_group_wiki_page- Crear una página wiki en un grupoupdate_group_wiki_page- Actualizar una página wiki en un grupodelete_group_wiki_page- Eliminar una página wiki de un grupoget_repository_tree- Listar archivos y directorios en un repositoriolist_pipelines- Listar pipelines con opciones de filtradoget_pipeline- Obtener detalles de un pipeline específicoget_pipeline_variables- Obtener variables configuradas para un pipelineget_pipeline_test_report- Obtener informe de pruebas del pipelineget_pipeline_test_report_summary- Obtener resumen del informe de pruebas del pipelinedelete_pipeline- Eliminar un pipeline. Requiere el rol de propietario del proyecto, no se puede deshacer y no elimina automáticamente los pipelines secundarios.update_pipeline_metadata- Actualizar metadatos del pipelinelist_deployments- Listar despliegues con opciones de filtradoget_deployment- Obtener detalles del despliegue, incluidos approval_summary, approvals y pending_approval_count cuando GitLab los proporcionacreate_deployment- Crear un despliegueupdate_deployment- Actualizar el estado de un desplieguedelete_deployment- Eliminar un desplieguelist_deployment_merge_requests- Listar solicitudes de fusión enviadas con un despliegueapprove_deployment- Aprobar o rechazar un despliegue de entorno protegidolist_environments- Listar entornos en un proyectoget_environment- Obtener detalles de un entorno específicoupdate_environment- Actualizar un entornodelete_environment- Eliminar un entorno detenidostop_environment- Detener un entornostop_stale_environments- Detener entornos obsoletos elegibles; los entornos protegidos están excluidos y los entornos se detienen, no se eliminandelete_review_app_environments- Programar la eliminación de entornos de review-app detenidos una semana después; dry_run predeterminado es true y la programación real requiere dry_run=falselist_pipeline_triggers- Listar tokens de activación de pipelines del proyectoget_pipeline_trigger- Obtener un activador de pipeline del proyectocreate_pipeline_trigger- Crear un activador de pipeline del proyectoupdate_pipeline_trigger- Actualizar un activador de pipeline del proyectodelete_pipeline_trigger- Eliminar un activador de pipeline del proyectotrigger_pipeline- Activar un pipeline con un token de activación de pipelinelist_pipeline_jobs- Listar todos los jobs en un pipeline específicolist_pipeline_trigger_jobs- Listar jobs de activación (bridges) en un pipelineget_pipeline_job- Obtener detalles de un número de job de pipeline de GitLabget_pipeline_job_output- Obtener la salida/trace de un job de pipeline con paginación opcionalvalidate_ci_lint- Validar el contenido YAML de GitLab CI/CD proporcionado para un proyectovalidate_project_ci_lint- Validar una configuración .gitlab-ci.yml existente para un proyectolist_ci_catalog_resources- Listar recursos/componentes del Catálogo de GitLab CI/CD visibles para el usuarioget_ci_catalog_resource- Obtener detalles de un recurso del Catálogo de GitLab CI/CD, incluidas versiones y componentescreate_pipeline- Crear un nuevo pipeline para una rama o etiquetaretry_pipeline- Reintentar un pipeline fallido o canceladocancel_pipeline- Cancelar un pipeline en ejecuciónlist_pipeline_schedules- Listar programaciones de pipeline en un proyecto, opcionalmente filtradas por activas o inactivasget_pipeline_schedule- Obtener detalles de una programación de pipeline específica, incluidas sus variables y el último pipelinelist_pipeline_schedule_pipelines- Listar los pipelines que una programación de pipeline ha activadocreate_pipeline_schedule- Crear una nueva programación de pipeline para una rama o etiquetaupdate_pipeline_schedule- Actualizar una programación de pipeline existentedelete_pipeline_schedule- Eliminar una programación de pipelineplay_pipeline_schedule- Ejecutar una programación de pipeline inmediatamentetake_ownership_pipeline_schedule- Tomar propiedad de una programación de pipelineget_pipeline_schedule_variable- Obtener una variable individual de una programación de pipelinecreate_pipeline_schedule_variable- Crear una variable para una programación de pipelineupdate_pipeline_schedule_variable- Actualizar una variable de una programación de pipelinedelete_pipeline_schedule_variable- Eliminar una variable de una programación de pipelineplay_pipeline_job- Ejecutar un job de pipeline manualplay_pipeline_jobs- Reproducir múltiples jobs de pipeline manuales secuencialmenteretry_pipeline_job- Reintentar un trabajo de pipeline fallido o canceladocancel_pipeline_job- Cancelar un trabajo de pipeline en ejecuciónerase_pipeline_job- Borrar el registro y los artefactos de un trabajo de pipelinewait_for_pipeline- Esperar a que un pipeline alcance un estado terminalwait_for_job- Esperar a que un trabajo alcance un estado terminallist_job_artifacts- Listar archivos de artefactos en el archivo de un trabajodownload_job_artifacts- Descargar el archivo de artefactos del trabajo (zip) y guardarlo en una ruta localget_job_artifact_file- Obtener el contenido de un solo archivo de los artefactos de un trabajolist_merge_requests- Listar solicitudes de fusión (sin project_id: MRs del usuario; con project_id: MRs del proyecto)list_group_merge_requests- Listar solicitudes de fusión en todos los proyectos de un grupo y sus subgruposlist_milestones- Listar hitos con opciones de filtradoget_milestone- Obtener detalles de un hito específicocreate_milestone- Crear un nuevo hitoedit_milestone- Editar un hito existentedelete_milestone- Eliminar un hitoget_milestone_issue- Obtener problemas asociados con un hito específicoget_milestone_merge_requests- Obtener solicitudes de fusión asociadas con un hito específicopromote_milestone- Promover un hito a la siguiente etapaget_milestone_burndown_events- Obtener eventos de burndown para un hito específicolist_group_milestones- Listar hitos de grupo con opciones de filtradoget_group_milestone- Obtener detalles de un hito de grupo específicocreate_group_milestone- Crear un nuevo hito de grupoedit_group_milestone- Editar un hito de grupo existentedelete_group_milestone- Eliminar un hito de grupoget_group_milestone_issue- Obtener problemas asociados con un hito de grupo específicoget_group_milestone_merge_requests- Obtener solicitudes de fusión asociadas con un hito de grupo específicoget_group_milestone_burndown_events- Obtener eventos de burndown para un hito de grupo específicoget_users- Obtener detalles de usuarios de GitLab por nombres de usuarioget_user- Obtener detalles de usuario por IDwhoami- Obtener detalles del usuario autenticado actuallist_commits- Listar commits del repositorio con opciones de filtradoget_commit- Obtener detalles de un commit específicoget_commit_diff- Obtener cambios/diffs de un commit específicoget_file_blame- Obtener git blame para un archivo en una ref dada. Cada entrada asigna un rango contiguo de líneas de origen al commit que las modificó por última vez (id, author, authored_date, message). Usa range_start/range_end para limitar el blame a líneas específicas.list_commit_statuses- Listar estados para un commitcreate_commit_status- Crear o actualizar el estado de un commitlist_group_iterations- Listar iteraciones de grupo con opciones de filtradoupload_markdown- Subir un archivo para usar en contenido markdowndownload_attachment- Descargar un archivo subido de un proyecto (imágenes devueltas como base64; usa local_path para guardar en disco)health_check- Verificar el estado del servidor y la autenticación. Cuando está autenticado, también informa la versión de la instancia de GitLab desde GET /api/v4/version (version, revision, enterprise). Los fallos en la obtención de la versión no hacen fallar la verificación de salud — esos campos se omiten.list_events- Listar eventos para el usuario autenticado (before/after: YYYY-MM-DD)get_project_events- Listar eventos para un proyecto (before/after: YYYY-MM-DD)list_releases- Listar todos los lanzamientos de un proyectoget_release- Obtener un lanzamiento por nombre de etiquetacreate_release- Crear un nuevo lanzamientoupdate_release- Actualizar un lanzamiento existentedelete_release- Eliminar un lanzamiento (no elimina la etiqueta)create_release_evidence- Crear evidencia de lanzamiento (Premium/Ultimate)download_release_asset- Descargar un archivo de activo de lanzamiento por ruta directa de activolist_tags- Listar etiquetas de repositorio para un proyectoget_tag- Obtener una etiqueta de repositorio por nombrecreate_tag- Crear una nueva etiqueta de repositoriodelete_tag- Eliminar una etiqueta de repositorioget_tag_signature- Obtener la firma X.509 de una etiqueta firmada (404 si no está firmada)get_work_item- Obtener un elemento de trabajo con detalles completos, incluidos estado, jerarquía, tipo y widgetslist_work_items- Listar elementos de trabajo con filtros (tipo, estado, búsqueda, asignados, etiquetas)create_work_item- Crear un elemento de trabajo (problema, tarea, incidente, épica, etc.) con soporte completo de camposupdate_work_item- Actualizar un elemento de trabajo (título, descripción, etiquetas, asignados, estado, padre, campos personalizados, etc.)convert_work_item_type- Convertir un elemento de trabajo a un tipo diferentelist_work_item_statuses- Listar estados disponibles para un tipo de elemento de trabajo (Premium/Ultimate)list_custom_field_definitions- Listar definiciones de campos personalizados para un tipo de elemento de trabajomove_work_item- Mover un elemento de trabajo a un proyecto diferentelist_work_item_notes- Listar notas y discusiones en un elemento de trabajocreate_work_item_note- Añadir una nota a un elemento de trabajo (soporta Markdown, notas internas, hilos)list_work_item_emoji_reactions- Listar todas las reacciones emoji en un elemento de trabajolist_work_item_note_emoji_reactions- Listar todas las reacciones emoji en una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)create_work_item_emoji_reaction- Añadir una reacción emoji a un elemento de trabajo (p. ej. thumbsup, rocket, eyes)delete_work_item_emoji_reaction- Eliminar una reacción emoji de un elemento de trabajocreate_work_item_note_emoji_reaction- Añadir una reacción emoji a una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)delete_work_item_note_emoji_reaction- Eliminar una reacción emoji de una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)get_timeline_events- Listar eventos de línea de tiempo para un incidentecreate_timeline_event- Crear un evento de línea de tiempo en un incidentelist_webhooks- Listar webhooks para un proyecto o grupocreate_webhook- Crear un webhook en un proyecto o grupoupdate_webhook- Actualizar un webhook existente de proyecto o grupodelete_webhook- Eliminar un webhook de proyecto o grupolist_webhook_events- Listar eventos de webhook recientes (últimos 7 días)get_webhook_event- Obtener detalles completos de un evento de webhook específicosearch_code- Buscar código en todos los proyectos (requiere búsqueda avanzada o Zoekt)search_project_code- Buscar código dentro de un proyecto específico (requiere búsqueda avanzada o Zoekt)search_group_code- Buscar código dentro de un grupo específico (requiere búsqueda avanzada o Zoekt)list_project_variables- Listar variables de CI/CD para un proyectoget_project_variable- Obtener una sola variable de CI/CD de un proyectocreate_project_variable- Crear una variable de CI/CD para un proyectoupdate_project_variable- Actualizar una variable de CI/CD existente en un proyectodelete_project_variable- Eliminar una variable de CI/CD de un proyectolist_group_variables- Listar variables de CI/CD para un grupoget_group_variable- Obtener una sola variable de CI/CD de un grupocreate_group_variable- Crear una variable de CI/CD para un grupoupdate_group_variable- Actualizar una variable de CI/CD existente en un grupodelete_group_variable- Eliminar una variable de CI/CD de un grupoget_dependency_proxy_settings- Obtener configuración del proxy de dependencias para un grupoupdate_dependency_proxy_settings- Actualizar configuración del proxy de dependencias para un grupo (habilitar/deshabilitar, credenciales para extracciones autenticadas de Docker Hub)list_dependency_proxy_blobs- Listar blobs en caché del proxy de dependencias para un grupopurge_dependency_proxy_cache- Programar purga de todos los blobs en caché del proxy de dependencias para un grupolist_project_vulnerabilities- Listar vulnerabilidades para un proyecto con filtros opcionales de estado, gravedad y tipo de informe (respaldado por GraphQL, paginación por cursor)get_vulnerability- Obtener detalles completos de una vulnerabilidad específicadismiss_vulnerability- Descartar una vulnerabilidad con una razón (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) y comentario opcionalconfirm_vulnerability- Confirmar una vulnerabilidad como hallazgo real que requiere remediaciónorbit_query- Ejecutar una consulta de grafo GitLab Orbit sobre el grafo de conocimiento SDLC indexadoorbit_get_schema- Obtener el esquema actual del grafo de GitLab Orbit (tipos de nodos y aristas)orbit_get_status- Verificar el estado de indexación de GitLab Orbit para el alcance habilitadoorbit_list_tools- Listar las definiciones de herramientas MCP expuestas por GitLab Orbitdiscover_tools- Descubrir y activar categorías adicionales de herramientas para esta sesión. Categorías disponibles: merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities, orbit. Las categorías ya activas se enumeran en la respuesta.
Títulos de páginas wiki vs. slugs
GitLab deriva el slug de una página wiki (su URL, /-/wikis/<slug>) a partir del título de la página. Pasar title a update_wiki_page / update_group_wiki_page por lo tanto renombra la página y cambia su URL — para páginas anidadas también puede mover la página a una ruta diferente — lo que rompe los enlaces existentes.
Para cambiar solo el título mostrado manteniendo la URL estable, no pases title. En su lugar, almacena el título mostrado en el front matter YAML del contenido de la página y actualiza el contenido:
---
title: My Custom Display Title
---
Page body…
GitLab mantiene el slug/URL sin cambios y muestra el título del front matter en la interfaz. Léelo de vuelta con get_wiki_page usando render_html: true, que completa el campo front_matter — el campo simple title siempre refleja el valor derivado del slug.
Pruebas 🧪
El proyecto incluye una cobertura de pruebas integral que incluye autorización remota:
# Run all tests (API validation + remote auth)
npm test
# Run only remote authorization tests
npm run test:remote-auth
# Run all tests including readonly MCP tests
npm run test:all
# Run only API validation
npm run test:integration
Todas las pruebas de autorización remota usan un servidor GitLab simulado y no requieren credenciales reales de GitLab.
