cnv-lab-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JENKINS_USER | Yes | Jenkins username (short username, not email). | |
| GLPI_BASE_URL | Yes | Base URL of the GLPI instance, with or without /apirest.php. | |
| GLPI_APP_TOKEN | No | Optional GLPI application token, only if the instance requires it. | |
| GLPI_USER_TOKEN | Yes | Personal API token for GLPI. | |
| JENKINS_BASE_URL | Yes | Root URL of the Jenkins instance. | |
| JENKINS_API_TOKEN | Yes | Jenkins API token. | |
| NODE_EXTRA_CA_CERTS | No | Path to an internal CA bundle, needed if Node.js fetch fails due to TLS certificates. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_reservable_itemsB | Search GLPI for reservable assets (default itemtype Peripheral). Returns id, name, comment/capability text, and linked ReservationItem id. |
| check_availabilityA | Fetch the full reservation list for one ReservationItem (paginated correctly) and compute free gaps / the first slot of duration_minutes. |
| find_available_clusterA | Find reservable clusters matching requirements and rank them by earliest free slot of duration_minutes. Proposes slots only — does not book. |
| reserve_clusterA | Create a GLPI reservation. Always sets users_id from the authenticated session. Re-validates for conflicts immediately before booking. |
| cancel_reservationB | Delete/release a GLPI reservation by id. |
| trigger_jenkins_jobA | Trigger a Jenkins job with parameters. If start_at is in the future, passes delay=NNNsec so the build does not start immediately. |
| get_build_statusB | Poll Jenkins queue/build state. Returns building/result and a console-log tail. |
| abort_buildA | Stop a running or queued Jenkins build (job/{name}/{build}/stop). |
| get_cluster_infoA | Return non-sensitive cluster metadata from a deploy job *-data.zip (deploydata.json, metadata.json, console/API URLs). Does not read kubeconfig or kubeadmin-password. |
| get_cluster_kubeconfigA | Extract auth/kubeconfig and auth/kubeadmin-password from a deploy job *-data.zip in memory. Returns cluster-admin credentials — do not echo them back in chat. |
| import_spoke_clusterA | Import a spoke into an ACM hub: create ManagedCluster + KlusterletAddonConfig, fetch the generated import Secret, apply manifests to the spoke, poll until Joined/Available. |
| get_managed_cluster_statusB | Read ManagedCluster join/available conditions from the hub. |
| list_scenariosA | List built-in end-to-end scenario presets (id, name, description, overridable fields). |
| plan_scenarioA | Resolve a scenario into a concrete unbooked plan (candidate clusters, windows, Jenkins parameters). Books and triggers nothing. |
| execute_scenarioA | Execute a plan from plan_scenario: reserve each role, trigger Jenkins jobs (delayed if start is in the future). ACM import runs only if wait_timeout_seconds is set and builds complete. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Most tools have distinct resource-action targets, but a few boundaries could be sharper: check_availability and find_available_cluster both deal with availability, and get_cluster_info vs. get_cluster_kubeconfig both extract from the same deploy artifact. Descriptions clarify the difference well enough that an agent can usually choose correctly.
All 15 tool names follow a consistent snake_case verb_noun convention (list, check, find, reserve, cancel, trigger, get, abort, import, plan, execute). There are no camelCase names, vague single verbs, or arbitrary suffixes.
Fifteen tools is at the upper end of the ideal range but appropriate for the server's scope: reservation management, Jenkins build control, cluster artifact access, ACM import/monitoring, and scenario orchestration. Each tool covers a distinct step and no tool feels redundant.
The core path from finding/reserving assets, triggering and monitoring builds, extracting cluster credentials, and importing a spoke into ACM is covered. However, the lifecycle lacks cleanup operations (e.g., deleting/detaching a ManagedCluster, removing an imported spoke) and there is no dedicated way to list or look up existing reservations before canceling.