Skip to main content
Glama
galkremer1
by galkremer1

M8ven Score

cnv-lab-mcp

MCP server for reserving lab hardware in GLPI, triggering CNV cluster deployments in Jenkins, and importing ACM spoke clusters. No instance URLs, hardware names, or tokens are hardcoded — everything comes from tool arguments or environment variables.

Add to Cursor

Add to Cursor

Related MCP server: quads-mcp

Prerequisites

  • Node.js >= 20

  • A GLPI personal API token (My SettingsAPI tokens). Optional GLPI_APP_TOKEN if the instance requires one.

  • A Jenkins API token (UserConfigureAPI Token) plus the short username, not an email. user@example.com returns 401; user works.

  • GLPI profile must have a non-zero reservation right on the target entity.

  • Jenkins account needs Job/Build and Job/Read on jobs you will trigger.

Internal TLS / NODE_EXTRA_CA_CERTS

Node's fetch (undici) does not use the OS/keychain CA store the way curl does. If curl works but the MCP server reports fetch failed, set NODE_EXTRA_CA_CERTS to your internal CA bundle and restart Cursor:

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

TLS errors are reported separately from generic network failures so this is not mysterious.

Configure

Copy .env.example and set:

Variable

Required

Notes

GLPI_BASE_URL

yes

With or without /apirest.php

GLPI_USER_TOKEN

yes

Personal API token

GLPI_APP_TOKEN

no

Only if the instance requires it

JENKINS_BASE_URL

yes

Jenkins root URL

JENKINS_USER

yes

Short username (not email)

JENKINS_API_TOKEN

yes

API token

Example mcp.json entry (secrets via env interpolation):

{
  "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}"
      }
    }
  }
}

Until the package is on npm, point args at this repo instead:

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

Tools

Reservation:

  • list_reservable_items — browse GLPI reservable assets

  • find_available_cluster — match requirements (structured + free-text comments) and rank by earliest free slot. Does not book.

  • check_availability — reservations + gaps for one item

  • reserve_cluster — book a window; always sets users_id from the session

  • cancel_reservation — release a booking

Jenkins:

  • trigger_jenkins_job — generic trigger; start_at becomes delay=NNNsec

  • get_build_status — queue/build + console tail

  • abort_build — stop a build

Cluster access:

  • get_cluster_info — non-sensitive metadata and console/API URLs from *-data.zip

  • get_cluster_kubeconfigauth/kubeconfig + auth/kubeadmin-password in memory only. Cluster-admin credentials; do not echo them back in chat.

ACM:

  • import_spoke_cluster — ManagedCluster + KlusterletAddonConfig, apply import manifests to the spoke, poll join

  • get_managed_cluster_status — hub-side join/available conditions

Scenarios (confirm-before-booking):

  • list_scenarios

  • plan_scenario — propose clusters/windows/parameters, book nothing

  • execute_scenario — reserve + trigger from a plan

Built-in scenarios live in src/scenarios/catalog.json and can be extended by PR: basic-bm-cnv, acm-hub-and-spoke, sriov-cnv-cluster.

Development

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

Manual smoke test against real instances (not run in 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

Security

  • .env is gitignored. Examples use obviously fake placeholders.

  • CI runs gitleaks on every push/PR.

  • Client errors redact tokens and never log Authorization / user_token values.

  • get_cluster_kubeconfig downloads the zip into a Buffer and extracts with JSZip in memory. It never writes the archive or auth/* to disk.

  • get_cluster_info only reads deploydata.json, metadata.json, and install-config.backup.yaml.

Available Tools

15 tools
abort_buildA

Stop a running or queued Jenkins build (job/{name}/{build}/stop).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_nameYes
build_numberYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It only states the action and the API endpoint; it does not describe the expected response, whether the stop is asynchronous, whether queued builds are removed from the queue, what permissions are required, or what errors may occur. The mutating nature is implied by 'stop', but side effects and edge cases are not addressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single, information-dense sentence. It front-loads the action and resource, and the parenthetical endpoint path provides a useful technical reference without adding fluff. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there are no annotations and no output schema, an agent is left without important operational details: no indication of what a successful response looks like, what happens if the build has already completed, or whether the stop is immediate or asynchronous. For a mutating CI operation, this leaves the tool under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the two undocumented parameters. The endpoint template 'job/{name}/{build}/stop' implies that job_name corresponds to '{name}' and build_number to '{build}', but this mapping is largely self-evident from the parameter names. The description adds little practical meaning about how to obtain or format these values beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Stop') and a specific resource ('Jenkins build'), and explicitly scopes the operation to running or queued builds. The endpoint template 'job/{name}/{build}/stop' reinforces the exact action, making it easy to distinguish from sibling tools like trigger_jenkins_job and get_build_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly identifies the intended use case—when a Jenkins build is running or queued and needs to be halted. It does not explicitly name alternative tools, but the verb and resource make it obvious that this tool is for stopping rather than starting or checking builds. It also restricts applicability to running/queued states, providing clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_reservationB

Delete/release a GLPI reservation by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
reservation_idYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description must carry the full burden of behavioral disclosure. It signals destructive intent through 'delete/release,' but it does not disclose consequences such as resource release, irreversibility, permission requirements, or behavior when the reservation does not exist or is already canceled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words. It communicates the core action, target, and input requirement efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive one-parameter tool with no annotations and no output schema, this description is minimally viable but incomplete. It omits side effects, prerequisites, success/failure feedback, and any conditions under which cancellation should happen.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate. It only restates that the action happens 'by id,' which adds little beyond the schema's reservation_id parameter name and integer type. Valid values, edge cases, and meaning of the id are not clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses concrete action verbs ('Delete/release'), names the resource ('GLPI reservation'), and specifies the targeting mechanism ('by id'). It is clearly distinguishable from all sibling tools, none of which perform cancellation or deletion of a reservation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus sibling tools like reserve_cluster, check_availability, or list_reservable_items. It also does not mention prerequisites, reversibility, or what conditions should hold before calling it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_availabilityA

Fetch the full reservation list for one ReservationItem (paginated correctly) and compute free gaps / the first slot of duration_minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
earliest_startNoISO-8601 earliest start
duration_minutesNo
reservation_item_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It does reveal that the tool fetches the full list, handles pagination correctly, and computes free gaps/first slot. However, it omits edge cases such as no availability, how optional parameters affect the result, and the exact behavior of the return value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the core action and includes a valuable non-obvious detail ('paginated correctly') without adding unnecessary length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers the main intent and the role of duration_minutes, but it omits the role of earliest_start, return format, and behavior when no availability exists. These are meaningful gaps that could lead an agent to call it incorrectly or misinterpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, leaving duration_minutes and reservation_item_id undescribed. The description adds meaning by linking duration_minutes to slot length and reservation_item_id to the target item, but it does not clarify earliest_start, optionality, or input format expectations, so it only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Fetch the full reservation list ... and compute free gaps / the first slot') on a specific resource ('one ReservationItem'). This clearly distinguishes it from siblings like list_reservable_items and find_available_cluster, whose purposes are different.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is only implied rather than explicit: if you need availability slots for one reservation item, this is the tool. No alternatives are mentioned, and there is no guidance about when not to use it or which sibling might be more appropriate for similar queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
planYes
wait_timeout_secondsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It goes beyond a generic mutation verb by disclosing that roles are reserved, Jenkins jobs are triggered, future starts are delayed, and ACM import only happens when wait_timeout_seconds is set and builds complete. It still omits failure/rollback behavior and return semantics, but it is far more transparent than a typical one-line mutation description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core behavior plus conditional rules are packed efficiently. The description is front-loaded with the primary action and restates the most important gating logic without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main flow and the key conditional, which is enough to understand when to call the tool. However, this is a complex orchestration tool with no output schema and no annotations, and the description leaves out post_steps handling, failure behavior, whether the call blocks until completion, and what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives meaning to plan as the artifact produced by plan_scenario and explains the role of wait_timeout_seconds in gating ACM import. However, the nested role object fields and post_steps are not explained beyond the schema's property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Execute a plan from plan_scenario.' It further specifies the actual work—reserve each role, trigger Jenkins jobs, and conditionally run ACM import—which clearly separates it from siblings like plan_scenario, reserve_cluster, and trigger_jenkins_job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly ties this tool to the output of plan_scenario, implying it should be used once a plan exists. It also adds context for conditional execution (delayed jobs, ACM import gated on wait_timeout_seconds), but it does not explicitly say when to choose reserve_cluster or trigger_jenkins_job for individual actions instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_available_clusterA

Find reservable clusters matching requirements and rank them by earliest free slot of duration_minutes. Proposes slots only — does not book.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
itemtypeNo
requirementsNo
earliest_startNo
duration_minutesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for side-effect disclosure. It clearly states that the tool only proposes slots and does not book, which is a valuable behavioral trait beyond the tool name. It stops short of 5 because it doesn't mention output shape, operational limits, or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with zero filler. The core action is front-loaded in the first sentence, and the critical non-mutation caveat is in the second. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, a nested requirements object, no output schema, and no annotations. The description covers the main search-and-rank behavior and the non-booking caveat, but omits the result structure, the meaning of earliest_start/limit/itemtype, and possible failure cases. An agent can make simple calls but lacks enough detail for full confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to duration_minutes by tying it to the slot-length ranking, and to requirements by referencing 'matching requirements.' But limit, itemtype, and earliest_start receive no semantic elaboration, and the schema contains 0% descriptions, so the agent must infer from parameter names. This partial compensation justifies a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Find', with a well-defined resource ('reservable clusters'), and specifies the matching and ranking behavior. It also disambiguishes from booking tools by explicitly saying 'Proposes slots only — does not book,' so an agent can tell it apart from reserve_cluster.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'does not book' clause is an explicit when-not that prevents the agent from using this tool to make a reservation, and the 'matching requirements' phrase implies when to use it. However, it does not name the alternative booking tool (reserve_cluster) or contrast with list_reservable_items/check_availability, so the routing guidance is not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_build_statusB

Poll Jenkins queue/build state. Returns building/result and a console-log tail.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_nameYes
queue_idNo
build_numberNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. It does state the operation is a poll and describes the return contents, which communicates a read-only intent. However, it does not mention whether the tool blocks, how the console-log tail is truncated, or what happens for queued jobs without a build number yet.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The action and key return information are front-loaded, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a polling tool with no annotations and no output schema, the description is incomplete. It does not explain how the three parameters interact, what a caller should expect while a build is queued vs running, or how to interpret the returned building/result fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation, but it does not. job_name, queue_id, and build_number are only named in the schema; the description vaguely alludes to queue/build state, but never explains when each parameter is needed, what job_name alone returns, or how queue_id and build_number disambiguate the request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Poll') and resource ('Jenkins queue/build state'), and states the return payload ('building/result and a console-log tail'). Its purpose is clearly distinguishable from sibling tools like trigger_jenkins_job and abort_build, which act instead of query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus alternatives, no mention that it should be called after triggering a job, and no relationship to abort_build or other sibling tools. The verb 'Poll' implies repeated status checking, but the description leaves the workflow context unstated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_nameYes
build_numberNo
cluster_nameNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It adds meaningful behavioral context by stating the result is non-sensitive and that it does not read kubeconfig or kubeadmin-password. It does not mention output format, error cases, or authentication requirements, but the safety disclosure is valuable for an info-getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The core purpose and source are front-loaded, and the exclusion of kubeconfig material is stated immediately after the main behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool returns and what it avoids, but with no output schema and no annotation support, it leaves gaps around parameter roles, how the deploy job is selected, and what happens when the specified job does not exist or lacks the expected zip files.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not explain job_name, build_number, or cluster_name beyond implying a deploy job context. The parameter names are somewhat self-explanatory, but the description adds no meaning about how the parameters identify the deploy job or whether the optional fields are filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Return non-sensitive cluster metadata from a deploy job *-data.zip' and names concrete contents (deploydata.json, metadata.json, console/API URLs). It also explicitly distinguishes itself from kubeconfig retrieval, which differentiates it from the sibling get_cluster_kubeconfig.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is the safe, non-sensitive metadata access path and explicitly states it does not read kubeconfig or kubeadmin-password, which implies using a sibling tool when credentials are needed. It stops short of naming the exact alternative or giving explicit when-to-use versus when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_nameYes
build_numberNo
cluster_nameNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It adds two important behavioral traits: extraction happens 'in memory' (implying no persistent side effect) and the result is privileged ('cluster-admin credentials') with an explicit warning not to echo them. It does not cover prerequisites or failure modes, but the secret-handling disclosure is significant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The core extraction action and source are front-loaded, and the security warning is appended as a necessary, separate instruction. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description supplies the essential purpose, source, and security guidance, but it omits parameter semantics, prerequisites, and any pointer to sibling tools for alternative operations. It is minimally viable but not fully complete for an agent deciding how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds context by identifying the relevant artifact as a 'deploy job *-data.zip', which implies job_name and build_number identify the job and build. However, it does not explicitly define what each parameter means, which parameters are required to locate the zip, or how cluster_name factors in.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Extract'), a specific resource ('auth/kubeconfig and auth/kubeadmin-password'), and a specific source ('deploy job *-data.zip'). It is unmistakably distinct from siblings like get_cluster_info or get_build_status because it targets credential material from a deploy artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'from a deploy job *-data.zip' gives clear context for when the tool is appropriate: after a deploy job produces its data zip. It does not explicitly name alternatives or exclusions, but the artifact-specific language effectively separates this from cluster-status and job-status siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_managed_cluster_statusB

Read ManagedCluster join/available conditions from the hub.

ParametersJSON Schema
NameRequiredDescriptionDefault
cluster_nameYes
hub_kubeconfigYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The verb 'Read' communicates a non-mutating, read-only operation, which is the main behavioral signal. However, with no annotations, the description does not disclose output form, error behavior, or access requirements beyond the phrase 'from the hub.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single clause with the verb front-loaded and no filler words; every word carries meaning. It is appropriately sized for the simple operation it describes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read with no annotations or output schema, the description states the operation, source, and target status data. It is not fully complete because it omits parameter details and alternative routing, but it gives enough core context for a straightforward status read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage and no property descriptions, the description must explain parameters, but it never mentions hub_kubeconfig or cluster_name directly. It only indirectly connects 'hub' to hub_kubeconfig and 'ManagedCluster' to cluster_name, which is insufficient to fully define formats or roles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific read operation ('Read') on a specific resource ('ManagedCluster join/available conditions') and locates it ('from the hub'). The resource is specific enough to distinguish it from general sibling operations like get_cluster_info, though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not give explicit when-to-use or when-not-to-use guidance or name alternatives. It only implies that the tool is appropriate when hub-side ManagedCluster join/available status is needed, so it provides minimal contextual routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cluster_nameYes
hub_kubeconfigYes
timeout_secondsNo
spoke_kubeconfigYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose side effects. It explicitly states that it creates ManagedCluster and KlusterletAddonConfig resources, fetches a Secret, applies manifests to the spoke, and polls until Joined/Available. This gives the agent a concrete behavioral model of what the tool does beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that packs the full workflow into a compact, scannable format. No filler words; every clause serves a purpose. The colon and comma-separated steps make it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The steps are described, but the tool has no output schema and no annotations, so the description should also explain return behavior or completion signals beyond 'poll until Joined/Available'. It also omits failure modes, prerequisites like kubeconfig validity, and the meaning of timeout_seconds. Given the multi-step side-effecting nature, more context is needed for fully confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the entire burden for parameter meaning. It does not explain hub_kubeconfig, spoke_kubeconfig, cluster_name, or timeout_seconds individually. While the narrative implies hub vs. spoke kubeconfigs and the cluster name, timeout_seconds is completely absent, and no parameter-specific guidance is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Import') and resource ('spoke into an ACM hub'), and enumerates the concrete steps involved. This clearly distinguishes it from the sibling tools such as get_cluster_info, reserve_cluster, and get_managed_cluster_status, all of which cover different lifecycle operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is the tool to call when you need to onboard a spoke cluster into an ACM hub. It doesn't explicitly mention alternatives or exclusions, but the step-by-step procedure makes the intended use unambiguous given the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reservable_itemsB

Search GLPI for reservable assets (default itemtype Peripheral). Returns id, name, comment/capability text, and linked ReservationItem id.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring filter on name/comment
itemtypeNoGLPI itemtype to search. Default: Peripheral

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It does disclose the default itemtype and the shape of returned data, which is useful. However, it does not mention whether the operation is read-only, whether results are paginated or limited, or any authentication/access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, focused sentences with no filler. The primary action and default behavior are front-loaded, and the return fields are stated in a compact list. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter listing tool with no output schema, the description is mostly complete: it explains the search scope and the returned data. It could be improved by noting pagination, result limits, or behavior when no items match, but the core agent-facing information needed to invoke and interpret the tool is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for both the filter and itemtype parameters, including the default itemtype. The description adds context about returned fields and the ReservationItem link but does not materially deepen parameter semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches GLPI for reservable assets, names the default itemtype, and lists the returned fields. It is distinguishable from sibling tools like check_availability and reserve_cluster because it is scoped to GLPI reservation items rather than cluster operations, though it does not explicitly name a sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as check_availability or find_available_cluster. The description implies a search/listing use case but does not state exclusions, prerequisites, or conditions that would route an agent to a different sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_scenariosA

List built-in end-to-end scenario presets (id, name, description, overridable fields).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. The verb 'List' strongly implies a read-only operation and the description notes these are built-in presets, but it does not disclose whether the list is exhaustive, whether it can be filtered, or whether any side effects or permissions are involved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact, front-loaded sentence with no filler. Every element earns its place: the verb, the resource, the scope qualifier, and the returned fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter listing tool with no output schema, the description adequately covers purpose and return content. It stops just short of stating explicitly that it only lists and never executes scenarios, though that is strongly implied by the wording and sibling names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the input schema requires no further explanation. The description instead adds value by specifying what each returned preset includes, which is the relevant semantic content for this tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and a resource ('built-in end-to-end scenario presets'), and even enumerates the returned fields. This clearly differentiates it from scenario execution tools like plan_scenario and execute_scenario.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the discovery step before choosing or running a scenario, but it does not explicitly say 'use this before plan_scenario/execute_scenario' or mention any alternatives. For a simple listing tool, this implied usage is adequate but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_scenarioA

Resolve a scenario into a concrete unbooked plan (candidate clusters, windows, Jenkins parameters). Books and triggers nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
overridesNo
scenario_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly discloses that the tool has no side effects on booking or triggering, and that the output is a candidate plan rather than an actual reservation. This goes beyond a simple verb phrase and gives the agent confidence about what will and will not happen.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core purpose, lists the output components, and states the key side-effect constraint. Every element earns its place with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately conveys the tool's core behavior and output shape, but it is incomplete for a tool that accepts a nested overrides object with no output schema. It also lacks guidance on prerequisite conditions (e.g., scenario must exist) and does not explain what the 'candidate clusters, windows, Jenkins parameters' concretely represent in relation to the inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It never mentions 'overrides', which is a substantial nested parameter object, nor does it clarify how 'scenario_id' relates to the resolution process. The agent is left to guess the meaning and purpose of the overrides structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Resolve a scenario') and clearly defines the output as an 'unbooked plan' with concrete components. It additionally states what the tool does NOT do ('Books and triggers nothing'), which differentiates it from siblings like execute_scenario and reserve_cluster.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Books and triggers nothing' implies this is for planning/preview rather than execution, giving the agent a general sense of when to use it. However, it does not explicitly name alternatives or state conditions like 'use execute_scenario when you actually want to run the plan,' leaving usage guidance mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reserve_clusterA

Create a GLPI reservation. Always sets users_id from the authenticated session. Re-validates for conflicts immediately before booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoISO-8601 end
startNoISO-8601 start
commentNo
duration_minutesNo
reservation_item_idYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It reveals two non-obvious behaviors: the reservation always uses the authenticated session's users_id, and conflicts are re-validated immediately before booking. This is meaningful transparency for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core action and followed by essential behavioral notes. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, low schema coverage, no annotations, and no output schema, this is too sparse. It does not explain what reservation_item_id refers to, how start/end/duration interact, whether a confirmation is returned, or what happens if the revalidation fails.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, with reservation_item_id, comment, and duration_minutes lacking descriptions. The description does not explain these parameters or clarify the relationship between start/end and duration_minutes. The note about users_id is useful but refers to a session-derived value, not an input parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Create a GLPI reservation.' This distinguishes the tool from its siblings such as check_availability, find_available_cluster, and cancel_reservation through the create action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. There is no mention of prerequisites such as checking availability first, and no exclusion criteria. The behavioral notes about users_id and revalidation are helpful but do not constitute usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_nameYes
start_atNoISO-8601 time to start the build
parametersNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It does disclose a meaningful behavioral nuance: a future start_at causes a delay=NNNsec parameter so the build does not start immediately. However, it does not mention other relevant traits such as authentication requirements, whether the trigger is asynchronous, or what happens on failure, leaving the disclosure incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the primary purpose, and then adds a concise conditional behavior. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation-style tool with no annotations and no output schema, the description covers the core trigger action and a key timing nuance, but it omits return-value expectations and asynchronous behavior. This is adequate for basic selection but not fully complete for an agent that needs to know what to expect after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at only 33%, the description must compensate for undocumented parameters. It adds useful behavior for start_at beyond the schema's 'ISO-8601 time' note, but it provides no semantic meaning for job_name or the parameters object, which remain effectively unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Trigger a Jenkins job with parameters.' This clearly distinguishes the operation from sibling tools that check availability, get status, or abort builds, so an agent can select it correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied by the verb 'Trigger' and the mention of parameters, but there is no explicit guidance on when to prefer this tool over alternatives like get_build_status or abort_build. The start_at delay behavior provides some conditional context, but no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.1.0
    • First observedabort_build
    • First observedcancel_reservation
    • First observedcheck_availability
    • First observedexecute_scenario
    • First observedfind_available_cluster
    • First observedget_build_status
    • First observedget_cluster_info
    • First observedget_cluster_kubeconfig
    • First observedget_managed_cluster_status
    • First observedimport_spoke_cluster
    • First observedlist_reservable_items
    • First observedlist_scenarios
    • First observedplan_scenario
    • First observedreserve_cluster
    • First observedtrigger_jenkins_job

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for interacting with QUADS infrastructure systems via API, enabling resource management and automation through LLM applications.
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    MCP server for IBM Technology Zone: manage reservations end-to-end and search the catalog from Claude.
    11
    -