Gitlab MCP Server

Servidor del Protocolo de Contexto de Modelo (MCP) para GitLab: expone 1006 operaciones de las API REST y GraphQL de GitLab como herramientas MCP (28 meta-herramientas / 43 empresariales), 24 recursos, 38 indicaciones y 17 tipos de completado para asistentes de IA. Escrito en Go, binario estático único, transporte stdio y HTTP.

Documentación

GitLab MCP Server — GitLab for your AI assistant: one action catalog, three MCP tool surfaces

Servidor MCP de GitLab

GitHub Release npm PyPI NuGet License: MIT Platform

CI Quality Gate Coverage Go Reference

Glama MCP Score

MCP Badge MCP Toplist Cursor Directory Hosted endpoint

Conecta tu asistente de IA a GitLab para que pueda revisar merge requests, diagnosticar pipelines, gestionar issues y redactar releases — en lenguaje natural. Un único binario estático (o un contenedor), más de 1000 herramientas de GitLab sobre la API completa REST + GraphQL, compatible con Claude, Cursor, VS Code y cualquier cliente MCP.

Tú hablas con tu asistente de IA; él hace el trabajo en GitLab. Sin IDs de proyecto, endpoints de API ni JSON que recordar.

10 359 tokens de contexto de inicio por defecto, igual en todos los niveles de GitLab (1 694 con GITLAB_MCP_CAPABILITY_SURFACE=minimal). Dos herramientas alcanzan todo el catálogo; medido con el tokenizador cl100k_base y verificado en CI en cada commit. Cómo se mide

"Revisa el merge request !15 — ¿es seguro fusionarlo?" · "¿Por qué falló el último pipeline?" · "Lista los issues abiertos asignados a mí" · "Genera notas de release de v1.0 a v2.0"


🤖 ¿Usas un asistente de IA? Dale la URL de este repositorio y pídele que instale el servidor para tu cliente. Todo lo que un modelo necesita para hacerlo sin intervención — la configuración declarativa por cliente, los one-liners de claude mcp add y los valores predeterminados — está en llms.txt (sin asistente interactivo requerido).

Instalación en 60 segundos

Elige una opción. Cada camino termina con que escribes un prompt a tu asistente. Cada canal tiene una guía completa: Instalación.

¿Quieres mirar antes de instalar? El inspector de navegador inicia sesión con OAuth y llama al endpoint alojado en modo solo lectura desde una pestaña del navegador — sin descargar nada. Ejecutarlo tú mismo sigue siendo la forma de seguir usándolo.

Instalación con un clic

ClienteBotón de un clicPaso del token
VS CodeInstall in VS Codete solicita (enmascarado)
VS Code InsidersInstall in VS Code Insiderste solicita (enmascarado)
CursorInstall in Cursoredita YOUR_GITLAB_TOKEN
LM StudioAdd to LM Studioedita YOUR_GITLAB_TOKEN
KiroAdd to Kiroedita YOUR_GITLAB_TOKEN
Claude DesktopDownload .mcpb extensioninterfaz de ajustes

Cada botón registra el servidor basado en Docker (descarga automáticamente la imagen en la primera ejecución; necesitas Docker instalado). La fila de Claude Desktop en su lugar descarga una extensión de escritorio .mcpb nativa (macOS universal, Windows y Linux amd64 y arm64; sin Docker). Ábrela con Claude Desktop, o en Linux usa Extensiones > Instalar extensión..., y completa los ajustes. ¿Necesitas un token? Crea un Personal Access Token con el alcance api. ¿GitLab auto-gestionado? Añade una variable de entorno GITLAB_URL en la configuración MCP de tu cliente después de la instalación.

Claude Code (claude mcp add)

Docker (sin instalación — descarga la imagen en la primera ejecución):

claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx --transport stdio \
  -- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest

O instala primero el binario nativo y luego regístralo:

# Any platform (npm/pnpm) — downloads only your platform's prebuilt binary
npx -y @jmrp.io/gitlab-mcp-server          # zero install; clients launch it directly
npm install -g @jmrp.io/gitlab-mcp-server  # or install globally (npm)
pnpm add -g @jmrp.io/gitlab-mcp-server     # or globally (pnpm)
# Any platform (Python: uv/pipx/pip) — platform wheel carrying the same native binary
uvx jmrplens-gitlab-mcp-server             # zero install; clients launch it directly
pipx install jmrplens-gitlab-mcp-server    # or install globally (pipx)
pip install jmrplens-gitlab-mcp-server     # or into the active environment (pip)
# Linux wheels need glibc; on musl systems such as Alpine use the Docker image instead
# Any platform (.NET 10 SDK) — a .NET tool whose entry point is the same native binary
dnx gitlab-mcp-server                      # zero install; clients launch it directly
dotnet tool install -g gitlab-mcp-server   # or install globally (dotnet tool)
# macOS/Linux (Homebrew)
brew install jmrplens/tap/gitlab-mcp-server
# Linux/macOS (script)
curl -fsSL https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.sh | sh
# Windows (winget)
winget install --id jmrplens.gitlab-mcp-server -e
# Windows (PowerShell)
irm https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.ps1 | iex

claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx -- gitlab-mcp-server

Los clientes que lanzan servidores con npx, uvx o dnx no necesitan instalación en absoluto — apúntalos a npx -y @jmrp.io/gitlab-mcp-server, uvx jmrplens-gitlab-mcp-server o dnx gitlab-mcp-server.

¿GitLab auto-gestionado? Añade --env GITLAB_URL=https://gitlab.example.com (y, para un certificado autofirmado, monta la CA y establece --env SSL_CERT_FILE=/path/to/ca-bundle.crt; GITLAB_MCP_SKIP_TLS_VERIFY=true es la alternativa contundente, y el modo OAuth la rechaza para una instancia que no sea de loopback).

Ejecútalo una vez para verificar la instalación

Iniciado en una terminal, o con doble clic en Windows, sin GITLAB_TOKEN configurado, el binario imprime qué es y qué necesita y espera Enter, para que puedas confirmar la instalación antes de configurar nada. La configuración en sí vive en el JSON de tu cliente MCP, abajo.

JSON manual (Claude Desktop, Cursor, VS Code, …)

Mostrar configuración JSON para binario nativo y Docker

Binario nativo (Claude Desktop mcpServers, Cursor, etc.):

{
  "mcpServers": {
    "gitlab": {
      "command": "/path/to/gitlab-mcp-server",
      "env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
    }
  }
}

VS Code (.vscode/mcp.json, nota servers + type):

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "/path/to/gitlab-mcp-server",
      "env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
    }
  }
}

Variante Docker — reemplaza "command"/"args" con:

"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITLAB_TOKEN", "ghcr.io/jmrplens/gitlab-mcp-server:latest"]

Cline (VS Code) — abre la barra lateral de Cline → icono de servidores MCP → Editar MCP global, o edita el archivo de ajustes directamente:

  • macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Windows: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json

Cline usa la forma mcpServers mostrada arriba para el binario nativo.

Para un despliegue HTTP compartido de larga duración en lugar de stdio por usuario, consulta Modo servidor HTTP.

Pruébalo sin instalar nada (endpoint alojado)

Una instancia pública se ejecuta en https://mcp.jmrp.io/gitlab — nada que instalar, sin cuenta más allá de tu propio token de GitLab. Apunta cualquier cliente MCP compatible con HTTP hacia ella:

{
  "mcpServers": {
    "gitlab": {
      "type": "http",
      "url": "https://mcp.jmrp.io/gitlab",
      "headers": { "Authorization": "Bearer glpat-xxxxxxxxxxxx" }
    }
  }
}

El endpoint se ejecuta en modo OAuth, por lo que la credencial viaja como Authorization: Bearer — un personal access token de GitLab funciona allí, verificado exactamente como uno de OAuth, que es lo que mantiene funcionando a los clientes sin flujo OAuth (y el uso sin interfaz). Viaja por solicitud y nunca se almacena en el servidor. Un cliente que habla el flujo OAuth no necesita ningún encabezado: el 401 lleva un desafío RFC 9728 que sigue para autorizar en el navegador. PRIVATE-TOKEN es el encabezado de modo heredado y no se acepta aquí; la instancia está fijada a https://gitlab.com, por lo que GITLAB-URL se ignora.

Un token read_api se acepta y recibe una superficie de herramientas de solo lectura — la verificación de escritura es por acción, por lo que una credencial que no puede romper nada es una forma compatible de usar el endpoint en lugar de una rechazada.

Dos páginas lo hacen aún más fácil. La tarjeta del servidor lista todo el catálogo sin ninguna credencial y lleva configuración de copiar y pegar para Claude Code, Cursor y VS Code — incluido el ID de cliente OAuth que esos clientes necesitan. El inspector de navegador llama al mismo endpoint en modo solo lectura desde una pestaña del navegador: inicia sesión con OAuth, elige una herramienta, lee el JSON-RPC crudo que devuelve — nada instalado.

Es la forma más rápida de probar el servidor, y la forma correcta de seguir usándolo sigue siendo localmente (cualquier opción anterior) — por una razón concreta, no como descargo de responsabilidad: tu token y cada solicitud pasan por la máquina de otra persona. Ejecutarlo localmente significa que tus credenciales y tu tráfico de GitLab nunca salen de tu computadora, lo que también lo convierte en la única opción sensata para una instancia privada auto-gestionada.

El endpoint es HTTP de flujo sin estado en la superficie dynamic predeterminada: POST es el transporte y un GET autenticado responde 405 por diseño; sin credencial, cualquier método responde 401 llevando el desafío RFC 6750 que un cliente OAuth sigue — un curl desnudo que recibe 401 es el endpoint funcionando, no fallando. https://mcp.jmrp.io/gitlab/health no necesita credencial y responde 200 con {"status":"ok",…}. Un despliegue HTTP auto-alojado también puede ejecutar --auth-mode=oauth --gitlab-url=https://gitlab.com --public-url=https://mcp.example.com/mcp (ambos son requeridos: OAuth necesita una instancia fija, y --public-url es el identificador de recurso RFC 9728 — pasa exactamente la URL con la que tus clientes están configurados, ya que un cliente descarta metadatos que nombren una diferente), donde los clientes descubren GitLab como el servidor de autorización a través de esos metadatos y autorizan en el navegador en lugar de copiar tokens — consulta Configuración de la aplicación OAuth. Es uno de los servidores listados en mcp.jmrp.io, un directorio de los servidores MCP que mantengo, cada uno accesible en su propio endpoint; https://mcp.jmrp.io/servers.json es la misma lista para clientes automatizados.

Es un servicio personal, ejecutado por una persona y ofrecido tal cual: sin SLA, sin canal de soporte y sin promesa de que no cambie la próxima semana. No añade cuota propia — cada llamada gasta los límites propios de GitLab.com, bajo tu propio token. Y se mueve por sí solo, normalmente a la versión más reciente, por lo que lo que sirve nunca es una versión fijada.

Entonces solo pregunta: abre tu cliente de IA y prueba "Lista mis proyectos de GitLab." Consulta la guía de inicio para detalles por cliente y más ejemplos de prompts.


Por qué este servidor

  • GitLab en lenguaje natural. La IA traduce "¿es seguro fusionar el MR !15?" en las llamadas API correctas. No tocas endpoints, IDs ni JSON.
  • Toda la plataforma — más de 1000 herramientas. Amplia cobertura de GitLab REST v4 + GraphQL: proyectos, ramas, tags, releases, merge requests, issues, pipelines, jobs, grupos, usuarios, wikis, entornos, despliegues, paquetes, registro de contenedores, runners, feature flags, variables CI/CD, seguridad, administración, tokens y más.
  • Bajo consumo de tokens por defecto. La superficie dinámica predeterminada expone solo 2 herramientas (find + execute) mientras alcanza todo el catálogo — así cabe en la ventana de contexto de cualquier cliente. (Huella de tokens →)
  • Seguro por diseño. Modo solo lectura, modo seguro (vista previa en seco de cada mutación), opciones TLS para GitLab auto-gestionado y compuertas continuas de calidad/seguridad de SonarCloud.
  • Se ejecuta en cualquier lugar. Un binario estático o contenedor; Windows, Linux y macOS; amd64 y arm64; stdio (escritorio) y HTTP (remoto).
Más: recursos, prompts y capacidades - **45 recursos MCP** (datos de solo lectura: proyectos, issues, pipelines, MRs, ramas, miembros, el manifiesto `gitlab://tools` consciente de la superficie y guías de mejores prácticas de flujo de trabajo). 26 tipos de recursos, objetos individuales más tres listas de un solo padre, también son [suscribibles](docs/reference/capabilities/subscriptions.md). - **37 prompts MCP** (revisión de código, estado de pipeline, evaluación de riesgos, notas de versión, standup, análisis, auditoría y más). - **4 asistentes de elicitación** (creación interactiva de issues/MRs/versiones/proyectos). - **4 capacidades MCP** (completions, progreso, elicitación y [suscripciones de recursos](docs/reference/capabilities/subscriptions.md) — notificaciones `resources/updated` en vivo, atendidas por polling) y **51 iconos de herramientas** (50 iconos de dominio más la marca del proyecto) para identificación visual en clientes MCP. - **Paginación** en cada endpoint de lista con metadatos completos.

Superficies de herramientas

El servidor puede presentar GitLab en tres formas, controladas por GITLAB_MCP_TOOL_SURFACE. La predeterminada no requiere configuración.

SuperficieHerramientas visiblesMejor para
Dinámica (predeterminada)2 (gitlab_find_action, gitlab_execute_action)Menor costo de tokens; alcanza el catálogo completo mediante find/execute.
Meta-herramientas (meta)34 base / 51 Ultimate / 52 GitLab.com UltimateDespachadores agrupados por dominio con un parámetro action.
Individual (individual)~868 Free/CE · ~1022 Premium · 1088–1094 UltimateUna herramienta MCP por operación de GitLab; necesita un contexto amplio.

Los conteos de herramientas escalan con tu edición de GitLab (GITLAB_MCP_TIER); los niveles superiores exponen más acciones. Consulta Dynamic Toolset y Meta-Tools Reference para el modelo de clasificación, salvaguardas de seguridad y catálogos completos. Para ejecuciones dinámicas donde los recursos dominan el contexto, establece GITLAB_MCP_CAPABILITY_SURFACE=minimal.

Huella de tokens

Medido con go run ./cmd/audit_tokens/ -footprint contra el catálogo actual. Los totales estiman el contexto de inicio visible para un cliente MCP: esquemas de herramientas visibles más recursos y prompts compartidos, usando el tokenizador cl100k_base (codificación GPT-4/GPT-3.5). Para la matriz completa (superficies meta e individual, todos los modos GITLAB_MCP_META_PARAM_SCHEMA), consulta Token Footprint Reference.

Configuración predeterminada: con GITLAB_MCP_TOOL_SURFACE sin establecer o GITLAB_MCP_TOOL_SURFACE=dynamic, GITLAB_MCP_CAPABILITY_SURFACE=full, GITLAB_MCP_META_PARAM_SCHEMA=opaque y GITLAB_MCP_TIER sin establecer (detectado, respaldo free), el servidor usa la superficie dinámica find/execute. Usa GITLAB_MCP_TOOL_SURFACE=meta solo cuando quieras explícitamente meta-herramientas de dominio; usa GITLAB_MCP_TOOL_SURFACE=individual solo cuando tu cliente pueda manejar el catálogo completo de herramientas.

Configuración (GITLAB_MCP_TOOL_SURFACE / GITLAB_MCP_CAPABILITY_SURFACE)NivelHerramientas visiblesAcciones alcanzablesGITLAB_MCP_META_PARAM_SCHEMATokens de esquema de herramientasTokens compartidosTokens totales
dynamic / full (predeterminada)Free/CE2872n/a1,5248,83510,359
dynamic / minimalFree/CE2872n/a1,5241701,694
dynamic / full (predeterminada)Premium21,026n/a1,5248,83510,359
dynamic / minimalPremium21,026n/a1,5241701,694
dynamic / full (predeterminada)Ultimate21,092n/a1,5248,83510,359
dynamic / minimalUltimate21,092n/a1,5241701,694

Las filas usan el catálogo base de Community Edition a menos que la columna de Nivel indique lo contrario. GITLAB_MCP_TIER controla qué acciones están disponibles; los niveles superiores exponen más herramientas y, por lo tanto, más acciones alcanzables.

Compatibilidad

Capacidad MCPSoporte
HerramientasHasta 1094 individuales / 34–52 meta
Recursos45 (estáticos + plantillas)
Prompts37 plantillas
Completions18 nombres de argumentos, entre ellos proyectos, grupos, usuarios, ramas, etiquetas, MRs, issues, pipelines, jobs, labels, hitos y SHAs
Registros del servidorEstructurados (texto/JSON) a stderr — no la capacidad MCP logging, que está obsoleta (SEP-2577) y deliberadamente no se anuncia
ProgresoInforme de progreso de ejecución de herramientas
Elicitación4 asistentes de creación interactivos
Suscripcionesresources/updated mediante polling, 26 tipos de recursos

Probado con: VS Code + GitHub Copilot, Claude Desktop, Claude Code, Cursor, Windsurf, IDE de JetBrains, Zed, Kiro, Cline. Consulta la Compatibility Matrix completa.

Evaluación de uso de herramientas por modelos de IA

El proyecto incluye un evaluador automatizado para la calidad MCP orientada a modelos, y actualmente no publica ningún resultado. Cada cifra que esta sección solía llevar ha sido retirada, incluido el 99.5% de éxito agregado con el que este README encabezaba.

Fueron retiradas porque la medición no medía lo que afirmaba. Una estructura alimentaba el estímulo que se le daba al modelo, el entorno en el que actuaba, el evaluador que lo calificaba y el informe al mismo tiempo, por lo que partes del corpus colocaban la llamada esperada en el prompt que el evaluador luego verificaba, las correcciones se hacían desde una clave de respuestas que el arnés proporcionaba, y el evaluador comparaba nombres de parámetros en lugar de sus valores. Una ejecución no podía fallar por las razones que se suponía que debía detectar. Las tablas tal como estaban por última vez se pueden leer en el commit 4587cbfb3; el relato de lo que estaba mal en ellas se conserva en AI Model Evaluation Results.

El reemplazo se está construyendo como un paquete etiquetado bajo test/e2e/ en el arnés de extremo a extremo, que ya mantiene separados el estímulo, el entorno y el registro. Los números regresan aquí cuando ese arnés los produzca.

Retirado. La tabla dinámica CE publicada aquí, actualizada por última vez desde una ejecución de Docker con fecha 20260627-232303, se puede leer en el commit 4587cbfb3 y no se reproduce porque la medición detrás de ella no era sólida.

Resultados de evaluación de meta-herramientas y Enterprise

Retirado. Ninguna tabla de meta-herramientas CE se publicó aquí, y ninguna se publicará hasta que el arnés reconstruido produzca una.

Retirado. La tabla meta Enterprise publicada aquí, actualizada por última vez desde una ejecución de Docker con fecha 20260527, se puede leer en el commit 4587cbfb3 y no se reproduce porque la medición detrás de ella no era sólida.

Retirado. La tabla dinámica Enterprise publicada aquí, actualizada por última vez desde una ejecución de Docker con fecha 20260628-015421, se puede leer en el commit 4587cbfb3 y no se reproduce porque la medición detrás de ella no era sólida.

Documentación

La documentación completa está en jmrp.io/docs/gitlab-mcp-server. Usa este mapa para la referencia de fuente de verdad sobre un área específica:

DocumentoDescripción
Primeros pasosRutas de instalación, primera consulta, configuración por cliente
InstalaciónTodos los canales de instalación (binario, Homebrew, winget, Docker, npm, PyPI, NuGet, .mcpb, Plugins de Agente, alojado), verificación, actualización y desinstalación
Configuración del IDEEjemplos por cliente de stdio, HTTP heredado y HTTP OAuth
ConfiguraciónVariables de entorno, modos de transporte, TLS
Variables de entornoTabla exhaustiva de variables de entorno con valores predeterminados y ejemplos
Referencia de CLITodas las banderas de línea de comandos, códigos de salida y ejemplos de ejecución
Modo de servidor HTTPImplementaciones HTTP compartidas, autenticación, aislamiento del grupo de servidores
Configuración de la aplicación OAuthAplicación OAuth de GitLab, ámbitos, URI de redirección y qué clientes pueden completar un flujo
CI/CDEjecutar el servidor dentro de GitLab CI y pipelines de GitHub Actions
Formato de salidaEl contrato de respuesta que sigue cada herramienta: bloques de contenido, paginación, siguientes pasos
Manejo de erroresClasificación de errores, extracción de mensajes de GitLab y las pistas que devuelven las herramientas
Referencia de herramientasTodas las herramientas individuales con esquemas de entrada/salida, incluida la órbita solo para GitLab.com
Meta-herramientasMeta-herramientas de dominio 34/51/52 con despacho de acciones
Conjunto de herramientas dinámicoModo de bajo consumo de tokens con 2 herramientas, catálogo canónico de acciones, modelo de seguridad y ejemplos
RecursosLos 45 recursos con plantillas de URI
IndicacionesLas 37 indicaciones con argumentos y formato de salida
PruebasPruebas unitarias, E2E, evaluación del modelo de esquema, evaluación del modelo Docker y resultados de modelos seleccionados
SeguridadModelo de seguridad, ámbitos de token, validación de entrada
ArquitecturaArquitectura del sistema, diseño de componentes, flujo de datos
Guía de desarrolloCompilación, pruebas, CI/CD, contribuciones
Solución de problemasProblemas comunes de inicio, token, TLS, transporte y descubrimiento de herramientas

Preguntas frecuentes

¿Funciona con GitLab autoalojado?

Sí. Establece GITLAB_URL a la URL de tu instancia. Cuando se omite GITLAB_URL, el modo stdio usa https://gitlab.com. Los certificados TLS autofirmados son compatibles instalando la CA en el almacén de confianza del sistema o apuntando SSL_CERT_FILE a un paquete; GITLAB_MCP_SKIP_TLS_VERIFY=true omite la verificación en su lugar, y --auth-mode=oauth lo rechaza para una instancia que no sea de bucle local.

¿Están seguros mis datos?

Cuando lo ejecutas tú mismo, localmente a través de stdio o en tu propia infraestructura a través de HTTP, cada solicitud va a tu instancia de GitLab y a ningún otro lugar. No hay verificación de actualizaciones, ni verificación de licencia, ni telemetría: tu instancia es el único host con el que este servidor se comunica.

La excepción es el endpoint alojado: usar https://mcp.jmrp.io/gitlab significa que tu token y cada solicitud pasan a través de esa máquina. Nada se almacena allí, pero es el servidor de otra persona, por eso la sección alojada dice que sigas usándolo localmente.

Consulta PRIVACY.md para la declaración completa del flujo de datos, y SECURITY.md para el modelo de seguridad.

¿Puedo usarlo en modo de solo lectura?

Sí. Establece GITLAB_MCP_READ_ONLY=true para deshabilitar todas las herramientas de mutación (crear, actualizar, eliminar). Solo estarán disponibles las operaciones de lectura.

Alternativamente, establece GITLAB_MCP_SAFE_MODE=true para un modo de simulación: las herramientas de mutación permanecen visibles pero devuelven una vista previa JSON estructurada en lugar de ejecutarse. Útil para auditorías, entrenamiento o revisar lo que haría un asistente de IA.

¿Qué ediciones de GitLab son compatibles?

Tanto la Community Edition (CE) como la Enterprise Edition (EE). Establece GITLAB_MCP_TIER=premium o GITLAB_MCP_TIER=ultimate en modo stdio para habilitar herramientas adicionales para funciones Premium/Ultimate (métricas DORA, vulnerabilidades, cumplimiento, etc.); déjalo sin establecer para detectar el nivel desde la licencia de la instancia (respaldo free). En modo HTTP, --tier puede forzar el nivel; de lo contrario, se detecta por entrada de token+URL del grupo a partir de la licencia.

¿Cómo maneja la limitación de velocidad?

El servidor incluye lógica de reintento con retroceso para los límites de velocidad de la API de GitLab. Los errores se clasifican como transitorios (reintentables) o permanentes, con pistas accionables en los mensajes de error.

¿Qué clientes de IA son compatibles?

Cualquier cliente compatible con MCP: VS Code + GitHub Copilot, Claude Desktop, Cursor, Claude Code, Windsurf, IDEs de JetBrains, Zed, Kiro y otros. El fragmento de configuración de cada uno está en Primeros pasos, y los botones de un clic de arriba cubren los más comunes.

Compilación desde el código fuente

git clone https://github.com/jmrplens/gitlab-mcp-server.git
cd gitlab-mcp-server
make build

La imagen de contenedor publicada es ghcr.io/jmrplens/gitlab-mcp-server:latest. Consulta la Guía de desarrollo para compilación cruzada, Docker Compose y pautas de contribución.

ComponenteTecnología
LenguajeGo 1.27+
SDK de MCPgithub.com/modelcontextprotocol/go-sdk v1.8.0
Cliente de GitLabgitlab.com/gitlab-org/api/client-go/v3 v3.14.0
Transportestdio (predeterminado), HTTP (HTTP transmitible)

Política de privacidad

El servidor se ejecuta completamente en tu máquina y no tiene telemetría, análisis ni backend propio — los datos fluyen solo entre tu cliente MCP y la instancia de GitLab que configures (más una verificación opcional de actualización de binario firmado contra GitHub Releases). Tu token se usa únicamente para autenticar solicitudes de GitLab y nunca se registra. Detalles completos: PRIVACY.md.

Contribuciones ascendentes

Este servidor está construido sobre las API REST y GraphQL de GitLab, sobre client-go y sobre el SDK de MCP Go. Cuando compilarlo revela una brecha en uno de ellos, la corrección va ascendente en lugar de quedarse como solución alternativa aquí, para que todos los demás usuarios de esos proyectos también la reciban:

  • client-go: campos de respuesta que GitLab envía y que las estructuras del SDK no modelaban, encontrados al contrastar cada estructura con lo que un GitLab en ejecución realmente envía, y correcciones como un pánico al decodificar un problema sin id (solicitudes de fusión).
  • GitLab: documentación de API y anotaciones de respuesta corregidas donde discrepaban con lo que la API envía, una corrección para que una identidad GPG revocada ya no verifique confirmaciones, y adiciones propuestas como cancelar una fusión automática (solicitudes de fusión).
  • SDK de MCP Go: correcciones de conformidad de protocolo en torno a la cancelación, la negociación de versión de protocolo y el protocolo de inicio (solicitudes de extracción).

Cada brecha se rastrea en docs/development/upstream-bugs.md: el problema o solicitud de fusión ascendente, si se ha fusionado y en qué versión, y la solución alternativa que este servidor mantiene hasta que se publique.

Contribuciones y seguridad

Espejo del repositorio: GitHub es el repositorio canónico. Hay un espejo de solo lectura disponible en GitLab.com para su descubrimiento; abre las contribuciones en GitHub.

Estadísticas innecesarias — números que nadie pidió

Conteos de archivos

Contados sobre cada archivo .go rastreado por git, que incluye los árboles de accesorios bajo cmd/audit_e2e_coverage/testdata que existen para ser leídos por la auditoría de cobertura en lugar de ejecutarse. docs/development/testing/testing.md cuenta los paquetes que go list devuelve en su lugar, por lo que sus cifras de pruebas unitarias son más bajas. Ambas son respuestas correctas a preguntas diferentes.

CategoríaArchivosLíneas
Código fuente (.go, no prueba)1,373316,176
Pruebas unitarias (_test.go)946628,464
Pruebas de extremo a extremo502106,434
Total2,8211,051,074

Funciones

CategoríaConteo
Funciones de código fuente10,874
. Exportadas (públicas)3,282
. No exportadas (privadas)7,592
Funciones de prueba unitaria (TestXxx)18,512
Subpruebas (t.Run(...))6,746
Funciones de prueba de extremo a extremo1,379

Proporciones que vale la pena notar

ObservaciónValor
Líneas de prueba vs líneas de código fuente1.99× más pruebas que código
Longitud media del archivo fuente~230 líneas
Longitud media del archivo de prueba~664 líneas
Líneas de comentarios en el código fuente76,325 (~24.1% del código fuente)
Funciones de prueba por función de código fuente1.7×

Patrones de código

PatrónConteo
Comprobaciones if err != nil9,773
Sentencias defer1,244
Tipos struct definidos3,512
Supresiones //nolint241
Comentarios TODO / FIXME / HACK2

Proyecto

MétricaValor
Paquetes Go300
Dependencias directas (go.mod)34
Dependencias indirectas37

Salón de la fama

RécordArchivo
Archivo fuente más largocmd/server/main.go. 4,865 líneas
Archivo de prueba más largocmd/server/main_test.go. 15,118 líneas

Porque sí

HechoValor
Código fuente impreso a 55 líneas/página~5,748 páginas de A4
Líneas de código fuente que mencionan "gitlab"14,801 (imposible de evitar)
Nombre de función más largo en el código fuenteassertDynamicCompatibilityPolicyOwnedByActionCompat (51 caracteres)
Nombre de función de prueba más largoTestDomainCoverageFor_GitLabClientRegisterToolsOnAUtilitySurface_NamesNoMissingConstructor (90 caracteres)

Mantenido por José M. Requena Plens · Página del proyecto · Instancia alojada: mcp.jmrp.io/gitlab