cnv-lab-mcp
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
Related MCP server: DCI MCP Server
Requisitos previos
Node.js >= 20
Un token de API personal de GLPI (
My Settings→API tokens).GLPI_APP_TOKENopcional si la instancia lo requiere.Un token de API de Jenkins (
User→Configure→API Token) además del nombre de usuario externo, no un correo electrónico.user@example.comdevuelve 401;userfunciona.El perfil de GLPI debe tener un derecho
reservationdistinto 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.pemLos 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 |
| sí | Con o sin |
| sí | Token de API personal |
| no | Solo si la instancia lolata |
| sí | URL raíz de Jenkins |
| sí | Nombre de usuario corto, no el correo |
| sí | 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 GLPIfind_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 recursoreserve_cluster: reserva una franja al clúster; siempre defineusers_idde la sesión en cursocancel_reservation— libera una reserva
Jenkins:
trigger_jenkins_job— disparo genérico;start_atse convierte endelay=NNNsecget_build_status— cola/build + cola de consolaabort_build— detiene un build
Acceso al clúster:
get_cluster_info— metadatos no sensibles y URLs de la consola/API desde*-data.zipget_cluster_kubeconfig—auth/kubeconfig+auth/kubeadmin-passwordsolo 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ónget_managed_cluster_status— condiciones de unión/disponibilidad del lado del hub
Escenarios (confirmar antes de reservar):
list_scenariosplan_scenario— propone clústeres/franjas/parámetros, no reserva nadaexecute_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 buildPrueba 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.tsSeguridad
.envestá 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_kubeconfigdescarga el zip en un Buffer y lo extrae conJSZipen memoria. Nunca escribe el archivoauth/*en disco.get_cluster_infosolo leedeploydata.json,metadata.jsoneinstall-config.backup.yaml.
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityDmaintenanceMCP server for automating VLP lab VM operations, exposing VM management tools to AI agents like Cursor and Claude Code.
- AlicenseAqualityBmaintenanceMCP server for DCI API enabling AI models to extract and analyze DCI jobs, components, and topics, with integrations for Google Drive, Jira, GitHub, and Red Hat support cases.71Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with QUADS infrastructure systems via API, enabling resource management and automation through LLM applications.MIT
- FlicenseAqualityDmaintenanceAn MCP server for OpenShift Baremetal IPI cluster provisioning, allowing users to generate and validate install-config.yaml files, test BMC connectivity, validate networks, and manage cluster installation lifecycle.24
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…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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