Ir al contenido

Configuración

GitLab MCP Server casi no necesita nada para arrancar. En modo stdio — el predeterminado que usan las integraciones con IDE — solo estableces dos cosas: con qué instancia de GitLab hablar (GITLAB_URL) y un personal access token para hacerlo (GITLAB_TOKEN). En GitLab.com hasta la URL es opcional, porque GITLAB_URL usa https://gitlab.com por defecto, así que un único GITLAB_TOKEN basta; apunta GITLAB_URL a tu propio host para instancias autogestionadas. En modo HTTP el servidor no guarda credencial alguna — cada cliente envía su propio token (y, opcionalmente, su propia URL de GitLab) en cada petición. Todo lo demás en esta página es opcional y viene con un valor predeterminado seguro.

El modo stdio lee su configuración de variables de entorno o de un archivo .env; el modo HTTP lee flags de CLI. Esta página cubre las opciones que la mayoría de usuarios necesita; consulta la referencia de variables y la referencia CLI del repositorio para las tablas exhaustivas.

GitLab MCP Server requiere exactamente una variable para arrancar en modo stdio — el resto son opcionales y usan valores predeterminados seguros:

VariableDescripciónEjemplo
GITLAB_TOKENPersonal Access Token con scope apiglpat-xxxxxxxxxxxxxxxxxxxx
VariablePredeterminadoDescripción
GITLAB_URLhttps://gitlab.comURL base de la instancia GitLab. Establécela para instancias autogestionadas
GITLAB_SKIP_TLS_VERIFYfalseOmitir verificación de certificados TLS para certificados autofirmados
TOOL_SURFACEdynamicSelector canónico del catálogo: dynamic, meta o individual
META_TOOLSheredadoSelector de compatibilidad deprecado. true mapea a meta, false mapea a individual, y los valores dynamic mapean al TOOL_SURFACE equivalente cuando TOOL_SURFACE no está definido
CAPABILITY_SURFACEfullSelector del catálogo de recursos y prompts: full conserva el catálogo completo; minimal mantiene el manifiesto gitlab://tools, y desactiva recursos opcionales, prompts y guías de flujo
META_PARAM_SCHEMAopaqueEstrategia de esquema de entrada para meta-herramientas: opaque (por defecto), compact (6.5x el tamaño opaque) o full (11.9x). Solo afecta schemas de meta-herramientas en tools/list
GITLAB_TIER(autodetectado)Selector de edición de GitLab: free/ce, premium o ultimate. Cuando se establece, se usa tal cual; cuando se omite, se detecta desde GET /license (por defecto free). El tier restringe las herramientas Enterprise/Premium y poda entradas de esquema por campo mediante pruneSchemaFieldsByTier (ver internal/tools/action_catalog.go)
GITLAB_READ_ONLYfalseDesactivar todas las herramientas de escritura (crear, actualizar, eliminar)
GITLAB_SAFE_MODEfalseDevolver vista previa JSON estructurada en lugar de ejecutar herramientas de escritura (modo dry-run)
EMBEDDED_RESOURCEStrueIncrustar URIs MCP canónicas gitlab:// en resultados de herramientas get; usa false para clientes que no toleren bloques de contenido duplicados
EXCLUDE_TOOLSLista de herramientas a excluir separadas por comas (ej., gitlab_delete_project,gitlab_admin)
GITLAB_IGNORE_SCOPESfalseOmitir detección automática de scopes del PAT — registrar todas las herramientas sin importar los scopes
LOG_LEVELinfoNivel de verbosidad del log: debug, info, warn, error
EVAL_SURFACE_ENTERPRISEfalsecmd/eval_mcp_surfaces: ejecuta el conjunto de casos enterprise además del corpus base
EVAL_SURFACE_CASE_SETcecmd/eval_mcp_surfaces: selector del conjunto de casos — ce (solo CE) o all (CE+Enterprise)
EVAL_SURFACE_FIXTURE_SMOKEfalsecmd/eval_mcp_surfaces: limita la ejecución a los casos fixture-smoke (comprobación rápida)
VariablePredeterminadoDescripción
AUTO_UPDATEtrueComportamiento de autoactualización: true (aplicar en segundo plano), check (solo notificar), false (deshabilitado)
AUTO_UPDATE_REPOjmrplens/gitlab-mcp-serverRepositorio de GitHub para los assets de release
AUTO_UPDATE_INTERVAL1hIntervalo de comprobación periódica (solo modo HTTP)
AUTO_UPDATE_TIMEOUT60sTimeout de actualización de arranque/en segundo plano (rango: 5s–10m)
VariablePredeterminadoDescripción
YOLO_MODEfalseOmitir confirmaciones de acciones destructivas (no recomendado)
AUTOPILOTfalseIgual que YOLO_MODE: omitir confirmaciones destructivas
GITLAB_MCP_ALLOWED_IMPORT_DIRSDirectorios adicionales, separados por la lista de rutas del sistema operativo, permitidos para archivos locales de importación de proyectos/grupos
RATE_LIMIT_RPS0Límite de velocidad por servidor en req/s (0 = desactivado)
RATE_LIMIT_BURST40Tamaño del bucket de tokens cuando RATE_LIMIT_RPS > 0
.env
# Requeridas
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
# Opcionales
GITLAB_SKIP_TLS_VERIFY=false
TOOL_SURFACE=dynamic
GITLAB_TIER=free
GITLAB_READ_ONLY=false
GITLAB_SAFE_MODE=false
EXCLUDE_TOOLS=
GITLAB_IGNORE_SCOPES=false
LOG_LEVEL=info
# Autoactualización
AUTO_UPDATE=true

Para GitLab autogestionado, añade GITLAB_URL=https://gitlab.example.com.

Crea .vscode/mcp.json en tu workspace:

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

Configuración segura del token usando variables de entrada de VS Code:

{
"inputs": [
{
"id": "gitlab-token",
"type": "promptString",
"description": "GitLab Personal Access Token",
"password": true
}
],
"servers": {
"gitlab": {
"type": "stdio",
"command": "/ruta/a/gitlab-mcp-server",
"env": {
"GITLAB_TOKEN": "${input:gitlab-token}"
}
}
}
}

Al ejecutar en modo HTTP (--http), la configuración usa flags de CLI en lugar de variables de entorno:

FlagPredeterminadoDescripción
--httpfalseHabilitar modo de transporte HTTP
--http-addr:8080Dirección y puerto de escucha
--gitlab-urlURL fija de la instancia de GitLab. Omítela para requerir GITLAB-URL en cada petición
--skip-tls-verifyfalseOmitir verificación TLS
--tool-surfacedynamicSelector canónico del catálogo: dynamic, meta o individual
--meta-tools(sin definir)Flag de compatibilidad deprecado. Usa --tool-surface=individual en lugar de --meta-tools=false
--meta-param-schemaopaqueModo de schema para params de meta-herramientas: opaque, compact o full; solo afecta schemas de meta-herramientas
--capability-surfacefullSelector del catálogo de recursos y prompts: full o minimal; minimal mantiene el manifiesto gitlab://tools, y omite recursos opcionales, guías y prompts
--tier(autodetectado)Forzar la edición de GitLab: free/ce, premium o ultimate; omítelo para autodetectar CE/EE por entrada token+URL. Reemplaza al flag deprecado --enterprise
--read-onlyfalseModo solo lectura
--safe-modefalseIntercepta herramientas modificantes y devuelve una vista previa JSON en lugar de ejecutarlas
--embedded-resourcestrueIncrustar URIs MCP canónicas en resultados de herramientas get
--exclude-toolsHerramientas a excluir separadas por comas
--ignore-scopesfalseOmitir detección de scopes del PAT
--max-http-clients100Máximo de sesiones de clientes simultáneas
--session-timeout30mTiempo de espera de sesión inactiva
--http-idle-timeout0 (desactivado)Timeout de conexión inactiva del servidor HTTP. 0 (por defecto) desactiva el cierre por inactividad, de modo que --session-timeout es la vida efectiva; usa una duración positiva para reciclar conexiones antes
--auto-updatetrueModo de autoactualización
--auto-update-repojmrplens/gitlab-mcp-serverRepositorio de GitHub para releases
--auto-update-interval1hIntervalo de comprobación periódica de actualizaciones
--auto-update-timeout60sTiempo de espera de actualización de arranque/en segundo plano (5s–10m)
--auth-modelegacyModo de autenticación: legacy u oauth
--oauth-cache-ttl15mTTL de caché de identidad OAuth (1m–2h)
--revalidate-interval15mIntervalo de revalidación de token; 0 para desactivar (límite: 24h)
--rate-limit-rps0Límite de tasa por servidor para tools/call en req/s (0 = desactivado)
--rate-limit-burst40Tamaño del token bucket cuando --rate-limit-rps > 0
--trusted-proxy-headerCabecera HTTP con la IP real del cliente para rate limiting detrás de proxies (ej. Fly-Client-IP, X-Forwarded-For)

Flags del evaluador de superficies (solo para cmd/eval_mcp_surfaces):

FlagPredeterminadoDescripción
--max-output-retries2Reejecuta una tarea cuando falla únicamente por salida de tool-call mal formada
--case-setceSelector del conjunto de casos: ce (solo CE) o all (CE+Enterprise)
--enterprise-case-setfalseEjecuta el conjunto de casos enterprise además del corpus base
--fixture-smokefalseLimita la ejecución a los casos fixture-smoke (comprobación rápida)

Flags generales (modos stdio y HTTP):

FlagPredeterminadoDescripción
--shutdownfalseTerminar todas las instancias en ejecución y salir

Ejemplo:

Ventana de terminal
# Instancia única de GitLab.com (URL fija para todos los clientes; reemplázala para GitLab autogestionado)
./gitlab-mcp-server \
--http \
--http-addr=0.0.0.0:8080 \
--gitlab-url=https://gitlab.com \
--max-http-clients=200 \
--session-timeout=1h
# Multi-instancia (cada cliente especifica su URL de GitLab mediante la cabecera GITLAB-URL)
./gitlab-mcp-server \
--http \
--http-addr=0.0.0.0:8080

El servidor carga la configuración en el siguiente orden (las fuentes posteriores anulan las anteriores):

  1. ~/.gitlab-mcp-server.env — Valores predeterminados a nivel de usuario (directorio home)
  2. .env — Configuración a nivel de proyecto (directorio de trabajo actual)
  3. Variables de entorno del sistema — Variables exportadas en el shell
  4. Flags de CLI — Argumentos de línea de comandos (prioridad más alta)

Para instancias de GitLab con certificados TLS autofirmados:

Ventana de terminal
GITLAB_SKIP_TLS_VERIFY=true

Habilita GITLAB_READ_ONLY=true para restringir el servidor a operaciones de solo lectura. Todas las herramientas que crean, actualizan o eliminan recursos se desactivan. Esto es útil para:

  • Entornos de auditoría y cumplimiento
  • Servidores compartidos donde los usuarios solo deben consultar datos
  • Tokens con scope read_api

Habilita GITLAB_SAFE_MODE=true para interceptar las herramientas de escritura y devolver una vista previa JSON estructurada de lo que se ejecutaría, sin realizar la operación. Las herramientas de solo lectura funcionan normalmente. Esto es útil para:

  • Revisar operaciones antes de ejecutarlas (dry-run)
  • Entornos de formación donde se quiere ver el comportamiento de las herramientas
  • Depurar parámetros de herramientas sin efectos secundarios

Tanto el modo seguro como el de solo lectura actúan por acción, no por herramienta. En las superficies dinámica y meta una sola herramienta sirve muchas acciones —gitlab_execute_action enruta todo y gitlab_issue cubre por igual list y create—, así que la política se aplica sobre el catálogo de acciones subyacente. Las lecturas siguen funcionando en todas las superficies, y las vistas previas del modo seguro nombran la acción canónica (por ejemplo issue.create) en lugar de la herramienta despachadora.

Preguntas frecuentes

¿Cuál es la configuración mínima?

En modo stdio, un único GITLAB_TOKEN con el scope api basta para arrancar — cualquier otra variable es opcional y usa un valor predeterminado seguro. GITLAB_URL usa https://gitlab.com por defecto, así que solo la estableces al conectar a una instancia autogestionada. Para una configuración de solo lectura, usa un token read_api y añade GITLAB_READ_ONLY=true. En modo HTTP no se configura ningún token en el servidor; cada cliente envía el suyo en cada petición.

stdio vs HTTP — ¿qué modo uso?

Usa el modo stdio (el predeterminado) para configuraciones locales de un solo usuario como integraciones con IDE (VS Code, Cursor, Claude Desktop); se configura mediante variables de entorno o un archivo .env. Usa el modo HTTP (--http) para despliegues compartidos o remotos como Docker, Fly.io o Kubernetes, donde la configuración usa flags de CLI y cada cliente se autentica con su propio token de GitLab en cada petición.

¿Cómo apunto a una instancia de GitLab autogestionada?

Establece GITLAB_URL con la URL base de tu instancia, por ejemplo GITLAB_URL=https://gitlab.example.com (en modo HTTP, usa el flag --gitlab-url). Si la instancia usa un certificado autofirmado o de CA interna, establece también GITLAB_SKIP_TLS_VERIFY=true (o --skip-tls-verify en modo HTTP), pero solo en una red de confianza — desactiva la verificación de certificados para todas las conexiones a GitLab.

¿Cómo elijo una superficie de herramientas (dynamic, meta o individual)?

Establece la variable TOOL_SURFACE (o el flag --tool-surface en modo HTTP). dynamic es la predeterminada y la de menor consumo de tokens: expone gitlab_find_action y gitlab_execute_action mientras mantiene cada acción de GitLab accesible a través del catálogo canónico de acciones. Elige meta cuando un cliente prefiere despachadores consolidados por dominio con un parámetro action, e individual para registrar una herramienta MCP por cada operación de GitLab.