Skip to main content
Glama
galkremer1
by galkremer1

cnv-lab-mcp

Servidor MCP para reservar hardware de laboratorio en GLPI, lanzar despliegues de clústeres CNV en Jenkins e importar clústeres spoke de ACM. No se gasta ninguna URL de instancia, nombre de hardware o token fijo en el código: todo procede de argumentos de herramientas o herramientas de entorno.

Añadir a Cursor

Add to Cursor

Related MCP server: DCI MCP Server

Requisitos previos

  • Node.js >= 20

  • Un token de API personal de GLPI (My SettingsAPI tokens). GLPI_APP_TOKEN opcional si la instancia lo requiere.

  • Un token de API de Jenkins (UserConfigureAPI Token) además del nombre de usuario externo, no un correo electrónico. user@example.com devuelve 401; user funciona.

  • El perfil de GLPI debe tener un derecho reservation distinto de cero en la entidad de destino.

  • La cuenta de Jenkins necesita Job/Build y Job/Read en los trabajos que se vayan a lanzar.

TLS interna / NODE_EXTRA_CA_CERTS

El fetch de Node.js (undici) no usa el almacén de CA del sistema/llavero como hace curl. Si curl funciona pero el servidor MCP informa fetch failed, establece NODE_EXTRA_CA_CERTS con el paquete de CA interno y reinicia Cursor:

export NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Los errores TLS se notifican por separado de los fallos de red genéricos, de modo que no haya ambigüedad.

Configuración

Copia .env.example y define:

Variable

Obligatorio

Nota

GLPI_BASE_URL

Con o sin /apirest.php

GLPI_USER_TOKEN

Token de API personal

GLPI_APP_TOKEN

no

Solo si la instancia lolata

JENKINS_BASE_URL

URL raíz de Jenkins

JENKINS_USER

Nombre de usuario corto, no el correo

JENKINS_API_TOKEN

Token de API

Ejemplo de entrada mcp.json (secretos mediante interpolación de variables de entorno):

{
  "mcpServers": {
    "cnv-lab-mcp": {
      "command": "npx",
      "args": ["-y", "cnv-lab-mcp"],
      "env": {
        "GLPI_BASE_URL": "https://glpi.example.internal",
        "GLPI_USER_TOKEN": "${env:GLPI_USER_TOKEN}",
        "JENKINS_BASE_URL": "https://jenkins.example.internal",
        "JENKINS_USER": "${env:JENKINS_USER}",
        "JENKINS_API_TOKEN": "${env:JENKINS_API_TOKEN}",
        "NODE_EXTRA_CA_CERTS": "${env:NODE_EXTRA_CA_CERTS}"
      }
    }
  }
}

Hasta que el paquete esté en la en npm,designixa apunta args a este repo en su lugar:

"args": ["-y", "github:galkremer1/cnv-lab-mcp"]

Herramientas

Reservas:

  • list_reservable_items — explora los recursos reservables de GLPI

  • find_available_cluster — coincide los requisitos (estructurados + comentarios de texto libre) y ordena por la primera franja libre más temprana. No reserva.

  • check_availability — restricciones + huecos de un recurso

  • reserve_cluster: reserva una franja al clúster; siempre define users_id de la sesión en curso

  • cancel_reservation — libera una reserva

Jenkins:

  • trigger_jenkins_job — disparo genérico; start_at se convierte en delay=NNNsec

  • get_build_status — cola/build + cola de consola

  • abort_build — detiene un build

Acceso al clúster:

  • get_cluster_info — metadatos no sensibles y URLs de la consola/API desde *-data.zip

  • get_cluster_kubeconfigauth/kubeconfig + auth/kubeadmin-password solo en memoria. Credenciales de administrador del clúster; no las muestres en el chat.

ACM:

  • import_spoke_cluster — ManagedCluster + KlusterletAddonConfig, aplica los manifiestos de importación al spoke y comprueba la unión

  • get_managed_cluster_status — condiciones de unión/disponibilidad del lado del hub

Escenarios (confirmar antes de reservar):

  • list_scenarios

  • plan_scenario — propone clústeres/franjas/parámetros, no reserva nada

  • execute_scenario — reserva y dispara desde un plan

Los escenarios integrados están en src/scenarios/catalog.json y pueden ampliarse mediante PR: basic-bm-cnv, acm-hub-and-spoke, sriov-cnv-cluster.

Desarrollo

npm install
npm test
npm run lint
npm run typecheck
npm run build

Prueba de humo manual contra instancias reales (no se ejecuta en CI):

npx tsx scripts/smoke.ts
SMOKE_JOB=deploy-ocp-bare-metal-cluster-with-abi-cnv-5.0 SMOKE_CLUSTER=example-cluster npx tsx scripts/smoke.ts

Seguridad

  • .env está en .gitignore. Los ejemplos utilizan valores ficticios evidentes.

  • CI ejecuta gitleaks en cada push o PR.

  • Los errores del cliente enmascaran los tokens y nunca registran los valores de Authorization / user_token.

  • get_cluster_kubeconfig descarga el zip en un Buffer y lo extrae con JSZip en memoria. Nunca escribe el archivo auth/* en disco.

  • get_cluster_info solo lee deploydata.json, metadata.json e install-config.backup.yaml.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Appcircle mobile CI/CD platform.

  • An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform

  • A MCP server built for developers enabling Git based project management with project and personal…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/galkremer1/cnv-lab-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server