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

GitHub stars npm downloads npm GitHub License Install in VS Code Ask DeepWiki MCP Toplist mcpindex

English | 한국어 | 简体中文

📖 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.

Star History Chart

@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 pasoslist_merge_request_changed_files → diff por lotes get_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-gitlabGitLab MCP A (comunidad estilo CQRS)
Mejor paraFlujos de trabajo de agentes de IAEmpresas multi-instancia / herramientas agrupadas
Modelo de herramientas~261 herramientas granulares + discover_tools~50–60 herramientas agrupadas browse_* / manage_*
Revisión de MRDiff por lotes en 2 pasosVaría
Node.js>=18.17A menudo >=24
LicenciaMITVaría

Comparación completa →

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

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):

  1. Token de Acceso Personal (GITLAB_PERSONAL_ACCESS_TOKEN) — configuración más simple
  2. OAuth2 — Navegador Local (GITLAB_USE_OAUTH) — recomendado para mayor seguridad

Para implementaciones de servidor/remotas:

  1. OAuth2 — Proxy MCP (GITLAB_MCP_OAUTH) — para clientes MCP remotos como Claude.ai
  2. Autorización Remota (REMOTE_AUTHORIZATION) — implementaciones multi-usuario donde cada llamador proporciona su propio token

Rutas de configuración rápida

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 (reemplaza GITLAB_PERSONAL_ACCESS_TOKEN)
  • --api-url - URL de API de GitLab (reemplaza GITLAB_API_URL)
  • --read-only=true - Habilita el modo de solo lectura (reemplaza GITLAB_READ_ONLY_MODE, obsoleto — prefiere --permission-mode=readonly)
  • --permission-mode - Nivel de permiso: readonly, modify (sin herramientas de eliminación) o full (reemplaza GITLAB_PERMISSION_MODE, predeterminado full)
  • --use-wiki=true - Habilita la API de wiki (reemplaza USE_GITLAB_WIKI, heredado — prefiere GITLAB_TOOLSETS=wiki)
  • --use-milestone=true - Habilita la API de hitos (reemplaza USE_MILESTONE, heredado — prefiere GITLAB_TOOLSETS=milestones)
  • --use-pipeline=true - Habilita la API de pipelines (reemplaza USE_PIPELINE, heredado — prefiere GITLAB_TOOLSETS=pipelines)
  • --disable-version-check=true - Desactiva el aviso de nueva versión al inicio (reemplaza GITLAB_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=modify para permitir crear/actualizar mientras bloqueas cada herramienta de eliminación (incluyendo mutaciones de eliminación a través de execute_graphql y acciones push_files delete/move), o GITLAB_PERMISSION_MODE=readonly para acceso de solo lectura. También puedes habilitar grupos de conjuntos de herramientas con GITLAB_TOOLSETS=<group,…>, permitir herramientas individuales con GITLAB_TOOLS=<tool,…> (por ejemplo, grupos de solo lectura más algunas herramientas de escritura específicas), y denegar por patrón con GITLAB_DENIED_TOOLS_REGEX. Las banderas heredadas USE_GITLAB_WIKI / USE_MILESTONE / USE_PIPELINE se 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_OAUTH arriba.

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.

ModoHabilitar conVariable de callbackURI de redirección de GitLab
OAuth localGITLAB_USE_OAUTH=trueGITLAB_OAUTH_REDIRECT_URIhttp://127.0.0.1:8888/callback o tu callback local
OAuth MCP remotoGITLAB_MCP_OAUTH=trueGITLAB_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:

  1. Una URL de servidor HTTPS públicamente accesible (MCP_SERVER_URL) — usa ngrok para pruebas locales
  2. Una aplicación OAuth de GitLab pre-registrada con alcances api (o read_api) — Ve a Admin areaApplications, establece la URI de redirección a {MCP_SERVER_URL}/callback
Variable de EntornoRequeridaDescripción
GITLAB_MCP_OAUTHEstablece a true para habilitar
GITLAB_API_URLURL base de la API de GitLab
GITLAB_OAUTH_APP_IDID de la Aplicación OAuth de GitLab
MCP_SERVER_URLURL HTTPS pública de este servidor MCP
STREAMABLE_HTTPDebe ser true
GITLAB_OAUTH_CALLBACK_PROXYopcionalEstablece a true para usar la URL fija /callback del servidor MCP
GITLAB_OAUTH_SCOPESopcionalAlcances separados por comas (predeterminado: api,read_api,read_user)
GITLAB_OAUTH_ALLOWED_GROUPSopcionalRutas 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_uri

Verifica el redirect_uri en la URL del navegador. Si apunta a un callback de cliente como http://127.0.0.1:xxxxx/.../callback, habilita:

GITLAB_OAUTH_CALLBACK_PROXY=true

No 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 EntornoRequeridaDescripción
REMOTE_AUTHORIZATIONEstablecer en true para habilitar
STREAMABLE_HTTPDebe ser true
ENABLE_DYNAMIC_API_URLopcionalPermitir URL de GitLab por solicitud mediante el encabezado X-GitLab-API-URL
GITLAB_ALLOWED_HOSTSopcionalHosts X-GitLab-API-URL permitidos separados por comas; los hosts GITLAB_API_URL siempre están permitidos
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERYopcionalPermitir 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_ORIGINSopcionalValores permitidos de host/origen público /mcp para protección contra rebinding de DNS
MCP_TRUST_PROXYopcionalConfiar 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_AUTHORIZATION no es compatible con el transporte SSE. Se requiere STREAMABLE_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 (o GITLAB_MCP_OAUTH=true), MCP_TRUST_PROXY=true (detrás de un proxy inverso), MAX_REQUESTS_PER_MINUTE=300, MCP_SERVER_URL o MCP_ALLOWED_HOSTS, HOST, PORT
  • Múltiples implementaciones lado a lado: establece un MCP_SERVER_NAME distinto por instancia (por ejemplo gitlab-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_URL
  • GITLAB_PERSONAL_ACCESS_TOKEN
  • GITLAB_USE_OAUTH
  • REMOTE_AUTHORIZATION
  • MCP_TRUST_PROXY
  • MAX_REQUESTS_PER_MINUTE
  • MAX_SESSIONS
  • MCP_ALLOWED_HOSTS
  • MCP_ALLOWED_ORIGINS
  • GITLAB_MCP_OAUTH
  • GITLAB_OAUTH_CALLBACK_PROXY
  • OAUTH_REGISTER_RATE_LIMIT_PER_HOUR
  • OAUTH_STATELESS_MODE
  • OAUTH_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 /mcp están limitadas a MAX_REQUESTS_PER_MINUTE por 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_SESSIONS sesiones 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).

  1. Ve a tu instancia de GitLab → Área de Administración > Aplicaciones (a nivel de instancia) o Configuración de Usuario > Aplicaciones (personal)
  2. Crea una nueva aplicación con:
    • Confidencial: sin marcar
    • Alcances: api, read_api, read_user (o los alcances que pretendas solicitar mediante GITLAB_OAUTH_SCOPES)
  3. Guarda y copia el ID de Aplicación — este es tu GITLAB_OAUTH_APP_ID

Cómo funciona:

  1. El usuario agrega la URL de tu servidor MCP en Claude.ai
  2. Claude.ai descubre los endpoints OAuth mediante /.well-known/oauth-authorization-server
  3. 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)
  4. 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
  5. El usuario se autentica; GitLab redirige de vuelta a https://claude.ai/api/mcp/auth_callback
  6. Claude.ai envía Authorization: Bearer <token> en cada solicitud MCP
  7. 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:

VariableRequeridaDescripción
GITLAB_MCP_OAUTHEstablecer en true para habilitar
GITLAB_OAUTH_APP_IDID de cliente de la aplicación OAuth de GitLab pre-registrada
MCP_SERVER_URLURL HTTPS pública de tu servidor MCP; también permitida para verificaciones de Host/Origen /mcp
GITLAB_API_URLURL de la API de tu instancia de GitLab (por ejemplo https://gitlab.com/api/v4)
STREAMABLE_HTTPDebe ser true (SSE no es compatible)
GITLAB_OAUTH_SCOPESNoAlcances 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_HOURNoLímite continuo por IP para Registro Dinámico de Clientes (POST /register). Predeterminado 20/hora; rango 11000. 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_URLNoEstablecer true solo para desarrollo HTTP local

Notas Importantes:

  • MCP OAuth solo funciona con transporte HTTP Streamable (SSE=true es 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 /register está limitado a OAUTH_REGISTER_RATE_LIMIT_PER_HOUR por IP de cliente (predeterminado 20/hora). Separado de los límites de /mcp y las cuotas de la API de GitLab. Consulta environment-variables.md.
  • Alternativa de autenticación por encabezado: cuando los encabezados de solicitud Private-Token o JOB-TOKEN está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: Bearer siempre se trata como un token OAuth — usa Private-Token para 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
  1. merge_merge_request - Fusionar una solicitud de fusión (merge request)
  2. approve_merge_request - Aprobar una solicitud de fusión
  3. unapprove_merge_request - Desaprobar una solicitud de fusión
  4. get_merge_request_approval_state - Obtener detalles de aprobación de una solicitud de fusión, incluidos los aprobadores
  5. get_merge_request_conflicts - Obtener los conflictos de una solicitud de fusión
  6. list_merge_request_pipelines - Listar pipelines de una solicitud de fusión con paginación
  7. execute_graphql - Ejecutar una consulta GraphQL de GitLab
  8. create_or_update_file - Crear o actualizar un archivo en un proyecto de GitLab
  9. search_repositories - Buscar proyectos de GitLab
  10. create_repository - Crear un nuevo proyecto de GitLab
  11. create_group - Crear un nuevo grupo o subgrupo
  12. get_file_contents - Obtener el contenido de un archivo o directorio de un proyecto de GitLab
  13. push_files - Subir múltiples archivos en un solo commit
  14. create_issue - Crear un nuevo issue
  15. create_merge_request - Crear una nueva solicitud de fusión
  16. fork_repository - Hacer fork de un proyecto a tu cuenta o namespace especificado
  17. create_branch - Crear una nueva rama
  18. get_branch - Obtener detalles de la rama (commit, estado de protección)
  19. list_branches - Listar ramas en el proyecto con filtro de búsqueda
  20. delete_branch - Eliminar rama del proyecto
  21. list_protected_branches - Listar ramas protegidas en un proyecto, admite filtro de búsqueda
  22. get_protected_branch - Obtener detalles de una rama protegida individual (niveles de acceso, configuración de push forzado)
  23. protect_branch - Proteger una rama del repositorio (establecer niveles de acceso de push/merge/desprotección)
  24. unprotect_branch - Eliminar la protección de una rama previamente protegida
  25. update_default_branch - Cambiar la rama predeterminada de un proyecto
  26. get_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ón
  27. get_merge_request_diffs - Obtener los cambios/diffs de una solicitud de fusión (se requiere mergeRequestIid o branchName)
  28. 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)
  29. list_merge_request_diffs - Listar diffs de solicitudes de fusión con paginación (se requiere mergeRequestIid o branchName)
  30. get_merge_request_file_diff - Obtener diffs de archivos específicos de una solicitud de fusión (se requiere mergeRequestIid o branchName)
  31. list_merge_request_versions - Listar todas las versiones de una solicitud de fusión
  32. get_merge_request_version - Obtener una versión específica de una solicitud de fusión
  33. get_branch_diffs - Obtener diffs entre dos ramas o commits
  34. update_merge_request - Actualizar una solicitud de fusión (se requiere mergeRequestIid o branchName)
  35. create_note - Crear una nueva nota (comentario) en un issue o solicitud de fusión
  36. create_merge_request_thread - Crear un nuevo hilo en una solicitud de fusión
  37. resolve_merge_request_thread - Resolver un hilo en una solicitud de fusión
  38. mr_discussions - Listar elementos de discusión de una solicitud de fusión
  39. delete_merge_request_discussion_note - Eliminar una nota de discusión en una solicitud de fusión
  40. update_merge_request_discussion_note - Actualizar una nota de discusión en una solicitud de fusión
  41. create_merge_request_discussion_note - Agregar una nueva nota de discusión a un hilo existente de solicitud de fusión
  42. create_merge_request_note - Agregar una nueva nota a una solicitud de fusión
  43. delete_merge_request_note - Eliminar una nota existente de solicitud de fusión
  44. get_merge_request_note - Obtener una nota específica de una solicitud de fusión
  45. get_merge_request_notes - Listar notas de una solicitud de fusión
  46. update_merge_request_note - Modificar una nota existente de solicitud de fusión
  47. get_draft_note - Obtener una nota borrador individual de una solicitud de fusión
  48. list_draft_notes - Listar notas borrador de una solicitud de fusión
  49. create_draft_note - Crear una nota borrador para una solicitud de fusión
  50. update_draft_note - Actualizar una nota borrador existente
  51. delete_draft_note - Eliminar una nota borrador
  52. publish_draft_note - Publicar una nota borrador individual
  53. bulk_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.
  54. list_merge_request_emoji_reactions - Listar todas las reacciones emoji en una solicitud de fusión
  55. list_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.
  56. create_merge_request_emoji_reaction - Agregar una reacción emoji a una solicitud de fusión (p. ej., thumbsup, rocket, eyes)
  57. delete_merge_request_emoji_reaction - Eliminar una reacción emoji de una solicitud de fusión
  58. create_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.
  59. 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.
  60. update_issue_note - Modificar una nota de hilo existente de un issue
  61. create_issue_note - Agregar una nota a un issue, opcionalmente respondiendo a un hilo de discusión
  62. list_issue_emoji_reactions - Listar todas las reacciones emoji en un issue
  63. list_issue_note_emoji_reactions - Listar todas las reacciones emoji en una nota de issue. Pasa discussion_id para respuestas en hilos de discusión.
  64. create_issue_emoji_reaction - Agregar una reacción emoji a un issue (p. ej., thumbsup, rocket, eyes)
  65. delete_issue_emoji_reaction - Eliminar una reacción emoji de un issue
  66. create_issue_note_emoji_reaction - Agregar una reacción emoji a una nota de issue. Pasa discussion_id para respuestas en hilos de discusión.
  67. 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.
  68. list_issues - Listar issues (predeterminado: creados por el usuario actual; usa scope='all' para todos)
  69. my_issues - Listar issues asignados al usuario autenticado
  70. get_issue - Obtener detalles de un issue específico. Devuelve un milestone resumido por defecto; establece full_response=true para el objeto milestone completo
  71. update_issue - Actualizar un issue. Devuelve una confirmación resumida por defecto; establece full_response=true para el objeto de issue actualizado completo
  72. update_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.
  73. delete_issue - Eliminar un issue
  74. list_todos - Listar elementos de tareas pendientes (to-do) de GitLab para el usuario actual
  75. mark_todo_done - Marcar un elemento de tareas pendientes de GitLab como completado
  76. mark_all_todos_done - Marcar todos los elementos de tareas pendientes de GitLab como completados para el usuario actual
  77. list_issue_links - Listar todos los enlaces de issue para un issue específico
  78. list_issue_discussions - Listar discusiones de un issue
  79. get_issue_link - Obtener un enlace de issue específico
  80. create_issue_link - Crear un enlace de issue entre dos issues
  81. delete_issue_link - Eliminar un enlace de issue
  82. list_namespaces - Listar todos los namespaces (usuarios y grupos) disponibles para el usuario actual. Filtra por kind='group' para solo grupos.
  83. get_namespace - Obtener detalles de un namespace (usuario o grupo) por ID o ruta. Los grupos son namespaces con kind='group'.
  84. 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.
  85. get_project - Obtener detalles de un proyecto específico
  86. list_projects - Listar proyectos accesibles por el usuario actual
  87. update_project - Actualizar configuraciones del proyecto como descripción, visibilidad, rama predeterminada y niveles de acceso a funciones
  88. list_project_members - Listar miembros de un proyecto de GitLab
  89. list_group_members - Listar miembros de un grupo de GitLab con búsqueda opcional por nombre o nombre de usuario
  90. list_labels - Listar etiquetas de un proyecto
  91. get_label - Obtener una etiqueta individual de un proyecto
  92. create_label - Crear una nueva etiqueta en un proyecto
  93. update_label - Actualizar una etiqueta existente en un proyecto
  94. delete_label - Eliminar una etiqueta de un proyecto
  95. list_group_projects - Listar proyectos en un grupo
  96. list_wiki_pages - Listar páginas wiki en un proyecto
  97. get_wiki_page - Obtener detalles de una página wiki específica
  98. create_wiki_page - Crear una página wiki en un proyecto
  99. update_wiki_page - Actualizar una página wiki en un proyecto
  100. delete_wiki_page - Eliminar una página wiki de un proyecto
  101. list_group_wiki_pages - Listar páginas wiki en un grupo
  102. get_group_wiki_page - Obtener detalles de una página wiki específica de un grupo
  103. create_group_wiki_page - Crear una página wiki en un grupo
  104. update_group_wiki_page - Actualizar una página wiki en un grupo
  105. delete_group_wiki_page - Eliminar una página wiki de un grupo
  106. get_repository_tree - Listar archivos y directorios en un repositorio
  107. list_pipelines - Listar pipelines con opciones de filtrado
  108. get_pipeline - Obtener detalles de un pipeline específico
  109. get_pipeline_variables - Obtener variables configuradas para un pipeline
  110. get_pipeline_test_report - Obtener informe de pruebas del pipeline
  111. get_pipeline_test_report_summary - Obtener resumen del informe de pruebas del pipeline
  112. delete_pipeline - Eliminar un pipeline. Requiere el rol de propietario del proyecto, no se puede deshacer y no elimina automáticamente los pipelines secundarios.
  113. update_pipeline_metadata - Actualizar metadatos del pipeline
  114. list_deployments - Listar despliegues con opciones de filtrado
  115. get_deployment - Obtener detalles del despliegue, incluidos approval_summary, approvals y pending_approval_count cuando GitLab los proporciona
  116. create_deployment - Crear un despliegue
  117. update_deployment - Actualizar el estado de un despliegue
  118. delete_deployment - Eliminar un despliegue
  119. list_deployment_merge_requests - Listar solicitudes de fusión enviadas con un despliegue
  120. approve_deployment - Aprobar o rechazar un despliegue de entorno protegido
  121. list_environments - Listar entornos en un proyecto
  122. get_environment - Obtener detalles de un entorno específico
  123. update_environment - Actualizar un entorno
  124. delete_environment - Eliminar un entorno detenido
  125. stop_environment - Detener un entorno
  126. stop_stale_environments - Detener entornos obsoletos elegibles; los entornos protegidos están excluidos y los entornos se detienen, no se eliminan
  127. delete_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=false
  128. list_pipeline_triggers - Listar tokens de activación de pipelines del proyecto
  129. get_pipeline_trigger - Obtener un activador de pipeline del proyecto
  130. create_pipeline_trigger - Crear un activador de pipeline del proyecto
  131. update_pipeline_trigger - Actualizar un activador de pipeline del proyecto
  132. delete_pipeline_trigger - Eliminar un activador de pipeline del proyecto
  133. trigger_pipeline - Activar un pipeline con un token de activación de pipeline
  134. list_pipeline_jobs - Listar todos los jobs en un pipeline específico
  135. list_pipeline_trigger_jobs - Listar jobs de activación (bridges) en un pipeline
  136. get_pipeline_job - Obtener detalles de un número de job de pipeline de GitLab
  137. get_pipeline_job_output - Obtener la salida/trace de un job de pipeline con paginación opcional
  138. validate_ci_lint - Validar el contenido YAML de GitLab CI/CD proporcionado para un proyecto
  139. validate_project_ci_lint - Validar una configuración .gitlab-ci.yml existente para un proyecto
  140. list_ci_catalog_resources - Listar recursos/componentes del Catálogo de GitLab CI/CD visibles para el usuario
  141. get_ci_catalog_resource - Obtener detalles de un recurso del Catálogo de GitLab CI/CD, incluidas versiones y componentes
  142. create_pipeline - Crear un nuevo pipeline para una rama o etiqueta
  143. retry_pipeline - Reintentar un pipeline fallido o cancelado
  144. cancel_pipeline - Cancelar un pipeline en ejecución
  145. list_pipeline_schedules - Listar programaciones de pipeline en un proyecto, opcionalmente filtradas por activas o inactivas
  146. get_pipeline_schedule - Obtener detalles de una programación de pipeline específica, incluidas sus variables y el último pipeline
  147. list_pipeline_schedule_pipelines - Listar los pipelines que una programación de pipeline ha activado
  148. create_pipeline_schedule - Crear una nueva programación de pipeline para una rama o etiqueta
  149. update_pipeline_schedule - Actualizar una programación de pipeline existente
  150. delete_pipeline_schedule - Eliminar una programación de pipeline
  151. play_pipeline_schedule - Ejecutar una programación de pipeline inmediatamente
  152. take_ownership_pipeline_schedule - Tomar propiedad de una programación de pipeline
  153. get_pipeline_schedule_variable - Obtener una variable individual de una programación de pipeline
  154. create_pipeline_schedule_variable - Crear una variable para una programación de pipeline
  155. update_pipeline_schedule_variable - Actualizar una variable de una programación de pipeline
  156. delete_pipeline_schedule_variable - Eliminar una variable de una programación de pipeline
  157. play_pipeline_job - Ejecutar un job de pipeline manual
  158. play_pipeline_jobs - Reproducir múltiples jobs de pipeline manuales secuencialmente
  159. retry_pipeline_job - Reintentar un trabajo de pipeline fallido o cancelado
  160. cancel_pipeline_job - Cancelar un trabajo de pipeline en ejecución
  161. erase_pipeline_job - Borrar el registro y los artefactos de un trabajo de pipeline
  162. wait_for_pipeline - Esperar a que un pipeline alcance un estado terminal
  163. wait_for_job - Esperar a que un trabajo alcance un estado terminal
  164. list_job_artifacts - Listar archivos de artefactos en el archivo de un trabajo
  165. download_job_artifacts - Descargar el archivo de artefactos del trabajo (zip) y guardarlo en una ruta local
  166. get_job_artifact_file - Obtener el contenido de un solo archivo de los artefactos de un trabajo
  167. list_merge_requests - Listar solicitudes de fusión (sin project_id: MRs del usuario; con project_id: MRs del proyecto)
  168. list_group_merge_requests - Listar solicitudes de fusión en todos los proyectos de un grupo y sus subgrupos
  169. list_milestones - Listar hitos con opciones de filtrado
  170. get_milestone - Obtener detalles de un hito específico
  171. create_milestone - Crear un nuevo hito
  172. edit_milestone - Editar un hito existente
  173. delete_milestone - Eliminar un hito
  174. get_milestone_issue - Obtener problemas asociados con un hito específico
  175. get_milestone_merge_requests - Obtener solicitudes de fusión asociadas con un hito específico
  176. promote_milestone - Promover un hito a la siguiente etapa
  177. get_milestone_burndown_events - Obtener eventos de burndown para un hito específico
  178. list_group_milestones - Listar hitos de grupo con opciones de filtrado
  179. get_group_milestone - Obtener detalles de un hito de grupo específico
  180. create_group_milestone - Crear un nuevo hito de grupo
  181. edit_group_milestone - Editar un hito de grupo existente
  182. delete_group_milestone - Eliminar un hito de grupo
  183. get_group_milestone_issue - Obtener problemas asociados con un hito de grupo específico
  184. get_group_milestone_merge_requests - Obtener solicitudes de fusión asociadas con un hito de grupo específico
  185. get_group_milestone_burndown_events - Obtener eventos de burndown para un hito de grupo específico
  186. get_users - Obtener detalles de usuarios de GitLab por nombres de usuario
  187. get_user - Obtener detalles de usuario por ID
  188. whoami - Obtener detalles del usuario autenticado actual
  189. list_commits - Listar commits del repositorio con opciones de filtrado
  190. get_commit - Obtener detalles de un commit específico
  191. get_commit_diff - Obtener cambios/diffs de un commit específico
  192. get_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.
  193. list_commit_statuses - Listar estados para un commit
  194. create_commit_status - Crear o actualizar el estado de un commit
  195. list_group_iterations - Listar iteraciones de grupo con opciones de filtrado
  196. upload_markdown - Subir un archivo para usar en contenido markdown
  197. download_attachment - Descargar un archivo subido de un proyecto (imágenes devueltas como base64; usa local_path para guardar en disco)
  198. 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.
  199. list_events - Listar eventos para el usuario autenticado (before/after: YYYY-MM-DD)
  200. get_project_events - Listar eventos para un proyecto (before/after: YYYY-MM-DD)
  201. list_releases - Listar todos los lanzamientos de un proyecto
  202. get_release - Obtener un lanzamiento por nombre de etiqueta
  203. create_release - Crear un nuevo lanzamiento
  204. update_release - Actualizar un lanzamiento existente
  205. delete_release - Eliminar un lanzamiento (no elimina la etiqueta)
  206. create_release_evidence - Crear evidencia de lanzamiento (Premium/Ultimate)
  207. download_release_asset - Descargar un archivo de activo de lanzamiento por ruta directa de activo
  208. list_tags - Listar etiquetas de repositorio para un proyecto
  209. get_tag - Obtener una etiqueta de repositorio por nombre
  210. create_tag - Crear una nueva etiqueta de repositorio
  211. delete_tag - Eliminar una etiqueta de repositorio
  212. get_tag_signature - Obtener la firma X.509 de una etiqueta firmada (404 si no está firmada)
  213. get_work_item - Obtener un elemento de trabajo con detalles completos, incluidos estado, jerarquía, tipo y widgets
  214. list_work_items - Listar elementos de trabajo con filtros (tipo, estado, búsqueda, asignados, etiquetas)
  215. create_work_item - Crear un elemento de trabajo (problema, tarea, incidente, épica, etc.) con soporte completo de campos
  216. update_work_item - Actualizar un elemento de trabajo (título, descripción, etiquetas, asignados, estado, padre, campos personalizados, etc.)
  217. convert_work_item_type - Convertir un elemento de trabajo a un tipo diferente
  218. list_work_item_statuses - Listar estados disponibles para un tipo de elemento de trabajo (Premium/Ultimate)
  219. list_custom_field_definitions - Listar definiciones de campos personalizados para un tipo de elemento de trabajo
  220. move_work_item - Mover un elemento de trabajo a un proyecto diferente
  221. list_work_item_notes - Listar notas y discusiones en un elemento de trabajo
  222. create_work_item_note - Añadir una nota a un elemento de trabajo (soporta Markdown, notas internas, hilos)
  223. list_work_item_emoji_reactions - Listar todas las reacciones emoji en un elemento de trabajo
  224. list_work_item_note_emoji_reactions - Listar todas las reacciones emoji en una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)
  225. create_work_item_emoji_reaction - Añadir una reacción emoji a un elemento de trabajo (p. ej. thumbsup, rocket, eyes)
  226. delete_work_item_emoji_reaction - Eliminar una reacción emoji de un elemento de trabajo
  227. create_work_item_note_emoji_reaction - Añadir una reacción emoji a una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)
  228. delete_work_item_note_emoji_reaction - Eliminar una reacción emoji de una nota de elemento de trabajo (comentario, hilo o respuesta de hilo)
  229. get_timeline_events - Listar eventos de línea de tiempo para un incidente
  230. create_timeline_event - Crear un evento de línea de tiempo en un incidente
  231. list_webhooks - Listar webhooks para un proyecto o grupo
  232. create_webhook - Crear un webhook en un proyecto o grupo
  233. update_webhook - Actualizar un webhook existente de proyecto o grupo
  234. delete_webhook - Eliminar un webhook de proyecto o grupo
  235. list_webhook_events - Listar eventos de webhook recientes (últimos 7 días)
  236. get_webhook_event - Obtener detalles completos de un evento de webhook específico
  237. search_code - Buscar código en todos los proyectos (requiere búsqueda avanzada o Zoekt)
  238. search_project_code - Buscar código dentro de un proyecto específico (requiere búsqueda avanzada o Zoekt)
  239. search_group_code - Buscar código dentro de un grupo específico (requiere búsqueda avanzada o Zoekt)
  240. list_project_variables - Listar variables de CI/CD para un proyecto
  241. get_project_variable - Obtener una sola variable de CI/CD de un proyecto
  242. create_project_variable - Crear una variable de CI/CD para un proyecto
  243. update_project_variable - Actualizar una variable de CI/CD existente en un proyecto
  244. delete_project_variable - Eliminar una variable de CI/CD de un proyecto
  245. list_group_variables - Listar variables de CI/CD para un grupo
  246. get_group_variable - Obtener una sola variable de CI/CD de un grupo
  247. create_group_variable - Crear una variable de CI/CD para un grupo
  248. update_group_variable - Actualizar una variable de CI/CD existente en un grupo
  249. delete_group_variable - Eliminar una variable de CI/CD de un grupo
  250. get_dependency_proxy_settings - Obtener configuración del proxy de dependencias para un grupo
  251. update_dependency_proxy_settings - Actualizar configuración del proxy de dependencias para un grupo (habilitar/deshabilitar, credenciales para extracciones autenticadas de Docker Hub)
  252. list_dependency_proxy_blobs - Listar blobs en caché del proxy de dependencias para un grupo
  253. purge_dependency_proxy_cache - Programar purga de todos los blobs en caché del proxy de dependencias para un grupo
  254. list_project_vulnerabilities - Listar vulnerabilidades para un proyecto con filtros opcionales de estado, gravedad y tipo de informe (respaldado por GraphQL, paginación por cursor)
  255. get_vulnerability - Obtener detalles completos de una vulnerabilidad específica
  256. dismiss_vulnerability - Descartar una vulnerabilidad con una razón (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) y comentario opcional
  257. confirm_vulnerability - Confirmar una vulnerabilidad como hallazgo real que requiere remediación
  258. orbit_query - Ejecutar una consulta de grafo GitLab Orbit sobre el grafo de conocimiento SDLC indexado
  259. orbit_get_schema - Obtener el esquema actual del grafo de GitLab Orbit (tipos de nodos y aristas)
  260. orbit_get_status - Verificar el estado de indexación de GitLab Orbit para el alcance habilitado
  261. orbit_list_tools - Listar las definiciones de herramientas MCP expuestas por GitLab Orbit
  262. discover_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.