Skip to main content
Glama
AIops-tools

io.github.AIops-tools/olvm-aiops

Official

OLVM AIops

Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by Oracle or the oVirt project. "Oracle", "Oracle Linux" and "oVirt" are trademarks of their owners. MIT licensed.

AI-powered operations for Oracle Linux Virtualization Manager (OLVM) and oVirt 4.5, over the engine REST API, with a built-in governance harness — an audit log that MCP and CLI calls both write to, a token/runaway budget guard, and descriptive risk tiers. Built for teams that run OLVM (often next to another hypervisor platform) and want an agent to answer "what needs attention?" with evidence from the engine, not guesses. Built on httpx and the MCP SDK, not on the pycurl-based engine SDK.

Read-only in this release: inventory, health, capacity and diagnosis. Engine actions are asynchronous — the engine answers complete long before a VM or host reaches its target state — so write tools are held back until each can confirm its own outcome. Do NOT use for XCP-ng — use xcpng-aiops. Do NOT use for Proxmox VE — use proxmox-aiops.

What this tool does, and does not, decide

It reads an OLVM / oVirt engine accurately and records every call. It does not decide what an agent may change — that belongs to the engine account you connect it with. Give that account a read-only role (such as ReadOnlyAdmin) and the engine itself enforces it.

The one thing the tool guarantees is that nothing is silent: every call, over MCP and over the CLI alike, lands an audit row in ~/.olvm-aiops/audit.db.

Running a smaller / local model? See agent-guardrails.md for what the tool already guarantees and a ready-made system prompt for the rest.

Related MCP server: proxmox-monitor

What it answers

Question

Tool

CLI

Is the engine itself healthy — certificates, backups, clock?

engine_health_rca

olvm-aiops engine health

What is wrong with my hosts?

host_health_rca

olvm-aiops host health

Is storage about to stop the engine creating disks?

storage_capacity_rca

olvm-aiops storage capacity

Why is this VM paused / not responding?

vm_health_rca

olvm-aiops vm health

What happened recently? What is new since I last looked?

event_list

olvm-aiops event list

What long-running operations failed?

job_list

olvm-aiops job list --status failed

Inventory

datacenter_list, cluster_list, host_list/host_get, storage_domain_list/storage_domain_get, vm_list/vm_get, vm_stats

datacenter, cluster, host, storage, vm

17 MCP tools: 15 reads and diagnoses, plus the harness's undo_list / undo_apply (which have nothing to undo in a read-only release).

Each diagnosis ranks findings worst first; every finding carries the measured signal, a cause, an action and an explicit rank. Transient states are not reported as failures: a host the engine is installing or rebooting is "in progress", alert 9000 on a host without fencing hardware is informational, and an event the host, VM or data center has since recovered from is marked superseded. Events older than 24 hours (events_window_hours) are history, not findings, and every warning-or-worse event inside the window lands in exactly one diagnosis — engine-wide alerts such as certificate expiry and missing backups included.

Built from a live engine, not from the docs

Every read was written against, and every fixture captured from, a live Oracle Linux Virtualization Manager 4.5.5-1.73.el9 engine with Keycloak enabled. Things that engine does, which this tool accounts for:

  • counts, sizes and flags arrive as JSON strings, timestamps as epoch-ms numbers;

  • an attached storage domain has no status in /storagedomains — status is read from each data center's storage-domain collection;

  • /jobs refuses any search and returns jobs oldest first, so jobs are sorted here;

  • the time search on events is unusable (formats return all or nothing), while from=<index> is an exact cursor — hence after_index and a client-side since_minutes;

  • the cursor sorted newest first returns the newest events above it and skips the rest, so after_index reads oldest first;

  • /ovirt-engine/services/health answers without a login, and a data center's old status alerts stay in the log after it recovers;

  • login events print the SSO session id, which is redacted before events are returned.

Quick start

As a Claude Code plugin

One install gives an agent both the skill and the MCP server:

/plugin marketplace add AIops-tools/marketplace
/plugin install olvm-aiops@aiops-tools

The MCP server is fetched with uv and pinned to the package version this plugin declares, so an audit row can be traced back to the code that wrote it. Credentials are still configured with olvm-aiops init — see below.

As an OpenClaw plugin

The same bundle is published on ClawHub, where one install delivers the skill and its MCP server together:

openclaw plugins install clawhub:@zw008/olvm-aiops
openclaw skills info olvm-aiops          # expect: Visible to model: yes

Restart the OpenClaw gateway afterwards so it loads the plugin. The MCP server is fetched with uv, pinned to this exact release, so uvx has to be on PATH — without it the skill still installs but reports Visible to model: no. Credentials are configured exactly as below.

As a CLI or standalone MCP server

uv tool install olvm-aiops
olvm-aiops init        # wizard: engine URL, username with profile, CA file, encrypted password
olvm-aiops doctor      # verify config, encrypted store, login and engine version
olvm-aiops host health # first diagnosis

init writes ~/.olvm-aiops/config.yaml (non-secret connection details) and stores the password encrypted in ~/.olvm-aiops/secrets.enc. Example:

targets:
  - name: engine1
    url: https://olvm-engine.example.com     # the Administration Portal origin (FQDN)
    username: admin@ovirt@internalsso        # admin@internal on engines without Keycloak
    ca_file: /etc/pki/olvm-engine-ca.pem     # engine CA; keeps verify_ssl on
    timeout: 30                              # seconds per request; raise for busy engines

The username includes its profile. Engine-setup enables Keycloak by default since 4.5.1, which makes the admin admin@ovirt@internalsso; engines without Keycloak use admin@internal. Download the engine CA from https://<engine>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA and connect by FQDN — the engine certificate does not cover its IP address.

For non-interactive use (MCP server, CI, cron) export the master password so the store can be unlocked without a prompt:

export OLVM_AIOPS_MASTER_PASSWORD='your-master-password'

Where that password then lives: an exported variable is readable by every process this shell starts and is recorded by shell history. On a shared or long-lived host, prefer the interactive prompt, or inject it from a secret manager for the life of the one command that needs it.

MCP client config

{
  "mcpServers": {
    "olvm-aiops": {
      "command": "uvx",
      "args": ["--from", "olvm-aiops", "olvm-aiops-mcp"],
      "env": { "OLVM_AIOPS_MASTER_PASSWORD": "your-master-password" }
    }
  }
}

Env-block caveat: MCP clients launch the server with a minimal environment — your shell profile's exports are not inherited. Put OLVM_AIOPS_MASTER_PASSWORD (and, if you use them, OLVM_AIOPS_HOME / OLVM_AIOPS_CONFIG / OLVM_AUDIT_APPROVED_BY) in the env block above, or the encrypted store cannot be unlocked and every tool returns a teaching error.

Managing secrets

olvm-aiops secret set engine1          # prompts hidden for the account password
olvm-aiops secret list                 # names only, values never shown
olvm-aiops secret rm engine1
olvm-aiops secret rotate-password      # re-encrypt under a new master password
olvm-aiops secret migrate              # import a legacy plaintext .env, then retires it

A legacy plaintext env var OLVM_<TARGET_NAME_UPPER>_PASSWORD is still honoured as a fallback with a deprecation warning (migrate with olvm-aiops secret migrate).

Governance

Every MCP tool passes through @governed_tool, and every CLI command calls the MCP tool of the same name. It records; it does not authorize.

  • Audit — every call (tool, params with secrets redacted, result, status, duration, risk tier, and any operator-supplied approver/rationale) lands in ~/.olvm-aiops/audit.db (relocate with OLVM_AIOPS_HOME).

  • Budget / runaway guard — a safety backstop, not an authorization gate: cumulative call and wall-time caps plus a tight-loop circuit breaker (OLVM_MAX_TOOL_CALLS, OLVM_MAX_TOOL_SECONDS, OLVM_RUNAWAY_MAX).

  • Risk tier — a descriptive label on the audit row derived from risk_level; it gates nothing.

  • Output hygiene — all engine-returned text is sanitized and bounded before it reaches the agent; SSO session ids in login events are redacted.

支持范围 / Supported scope

Area

Read

Write

Engine

health diagnosis (health check, clock, certificates, backups)

—

Hosts

list / get / health diagnosis

—

Storage domains

list / get (data-center-scoped status, capacity) / capacity diagnosis

—

VMs

list / get / statistics / health diagnosis

—

Data centers, clusters

list

—

Events, jobs

list (severity, paging, after_index, since_minutes; job status)

—

缺功能?(Missing something?) Coverage is intentionally focused. Open an issue or PR at github.com/AIops-tools/OLVM-AIops — feature requests, contributions, and comments are all welcome.

Scope & caveats

  • Verification status: every read and all four diagnoses were run end to end against a live OLVM 4.5.5 engine with one KVM host, an NFS data domain and one VM. A user has since run the read-only tools against a small production engine with 8 hosts and an FC data domain, and their results matched the engine's own API — including a second run under a ReadOnlyAdmin account, where every read and all four diagnoses worked and the figures matched the Administration Portal. Not yet verified: iSCSI / Gluster domains, self-hosted engine deployments, engines without Keycloak, or engines past the scan limits. See docs/VERIFICATION.md.

  • Engine only: no direct host (vdsm) access. Hosts, storage and VMs are seen the way the engine sees them.

  • No writes in this release. Start/stop/migrate, maintenance and snapshots are planned once each write can confirm its own outcome rather than the engine's immediate complete.

Not for

XCP-ng (use xcpng-aiops), Proxmox VE (use proxmox-aiops), other hypervisors, NAS/storage appliances, backup suites, container clusters, or network devices.

License

MIT — github.com/AIops-tools/OLVM-AIops

Available Tools

17 tools
cluster_listA

[READ] Clusters with compatibility version, CPU type and memory over-commit policy.

Args: limit: Rows to return, 1-1000 (default 100). target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral burden. It includes the [READ] marker, implying a safe read operation, and lists the data fields. However, it does not disclose potential errors, authentication requirements, or any side effects—though for a simple list tool these may be minimal. It adds some context but not rich behavioral detail.

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 extremely concise and front-loaded: the [READ] marker and purpose appear first, followed by a clearly separated Args section. Every sentence adds value, 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?

For a simple list tool with two optional parameters and no output schema, the description is sufficient. It states what is returned, how to limit results, and how to specify a target. It lacks details on ordering or any additional filters, but these are not critical for a basic enumeration tool.

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 schema provides only types and defaults, with no descriptions. The description compensates by explaining the limit range (1-1000, default 100) and the target's meaning (engine target from config, omit for default). This adds meaningful semantics beyond the schema, though it does not elaborate on the format or constraints beyond the 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 clearly states the tool lists clusters and specifies the fields returned (compatibility version, CPU type, memory over-commit policy). It is distinct from sibling tools like datacenter_list and host_list, so the purpose 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 Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is the appropriate tool for enumerating clusters, nor does it suggest other tools for different scenarios (e.g., host_list for hosts). No exclusions or alternative references are given.

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

datacenter_listA

[READ] Data centers with status (up, uninitialized, maintenance…) and compat version.

Args: limit: Rows to return, 1-1000 (default 100); truncated says when more exist. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden itself. It states [READ], indicating a non-mutating operation, and explicitly discloses the `truncated` signal when more rows exist. It does not cover every edge case (e.g., error behavior or ordering), but for a simple read/list tool it adds meaningful 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?

The description is compact and front-loaded: the read marker and returned content appear first, followed by a tight two-item Args list. Every sentence carries information with no filler or repetition.

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 two optional parameters, no output schema, and no annotations, the description covers the parameters and key output indicators (status, compat version, truncated). It is adequate to call correctly, though it stops short of fully specifying the response shape or explicit use cases.

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 description coverage is 0%, and the description fully compensates by explaining both parameters: `limit` gets a row count range, default, and the `truncated` consequence; `target` gets source and default behavior. This adds substantial meaning beyond the bare integer/string schema types.

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

Purpose4/5

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

The description clearly identifies the resource as data centers and the returned content (status, compat version) with a [READ] marker, making it distinguishable from list tools for clusters, hosts, VMs, and storage domains. It lacks an explicit 'List all data centers' verb phrase, but the intent is not ambiguous.

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 explicit when-to-use versus alternatives guidance, no exclusions, and no mention of sibling tools. Usage context is only implied by the tool name and the resource name; the parameter notes are about arguments, not tool selection.

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

engine_health_rcaA

[READ] Problems with the engine itself, ranked worst first, in one call.

Reads the engine's health check, its version, its clock against this machine and its summary counts, plus warning-or-worse events that name no host, VM or storage domain: engine or CA certificate expiry, missing or failed engine backups, a cluster failing its HA reservation. Those alerts appear in no other diagnosis, so call this first for "is anything wrong". Event 10803 (a storage-pool vdsm command failed) names no host and lands here: its cause names the command, which is the subject — not the engine — and its severity is the event's own. Event 2024 is a record that someone ran unlock_entity.sh by hand: it is low, and whatever the unlocked entity then did wrong is reported by its own event. Report findings in rank order and quote their signal.

Args: events_limit: Recent warning-or-worse events to correlate, 1-1000 (default 200). events_window_hours: Ignore events older than this many hours, 1-720 (default 24). target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
events_limitNo
events_window_hoursNo

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it declares the operation as read-only, states that findings are reported in rank order, and explains exactly which signal types are included and how specific events are classified.

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 summary line is front-loaded, and the longer event discussions earn their place by preventing misinterpretation of edge cases. The Args block is clean and maps directly to the schema.

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 there is no output schema and no annotations, the description provides a complete picture: what the tool reads, how it filters, when to call it, what edge cases to expect, and how results should be reported. Nothing critical is missing 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.

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining each parameter's meaning, constraints, and default: 'Recent warning-or-worse events to correlate, 1-1000 (default 200)', 'Ignore events older than this many hours, 1-720 (default 24)', and target as an optional config-based name.

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 opening sentence states a specific verb and resource: 'Problems with the engine itself, ranked worst first, in one call.' It clearly separates this tool from the host, VM, and storage RCA siblings by scoping events to those naming no host, VM, or storage domain.

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 when-to-use guidance: 'call this first for "is anything wrong"' and explains that these alerts 'appear in no other diagnosis.' It also clarifies edge cases, such as why event 10803 belongs here and why event 2024 stays low.

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

event_listA

[READ] Engine events at or above a severity, newest first.

To follow new events, pass the highest index you have already seen as after_index: events after it come back OLDEST first (order), so repeat with the highest index returned while truncated is true and nothing is skipped. since_minutes keeps events from the last N minutes and sets scanTruncated when older ones in the window may be missing. SSO session ids in login events are redacted.

Args: limit: Rows to return, 1-1000 (default 100); truncated says when more exist. min_severity: One of normal, warning, error, alert (default normal). page: Older pages of events (not combinable with since_minutes or after_index). after_index: Only events with a higher index than this, oldest first. since_minutes: Only events from the last N minutes (1-129600). target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
targetNo
after_indexNo
min_severityNonormal
since_minutesNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it discloses ordering inversion when using after_index, truncation semantics, scanTruncated caveats, and redaction of SSO session IDs. The [READ] marker also signals non-mutating 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 dense but well organized: a one-line purpose, a short usage paragraph for the non-obvious cursor behavior, then a terse Args list. Every sentence adds needed operational detail without 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?

Despite having no output schema and no annotations, the description is complete enough for an agent to call the tool correctly. It defines all parameters, explains repeated-call pagination semantics, and warns about missing events and redacted fields.

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 description coverage is 0%, so the description must explain every parameter, and it does. The Args block covers all six parameters with ranges, defaults, enum values, and combinability constraints such as page not being combinable with since_minutes or after_index.

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 operation as reading engine events, the resource involved, and the key filtering/ordering behavior: severity threshold and newest-first ordering. This distinguishes it from the sibling tools, none of which list engine events.

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 concrete usage guidance for following new events with after_index, using since_minutes for recent events, and using page for older pages, including an explicit incompatibility between page and the other modes. It does not name alternative tools, but the provided context is sufficient given the sibling list.

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

host_getB

[READ] One KVM host by id (see host_list).

Args: host_id: Host id. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
host_idYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. The '[READ]' prefix signals a read operation, but the description does not disclose behavior such as error cases, whether the host must exist, what fields are returned, or any side effects. It adds only the scoping to a single host by id.

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 short and front-loaded with the '[READ]' marker and the core purpose. The Args section is compact and useful. It earns its place, though the 'see host_list' reference is slightly terse.

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 get-by-id tool with two parameters and no output schema, the description is mostly adequate. It lacks details about return value shape, error behavior, and any prerequisites, but the tool's simplicity and the sibling list help an agent infer context. A bit more behavioral context would make it 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 description coverage is 0%, so the description must compensate. It explains host_id as 'Host id' and target as 'Engine target name from config; omit to use the default', which adds meaning beyond the schema's bare titles. However, it does not explain how host_id is formatted or how target selection works in practice.

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 states a specific verb ('get') and resource ('one KVM host by id'), and references host_list as the sibling for listing. It is clear what the tool does, though it does not explicitly differentiate from other get-style siblings like storage_domain_get or vm_get beyond the resource name.

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 by saying 'see host_list' and by naming the host_id argument, but it does not explicitly state when to use this tool versus alternatives. It provides minimal context: use this to fetch a single host by id, while host_list is for listing. No exclusions or alternative conditions are given.

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

host_health_rcaA

[READ] What needs attention on KVM hosts, ranked worst first, in one call.

Combines host status and status detail, reinstall/update flags and recent warning-or-worse events that name a host. Each finding has signal (what was measured), cause, action and rank. Hosts that the engine is installing or rebooting are reported as in progress, not failed; alert 9000 (power management not verifiable) is informational on hosts without fencing hardware. A failed guest-agent call (event 10802, a command starting with VmLogon or VmLogoff whose message names the guest agent) is a problem of a guest, not of the host that ran the call: it is reported low and carries vmCandidates, the VMs the engine reports on that host. The same command failing for another reason stays a host finding. The event names no VM, so present those as candidates to check, never as the affected VM; if that envelope has an error, or scanTruncated is true, say the candidate list is incomplete. Every event-10802 finding reports one vdsm command rather than the host's own state, so its cause names the command; do not restate it as "this host is failing" unless the host's status, external status or flags say so. It also carries relatedVmEvents: the VM-level failures the engine logged within windowSeconds on this host, which is where the operation's own failure is recorded (vm_health_rca reports that half). They are paired on time alone — say "possibly the same operation", never that the host finding is about a named VM; an empty list means none was logged, not that none was looked for. Report findings in rank order and quote their signal.

Args: events_limit: Recent warning-or-worse events to correlate, 1-1000 (default 200). events_window_hours: Ignore events older than this many hours, 1-720 (default 24); older ones are counted in eventsOutsideWindow. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
events_limitNo
events_window_hoursNo

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses result fields (signal, cause, action, rank), ordering requirements, edge cases (in-progress vs failed, alert 9000, event 10802), incomplete-candidate behavior, and the time-only pairing semantics of relatedVmEvents. This goes far beyond a basic 'gets host health' statement.

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?

Although long, the description is densely informative and every sentence earns its place. It front-loads the primary purpose, then systematically covers result shape, interpretation rules, edge cases, and parameter semantics without filler. The length is justified by the tool's complexity and lack of an output schema.

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 tool's complexity, the absence of annotations, and the absence of an output schema, the description is complete enough for correct invocation and interpretation. It defines finding fields, ranking, special-case semantics, parameter effects, and how to report candidate VMs, leaving no major gap for an agent deciding whether and how to call it.

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?

The input schema provides only names, types, defaults, and no descriptions, so the description's Args section is essential. It explains the meaning and ranges of events_limit and events_window_hours, notes side effects like eventsOutsideWindow, and clarifies that target refers to the engine target from config. All three parameters receive meaningful semantic context.

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 purpose: it identifies what needs attention on KVM hosts, ranked worst first, in one call. It specifies the resource (KVM hosts), the output orientation (ranked findings), and the combined data sources (status, reinstall/update flags, recent events), which distinguishes it from single-purpose siblings like host_get and event_list.

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 interpretation rules and routes to a sibling: VM-level failures are said to be covered by vm_health_rca, and event-10802 guest-agent failures are explicitly excluded from being treated as host problems. It also tells the agent when not to restate a finding as 'this host is failing' and how to treat in-progress hosts and informational alert 9000, giving clear when/when-not guidance.

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

host_listA

[READ] KVM hosts with status, SPM role, memory and VM counts.

A field the engine did not report is null, never 0. For "what is wrong with my hosts" use host_health_rca instead of reading this list yourself.

Args: limit: Rows to return, 1-1000 (default 100); truncated says when more exist. search: Engine query language, e.g. "status=up" or "status!=up". target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
searchNo
targetNo

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses a key behavioral trait: 'A field the engine did not report is null, never 0.' It also discloses pagination/truncation behavior via the limit parameter description. It doesn't mention auth or rate limits, but for a read-only list tool, the disclosed null semantics and truncation behavior are valuable and go beyond the schema.

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 purpose is in the first line, the alternative tool is named early, and the Args section is terse but informative. Every sentence earns its place; 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?

For a list tool with 3 optional parameters and no output schema, the description covers the key semantics: null handling, truncation, search syntax, and target selection. It doesn't describe the output structure, but since there is no output schema, a brief note on what fields are returned is present in the first line. It is complete enough for an agent to call 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?

Schema description coverage is 0%, so the description must compensate. It does: it explains limit's range and default, defines search as 'Engine query language' with examples, and explains target as 'Engine target name from config; omit to use the default.' This adds meaning beyond the bare schema types.

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 verb and resource: '[READ] KVM hosts with status, SPM role, memory and VM counts.' It distinguishes itself from sibling host_health_rca by explicitly saying that tool is for 'what is wrong with my hosts.' This is specific and differentiates from siblings.

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 says when to use this tool vs alternatives: 'For "what is wrong with my hosts" use host_health_rca instead of reading this list yourself.' It also explains the search parameter with examples, giving clear context for when to use it. This is explicit routing guidance.

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

job_listA

[READ] Engine jobs (long-running operations) with status and duration.

Args: limit: Rows to return, 1-1000 (default 100). status: Only one status: started, finished, failed, aborted, unknown. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
targetNo

TDQS

A3.6/5.0
Behavior3/5

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

The [READ] tag clearly signals a non-mutating operation, which is useful since no annotations are provided. The description also conveys that jobs are long-running operations and that results include status and duration. However, it does not disclose return structure details beyond those two fields, pagination behavior beyond limit, or error/edge-case 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 compact and front-loaded with the read intent, followed by a clean parameter list. Every line adds useful information and there is no redundant or filler text.

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?

All parameters are explained and the core purpose is clear, making the tool callable. But with no output schema and no annotations, the description only minimally describes returned fields and does not explain result ordering, required permissions, or how to route to sibling tools. The gaps are not severe for a simple read-only list, but the description is not fully self-sufficient.

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?

With 0% schema description coverage, the description fully compensates by documenting all three parameters. It gives a range and default for limit, enumerates the valid status values, and explains that target comes from configuration and defaults when omitted. This is strong semantic value beyond the bare schema types.

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 identifies Engine jobs as the resource and states that the output includes status and duration. It is more specific than generic 'list jobs' and is distinguishable from sibling list tools like vm_list or host_list. The lack of an explicit 'list' verb is minor because the tool name and [READ] marker make the operation clear.

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 provides no guidance about when to use job_list instead of related tools such as event_list or undo_list. It does not state any exclusions, prerequisites, or alternative tool suggestions. An agent must infer usage context from the name alone.

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

storage_capacity_rcaA

[READ] Storage-domain problems ranked worst first, in one call.

Critical when free space is below the engine's critical blocker (the engine then refuses new disks and snapshots); medium below the low-space warning, or when thin disks are committed beyond capacity while space is low (low on its own); high when an attached domain is inactive, unknown or mixed. Warning-or-worse events naming a storage domain (for example "deactivated by system") are attached to it. Unattached domains such as the default image repository are skipped. A domain whose thresholds are unset (the engine reports 0) is reported low with its measured free space: nothing — not the engine, not this tool — will warn before it fills, and how full is too full is not recorded anywhere to read. Over-commit on its own is a planning limit, and its signal carries actual use next to it: do not report an over-committed domain as short of space unless a low-space or blocker finding says so. Report findings in rank order and quote their signal.

Args: events_limit: Recent warning-or-worse events to correlate, 1-1000 (default 200). events_window_hours: Ignore events older than this many hours, 1-720 (default 24). target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
events_limitNo
events_window_hoursNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It is exceptionally transparent: declares it's a read operation, explains severity logic in detail, covers edge cases (unset thresholds, over-commit), states what events are attached, and what is skipped. It also tells the agent how to interpret signals (report in rank order, quote signal). No behavioral surprise is left undisclosed.

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 detailed but every sentence earns its place. It is structured logically: purpose first, then severity conditions, edge cases, and finally parameter explanations. No fluff or redundancy. The information density is high while remaining readable.

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 tool's complexity (RCA with multiple severity levels, edge cases, and return behavior), the description covers everything an agent needs to know: what it returns (ranked findings), how to interpret signals, what is skipped, and how to handle exceptions. Since there is no output schema, the description adequately explains the return format. Nothing critical 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?

The description includes an 'Args' section that fully explains each parameter: events_limit (range 1-1000, default 200), events_window_hours (range 1-720, default 24), and target (engine target name, omit for default). This goes beyond the schema's bare titles and defaults, providing complete semantics.

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: lists storage-domain problems ranked worst first, in one call. It specifies the resource (storage domains) and the action (list problems ranked). It also differentiates from sibling tools by its focus on capacity RCA rather than listing or getting domains. The severity definitions add clarity.

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 clear context on when to use it: when free space is below critical or warning thresholds, or when domains are inactive/unknown. It explicitly states what it skips (unattached domains) and how it handles edge cases like unset thresholds and over-commit. However, it does not name alternative tools or explicitly say 'use this instead of X', though the behavior is well-defined.

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

storage_domain_getA

[READ] One storage domain by id, with its data-center-scoped status.

Args: domain_id: Storage domain id (see storage_domain_list). target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
domain_idYes

TDQS

A4/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden, and it does lead with '[READ]', signaling a non-mutating operation. It also adds the data-center-scoped status nuance, but it does not describe return format, failure behavior, authentication needs, or other side effects. This is adequate but minimal for an unannotated tool.

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

Conciseness5/5

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

The description is compact, starts with the purpose, and uses a tightly formatted Args block. Every sentence is necessary and no redundant phrasing is present.

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 single-record fetch tool with two parameters and no output schema, this description is essentially complete. The only minor gap is absence of any statement about what fields are returned or error conditions, but the low complexity and read-only nature make this acceptable.

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 schema provides 0% description coverage, so the description must compensate, and it does explain both parameters. 'domain_id' is clarified as a storage domain id and cross-referenced to storage_domain_list; 'target' is explained as an Engine target name from config, with the default behavior noted. This adds meaningful guidance beyond the bare 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 clearly states the verb ('get'), the resource ('storage domain'), the selector ('by id'), and a specific qualifier ('data-center-scoped status'). This differentiates it from the sibling storage_domain_list, which lists many domains, and the 'One storage domain by id' phrasing makes the selection criterion explicit.

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

Usage Guidelines3/5

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

The usage context is clear: you fetch a single storage domain by id, and you can obtain an id via storage_domain_list. However, it never explicitly contrasts when to use this vs alternatives or states exclusions, so the guidance is implied rather than stated.

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

storage_domain_listA

[READ] Storage domains with status and capacity (free, used, committed bytes and %).

The status of an attached domain comes from its data center (statusSource); it is null — not guessed — when that could not be read (statusErrors).

Args: limit: Rows to return, 1-1000 (default 100); truncated says when more exist. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries full behavioral disclosure. It explicitly explains the status behavior (null when data center read fails, with statusErrors), and mentions the `truncated` flag for pagination. This adds valuable context beyond the bare schema.

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 tightly written with no filler. It front-loads the operation and result, then devotes exactly two sentences to the parameters. 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?

Given a list tool with two parameters and no output schema, the description covers the essential behavioral nuances (status source, null handling, truncation). It does not describe the output structure, but that is not required without an output schema, and the tool is simple enough that the agent can call it correctly.

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 description coverage is 0%, but the description fully compensates. It explains `limit` (range, default, and that `truncated` indicates more rows) and `target` (engine target from config, omit for default). This is far richer than the bare schema types and defaults.

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 '[READ] Storage domains with status and capacity', naming the exact resource and operation. It distinguishes itself from the sibling storage_domain_get by implying a list operation, and adds specific detail (free, used, committed bytes and %) that clarifies the return scope.

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 a list operation but does not explicitly contrast it with storage_domain_get or other siblings. There is no when-to-use or when-not-to-use guidance, leaving the agent to infer that it is for listing domains rather than fetching a single one.

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

undo_applyA

[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.

The inverse runs through its own governed tool, so it is audited under its own risk tier. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once.

Args: undo_id: The undoId from undo_list (or an _undo_id in a write result). dry_run: If True, preview the inverse tool + params without running it. target: Passed through to the inverse tool when it accepts a target.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
dry_runNo
undo_idYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well. It openly marks the operation as '[WRITE][risk=medium]', explains that the inverse tool runs under its own governance and risk tier, warns that a token can only be applied once, and mentions dry_run to preview without executing. This goes beyond a simple 'apply' and discloses key behavioral traits.

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 with a clear summary line, a brief paragraph of important caveats, and an Args list. Every sentence adds value, and it is appropriately front-loaded with the [WRITE] and risk indicator.

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, parameters, and behavior comprehensively. However, it does not mention what the tool returns (e.g., the inverse tool's result or a success/failure status). With no output schema, a brief note on return value would make it fully complete.

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?

The schema provides only titles with 0% description coverage, so the description must explain each parameter. It does: undo_id is sourced from undo_list or _undo_id, dry_run previews the inverse call, and target is passed through conditionally. This adds substantial meaning beyond the 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 clearly states the tool's purpose: 'Apply a recorded undo by dispatching its inverse tool.' This distinguishes it from sibling tool undo_list, which lists recorded undos, and other write tools. The verb and resource are specific, leaving no ambiguity.

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 usage context by noting the undo_id source ('from undo_list or an _undo_id in a write result') and the dry_run preview option. It does not explicitly name alternatives or exclusions, but the context makes it clear when to use this tool versus listing undos.

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

undo_listA

[READ] List recorded, not-yet-applied undo tokens (most recent first).

Each entry names the original tool, the inverse tool that undo_apply would run, and a human note. Use the undoId with undo_apply.

One extra row is read so truncated is measured rather than guessed from the row count matching the limit; when it is true, older tokens exist.

Each entry carries effectVerified. False means the original write lost its response, so the change it reverses is PROBABLE, not confirmed — check the live state before applying, and do not report the result as a restore of a state that may never have been reached.

Args: limit: Max rows to return (default 50, capped at 500). target: Unused (undo state is host-local); accepted for CLI uniformity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description takes full responsibility and reveals key behaviors: it is a read ([READ]), uses a truncated detection mechanism (one extra row), explains the effectVerified flag meaning, and notes that the target parameter is unused. This goes beyond simple listing.

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 well-structured with a header, entry details, and an args section. It is informative without being overly verbose, though the explanation of effectVerified could be slightly condensed.

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 lack of output schema and two parameters, the description covers all essential aspects: purpose, parameters, usage, and behavioral traits. It mentions the fields in each entry (undoId, original tool, etc.), making it complete for an agent to use 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?

Schema coverage is 0%, so the description compensates by explaining both parameters: limit with default and cap (50–500), and target as unused for CLI uniformity. This adds meaning beyond the schema's type/default information.

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: listing undo tokens that are recorded but not yet applied, in order (most recent first). It specifies it is a read operation and distinguishes it from sibling tools like undo_apply.

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 tells users to use the returned undoId with undo_apply and explains the effectVerified flag for safe usage. However, it does not explicitly mention when to avoid using this tool or provide comparisons to other list tools.

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

vm_getA

[READ] One VM by id (see vm_list).

Args: vm_id: VM id. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
vm_idYes
targetNo

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It includes '[READ]' which signals a non-mutating operation, and states it retrieves one VM. However, it does not mention error behavior (e.g., not found), permissions, or any side effects. The read hint is valuable but limited; it adds some transparency but not rich 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?

The description is concise and well-structured. It front-loads the purpose and uses an Args section for parameters. Every sentence adds value without redundancy. The format is clean and scannable, making it easy for an agent to parse.

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

Completeness3/5

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

Given the simplicity of the tool (single fetch by id) and no output schema, the description is adequate but not complete. It covers the parameters and the read nature, but does not specify the return format, error handling (e.g., missing VM), or pagination (not applicable). For a basic get tool, this is acceptable, but additional notes on error cases would improve completeness.

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 schema has 0% description coverage, so the description must explain parameters. It does so: vm_id is 'VM id' (minimal but accurate) and target is described as 'Engine target name from config; omit to use the default.' This adds meaning beyond the schema by explaining the source and default behavior of target. The vm_id explanation is trivial but acceptable given its name.

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 clear verb+resource: 'One VM by id'. It distinguishes itself from vm_list by explicitly scoping to a single VM and referencing vm_list for the listing case. This makes the tool's purpose unambiguous and differentiates it from siblings.

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 indicates when to use this tool: to retrieve one VM by id, and points to vm_list for the alternative (listing). While it does not explicitly list when not to use it, the reference to vm_list provides a clear contrast. It is not exhaustive but sufficient for an agent to choose correctly.

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

vm_health_rcaA

[READ] VM problems ranked worst first, in one call.

High for VMs stuck not_responding/unknown, paused (often storage I/O errors or a full domain — check storage_capacity_rca), or down with high availability; medium for image_locked; info for VMs mid-transition; low for config changes waiting for a restart. Recent warning-or-worse events naming a VM are attached to it, one finding per VM and code; an event is superseded (info) when the VM started after it, or when the engine reported it back up and it is up now. Down VMs without HA are normal. Report findings in rank order and quote their signal.

Args: events_limit: Recent warning-or-worse events to correlate, 1-1000 (default 200). events_window_hours: Ignore events older than this many hours, 1-720 (default 24); older ones are counted in eventsOutsideWindow. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
events_limitNo
events_window_hoursNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses read-only behavior via '[READ]', explains the ranking logic, supersession rules, and the meaning of 'Down VMs without HA are normal', which prevents misinterpretation. It does not cover auth or rate limits, but for a read-only RCA tool this is adequate.

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 structured with a leading summary, a severity explanation, and an args section. It is longer than minimal but every sentence adds value, and the structure aids readability. The front-loaded summary allows quick comprehension.

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 3 optional parameters, no output schema, and no annotations, the description fully explains the expected output (ranked findings, quoted signals) and the interpretation logic. It is complete enough for an agent to invoke correctly without additional context.

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?

The description provides detailed semantics for all three parameters that the schema only lists as names. It explains ranges, defaults, and the effect of each (e.g., events_window_hours controls ignored events and counts them in eventsOutsideWindow). This is high-value beyond the schema, especially given the 0% schema description coverage.

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 and resource ('VM problems ranked worst first') and clearly distinguishes it from sibling tools like storage_capacity_rca, host_health_rca, and engine_health_rca by scoping to VMs and providing a ranking. The '[READ]' prefix immediately signals a non-mutating 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?

Explicitly names an alternative (storage_capacity_rca) for a specific scenario (storage I/O errors or full domain), and explains severity levels that guide when to investigate. It does not explicitly contrast with host_health_rca or engine_health_rca, but the VM-specific scope is clear, and the description implies its usage for VM health triage.

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

vm_listA

[READ] VMs with status, host, vCPUs, memory and high-availability flag.

Args: limit: Rows to return, 1-1000 (default 100); truncated says when more exist. search: Engine query language, e.g. "status=up" or "cluster=Default". target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
searchNo
targetNo

TDQS

A3.9/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. The [READ] prefix discloses read-only behavior, and the description goes beyond the schema by explaining the 1-1000 limit range, the default of 100, and the `truncated` indicator that signals pagination or response limits. It does not mention auth, rate limits, or performance, but for a simple list operation the key behavioral traits are 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 succinct and well-structured: a one-line purpose statement followed by a clean, aligned argument list with defaults and examples. Every sentence adds value, and no unnecessary detail is included.

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 list tool with no output schema, the description states the resource, the fields returned, the pagination behavior via `truncated`, and all parameter semantics. It omits minor aspects like ordering, error behavior, or explicit output shape, but the essential calling contract is covered.

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?

The input schema has zero description coverage, but the description fully compensates: it gives the limit range and default, explains the `truncated` flag, illustrates the search engine query language with concrete examples, and describes what the target parameter means and its default behavior. This is far richer than the bare schema.

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

Purpose4/5

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

The description clearly identifies the operation (reading VMs) and enumerates the returned fields (status, host, vCPUs, memory, HA flag), so an agent knows what it physically does. It differentiates from vm_get and vm_stats by indicating a plural list of VMs, but it does not explicitly name alternatives or contrast with siblings, so it stops short of a full 5.

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 contains no guidance on when to select vm_list over its sibling tools such as vm_get, vm_stats, or host_list. It only explains the individual parameters and provides search examples, but never states the intended use case, exclusions, or when an alternative is more appropriate.

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

vm_statsC

[READ] A VM's current statistics: memory, CPU %, network and disk usage, with units.

Args: vm_id: VM id. target: Engine target name from config; omit to use the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
vm_idYes
targetNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It includes a '[READ]' marker implying read-only, but discloses nothing about authentication, rate limits, side effects, or error behavior. This is a significant gap for a tool that likely has operational implications.

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, front-loaded with the purpose, and uses a clean structure with an args section. Every sentence contributes value, and there is no filler.

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?

The description mentions the returned metrics (memory, CPU %, network, disk) but lacks usage guidance and behavioral context. Without annotations or an output schema, an agent has limited understanding of when to use this tool or what errors or edge cases to expect.

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 brief explanations for both parameters: vm_id is 'VM id' (minimal, tautological) and target is 'Engine target name from config; omit to use the default' (adds config context and default behavior). Since schema coverage is 0%, this partially compensates, but vm_id could be more descriptive.

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

Purpose4/5

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

The description clearly states the tool reads a VM's current statistics (memory, CPU %, network, disk) with units, using a specific verb and resource. It doesn't explicitly differentiate from siblings like vm_get or vm_health_rca, but the purpose 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 Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as vm_get, vm_list, or vm_health_rca. The agent is left to infer the appropriate context, and no exclusions or conditions are mentioned.

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

Tool Schema Changelog

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

  1. 17 tool updatesv0.1.0
    • First observedcluster_list
    • First observeddatacenter_list
    • First observedengine_health_rca
    • First observedevent_list
    • First observedhost_get
    • First observedhost_health_rca
    • First observedhost_list
    • First observedjob_list
    • First observedstorage_capacity_rca
    • First observedstorage_domain_get
    • First observedstorage_domain_list
    • First observedundo_apply
    • First observedundo_list
    • First observedvm_get
    • First observedvm_health_rca
    • First observedvm_list
    • First observedvm_stats

TDQS

A3.9/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct resource and action: list/get for inventory, *_rca for ranked health findings, event/job lists for raw operations. The rca tools are explicitly cross-referenced (host_list points to host_health_rca), so an agent can choose without guessing.

Naming Consistency4/5

Names follow a consistent snake_case resource_action pattern with list/get/rca/stats suffixes, and the rca suffix clearly marks health diagnostics. Minor deviations like vm_stats and storage_capacity_rca vs storage_domain_* are easy to predict but break the pure resource_verb symmetry.

Tool Count4/5

17 tools is slightly above the ideal 3-15 range, but each covers a meaningful read or diagnostic purpose with no obvious duplication. The set is a bit heavy for a read-only server, but not bloated enough to be confusing.

Completeness4/5

The toolset covers the main oVirt resources (datacenters, clusters, hosts, storage, VMs) plus raw events/jobs and targeted health RCAs, so common troubleshooting paths are supported. Notable minor gaps are no cluster-level health RCA and no datacenter/cluster get, but list tools and engine RCA fill most practical needs.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server that allows AI assistants to query and monitor KVM Fleet devices, audit logs, and console sessions through the official REST API.
    5
    12 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only Proxmox cluster oversight and configuration compliance checks through MCP, covering health, inventory, storage, backups, snapshots, and updates.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides authenticated read-only access to VMware Cloud Foundation Operations inventory, metrics, alerts, report definitions, targets, and skills via Streamable HTTP, with a durable audit trail and an admin UI.
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables read-only operational audits of schedulers, recurring job health, delivery failures, overdue runs, gateway/MCP health, and lock-file inventory without modifying inspected systems.
    11
    MIT