Skip to main content
Glama
DustinTrap

kvm-pilot

by DustinTrap

kvm-pilot

Smart hands for your AI agents. A write-capable, multi-plane (KVM + BMC + SSH) MCP server for controlling physical machines โ€” gated, verified, audited.

kvm-pilot lets an agent drive a headless box through POST, firmware, the bootloader, and an OS install with no agent on the target: it works at the pixel level through an IP-KVM (PiKVM, the GL.iNet GLKVM fork GL-RM1 / GL-RM1PE, BliKVM), at the structured-state level through a BMC (Redfish on iDRAC/iLO/OpenBMC, IPMI on BMCs that predate Redfish), at the firmware level through Intel AMT/vPro (a BIOS/POST/GRUB screenshot + power + SOL on a business laptop an HDMI-capture KVM can't see boot on), and over SSH once an OS is up. A pluggable vision subsystem reads a KVM screenshot and tells you what boot phase the machine is in โ€” bios_menu, grub_menu, installer_progress, login_prompt, crash_screen, and so on โ€” and a safety layer gates every destructive operation behind operator opt-ins and per-call approvals.

Vision runs on Claude or any local OpenAI-compatible VLM (LM Studio, Ollama, vLLM, llama.cpp). Point it at a model on your own GPU and the screenshots never leave your network and cost nothing per frame.

How it works

kvm-pilot runs a see โ†’ decide โ†’ act loop, and the screen is its only sensor: it pulls a screenshot from the KVM, a vision model classifies the boot phase, and kvm-pilot acts back through the KVM's keyboard and power. Because it works at the pixel level, there is no agent on the target โ€” the same loop drives POST, firmware, the bootloader, and an OS install.

kvm-pilot reads a screenshot from the KVM, a vision backend (Claude or a local VLM) classifies the boot phase, and kvm-pilot drives keyboard and power back through the KVM โ€” a closed loop with no agent on the target machine.

A real, unedited run against a GLKVM on the home fleet โ€” an honest preflight, a headless snapshot (watch it wake the on-demand encoder), a gated dry-run power-cycle, and the boot console the agent actually saw:

Live terminal demo: kvm-pilot snapshot runs an honest preflight (worst: CRITICAL, no out-of-band recovery path), wakes the GL on-demand encoder over WebSocket, and saves screen.jpg; kvm-pilot power-cycle --dry-run logs and skips both destructive ATX operations; the final frames show the captured Linux boot console.

Related MCP server: qemu-mcp-server

Quickstart

One install gives you the whole product โ€” the kvm-pilot CLI, the kvm-pilot-mcp MCP server, and the bundled Claude skill โ€” nothing to clone. The current release line is a pre-release: install it with --pre, which is explicit and keeps selecting the beta line once a stable release ships (0.1.0a1 is yanked and much older than this README โ€” don't pin it).

pip install --pre kvm-pilot                    # CLI + skill + MCP server + WebSocket events
pip install --pre "kvm-pilot[totp]"            # + 2FA / TOTP support (pyotp)
kvm-pilot install-skill                        # optional: put the bundled skill where Claude Code loads it

Driving a KVM from an AI agent (MCP)

claude mcp add kvm-pilot -s user \
    -e KVM_PILOT_PROFILE=mykvm -e KVM_PILOT_MCP_READ_ONLY=1 -- \
    kvm-pilot-mcp

KVM_PILOT_MCP_READ_ONLY=1 is the recommended first rung of the trust ladder โ€” the agent can see everything and touch nothing until your hardware is verified. The Getting started guide covers credentials, Claude Desktop JSON config, sample prompts, and climbing the ladder. The server is published to the official MCP registry as io.github.DustinTrap/kvm-pilot, so registry-aware hosts can discover and install it by name. Agents: the repo root carries an llms.txt doc map.

Scripting from Python

from kvm_pilot import KVMClient
from kvm_pilot.vision import ScreenAnalyzer, make_backend

kvm = KVMClient("192.168.8.1", "admin", "secret")

# Classify the current screen with Claude (model auto-resolved at runtime)
analyzer = ScreenAnalyzer(kvm, make_backend("anthropic"))
print(analyzer.classify().phase)

# Or run entirely on a local VLM โ€” nothing leaves your network
local = make_backend("local", base_url="http://127.0.0.1:1234/v1", model="qwen2.5-vl-7b")
analyzer = ScreenAnalyzer(kvm, local)

# Block until the box reaches the GRUB menu, then pick the first entry
analyzer.wait_for_state("grub_menu", timeout=120)
kvm.press_key("Enter")

For the latest unreleased tree:

pip install "kvm-pilot[totp,ws] @ git+https://github.com/DustinTrap/kvm-pilot"

CLI

kvm-pilot info     --host 192.168.8.1 --user admin --ask-passwd   # prompt (no echo)
kvm-pilot capabilities --profile homelab                 # what this driver supports
kvm-pilot snapshot screen.jpg --profile homelab
kvm-pilot --timeout 60 power-cycle --profile homelab --dry-run   # log, don't send
kvm-pilot eject --profile homelab                        # detach virtual media
kvm-pilot events --profile homelab --count 5             # stream device events
kvm-pilot watch grub_menu --profile homelab \
    --backend local --vision-url http://127.0.0.1:1234/v1 --vision-model qwen2.5-vl-7b

The CLI prompts for confirmation before any destructive action (power, virtual media โ€” including uploads โ€” keyboard/mouse injection, GPIO). Use --yes to skip prompts in automation, or --dry-run to log intended actions without sending them โ€” dry-run short-circuits before the prompt, so it never blocks waiting for input. --timeout (HTTP per-request timeout) is a global flag and goes before the subcommand; watch keeps its own --timeout for the vision wait deadline.

Profiles like homelab live in ~/.config/kvm-pilot/config.toml. See docs/cli.md for the full command table (every subcommand, the capability it needs, and its gating), and docs/configuration.md for the config-file format, every KVM_PILOT_* environment variable, and the precedence between flags, env, and profiles.

GLKVM setup note: on GL.iNet firmware the PiKVM REST API is disabled by default (every /api/* call 404s, surfaced as a clear ApiDisabledError), and a firmware upgrade can re-disable it. Enable it in /etc/kvmd/nginx-kvmd.conf and pin the driver with --driver glkvm / driver = "glkvm" โ€” full steps in the troubleshooting guide.

The tool surface, by plane

The same capability protocols span three actuation planes, so one agent workflow can mix pixels, structured BMC state, and shell access โ€” with every destructive effect gated per class:

Plane

Read

Act (operator-gated)

KVM โ€” pixels & HID (PiKVM ยท GLKVM ยท BliKVM)

snapshot ยท classify_screen ยท wait_for_state ยท power_state ยท logs ยท list_virtual_media

power ยท type_text / press_key / send_shortcut / mouse ยท calibrate_mouse ยท mount_iso / eject

BMC โ€” structured state (Redfish ยท IPMI)

info ยท boot_options ยท logs (SEL) ยท sensors (CLI)

power ยท set_boot_device ยท SOL console (CLI console)

Firmware โ€” Intel AMT/vPro (spans both planes)

info ยท snapshot (firmware BIOS/POST/GRUB) ยท boot_options ยท power_state

power ยท set_boot_device ยท type/mouse ยท SOL (console) ยท amt_enable (open SOL/KVM listeners)

SSH โ€” in-band & appliance

ssh_reachable ยท appliance_status ยท access_paths

ssh_exec ยท wake (WoL) ยท appliance_reboot

Meta โ€” evidence & intake

capabilities ยท support_matrix ยท healthcheck

file_firmware_report

The canonical per-tool reference โ€” annotations, effect gates, approval lifecycle โ€” is the MCP server README; the CLI covers the full surface in docs/cli.md.

Status & maturity

Status: release candidate. GA is gated on validation breadth, not code: three of the six device drivers (redfish, pikvm, blikvm) have never run against real hardware, only emulators. See the Hardware-Compatibility list for what has actually been exercised โ€” and please add to it. (The exact version lives in the CHANGELOG; install with pip install --pre kvm-pilot.) The core paths have graduated from mocked-only to live-verified: a fleet of GL-RM1PE units has exercised snapshot/healthcheck/logs/power_state/virtual_media/info across two firmware lines โ€” on V1.9.1 those capabilities sit at beta maturity in the run ledger that ships in the wheel, derived from real runs, never hand-edited โ€” and a Dell iDRAC6 has exercised the IPMI driver live end-to-end (power, boot-device, sensors, event log, SOL serial console). The paths that can hurt are hardened: transports never re-fire a destructive request, MCP approvals are signed single-use receipts with an audit trail, and every destructive effect โ€” power, HID, media, boot-config, appliance, SSH, external writes โ€” has its own operator opt-in gate. Recent betas added remote boot-device control (Redfish, IPMI, and in-band efibootmgr), Wake-on-LAN, an IPMI driver for BMCs that predate Redfish, a serial (SOL) console, mouse auto-calibration, and headless native-resolution GLKVM snapshots; kvm-pilot test-report turns contributing evidence into one command, and the firmware registry feeds itself (firmware-check auto-files registry updates). Now we need your hardware. PiKVM, BliKVM, other GLKVM models, and Redfish BMCs (iDRAC/iLO/OpenBMC) are the combos the matrix needs most โ€” success or failure, a hardware report takes two minutes and the hourly ingest does the rest. Anything the Hardware-Compatibility list doesn't show as exercised is still unverified: expect some API movement before 1.0, note the remote firmware-flash no-op on GL-RM1PE (#94/#95), and don't point destructive ops at a machine you can't afford to have power-cycled unexpectedly. See Compatibility.

Evidence in, maturity out: live fleet runs, the one-command test-report, and community hardware-report issues feed the run ledger shipped inside the wheel; aggregation per device ร— firmware ร— capability with a minimum-sample gate derives the alpha โ†’ beta โ†’ rc โ†’ ga ladder. A failure is a first-class ledger row.

Boot-phase detection

The vision classifier maps each screenshot to a phase โ€” bios_menu, grub_menu, installer_progress, login_prompt, crash_screen, and so on. wait_for_state() polls the screen and blocks until the phase you asked for appears (or a timeout fires), so an unattended install becomes a few waits with actions wired between them:

Timeline of boot phases โ€” POST, bios_menu, grub_menu, installer_progress, installer_complete, login_prompt โ€” with the unattended-install example wiring mount_iso and hard_cycle at the start, wait_for_state on grub_menu then Enter, and wait_for_state on installer_complete; any phase can branch to crash_screen.

Sensing model

Vision is the most expensive way to read a screen โ€” a model call per frame โ€” and most of what it infers (power state, boot phase, liveness, a crash) is also available as a field, an event, or a line of text. The direction of kvm-pilot is to treat classification as a hierarchy: answer from the cheapest signal the device exposes, and fall through to OCR and finally a vision model only when nothing cheaper can.

Sensing hierarchy: structured signals (events, power and LED state, video signal and resolution, Redfish BootProgress, sensors, logs) and serial-console text are preferred; local frame-diff, OCR, and a vision model are the escalating last resort. Colour encodes cost โ€” vision is the only expensive tier.

The PiKVM/GLKVM client already exposes the cheap end โ€” ATX and HID LEDs, video-signal and resolution, on-device OCR (?ocr=true), logs, Prometheus metrics, and a WebSocket event stream. The capability protocols add Logs, BootProgress, Sensors, SerialConsole, Watchdog, and BootConfig as the seam for BMC drivers (Redfish/IPMI), where the boot phase is a structured enum (BootProgress.LastState) and the console is a serial text stream rather than pixels. Different device classes are nearly complementary: capture devices are strong on pixels, BMCs on structured state and serial text.

Safety model

Power-offs, hard resets, virtual-media connect/disconnect and image uploads, keyboard/mouse injection (type_text, press_key, shortcuts, clicks), GPIO, boot-config changes, and Redfish/IPMI resets are classified as destructive and pass through a safety layer:

  • dry-run short-circuits first: it logs the intended call and skips it entirely โ€” the confirm callback is never invoked, so dry runs never prompt or block.

  • confirmation โ€” a callback that can veto any destructive call that would really be sent. The library default allows everything (so plain scripts work); the CLI installs an interactive y/N prompt unless you pass --yes.

Decision flow for a destructive call: if the op is not in DESTRUCTIVE_OPS it executes directly; if it is, dry-run logs and skips it, otherwise a confirm callback can veto it, and only an allowed call is sent to the device.

The destructive set is defined explicitly in kvm_pilot.safety.DESTRUCTIVE_OPS so it is auditable rather than guessed. A vision classification can never trigger a destructive action on its own โ€” you wire that yourself, and the safety layer still applies. On the MCP side each destructive effect class additionally needs an operator opt-in env gate plus a per-call approval backed by a signed single-use receipt โ€” the trust ladder (READ_ONLY โ†’ DRY_RUN โ†’ per-effect ALLOW_*) is drawn in the MCP server README.

This software controls real hardware and can power-cycle or interrupt a running machine. Read SECURITY.md before exposing a KVM to the internet.

No hard-coded model version

There is no model version string anywhere in the code. The Anthropic backend resolves the newest vision-capable model at runtime via the Models API and caches it; set KVM_PILOT_VISION_MODEL or pass model= to pin one. The local backend uses whatever model you loaded on your server. Bring your own backend, endpoint, and model.

How this differs from other clients

pikvm-lib is a fine general-purpose PiKVM client. kvm-pilot is aimed at a different job:

  • Vision-based boot-phase detection โ€” classify BIOS/GRUB/installer/crash states from screenshots, with blocking wait_for_state loops. This is the core feature and pikvm-lib has no equivalent.

  • Pluggable local or cloud VLM โ€” run inference on your own GPU at zero per-frame cost, or on Claude.

  • A safety layer around destructive operations (dry-run + confirmation).

  • GLKVM-fork awareness โ€” documents the API-enable prerequisite and GL hardware quirks that bite GL-RM1PE users.

  • Stdlib-only client core โ€” the driver/vision code imports only the standard library (the bundled MCP server pulls the mcp SDK; feature extras are opt-in).

If you just want to script power and HID against a stock PiKVM and don't need the vision layer, pikvm-lib may be the simpler choice.

On the BMC side, sushy, DMTF's python-redfish-library, and pyghmi (IPMI) are mature, far more complete BMC management SDKs โ€” if you need account/firmware/network configuration, EventService subscriptions, or hardware-proven maturity, use them. kvm-pilot trades that completeness for one uniform capability surface across device classes (IP-KVMs and BMCs behind the same protocols), the same safety layer gating every destructive call, and the vision loop on devices that have pixels.

Compatibility

Device

Status

GL-RM1PE (Comet PoE)

Primary target โ€” exercised live: read/healthcheck/logs verified on firmware V1.5.1 release2 & V1.9.1 release1; snapshot verified on V1.9.1 (on V1.5.1 it fails with a clear error โ€” undecodable H.264 frame, #107/#151); remote flash a no-op (#94/#95); encoder wedges >1080p (#107)

Dell iDRAC6 โ€” IPMI (PowerEdge R710)

Exercised live: power / boot-device / sensors / event log (SEL) / SOL serial console all verified over ipmitool lanplus (fw 1.95)

Dell Latitude 5411 โ€” Intel AMT/vPro

Exercised live (AMT 14.1.67): WS-Man power / info / single-use boot, remote SOL + KVM enablement, and a 1920ร—1080 BIOS/POST screenshot over KVM redirection โ€” the firmware screen an HDMI-capture KVM can't see on a laptop. Captures graphical screens only (not legacy VGA text mode)

GL-RM1 (Comet)

Expected to work (same firmware family); untested

PiKVM v3 / v4

Expected to work (upstream API); untested

BliKVM

Expected to work (PiKVM-compatible API); untested

Redfish BMCs (iDRAC7+, iLO, OpenBMC)

Emulator-verified (in-repo emulator + DMTF sushy-tools in CI); live-BMC validation pending (#29)

The GL-RM1PE (read/snapshot paths), a Dell iDRAC6 over IPMI, and a Dell Latitude 5411 over Intel AMT are the combos run live so far โ€” everything else is "expected to work" pending validation. The Hardware-Compatibility list is the authoritative, per-capability record. ATX power control needs the ATX adapter wired to the target's front-panel header: on the GL Comet family (GL-RM1 / GL-RM1PE) that is GL.iNet's separately sold ATX board (GL-ATXPC), while PiKVM v3/v4 kits include the ATX adapter in the box and BliKVM bundles vary by model โ€” check yours. Without ATX wiring, ATX calls return errors from the device. Reports of success or failure on any hardware are exactly what this beta needs โ€” please open a hardware report.

Architecture

kvm-pilot is built on a modular, driver-plugin architecture so support can expand to many KVM/BMC devices (PiKVM family, Redfish BMCs, IPMI BMCs, JetKVM, โ€ฆ). Each device implements only the capability protocols its hardware supports; the CLI, safety layer, and vision subsystem stay device-agnostic. A make_driver(kind) registry (mirroring make_backend) builds drivers by name, and a hardware-free FakeDriver lets you exercise the whole loop โ€” capabilities, safety gating, the analyzer โ€” with no device (kvm-pilot capabilities --driver fake). See docs/architecture.md for the design and diagram.

A RedfishDriver (make_driver("redfish")) speaks the DMTF Redfish API to server BMCs โ€” Dell iDRAC, HPE iLO, Supermicro, Lenovo XCC, OpenBMC โ€” in one stdlib-only client. It shows why capabilities are segmented: a BMC's set is complementary to a PiKVM's (strong on structured state โ€” power, boot phase, sensors, logs, virtual media โ€” with no keyboard/mouse/screenshot), and the driver stays portable by following Redfish hypermedia rather than hard-coding vendor ids:

from kvm_pilot.drivers import make_driver

bmc = make_driver("redfish", host="idrac.lan", user="root", passwd="โ€ฆ")
bmc.get_boot_progress()        # 'os_running'  โ€” structured, no screenshot
bmc.read_sensors()["temperatures"]
bmc.power_off(wait=True)       # mapped to the target's actual ResetType, gated

An IpmiDriver (make_driver("ipmi")) covers BMCs that predate Redfish (e.g. Dell iDRAC6) over the system ipmitool: power, boot-device control, sensors, the SEL event log, and an SOL serial console (kvm-pilot console). Both are on the CLI too โ€” kvm-pilot info --driver redfish --host idrac.lan โ€ฆ. Capability-specific subcommands a BMC can't serve (type, snapshot, events) fail cleanly rather than crashing. Add --redfish-auth basic for an endpoint without a SessionService (emulators, or a BMC with session auth disabled).

An AmtDriver (make_driver("amt")) manages Intel AMT/vPro laptops and desktops out-of-band over AMT's three native protocols โ€” WS-Man (power / info / single-use boot), SOL (kvm-pilot console), and KVM redirection โ€” all pure-stdlib. It is the first non-PiKVM driver with Video + HID: snapshot returns a real firmware-level BIOS/POST/GRUB screenshot on a machine whose HDMI a capture-KVM can't see boot on a laptop. SOL and KVM listeners are opened remotely over WS-Man (kvm-pilot amt enable-sol / enable-kvm), no MEBx trip.

Help shape it โ€” this is where you come in

kvm-pilot is built in the open, and the thing standing between it and 1.0 is not code โ€” it's breadth of real hardware. Three of the six drivers (redfish, pikvm, blikvm) have never run against a physical device, only emulators. Every rating you see is derived from a run ledger that ships inside the wheel, never hand-set, so the matrix only grows when someone runs it on real metal. That someone could be you.

The single most valuable thing you can send: a hardware report. kvm-pilot test-report --profile <name> turns it into one command, it is read-only by default, and an hourly job folds the result into the published compatibility matrix. Failures are as welcome as successes โ€” a driver that returns a confident wrong answer on your BMC is a more useful report than one that works, and it will be treated as a first-class finding, not swept up.

Also genuinely wanted:

  • โญ Star the repo if the idea is useful to you. It is the cheapest signal that this problem is worth solving, and it is what brings in the operators whose hardware the matrix still needs.

  • ๐Ÿ› Open an issue for anything: a bug, a device that misbehaves, a confusing error, a doc that lied to you. This repo is issue-per-finding โ€” an issue is the unit of record, and "the error message didn't tell me what to do" is a legitimate report.

  • ๐Ÿ’ฌ Tell us what it got wrong. Review the safety model, the approval flow, the tool surface. Push back on the defaults. If an agent did something with your machine that surprised you, that is exactly the feedback that makes this safe for everyone else.

  • ๐Ÿ”Œ Ask for your device. Missing driver, unsupported BMC, a KVM we've never heard of? Open a driver request โ€” the plugin architecture exists precisely so that adding one doesn't mean forking the project, and docs/plugin-development.md is the contract.

  • ๐Ÿ› ๏ธ Send a PR. docs/CONTRIBUTING.md has the full pre-PR checklist; good first issues are labelled.

Nothing here phones home. The project has no telemetry that reports itself โ€” every row in the compatibility matrix is there because a human chose to send it. That's the deal, and it's why your report actually matters.

Documentation

Full user and developer docs live in docs/ (architecture, design decisions, the Redfish reference, the troubleshooting & FAQ, contributing, and the security policy). The project wiki is an auto-generated, nicely formatted mirror of that folder, and the repo root carries an llms.txt doc map for AI agents.

License

Apache License 2.0 โ€” see LICENSE and NOTICE. kvm-pilot is independent and not affiliated with or endorsed by the PiKVM project, GL.iNet, or Anthropic; those names are used only for compatibility description.

Available Tools

34 tools
access_pathsA
Read-onlyIdempotent

Which INDEPENDENT recovery paths are live for the device โ€” the lockout view.

Rolls up the REST API, appliance-SSH, target-SSH, out-of-band power, and console-HID paths, each labeled by its failure domain so redundancy is not oversold: several live paths that all ride the same appliance are ONE independent domain. summary.out_of_band_live=false means every path shares the appliance's fate โ€” a fully hung box can't be recovered remotely.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only nature is known. The description adds valuable behavioral context by explaining the aggregation logic across paths, the failure-domain labeling to avoid overstating redundancy, and the specific meaning of 'summary.out_of_band_live=false'. This goes well beyond the annotations.

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 well-structured and front-loaded with the core purpose. The supporting sentences add meaningful detail about path domains and output semantics without any fluff. 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 tool with no output schema, the description provides substantial context about the aggregated view and a specific output field. However, it does not fully enumerate all return fields or the exact structure of the summary, leaving some ambiguity about the complete response shape.

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

Parameters1/5

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

The sole parameter 'profile' has zero description in the schema, and the tool description does not mention it either. Since schema description coverage is 0%, the description fails entirely to explain what 'profile' does or how it affects the results. This is a critical gap for the only input.

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 identifies the tool's function: reporting which independent recovery paths are live for a device. It lists the exact paths (REST API, appliance-SSH, target-SSH, out-of-band power, console-HID) and emphasizes the key distinction of failure domains, making it distinct from sibling tools like ssh_reachable or power_state.

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 provides clear context through 'the lockout view' and explains when redundancy matters, indicating this is for recovery planning when a device is hung or locked. However, it does not explicitly name alternative tools or state when not to use this tool, only implicitly differentiating it.

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

amt_enableA
Destructive

Enable an Intel AMT redirection listener over WS-Man (Intel AMT/vPro only). CONFIG MUTATION.

feature='sol' opens the SOL/IDE-R listener (16994); feature='kvm' opens KVM redirection (5900) and sets the RFB password. Gated by the config effect gate + per-invocation approval (typed same-path denials, #234). consent_off=true (KVM only) DISABLES the on-screen user-consent prompt โ€” a surveillance escalation โ€” and additionally requires the dedicated KVM_PILOT_MCP_ALLOW_CONSENT_OFF operator gate (see README.md); leaving it false keeps the prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
featureYes
profileNo
consent_offNo

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing concrete effects: opening specific ports (16994, 5900), setting an RFB password, and the 'consent_off' option that disables the on-screen user-consent prompt (called a 'surveillance escalation'). It also mentions gating and approval requirements, adding rich behavioral context. No contradiction with annotations (destructiveHint true matches 'CONFIG MUTATION').

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 front-loaded with a clear summary sentence, then uses structured details for each feature. Every sentence adds value: port numbers, gates, security implications, and operator-gate reference. No fluff or redundancy.

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?

The description covers the main behavior, side effects, and special authorization needs, which is substantial given the tool's complexity. However, there is no return value info (no output schema) and the 'confirm' and 'profile' parameters are not explained, leaving minor gaps for an agent to fully predict invocation outcomes.

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?

With 0% schema description coverage, the description compensates by explaining the key parameters: feature='sol' and feature='kvm' and their port implications, and consent_off=true as KVM-only with operator-gate requirement. However, it does not explain the 'confirm' or 'profile' parameters, leaving some ambiguity for those.

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 verb ('Enable') and resource ('Intel AMT redirection listener over WS-Man'), with clear scope ('Intel AMT/vPro only'). It distinguishes between the 'sol' and 'kvm' feature modes, making the tool's purpose unambiguous relative to sibling tools.

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 gives context about when the tool applies (Intel AMT/vPro only) and explains the two feature modes, but it does not explicitly state when to use this tool over alternatives or when not to use it. No sibling tool is named as an alternative. Usage is implied rather than explicit.

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

appliance_rebootA
Destructive

Reboot the KVM APPLIANCE (not the target) to clear a wedged encoder. DESTRUCTIVE.

Recovers the RV1126 encoder wedge (the only fix โ€” the stuck threads are unkillable kernel threads). Drops all KVM control for ~60s; the target's power is untouched. Gated by the appliance effect gate + per-invocation approval, with typed same-path denials (#234). There is no out-of-band power to the appliance, so use this deliberately, never in an automated loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

While annotations already declare destructiveHint=true, the description adds rich behavioral context: drops all KVM control for ~60s, leaves target power untouched, requires effect gate and per-invocation approval, and has no out-of-band power. This goes far beyond what annotations convey.

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 compact and efficient, with each sentence serving a distinct purpose: action, rationale, impact, safety gates, and caution. It is front-loaded with the essential 'not the target' clarification and includes no filler.

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?

The description covers purpose, trigger, side effects, and safety precautions comprehensively. However, it omits direct guidance on the `confirm` and `profile` parameters, and there is no output schema to clarify return values. This leaves a small but important gap.

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 explain the parameters, but it does not explicitly. The 'confirm' boolean is only indirectly referenced via 'per-invocation approval', and 'profile' is never explained. This is a significant gap for a destructive 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 clearly states the action: 'Reboot the KVM APPLIANCE (not the target) to clear a wedged encoder.' It specifies the verb, the resource (appliance vs target), and the purpose. This distinguishes it from sibling tools like power or wake that affect the target.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Recovers the RV1126 encoder wedge (the only fix โ€” the stuck threads are unkillable kernel threads).' Also provides strong warnings: 'use this deliberately, never in an automated loop' and clarifies impact ('Drops all KVM control for ~60s'). This gives clear decision guidance.

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

appliance_statusA
Read-onlyIdempotent

Read-only diagnostics from the KVM APPLIANCE's own OS over SSH.

Targets the KVM appliance itself (its appliance_ssh channel), NOT the managed target. Reports the 1-minute load and the RV1126 video-pipeline threads in D-state. NOTE: on these units load sits at ~10 even when perfectly idle (the driver parks those threads in D-state), so it is NOT a health signal on its own โ€” use the healthcheck encoder-wedge finding for the real tell.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already indicate read-only, idempotent, and non-destructive, but description adds critical behavioral context: load sits at ~10 even when idle due to driver parking threads in D-state, so it is NOT a health signal. This goes beyond annotations and prevents misuse.

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?

Description is concise yet comprehensive: front-loaded with 'Read-only diagnostics', then specifies target, output, and a critical caveat. Every sentence serves a purpose, with no fluff or redundancy.

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 diagnostics tool with no output schema, the description sufficiently describes what it reports (1-minute load and D-state threads) and provides caveats. Minor gap: it doesn't describe the output format (e.g., numeric values vs. human-readable text), but the core usage context is complete.

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?

There is one optional 'profile' parameter with no schema description (0% coverage). The description does not mention this parameter at all, leaving its purpose and accepted values unexplained. Since schema coverage is low, the description should compensate but does not.

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 specific verb 'Reports' and clearly identifies the resource (KVM appliance's own OS over SSH) and scope (appliance_ssh channel, not managed target). It distinguishes from siblings by explicitly stating it targets the appliance itself, not the managed target.

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

Usage Guidelines5/5

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

Explicitly states when NOT to use this tool as a health signal and points to an alternative: 'use the healthcheck encoder-wedge finding for the real tell.' Also clarifies it targets the appliance, not the managed target, giving clear context.

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

boot_optionsA
Read-onlyIdempotent

Show the host's current boot override (Redfish BootSourceOverride) โ€” read-only.

Reports enabled (Disabled/Once/Continuous), the normalized target, the mode (UEFI/Legacy, or null if the BMC doesn't expose it), and the allowable targets the BMC advertises โ€” so an actuator knows what set_boot_device values this box will accept before trying one.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds useful behavioral details beyond annotations, such as the specific fields reported ('enabled', 'target', 'mode', 'allowable') and the fact that 'mode' can be null if the BMC doesn't expose it. This gives the agent concrete expectations.

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 well-structured and front-loaded: it starts with the core function, then details the output fields and their interpretation. Every sentence adds value, with no redundancy or wasted words.

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

Completeness5/5

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

Given the absence of an output schema, the description fully covers return values and their semantics. It also provides enough context for the agent to know when to call the tool and how to use the result, making it complete for its complexity.

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?

The input schema has one optional 'profile' parameter with no description, and the description does not mention it at all. Since schema coverage is 0%, the description completely fails to explain what 'profile' means or how to use it, leaving a notable gap for the agent.

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 the tool's purpose with a specific verb ('Show') and resource ('host's current boot override (Redfish BootSourceOverride)'). It also explicitly notes it's read-only, distinguishing it from sibling tools like set_boot_device.

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 explains that an actuator uses this tool to know what set_boot_device values are acceptable before attempting a change. This provides a clear when-to-use context, though it doesn't explicitly enumerate alternative tools or when not to use this one.

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

calibrate_mouseA
Idempotent

Measure and store this host's mouse commandedโ†’observed correction (#128).

Fixes "clicks where the button should be and misses". Pointer moves only โ€” no clicks, no keystrokes โ€” but it visibly moves the live cursor ~10-30s, so it is gated like HID input (KVM_PILOT_MCP_ALLOW_HID; one approval covers the whole run). Preconditions: live video signal, a static screen, a visible cursor, Pillow on the server (pip install 'kvm-pilot[calibrate]'). Afterwards mouse percent coords apply it transparently (calibrated: true); stored per (host, capture resolution) โ€” a resolution change makes it stale, never applied. Mechanism details: the MCP server README.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
profileNo
toleranceNo

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses significant behavioral traits: visible cursor movement for 10-30s, gated like HID input requiring approval, pointer moves only, and persistence/staleness per host and resolution. This goes well beyond the sparse annotations.

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 dense but well-structured, front-loading the purpose and then adding essential behavioral, prerequisite, and postcondition details. Every sentence adds value, and the length is justified by the tool's complexity.

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?

The description covers purpose, behavior, preconditions, side effects, and persistence thoroughly. However, it omits any mention of return values, and the parameter semantics are absent, which leaves a gap for a tool with no output schema.

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

Parameters1/5

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

The schema has zero coverage (no descriptions) and the tool description does not mention any of the three parameters (confirm, profile, tolerance). The description fails to explain their purpose, leaving the agent without sufficient guidance for parameter selection.

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 the tool's function: 'Measure and store this host's mouse commandedโ†’observed correction' and explains the problem it solves ('clicks where the button should be and misses'). It distinguishes from sibling tools like 'mouse' by emphasizing calibration rather than direct input.

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?

Explicit preconditions are provided (live video, static screen, visible cursor, Pillow) and the effect on subsequent mouse coordinates is described ('Afterwards mouse percent coords apply it transparently'). It does not explicitly mention alternatives, but the context makes the ideal usage clear.

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

capabilitiesA
Read-onlyIdempotent

List the capabilities the target's driver supports (read-only, offline).

Structural โ€” makes no network call and runs no preflight; it answers "which tools/actions can this device serve?" so you can pick the right interface up front (a Redfish BMC has no video; a PiKVM has no BootProgress). Returned in the capability enum's declaration order for stable output. live_evidence additionally names which device+firmware combos this driver has real-hardware run evidence for โ€” structural support is not live verification; call support_matrix for per-combo evidence and healthcheck for this exact device+firmware.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial context beyond annotations: it states the tool makes no network call and runs no preflight, returns in enum declaration order for stable output, and clarifies that live_evidence is not live verification. This is rich behavioral disclosure, fully consistent with the readOnly and idempotent annotations.

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 front-loaded with a clear definition, then efficiently expands with structural details, examples, and tool comparisons. Every sentence earns its place, and the structure with line breaks aids readability without bloat.

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?

The description covers the tool's purpose, output ordering, the meaning of live_evidence, and alternative tools, which is comprehensive for a simple query tool. However, it omits any explanation of the 'profile' parameter, and with no output schema, this is a minor incompleteness.

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 description coverage, the description needed to explain the 'profile' parameter, but it makes no mention of it. The parameter is optional with a default of null, yet the description provides no guidance on its meaning or effect, leaving a clear 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 clearly states the tool 'List the capabilities the target's driver supports' with a specific verb and resource. It distinguishes itself from siblings by contrasting with support_matrix and healthcheck, making the tool's unique role obvious.

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

Usage Guidelines5/5

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

The description provides explicit usage context: 'so you can pick the right interface up front' and gives concrete examples (Redfish has no video, PiKVM has no BootProgress). It also names alternatives for different needs, telling users to call support_matrix for per-combo evidence and healthcheck for this exact device+firmware.

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

classify_screenA
Read-onlyIdempotent

Classify the current screen's boot/run phase (read-only).

Uses the server-side vision backend when configured; cheap on-device gates (power-off, no-signal, boot-progress, OCR rules) resolve with no credentials at all. Return shapes:

  • server-side / cheap-gate โ†’ a dict with mode="server" + phase fields.

  • no server vision โ†’ caller-side fallback, a [json_text, Image] list: classify the image yourself against the system_prompt / phases in the JSON block.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNo
profileNo

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the read-only annotation, the description discloses mode-dependent behavior (server-side versus on-device gates), credential requirements, and return shapes. This adds meaningful context about how the tool behaves in different configurations, though not every edge case is covered.

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 well-structured: purpose first, then behavior, then return shapes in bullet form. Every sentence contributes new information, and it avoids repetition or filler.

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 tool with no output schema, it explains the two possible return types (dict and fallback list) and the fallback classification instructions. However, it omits parameter meaning and specific phase fields, leaving some gaps for a tool with optional params.

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

Parameters1/5

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

The schema has two parameters (hint, profile) with zero description coverage. The tool description does not mention or explain either parameter, so it adds no semantic value. With 0% coverage, the description was expected to compensate but did not.

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 starts with a specific verb and object: 'Classify the current screen's boot/run phase', making the purpose clear and distinct from sibling tools like boot_options or power_state. It also adds the 'read-only' qualifier, reinforcing scope.

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?

Provides clear context on when to use: it states it classifies boot/run phase and explains two modes (server-side vs on-device gates) with credential implications. It does not explicitly name alternatives or exclusions, but the usage context is strong.

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

ctrl_alt_deleteA
Destructive

Send Ctrl+Alt+Del to the managed host. DESTRUCTIVE.

A reboot delivered over the keyboard โ€” classified power_soft, so it needs KVM_PILOT_MCP_ALLOW_POWER (the same gate as the power tool), never the weaker HID gate.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
profileNo

TDQS

A4/5.0
Behavior5/5

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

Annotations already flag destructive=true, but the description adds that this is a keyboard-delivered reboot, classifies it as power_soft, and requires the KVM_PILOT_MCP_ALLOW_POWER permission. This goes beyond the annotation by specifying the permission model and the nature of the operation (power control vs. HID input).

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?

Three compact sentences that front-load the action, then explain the destructive nature and permission requirement. No wasted words; all information is relevant.

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 destructive power tool, the description covers the core behavior and permissions, but lacks essential parameter semantics. Given the absence of an output schema and the simplicity of the tool, the major gap is the unexplained parameters, preventing full autonomous use.

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

Parameters1/5

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

Schema description coverage is 0% and the description provides no explanation of the 'confirm' or 'profile' parameters. Since both are optional but could affect behavior (e.g., confirmation for destructive action), the agent has insufficient information to use them correctly.

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?

Clearly states 'Send Ctrl+Alt+Del to the managed host' โ€” a specific verb and resource. It further clarifies this triggers a reboot and distinguishes it from regular HID shortcuts by referencing the power gate and classification as power_soft, differentiating it from sibling tools like send_shortcut.

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?

Provides clear context that this is a power-related operation requiring the same permission gate as the 'power' tool, and warns against using the weaker HID gate. However, it doesn't explicitly name alternative tools or state when not to use it, though it implies that regular HID shortcuts are not equivalent.

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

doctrineA
Read-onlyIdempotent

Re-serve the bundled operating doctrine (read-only; offline, no device I/O).

The skill's playbooks ship inside this package; this tool re-serves them so a session that never loaded the skill file โ€” or has long since compacted it away โ€” can re-anchor on the written doctrine instead of a faded memory of it. Call with no topic to list the topics; call with one for that playbook's full text. Read recovery the moment a host goes dark or a snapshot fails, and interfaces before picking how to do an action you haven't done this session.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds context: 'offline, no device I/O', that data comes from bundled playbooks, and that it can be called repeatedly to refresh knowledge. This goes beyond annotations without contradicting them.

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?

Three sentences, each earning its place: first defines function and safety, second explains rationale, third gives specific usage guidance. No redundant phrasing or filler.

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

Completeness5/5

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

For a simple read-only tool with one optional parameter and no output schema, the description covers purpose, usage, parameter semantics, and decision guidance. It even includes situational triggers for specific playbooks. Nothing essential is missing.

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

Parameters5/5

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

Schema has no description for the optional 'topic' parameter (0% coverage). The description fully compensates by stating: 'Call with no topic to list the topics; call with one for that playbook's full text.' This precisely defines null vs. provided behavior.

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 identifies a specific verb+resource: 'Re-serve the bundled operating doctrine' with clear read-only and offline behavior. It distinguishes from sibling tools (all hardware/IPMI/control actions) by being the only documentation/playbook tool, and explains its purpose of re-anchoring sessions.

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

Usage Guidelines5/5

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

Explicit usage triggers are provided: 'Read recovery the moment a host goes dark or a snapshot fails, and interfaces before picking how to do an action you haven't done this session.' It also instructs how to choose between no topic (list) and with topic (full text), which is actionable guidance.

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

ejectA
Idempotent

Detach virtual media (the inverse of mount_iso). GATED act (media effect gate); reversible.

Needs KVM_PILOT_MCP_ALLOW_MEDIA + per-invocation approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
profileNo

TDQS

A4/5.0
Behavior5/5

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

Reveals behavioral traits not present in annotations: it is a 'GATED act' requiring 'KVM_PILOT_MCP_ALLOW_MEDIA + per-invocation approval', and notes it is reversible. This significantly exceeds the annotation's idempotence/destructive hints with concrete operational constraints.

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 compact and immediately states the operation, followed by essential gating/permission details. Every sentence adds value, with no fluff.

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 purpose, relationship to mount_iso, reversibility, and required permissions, which is strong for such a simple operation. However, it leaves both parameters completely unexplained and gives no hint of expected response or side effects beyond detachment, creating a noticeable gap given the schema's lack of descriptions.

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

Parameters1/5

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

Neither the description nor the input schema explains the purpose of the 'confirm' or 'profile' parameters. With schema description coverage at 0%, the description fails to add any semantic meaning to the parameters, making it unusable for deciding how to fill them.

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?

Clearly states the action: 'Detach virtual media', and reinforces with 'inverse of mount_iso', which also differentiates it from the sibling tool mount_iso. The verb+resource is specific and unambiguous.

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?

Provides context by explicitly naming mount_iso as the inverse operation, signaling when to use this tool. However, it does not offer explicit when-not-to-use guidance or alternative tools for failure scenarios, so it falls short of a 5.

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

eventsA
Read-onlyIdempotent

Collect typed device events from the kvmd stream (read-only, bounded).

MCP twin of CLI events minus follow mode (#233 โ€” an endless stream doesn't fit the synchronous stdio transport): returns up to count events or duration seconds' worth (capped 30 s), whichever first. logs is the better first diagnostic; events add the live typed stream (atx/msd/streamer state changes) to cross-check a vision wait against.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
profileNo
durationNo

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the annotations. While readOnlyHint and idempotentHint already indicate safety, the description reveals concrete behavioral constraints: no follow mode, bounded to 'count' or 'duration' seconds (capped at 30s), and suitability for sync stdio transport. This adds materially to what annotations alone provide.

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 compact and front-loaded with the primary purpose. Every sentence earns its place: the first states the action, the second explains the bounded behavior and the reason for divergence from the CLI version, and the third provides usage context. No fluff or redundancy.

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?

The description is largely complete for tool selection: it covers purpose, behavior, and usage context relative to siblings. The absence of an output schema makes return value description less critical, but a bit more detail on what constitutes a 'typed device event' (e.g., sample events) would make it fully self-contained. The unexplained 'profile' parameter also slightly reduces completeness.

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 has 0% description coverage, so the description compensates partially by explaining 'count' and 'duration' semantics ('returns up to count events or duration seconds' worth'). However, the 'profile' parameter remains undefined, with no hint in the description about its role or accepted values, leaving a gap that the schema does not fill.

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 ('Collect typed device events') and clearly identifies the source (kvmd stream) and nature (read-only, bounded). It also distinguishes itself from the sibling tool 'logs' by framing events as a live typed stream for cross-checking vision waits, which is more than enough to differentiate it from the broader sibling set.

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

Usage Guidelines5/5

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

Explicit guidance is given: 'logs is the better first diagnostic; events add the live typed stream... to cross-check a vision wait against' clearly instructs when to use events versus an alternative. It also explains the bounded behavior (count/duration cap) which informs practical usage, satisfying the 'when-to-use' requirement.

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

file_firmware_reportA
Idempotent

File the device's firmware-currency report as a GitHub issue when the registry is behind (MCP twin of CLI firmware-check, #189/#190). EXTERNAL WRITE โ€” writes outside the managed device.

The read/reconcile half always runs; registry current โ†’ nothing to file, the result says so. Filing is gated as its own external_write effect (KVM_PILOT_MCP_ALLOW_EXTERNAL_WRITE + per-invocation approval); dry_run=true previews the exact issue title/body; a missing or unauthenticated gh is a graceful filed=false reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNo
sourceNo
confirmNo
dry_runNo
profileNo

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses external-write behavior, gating via KVM_PILOT_MCP_ALLOW_EXTERNAL_WRITE and approval, dry-run preview, and graceful degradation when gh is missing/unauthenticated. These details go well beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false) and provide actionable context. No contradictions with annotations.

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

Conciseness4/5

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

The description is compact and front-loaded, with each sentence contributing value. The CLI twin reference and issue numbers add some noise, but overall it is efficient and logically structured.

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 core behavior, external-write gating, dry-run, and failure modes, which is useful for a complex tool. However, since there is no output schema, it does not explain the return structure beyond a mentioned 'result' and 'filed=false reason.' The lack of parameter documentation leaves notable gaps, making it adequate but not fully complete.

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%, yet the description only explains dry_run. The other four parameters (repo, source, confirm, profile) are not described. Even confirm is only obliquely tied to 'per-invocation approval.' This is insufficient for an agent to correctly set these parameters.

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 opens with a precise verb and resource: 'File the device's firmware-currency report as a GitHub issue when the registry is behind.' This clearly distinguishes it from the sibling firmware_check (which only checks) and specifies the condition for action.

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 states the trigger condition explicitly ('when the registry is behind') and notes that a current registry results in 'nothing to file.' It also recommends dry_run=true for previews. However, it does not explicitly name firmware_check as the read-only alternative, so exclusions are implied rather than fully spelled out.

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

firmware_checkA
Read-onlyIdempotent

Report the device's firmware currency vs the bundled registry (read-only).

The read half of file_firmware_report (#233): reconciles the device's reported firmware/update state against the registry SSoT and says whether the registry is behind โ€” nothing is filed, no gate is consulted. When registry_behind is true, file_firmware_report contributes the report (gated external write).

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds that the tool reconciles state against the registry SSoT, does not file anything, does not consult a gate, and how it relates to file_firmware_report's write action. This goes beyond annotations and provides useful behavior context.

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 concise sentences with no filler. It front-loads the core purpose in the first sentence and uses the second to clarify behavioral boundaries and sibling relationship. Every word adds value.

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 simple read-only checker, the description covers the main function and its integration with file_firmware_report. However, it omits explanation of the 'profile' parameter and provides only a vague hint about the return value ('says whether the registry is behind'), leaving some ambiguity for the agent.

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

Parameters1/5

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

The schema describes one optional 'profile' parameter with no description (0% coverage), and the tool description does not mention the parameter at all. The agent receives no guidance on what 'profile' means or how to use it.

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 'Report the device's firmware currency vs the bundled registry (read-only)' and further explains it is the read half of file_firmware_report, distinguishing it from the sibling and specifying its scope.

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

Usage Guidelines5/5

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

It explicitly names file_firmware_report as the write counterpart and contrasts behavior by saying 'nothing is filed, no gate is consulted' while noting when registry_behind is true the sibling contributes the report. This clearly indicates when to use this tool versus the alternative.

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

healthcheckA
Read-onlyIdempotent

Audit the device's readiness/recovery, security posture, and firmware (#80).

Read-only. Returns per-check findings with a tiered severity; a CRITICAL (e.g. no out-of-band reset path) is what should gate a subsequent destructive op. The most valuable finding is recovery-path โ€” whether a hung guest can be reset at all when the KVM is remote. Served through the preflight cache (#225): stable posture may come from the last assessment, and a firmware change since then adds a firmware-delta finding of what cleared/regressed.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description reveals caching behavior via the preflight cache, potential for stale results, and firmware-delta findings. It also explains the severity tiering and how CRITICAL findings should gate operations, adding meaningful context.

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 concise and well-structured: it opens with the purpose, then covers read-only behavior, returns, and caching, with each sentence adding distinct value. No unnecessary words or repetition.

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

Completeness5/5

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

For a relatively simple read-only tool with one optional parameter, the description covers the return format (per-check findings with severity), the gating semantics, the cache behavior, and firmware-delta scenario. It is comprehensive enough for an agent to select and invoke it correctly.

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?

The input schema has one optional 'profile' parameter, but the description gives no explanation of what it does or how to use it. Since schema description coverage is 0%, the description should compensate, but it remains undocumented and ambiguous.

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 the specific verb 'Audit' and clearly states the resource scope: device readiness/recovery, security posture, and firmware. This distinguishes it from sibling tools like power_state or firmware_check, and the added context about gating destructive operations makes its role clear.

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 explicitly states when to use this tool: before a subsequent destructive operation, especially when a remote KVM hangs. It also highlights the most important finding (recovery-path). It doesn't name alternative tools, but the context is sufficiently clear to guide selection.

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

infoC
Read-onlyIdempotent

Return device / system info (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description merely restates 'read-only' and adds no new behavioral context such as auth requirements, rate limits, or what exactly is returned.

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 wasted words. It states the verb, the resource, and the read-only nature 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?

While the tool is simple (one optional parameter, no nested objects), the description is too vague to be complete. It does not explain what 'device/system info' includes, how the 'profile' parameter affects the result, or what the return format is, especially given the absence of an output schema.

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

Parameters1/5

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

The schema has one optional parameter 'profile' with 0% description coverage, and the description does not mention it at all. The description fails to compensate for the low coverage, leaving the meaning of 'profile' entirely to the schema's minimal string/null type.

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 uses the specific verb 'Return' and identifies the resource as 'device / system info', making the core purpose clear. However, it does not distinguish this from sibling tools like healthcheck, logs, or appliance_status, which also return information.

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?

The description offers no guidance on when to use this tool versus alternatives. The only hint is 'read-only', which implies safe usage, but there is no explicit context, exclusions, or mention of sibling tools.

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

list_virtual_mediaA
Read-onlyIdempotent

Inventory the KVM's virtual-media (MSD) storage (read-only).

Check this BEFORE asking the operator to download or upload an ISO โ€” the image may already be on the device (#127). Returns stored images, the selected image, and attach state (online). host_visible_as (when known, #78) is the device name the TARGET's boot menu shows for truly presented media โ€” match it to pick the right boot entry and to confirm the medium is really inserted. Details: doctrine topic 'interfaces'.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds valuable behavioral context: the return payload includes stored images, selected image, and attach state, and explains the meaning of host_visible_as. This helps the agent understand the tool's output without an output schema.

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

Conciseness4/5

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

The description is front-loaded with the primary purpose, followed by actionable guidance, return details, and a pointer to further documentation. It is somewhat noisy with issue reference numbers (#127, #78), but overall each sentence contributes useful information.

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 read-only list tool, the description covers purpose, usage, and key return fields. However, it omits any explanation of the 'profile' parameter and does not fully describe the output structure beyond a few fields. The missing parameter documentation creates a notable gap in completeness.

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

Parameters1/5

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

The schema has one optional parameter 'profile' with no description (0% schema coverage), and the description does not mention any parameter. The agent is left without any guidance on what 'profile' refers to or how to use it, so the description fails to compensate 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 clearly states the tool's function with a specific verb ('Inventory') and resource ('KVM's virtual-media (MSD) storage'), and explicitly notes it is read-only. This distinguishes it from sibling tools like mount_iso and eject, which perform mutations.

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 gives explicit guidance on when to use the tool ('Check this BEFORE asking the operator to download or upload an ISO') and explains how to interpret host_visible_as to pick the correct boot entry. It lacks explicit exclusions or alternatives, but the context is clear and actionable.

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

logsA
Read-onlyIdempotent

Return the device/host event log as text (read-only).

seek is seconds of lookback (0 = the whole buffer). This is the go-to diagnostic when video/streamer/encoder or power behaviour looks wrong: the text log names a fault (e.g. a stuck encoder behind a snapshot 503) that a screenshot cannot. Tail-follow is intentionally not exposed โ€” it blocks over the server's synchronous transport.

ParametersJSON Schema
NameRequiredDescriptionDefault
seekNo
profileNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds behavior beyond that: `seek` semantics, the deliberate lack of tail-follow, and the diagnostic context. This goes beyond the annotation baseline, though it doesn't discuss return format or error behavior.

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 front-loaded with the core purpose and then adds exactly the information an agent needs: seek meaning, use-case context, and the tail-follow limitation. Every sentence earns its place, and it's concise without being terse.

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 read-only log tool, the description covers the core function, usage context, and a key parameter. The unexplained `profile` parameter and lack of output schema leave some gaps, but the overall context is sufficient for selecting and invoking the tool in most scenarios.

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 `seek` parameter is explained as 'seconds of lookback (0 = the whole buffer),' which adds meaning beyond the bare schema. However, `profile` is entirely unexplained and schema description coverage is 0%, leaving half the parameters semantically opaque.

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?

States a specific action and resource: 'Return the device/host event log as text (read-only).' It clearly distinguishes from screenshot-based tools by noting the log 'names a fault...that a screenshot cannot,' making its niche explicit.

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

Usage Guidelines5/5

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

Explicitly states when to use it: 'This is the go-to diagnostic when video/streamer/encoder or power behaviour looks wrong.' It also gives an alternative comparison (screenshot) and warns that tail-follow is intentionally omitted due to transport constraints, setting clear expectations.

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

mount_isoA
Idempotent

Mount an ISO as virtual media on the host. GATED act (media effect gate); reversible.

source is a local path or an http(s):// URL; usb=true attaches as a USB flash drive instead of a CD-ROM. Needs KVM_PILOT_MCP_ALLOW_MEDIA + per-invocation approval. Mounting bumps the frame generation, so a mouse click planned against the pre-mount screen is invalidated.

ParametersJSON Schema
NameRequiredDescriptionDefault
usbNo
nameNo
sourceYes
confirmNo
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations, the description discloses important behavioral traits: it is a gated action, reversible, requires KVM_PILOT_MCP_ALLOW_MEDIA plus per-invocation approval, and invalidates planned mouse clicks due to frame generation bump. This goes well beyond the annotations' basic flags.

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 front-loaded with the core purpose, then adds parameter detail and caveats efficiently. It uses concise formatting with backticks for variables and line breaks to separate key ideas, with no unnecessary words.

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?

Given the tool has 5 parameters, no output schema, and moderate complexity, the description covers the main operational aspects (source types, usb mode, permissions, side effect on frame generation). It omits explanations for three auxiliary parameters, but the core usage is well covered.

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 schema has 0% description coverage, so the description must compensate. It explains 'source' (local path or URL) and 'usb' (USB flash drive vs CD-ROM), but does not clarify 'name', 'confirm', or 'profile'. This partial compensation is useful but incomplete.

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 verb ('Mount') and resource ('ISO as virtual media on the host'), clearly distinguishing it from sibling tools like 'eject' or 'list_virtual_media'. It also notes the tool is reversible, further clarifying its purpose.

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?

Provides clear context on when to use the tool: it is gated, requires specific environment variable and approval, and has a side effect on frame generation. It does not explicitly name alternative tools for when not to use it, but the context is sufficient for most use cases.

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

mouseA
Destructive

Move the mouse (and optionally click) on the host. DESTRUCTIVE (HID input).

A click must carry the observed_frame_ref it was planned against (from a prior snapshot); it is refused โ€” re-snapshot and retry โ€” if the host rebooted/swapped media since, the observation is older than KVM_PILOT_MCP_FRAME_MAX_AGE (60s default, #141), or the ref wasn't issued by this server. Move-only (button omitted) needs no ref. coord_space: percent (0.0-1.0, default โ€” survives resolution changes), pixel, or raw kvmd. Gated by KVM_PILOT_MCP_ALLOW_HID

  • per-invocation approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
buttonNo
confirmNo
profileNo
coord_spaceNopercent
observed_frame_refNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses critical behaviors: click refs are enforced with refusal conditions (host reboot, media swap, age >60s, foreign ref), move-only bypasses the ref requirement, coord_space affects coordinate interpretation across resolution changes, and the tool is gated by a runtime flag plus per-invocation approval. This is substantive transparency about side effects and preconditions.

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

Conciseness4/5

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

The description is front-loaded with the core purpose, then organized into precise technical constraints with no wasted words. It is dense but readable; each statement adds value. Slightly long, but acceptable given the safety-critical details.

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

Completeness5/5

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

For a mutating HID tool with no output schema, the description covers what an agent needs to know: destructive classification, ref staleness rules, coordinate space semantics, move-only behavior, and gating conditions. The only minor omission is the meaning of 'confirm' and 'profile', but the overall context is robust for correct invocation.

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?

With 0% schema description coverage, the description compensates by clarifying key parameters: coord_space values and default, observed_frame_ref requirements for clicks, and button omission meaning move-only. However, 'confirm' and 'profile' are not semantically explained, so the agent still has to guess their effects โ€” leaving a meaningful 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 opens with a clear, specific verb+resource statement: 'Move the mouse (and optionally click) on the host.' It immediately distinguishes this from sibling input tools (press_key, type_text, send_shortcut) by the target device and action, and mentions the DESTRUCTIVE HID input nature, giving the agent a strong cue for when to select this tool.

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 explains when a click requires an observed_frame_ref and when move-only is permissible, and notes the tool is gated by KVM_PILOT_MCP_ALLOW_HID and approval. This is clear usage context, though it does not explicitly name alternative tools or state 'use this instead of X' โ€” the context alone is sufficient to differentiate.

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

powerA
Destructive

Change host power state. DESTRUCTIVE.

Gated by the power effect gate + per-invocation approval (elicitation, or confirm=true under standing policy); denials come back through the same path with a typed outcome (#234). The result carries an honest effect report (#168): verified is true/false when the driver has a trustworthy power signal (Redfish PowerState, a wired ATX LED), and null โ€” with the reason and what to do instead โ€” when it doesn't. A power action also invalidates prior snapshot frame refs (generation bump), so a stale mouse click can't land on the post-reboot screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
confirmNo
profileNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already mark this as destructive and non-idempotent. The description goes far beyond that by disclosing approval gating, per-invocation confirmation, the honest effect report with verified true/false/null semantics, and invalidation of snapshot frame refs. This is rich, non-redundant behavioral context.

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?

Concise and well-structured: opens with a one-line purpose, then adds critical caveats (destructive, gating) and behavioral details. Every sentence carries distinct value with no repetition or filler. Dense but organized.

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?

Given the tool's complexity (destructive, approval-gated, side-effectful), the description covers the essential operational context: how approval works, what the result indicates, and side effects on snapshots. It does not fully describe the return format or the exact semantics of off-hard vs reset, but the enumerated action values and partial result coverage make it largely complete for an agent.

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 does explain the confirm parameter meaningfully (used for approval under standing policy). The action enum values are self-explanatory, but the profile parameter is left undocumented. The description partially compensates but not fully.

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?

States a specific verb+resource: "Change host power state." This clearly differentiates from sibling tools like power_state (read-only state inspection) and wake (power-on via network). The DESTRUCTIVE warning further reinforces the tool's intent.

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 clearly conveys that this tool is for changing power state, but it does not explicitly mention when to use it over alternatives or provide exclusions. Usage context is implied (change vs. read), but no direct comparison to power_state or other siblings is given.

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

power_stateB
Read-onlyIdempotent

Return whether the host is powered on, plus ATX detail where the driver has it (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's 'read-only' is redundant. It adds the conditional 'ATX detail where the driver has it', but this is vague and does not explain what the detail contains or how the profile parameter affects behavior.

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

Conciseness4/5

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

The description is a single sentence with 19 words, front-loaded with the main action. However, 'read-only' at the end is redundant given the annotations, making it slightly less earned than a fully optimized concise description.

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 simple read tool, the description gives the core behavior but omits the meaning of the 'profile' parameter and any description of the return format, especially since there is no output schema. The ATX detail is ambiguous, leaving the agent uncertain about what to expect.

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

Parameters1/5

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

There is one parameter, 'profile', with no schema description (0% coverage). The description does not mention the parameter at all, leaving its meaning and effect completely undocumented. This fails to compensate for the schema's lack of detail.

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 the tool returns the host's power state, using the verb 'Return' to indicate a query operation. It also mentions ATX detail, distinguishing it from control tools like 'power' or 'wake'. The read-only qualifier reinforces its query-only purpose.

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 read-only parenthetical implies it is for checking state rather than changing it, but the description does not explicitly say when to use this tool versus alternatives like 'power' or 'wake'. It lacks direct exclusionary guidance or named sibling alternatives.

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

press_keyA
Destructive

Press a single key (a kvmd key code, e.g. Enter/Escape/F2). DESTRUCTIVE.

Same gating as type_text (HID input): KVM_PILOT_MCP_ALLOW_HID + approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
confirmNo
profileNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description reinforces 'DESTRUCTIVE'. More valuably, it discloses the HID gating and approval requirement, which is not present in annotations. It also clarifies the expected key format (kvmd). No contradiction with annotations.

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 concise sentences, front-loaded with the verb and object. It includes a clear warning (DESTRUCTIVE) and a reference to gating, with no unnecessary words 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 tool with 3 parameters and no output schema, the description covers the key format and the operational gating, but omits the roles of `confirm` and `profile`. The overall picture is adequate for a safe invocation, but understanding all parameters requires inference.

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 explains the `key` parameter with syntax examples and the kvmd code concept, but leaves `confirm` and `profile` undocumented. Since `key` is the primary required parameter, partial compensation is achieved, but gaps remain.

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 the action ('Press a single key') and specifies the resource (a kvmd key code) with concrete examples (Enter, Escape, F2). This distinguishes it from sibling tools like type_text and send_shortcut, which handle text strings or shortcuts.

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 usage for pressing single keys and provides gating conditions (KVM_PILOT_MCP_ALLOW_HID + approval). However, it does not explicitly compare with alternatives or state when not to use this tool, leaving the context for selection largely implied.

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

send_shortcutA
Destructive

Send a key chord โ€” comma-separated kvmd key codes, e.g. ControlLeft,AltLeft,Delete or ControlLeft,AltLeft,F2. DESTRUCTIVE.

Gated by effect, not transport: a reboot/power chord (Ctrl+Alt+Del, Magic SysRq) is classified power_soft/power_hard and needs KVM_PILOT_MCP_ALLOW_POWER; an ordinary session chord is hid_control and needs KVM_PILOT_MCP_ALLOW_HID โ€” so a reboot can't slip through the HID gate.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes
confirmNo
profileNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, and the description reinforces this with 'DESTRUCTIVE.' It adds valuable context by explaining that power chords are classified separately and require a different environment variable, ensuring a reboot cannot slip through the HID gate. This goes beyond the structured annotation data.

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 paragraphs, front-loaded with the action and example, then adds gating context. Every sentence carries meaningful information, with no filler or redundancy.

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 destructive tool, the description covers the essential syntax and permission gating, but leaves confirm and profile semantics unexplained. Since there is no output schema, return behavior is not described, which is acceptable for this tool type. The gaps are mainly parameter-related, not overall completeness.

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 explain parameters. It explains 'keys' with examples of valid key chords, but entirely omits 'confirm' and 'profile'. These parameters remain undefined in both schema and description, creating ambiguity about confirmation behavior and profile selection.

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 identifies the action ('send a key chord') and the resource (comma-separated kvmd key codes), with concrete examples. It distinguishes itself from siblings like press_key and ctrl_alt_delete by explaining effect-based gating, making the purpose specific and unambiguous.

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 context on when the tool applies by explaining the effect-based gating (power vs. HID) and required environment variables. It doesn't explicitly name alternatives like type_text or press_key, but the gating clarifies the conditions for use and exclusion, which is sufficient for most agents.

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

sessionA
Read-onlyIdempotent

Report this server's current operating posture (read-only; offline, no device I/O โ€” answers even when the device is down).

Call this after a context compaction, when resuming a long flow, or before planning act calls: it names the target, dry-run/read-only state, which effect gates are open (by class name only โ€” opening one is operator-only, out of band), the approval posture, any live standing approvals (#192) with their scope and time left, the recent act journal, and the last wait_for_state result for the target. All journal/wait state is in-memory: a server restart empties it (and voids receipts and frame refs), so an empty journal after a restart is expected, not evidence nothing happened. Pair with healthcheck for device health and doctrine for the operating playbooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description reveals critical behavioral details: it works offline with no device I/O, answers even when the device is down, and its journal/wait state is in-memory and resets on restart. This goes far beyond what annotations provide.

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?

Though moderately long, every sentence carries unique value: main purpose, usage triggers, content summary, data-reset caveat, and sibling differentiation. It is well structured and front-loaded, with no filler.

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?

The description comprehensively covers the tool's output components (target, dry-run state, effect gates, approvals, journal, wait_for_state result) and the critical in-memory caveat. The only gap is the unexplained 'profile' parameter, preventing a perfect score.

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 0% and the description does not mention the 'profile' parameter at all. While the parameter is optional, its meaning is completely unexplained, leaving an agent to guess whether it selects a target, a profile, or something else.

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 opens with a specific verb+resource: 'Report this server's current operating posture.' It clearly distinguishes itself from siblings by explicitly pairing with 'healthcheck' for device health and 'doctrine' for playbooks, making its niche obvious.

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

Usage Guidelines5/5

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

The description gives explicit guidance on when to call: 'after a context compaction, when resuming a long flow, or before planning act calls.' It also names complementary tools (healthcheck, doctrine), effectively steering an agent toward the right choice without ambiguity.

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

set_boot_deviceA
Destructive

Set the next-boot (or persistent) boot device via BootSourceOverride. CONFIG MUTATION.

Gated by the config effect gate + per-invocation approval; denials come back through the same path with a typed outcome (#234). none clears the override; once=false makes it persistent; uefi=false selects legacy BIOS mode where the target exposes it. A target the BMC doesn't advertise fails fast (call boot_options first to see allowable).

ParametersJSON Schema
NameRequiredDescriptionDefault
onceNo
uefiNo
deviceYes
confirmNo
profileNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already indicate destructiveHint and non-readonly, but the description adds significant context: approval gating, typed outcome on denial, 'none' clearing behavior, persistence via 'once=false', legacy BIOS via 'uefi=false', and fast-fail on unadvertised targets. This goes well beyond the structured hints.

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 compact and front-loaded with purpose, then packs relevant behavioral details into a short paragraph. No wasted words.

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?

Given the tool's complexity (5 params, mutation, approval flow) and lack of output schema, the description covers the key behaviors, prerequisites, and failure modes. Gaps remain around the 'confirm' and 'profile' parameters and exact return shape, but the overall guidance is strong.

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 descriptions are absent (0% coverage), so the description carries the burden. It explains the semantics of 'none', 'once', and 'uefi' in plain language, but leaves 'confirm' and 'profile' unexplained. Partial compensation only.

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 opens with a specific verb and resource: 'Set the next-boot (or persistent) boot device via BootSourceOverride.' It clearly distinguishes itself from sibling tools like boot_options by emphasizing mutability ('CONFIG MUTATION') and mentions the mechanism.

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 gives actionable guidance by telling users to 'call boot_options first to see allowable' targets, establishing a clear precondition. However, it does not explicitly contrast when to use this tool versus alternative mutation tools or describe exclusions, so it's slightly below the top tier.

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

snapshotA
Read-onlyIdempotent

Capture the current KVM screen (read-only).

Returns [json_text, image]: the JSON carries a frame_ref (host:generation:hash) โ€” pass it back to the mouse tool as observed_frame_ref so an absolute click can be refused if the host rebooted or swapped media since you looked.

It also carries the live signal state (online/resolution/fps/format, #143) and unchanged_since_last_snapshot (#141): a byte-identical frame when the screen should have changed means the pixels are stale/cached โ€” do NOT trust them as ground truth; check signal and logs instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNo

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description reveals critical behavior: the return format, frame_ref semantics, live signal state, and the warning that byte-identical frames may be stale/cached and should not be trusted. It also references issue numbers for context, adding depth.

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

Conciseness4/5

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

The description is moderately long but each sentence contributes: return format, frame_ref usage, signal state, and staleness warning. Minor clutter from issue numbers (#143, #141) slightly distracts but overall is well-organized.

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?

With no output schema, the description compensates by explaining the return tuple and key edge cases. The only notable gap is the undocumented 'profile' parameter, which prevents full completeness for a tool with this richness.

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?

The schema has one optional 'profile' parameter with no schema description and 0% coverage. The tool description never mentions this parameter, leaving its purpose and possible values completely undocumented. The agent has to guess what 'profile' means.

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 opens with 'Capture the current KVM screen (read-only)', which is a clear verb+resource statement. It distinguishes this from siblings by explicitly framing it as a screen capture returning image and JSON, and by contrasting with the 'mouse' tool's use of the returned frame_ref.

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 gives explicit guidance on using the returned frame_ref with the mouse tool and instructs to check 'signal' and 'logs' instead when unchanged_since_last_snapshot is true. While it doesn't explicitly state 'use this instead of classify_screen', the alternative actions are clear for the described scenario.

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

ssh_discoverA
Read-onlyIdempotent

Scan a CIDR for hosts with an open SSH port. RISKY โ€” opt-in.

An active network scan: noisy, and only acceptable on networks the user owns or is authorized to probe. Use it ONLY to help find a target whose address the user doesn't know, after they confirm the range โ€” never by default. confirm=true is required to acknowledge the scan.

ParametersJSON Schema
NameRequiredDescriptionDefault
cidrYes
portNo
confirmNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, but the description adds important behavioral context: it is an 'active network scan' that is 'noisy', requires user confirmation and authorization, and is 'RISKY โ€” opt-in'. It also discloses the mandatory confirm=true requirement, which goes beyond annotation metadata.

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 compact and front-loaded: the first sentence states the core function, followed by a single warning paragraph. Every sentence contributes either to purpose, risk, or usage constraints. No redundancy.

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?

The tool is well-contextualized: purpose, risk, authorization, and confirmation are all covered. However, with no output schema, the description does not specify what the tool returns (e.g., list of hosts, IPs). Despite that, the name 'discover' and the goal 'find a target' imply the result, so it is nearly complete.

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 coverage is 0%, so the description must compensate. It explains confirm's role ('confirm=true is required'), and cidr is implicitly defined by 'Scan a CIDR'. However, the port parameter is not addressed beyond its default, leaving potential ambiguity about whether it is the SSH port or a custom scan port. Some meaning is added but not enough for a 0% coverage schema.

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 opens with a specific verb+resource: 'Scan a CIDR for hosts with an open SSH port.' This clearly distinguishes the tool from siblings like ssh_reachable (checking a single host) or ssh_exec (running commands). It further narrows the purpose with 'Use it ONLY to help find a target whose address the user doesn't know'.

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 gives strong when-to-use guidance ('help find a target whose address the user doesn't know') and when-not-to-use ('never by default', only on authorized networks). It stops short of naming alternative tools explicitly, but the exclusionary conditions make the intended usage unambiguous.

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

ssh_execA
Destructive

Run a command on the managed host's OS over SSH. DESTRUCTIVE / in-band.

Gated by its own SSH effect gate (never the HID gate) + per-invocation approval, with typed same-path denials (#234). host overrides the profile/env ssh_host at runtime (e.g. a discovered install-time DHCP address).

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo
commandYes
confirmNo
profileNo

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations, the description reveals the SSH effect gate and per-invocation approval requirement, as well as the typed same-path denials (#234), which are not present in the annotations. It also documents the 'host' override behavior. It does not elaborate on the consequences of destructive commands, but the 'DESTRUCTIVE' label and destructiveHint annotation cover this.

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 three sentences, front-loaded with the primary purpose, followed by the gating detail and parameter clarification. Every sentence adds value, and there is no redundancy.

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?

Given the tool's modest complexity (4 parameters, no output schema), the description covers the core purpose, the safety mechanism, and the host override. It omits explicit return-value behavior and the role of 'confirm,' but these are partially inferable from the destructive context and typical SSH behavior.

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?

With 0% schema description coverage, the description compensates by explaining the 'host' parameter via the override statement and relates 'profile' to the profile/env ssh_host. However, it does not explain the 'confirm' parameter's purpose or the format of the 'command' value, leaving some semantics implicit.

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 begins with a clear verb-resource combination: 'Run a command on the managed host's OS over SSH,' which immediately distinguishes it from sibling tools like ssh_reachable and ssh_discover. The additional 'DESTRUCTIVE / in-band' qualifier further clarifies its operational scope.

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 implies when to use this tool (whenever an OS command must be executed) and includes a when-not signal: 'never the HID gate', indicating it should not be used for HID interactions. It does not explicitly name alternatives like ssh_reachable or power_state, so it falls short of a 5.

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

ssh_reachableA
Read-onlyIdempotent

Is the managed host's OS reachable over SSH? (read-only, in-band).

Targets the host behind the KVM (its own ssh_host / KVM_PILOT_SSH_HOST), a different machine from the KVM appliance. Use this to prefer remote recovery before asking a user to physically intervene.

host overrides the profile/env ssh_host at runtime โ€” e.g. an install-time DHCP address the profile can't know until the target boots.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNo
profileNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds valuable behavioral context: it targets the host behind the KVM (a different machine), and the host parameter overrides the profile/env ssh_host at runtime. This goes beyond the annotations and clarifies the operational scope. It doesn't mention timeout or failure return format, but for a reachability check the disclosed traits are sufficient.

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 three short paragraphs, front-loaded with a direct question that captures the tool's essence. Every sentence provides distinct value: the question, the target machine clarification, and the host override explanation. There is no filler or redundant phrasing.

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

Completeness5/5

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

For a simple reachability check with no output schema and only two optional parameters, the description gives enough context to invoke correctly. It explains the target machine, the difference from the KVM appliance, and the host override use case. The tool's complexity is low, and the description covers operational aspects without missing critical details.

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 explains the 'host' parameter clearly with an example (install-time DHCP address), adding meaning beyond the schema's nullable default. It indirectly implies the 'profile' parameter selects the profile/env ssh_host, but doesn't fully explain its behavior or default resolution. With 0% schema description coverage, the description compensates for one parameter but leaves the other under-specified.

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 the tool checks SSH reachability of the managed host's OS as a yes/no question. It distinguishes itself from siblings like ssh_exec and ssh_discover by focusing purely on reachability detection. The phrase 'Is the managed host's OS reachable over SSH?' is a specific verb+resource pairing.

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: use this to prefer remote recovery before physical intervention, and it targets the host behind the KVM rather than the appliance. However, it doesn't explicitly name alternative tools when not to use it, relying on implicit distinction from siblings. Still, the usage context is actionable.

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

support_matrixA
Read-onlyIdempotent

What has actually been exercised on real hardware, per device+firmware+capability (read-only, offline โ€” no device call).

Aggregated from the test-run ledger shipped in the package (the same data behind the wiki Hardware-Compatibility page), with each combo's derived maturity level (#98) joined from the shipped firmware registry. This is EVIDENCE, not a guarantee: a capability listed in never_exercised (or a combo with no row at all) is unverified on that hardware โ€” treat it as mock-only/alpha maturity and confirm destructive steps with the user. status is "fail" when every recorded live attempt failed (e.g. RM1PE V1.5.1 firmware_update, #94/#95). Filters are case-insensitive; product matches as a substring.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendorNo
productNo
firmware_versionNo

TDQS

A4.4/5.0
Behavior5/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds substantial behavioral detail beyond those: it aggregates from a test-run ledger, joins derived maturity levels, defines the 'fail' status for all live attempts failed, and clarifies that absence of a row means unverified. This is rich, non-redundant disclosure.

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 information-dense with no wasted words. It leads with the core purpose, then explains provenance, adds necessary caveats, defines special status values, and notes filter behavior. Every sentence earns its place and the structure is logical.

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?

With no output schema, the description covers the essential return semantics: status 'fail', never_exercised list, derived maturity level, and the meaning of absent rows. It also gives source context and safety caveats. It is slightly incomplete in not describing the exact output shape or how filters combine, but it is sufficient for an agent to understand and use the tool 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?

The input schema has 0% description coverage for its three optional parameters, so the description must compensate. It does add meaningful filter semantics: filters are case-insensitive and product matches as a substring. However, it does not clarify how vendor and firmware_version are matched (e.g., exact vs substring) or how multiple filters combine, leaving a partial 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 exactly what the tool does: reports what has been exercised on real hardware per device+firmware+capability. It also distinguishes itself from sibling tools by explicitly noting it is read-only, offline, and makes no device call, unlike tools such as healthcheck or ssh_exec.

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 for when to use the tool: checking hardware-compatibility evidence before relying on a capability. It gives cautionary guidance (never_exercised means mock-only/alpha, confirm destructive steps) but does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.

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

type_textA
Destructive

Type text on the managed host's console over the HID keyboard. DESTRUCTIVE.

Requires the operator to enable HID (KVM_PILOT_MCP_ALLOW_HID) and a per-invocation approval โ€” a human elicitation when the client supports it, else an explicit confirm=true under the operator's standing policy.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
confirmNo
profileNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description repeats 'DESTRUCTIVE' without adding new safety info. However, it discloses important behavioral context beyond annotations: the need to enable HID via KVM_PILOT_MCP_ALLOW_HID and the per-invocation approval mechanism (human or confirm=true). This adds meaningful transparency about invocation requirements and side effects (typing on the console is disruptive).

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 efficient: the first sentence states the purpose, 'DESTRUCTIVE' is a clear warning, and the second sentence details prerequisites and approval flow. No wasted words; each sentence serves a distinct role. The structure with a newline separating action from requirements aids readability.

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 tool's purpose, destructive nature, and key prerequisites. However, it does not explain the 'profile' parameter, and since there is no output schema, it also omits what the caller should expect in response (e.g., success/failure or confirmation). Given the tool's complexity (HID typing, approvals), a bit more detail about return behavior or error cases would improve completeness.

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 gives some meaning to 'text' by embedding it in the action, and explains 'confirm' as an explicit approval path ('explicit confirm=true'). However, the 'profile' parameter is not mentioned at all, and with 0% schema coverage, the description should compensate more fully. It partially adds value but leaves a significant parameter 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 clearly states the verb ('Type') and resource ('text on the managed host's console over the HID keyboard'). It is specific about the delivery mechanism, distinguishing it from siblings like press_key or send_shortcut. The 'DESTRUCTIVE' label is a warning, not the purpose, so the core action is unambiguous.

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 usage for typing arbitrary text on a console, which distinguishes it from key-specific tools like press_key. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it. The prerequisites (HID enabled, per-invocation approval) provide context for when it can be invoked, but not selection guidance relative to siblings.

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

wait_for_stateA
Read-only

Wait (bounded) until the screen reaches a boot/run phase (read-only).

Server-side twin of CLI watch: polls cheap power/signal/boot-progress gates, then server-side vision, until phase (a classify_screen token; unknown tokens fail fast with the valid list) is observed. timeout is seconds, capped server-side at 300 โ€” chain calls for longer waits. Success returns phase/confidence plus a frame_ref to pass to mouse as observed_frame_ref; a timeout returns reached=false with the last observed state (never a hang, never a raised error). With no server-side vision credentials only cheap-gate phases are waitable; others fail fast pointing at classify_screen polling. Holds the driver open up to timeout s. Details: doctrine topic 'interfaces'.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNo
phaseYes
profileNo
timeoutNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, it discloses that the tool holds the driver open, never hangs or raises on timeout, fails fast on unknown tokens, and has credential-dependent behavior. It also clarifies the return contract (success vs. `reached=false`), which is not visible in annotations. No contradiction with annotations is present.

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

Conciseness4/5

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

The description is dense and front-loaded with purpose, then layers mechanics, parameter semantics, edge cases, and credential constraints. It is longer than the two-sentence ideal but every sentence adds information; no fluff or repetition beyond a minor restatement of read-only near the end.

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

Completeness5/5

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

With no output schema, the description fully covers the return contract, failure modes, timeout behavior, credentials scenario, and even points to a doctrine topic for details. It is complete for a tool with this complexity and provides all necessary context for an agent to invoke it correctly.

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?

The description adds crucial meaning to `phase` (a classify_screen token, unknown tokens fail with the valid list) and `timeout` (seconds, capped at 300, chain for longer). It does not explain the optional `hint` and `profile` parameters, but coverage of the required parameter and the key timeout parameter is strong enough to compensate.

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 opens with a specific verb and resource: "Wait (bounded) until the screen reaches a boot/run phase (read-only)." It clearly distinguishes from siblings like classify_screen by explaining it polls until a target state is observed rather than capturing the current state. It also notes it is the server-side twin of CLI `watch`, further anchoring its unique purpose.

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

Usage Guidelines5/5

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

The description explicitly frames when to use this tool: for waiting on a phase, with `timeout` capped at 300 seconds and guidance to chain calls for longer waits. It also explains the alternative path when server-side vision credentials are missing, pointing to `classify_screen` polling. The `frame_ref` handoff to `mouse` is an actionable usage detail.

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

wakeA
Destructive

Send a Wake-on-LAN magic packet to power the host on. POWER (soft).

Gated by the power effect gate + per-invocation approval (typed same-path denials, #234). mac defaults to the profile's mac; broadcast to its wol_broadcast. No KVM driver is contacted โ€” WoL is a broadcast sent from the server's own host onto the target's L2 segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
macNo
countNo
confirmNo
profileNo
broadcastNo

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (destructive=true, not read-only), the description discloses gating via 'power effect gate + per-invocation approval,' defaulting behavior for mac and broadcast, and the fact that no KVM driver is involved. It does not contradict annotations and adds meaningful behavioral context about how the action is performed.

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

Conciseness4/5

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

The description is reasonably concise and front-loaded, with the core purpose in the first sentence. Some parts are cryptic ('POWER (soft)', 'typed same-path denials, #234'), but the main behavior, gating, and defaults are covered without excessive verbosity.

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 purpose, mechanism, gating, and default values, but it lacks guidance on the count and confirm parameters, expected results, and explicit comparison to sibling power tools. Given no output schema and moderate parameter complexity, the description is adequate but has clear gaps.

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 description coverage, the description is the only source of parameter meaning. It explains mac and broadcast defaults, and references profile indirectly, but count and confirm are left undefined. This is inadequate for a five-parameter 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 uses a specific verb and resource: 'Send a Wake-on-LAN magic packet to power the host on.' It clearly distinguishes this from sibling tools by noting it is 'POWER (soft)' and that 'No KVM driver is contacted,' clarifying it is a WoL-based power-on action rather than a direct power or KVM operation.

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 gives useful context for when this tool is appropriate: it is a WoL broadcast from the server's own host onto the target's L2 segment, and it mentions the power effect gate and per-invocation approval. It does not explicitly name alternative tools or state exclusions, but the context clearly distinguishes it from KVM-driven power actions.

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. Dates show when Glama detected each change.

  1. 34 tool updatesv0.1.0
    • First observedaccess_paths
    • First observedamt_enable
    • First observedappliance_reboot
    • First observedappliance_status
    • First observedboot_options
    • First observedcalibrate_mouse
    • First observedcapabilities
    • First observedclassify_screen
    • First observedctrl_alt_delete
    • First observeddoctrine
    • First observedeject
    • First observedevents
    • First observedfile_firmware_report
    • First observedfirmware_check
    • First observedhealthcheck
    • First observedinfo
    • First observedlist_virtual_media
    • First observedlogs
    • First observedmount_iso
    • First observedmouse
    • First observedpower
    • First observedpower_state
    • First observedpress_key
    • First observedsend_shortcut
    • First observedsession
    • First observedset_boot_device
    • First observedsnapshot
    • First observedssh_discover
    • First observedssh_exec
    • First observedssh_reachable
    • First observedsupport_matrix
    • First observedtype_text
    • First observedwait_for_state
    • First observedwake

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct resource/action (read vs write, target vs appliance, HID vs media vs SSH), and descriptions explicitly cross-reference related tools (e.g., boot_options suggests allowable values for set_boot_device). Even the keyboard tools (type_text, press_key, send_shortcut, ctrl_alt_delete) are differentiated by granularity and effect gating. No two tools appear to do the same thing.

Naming Consistency3/5

Names mix bare nouns (info, logs, snapshot, doctrine), verb-noun phrases (classify_screen, set_boot_device, mount_iso), bare verbs (power, wake, eject), and prefix families (ssh_*, appliance_*). While each name is descriptive and prefixes provide loose grouping, there's no consistent verb_noun convention across the set, making the surface less predictable.

Tool Count2/5

With 34 tools, the set is well above the 'heavy' range (16โ€“25). Although the KVM domain has many legitimate operations, several tools could be consolidated (e.g., keyboard input tools, multiple status readouts), and the high count increases agent cognitive load. It remains scoped to server management rather than being a generic grab-bag.

Completeness4/5

The tool set offers broad coverage of KVM management: power, boot device, screen capture, HID input, virtual media, SSH in-band, appliance maintenance, and firmware reporting. Read/write pairs are well represented (e.g., boot_options/set_boot_device, power_state/power). Minor gaps include no direct firmware update tool and no image management beyond mount/eject, but these are not dead ends.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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/DustinTrap/kvm-pilot'

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