Ir al contenido

Uso en CI/CD

gitlab-mcp-server puede ejecutarse dentro de jobs CI/CD como cualquier otra herramienta CLI. Hay dos modos de uso disponibles:

ModoLLM NecesarioCaso de usoDeterminismo
Determinista (JSON-RPC)NoOperaciones scriptadas: listar issues, publicar comentarios, crear releases✅ Totalmente determinista
Con LLM (cliente MCP headless)Flujos inteligentes: revisión de código, triaje de issues, análisis de MRs❌ No determinista

Ambos modos se autentican con un Personal Access Token (PAT) o Project Access Token. El servidor soporta las 1006 herramientas completas al usar un token con scope api.

  1. Descarga el binario desde GitHub Releases:

    Ventana de terminal
    curl -sSL "https://github.com/jmrplens/gitlab-mcp-server/releases/latest/download/gitlab-mcp-server-linux-amd64" \
    -o gitlab-mcp-server
    chmod +x gitlab-mcp-server
  2. Crea un Project Access Token con scope api (recomendado sobre PATs personales para CI).

  3. Almacena el token como variable CI/CD enmascarada llamada MCP_PAT.

Envía mensajes JSON-RPC directamente al servidor a través de stdio. Totalmente determinista — sin LLM ni API externa necesaria.

El servidor se comunica a través del protocolo MCP sobre stdin/stdout usando JSON-RPC 2.0. Cada interacción requiere un handshake initialize, una notificación initialized, y luego una o más solicitudes tools/call.

.gitlab-ci.yml
mcp-list-issues:
stage: test
image: alpine:latest
variables:
GITLAB_URL: ${CI_SERVER_URL}
GITLAB_TOKEN: ${MCP_PAT}
before_script:
- apk add --no-cache curl jq
- curl -sSL "https://github.com/jmrplens/gitlab-mcp-server/releases/latest/download/gitlab-mcp-server-linux-amd64"
-o gitlab-mcp-server
- chmod +x gitlab-mcp-server
script:
- |
RESULT=$({
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"ci","version":"1.0"}},"id":1}'
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"gitlab_list_issues","arguments":{"project_id":"'"${CI_PROJECT_ID}"'","state":"opened","per_page":5}},"id":2}'
} | ./gitlab-mcp-server 2>/dev/null | jq -s '.[1].result.content[0].text')
- echo "${RESULT}"

Para pipelines con muchas llamadas, envuelve el protocolo en una función reutilizable:

Ventana de terminal
mcp_call() {
local tool="$1"
local args="$2"
{
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"ci","version":"1.0"}},"id":1}'
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"'"${tool}"'","arguments":'"${args}"'},"id":2}'
} | ./gitlab-mcp-server 2>/dev/null | jq -s '.[1].result.content[0].text' -r
}
# Uso
ISSUES=$(mcp_call "gitlab_list_issues" '{"project_id":"'"${CI_PROJECT_ID}"'","state":"opened"}')

Usa un cliente MCP headless para que un LLM seleccione y orqueste las herramientas. Ideal para flujos inteligentes como revisión de código, triaje de issues y generación de notas de release.

IBM mcp-cli soporta modo comando para flujos automatizados con LLM, con proveedores OpenAI, Anthropic, Azure, Gemini, Groq y Ollama local.

.gitlab-ci.yml
auto-review:
stage: review
image: python:3.12-slim
variables:
GITLAB_URL: ${CI_SERVER_URL}
GITLAB_TOKEN: ${MCP_PAT}
OPENAI_API_KEY: ${OPENAI_KEY}
before_script:
- apt-get update && apt-get install -y curl
- curl -sSL "https://github.com/jmrplens/gitlab-mcp-server/releases/latest/download/gitlab-mcp-server-linux-amd64"
-o gitlab-mcp-server
- chmod +x gitlab-mcp-server
- pip install --quiet mcp-cli
script:
- |
cat > server_config.json << 'EOF'
{
"mcpServers": {
"gitlab": {
"command": "./gitlab-mcp-server",
"env": {
"GITLAB_URL": "${GITLAB_URL}",
"GITLAB_TOKEN": "${GITLAB_TOKEN}"
}
}
}
}
EOF
- |
mcp-cli cmd \
--config-file server_config.json \
--server gitlab \
--provider openai \
--model gpt-4o \
--prompt "Revisa el merge request !${CI_MERGE_REQUEST_IID} en el proyecto ${CI_PROJECT_ID}. Comprueba calidad de código, problemas de seguridad y tests faltantes. Publica tu revisión como nota en el MR." \
--raw
rules:
- if: $CI_MERGE_REQUEST_IID

Para pipelines que no pueden usar APIs de LLM externas, ejecuta Ollama como servicio CI:

local-llm-review:
stage: review
image: python:3.12-slim
services:
- name: ollama/ollama:latest
alias: ollama
variables:
GITLAB_URL: ${CI_SERVER_URL}
GITLAB_TOKEN: ${MCP_PAT}
OLLAMA_HOST: http://ollama:11434
before_script:
- apt-get update && apt-get install -y --no-install-recommends curl
- curl -sSL "https://github.com/jmrplens/gitlab-mcp-server/releases/latest/download/gitlab-mcp-server-linux-amd64"
-o gitlab-mcp-server
- chmod +x gitlab-mcp-server
- pip install --quiet mcp-cli
- curl -s "${OLLAMA_HOST}/api/pull" -d '{"name":"qwen2.5-coder:7b"}'
script:
- |
cat > server_config.json << 'EOF'
{
"mcpServers": {
"gitlab": {
"command": "./gitlab-mcp-server",
"env": {
"GITLAB_URL": "${GITLAB_URL}",
"GITLAB_TOKEN": "${GITLAB_TOKEN}"
}
}
}
}
EOF
- |
mcp-cli cmd \
--config-file server_config.json \
--server gitlab \
--provider ollama \
--model qwen2.5-coder:7b \
--prompt "Resume los últimos 5 merge requests del proyecto ${CI_PROJECT_ID}." \
--raw

Para pipelines con muchas llamadas a herramientas, el transporte HTTP evita la sobrecarga de inicio de proceso por llamada:

http-mode-pipeline:
script:
# Iniciar servidor HTTP en segundo plano
- ./gitlab-mcp-server --http --gitlab-url="${CI_SERVER_URL}" --http-addr=127.0.0.1:8080 &
- sleep 2
# Llamar herramientas vía HTTP
- |
curl -s -X POST http://127.0.0.1:8080/mcp \
-H "Content-Type: application/json" \
-H "PRIVATE-TOKEN: ${MCP_PAT}" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"gitlab_list_issues","arguments":{"project_id":"'"${CI_PROJECT_ID}"'","state":"opened"}},"id":2}' \
| jq '.result.content[0].text'

Consulta Servidor HTTP para detalles completos.

Más allá de ejecutar el servidor en pipelines, GitLab MCP Server proporciona herramientas completas de gestión CI/CD que los asistentes de IA pueden usar interactivamente. Están disponibles como meta-herramientas en el modo predeterminado.

La meta-herramienta gitlab_pipeline gestiona el ciclo de vida completo de los pipelines:

AcciónDescripción
listListar pipelines con filtrado por estado, ref
getObtener detalles y estado del pipeline
createDisparar un nuevo pipeline con variables
cancelCancelar un pipeline en ejecución
retryReintentar un pipeline fallido
deleteEliminar un pipeline
variablesListar variables del pipeline
test_reportObtener el informe de tests de un pipeline
waitEsperar a la finalización del pipeline con polling

La meta-herramienta gitlab_job proporciona gestión completa de jobs:

AcciónDescripción
listListar jobs de un pipeline
getObtener detalles del job
playEjecutar un job manual
cancelCancelar un job en ejecución
retryReintentar un job fallido
traceObtener la salida del log del job
artifactsListar artefactos del job
download_artifactDescargar un artefacto específico
delete_artifactsEliminar artefactos del job
waitEsperar a la finalización del job con polling
Meta-herramientaAccionesDescripción
gitlab_ci_lintvalidate, project_lintValidar sintaxis de .gitlab-ci.yml
gitlab_ci_variablelist, get, create, update, deleteGestionar variables CI/CD
gitlab_pipeline_schedulelist, get, create, update, delete, triggerGestionar pipelines programados
gitlab_environmentlist, get, create, update, delete, stopGestionar entornos
gitlab_deploymentlist, getRastrear despliegues

Disparar un pipeline con variables personalizadas usando JSON-RPC:

{
"tool": "gitlab_pipeline",
"arguments": {
"action": "create",
"project": "my-group/my-project",
"ref": "main",
"variables": [
{ "key": "DEPLOY_ENV", "value": "staging", "variable_type": "env_var" },
{ "key": "CONFIG", "value": "...", "variable_type": "file" }
]
}
}

Para la referencia completa de herramientas, consulta Resumen de herramientas.

PrácticaRecomendación
Tipo de tokenProject Access Token — limitado a un proyecto, auditable
Scopeapi para acceso completo, read_api para flujos de solo lectura
ExpiraciónMáximo 90 días, rotar antes de que expire
AlmacenamientoVariable CI/CD enmascarada — nunca commitear al repositorio
Multi-proyectoUsar Group Access Tokens para flujos entre proyectos
ErrorSolución
not found / permiso denegadoVerifica que el binario se descargó para la plataforma correcta, ejecuta chmod +x
401 UnauthorizedComprueba que la variable MCP_PAT está configurada y el token no ha expirado
x509: certificate signed by unknown authorityConfigura GITLAB_SKIP_TLS_VERIFY=true
Timeout en respuestas grandesAñade argumento per_page para limitar resultados
Errores de proveedor en mcp-cliVerifica las variables de API key, prueba pip install --upgrade mcp-cli