Constrained Proxmox MCP server with exact-confirmation mutations
Server has 5 tools with explicit schemas and descriptions. Naming follows verb_noun convention (cluster_status, list_guests, node_status, guest_power, snapshot_guest). Descriptions are present (avg ~100 chars) but lack actionable context for LLM selection. Parameters have types and descriptions, but lack enums for constrained inputs (e.g., guest_type, action, power actions). Output schemas are not documented. Error handling is present but minimal, no recovery guidance or categorization. Security is strong: credentials injected via environment, mutations require exact confirmation strings, audit logging implemented. Composition is clean: each tool has one responsibility. Major gaps: no pagination support, no output schema documentation, no error recovery hints.
Retrieve cluster status including nodes, cluster status, and HA resources
Control guest power state (start, shutdown, reboot, stop) with exact confirmation
List all virtual machines and containers with key properties
Get status information for a specific node
Create a snapshot of a guest with exact confirmation
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields. cluster_status returns {nodes, cluster, ha} but structure of each is opaque. list_guests returns list of dicts with 11 fields but no schema definition.
Constrained inputs lack enums. guest_type accepts 'qemu' or 'lxc' (hardcoded in safety.py) but parameter schema shows bare string type. action accepts 'start', 'shutdown', 'reboot', 'stop' but no enum constraint. LLMs may hallucinate invalid values.
Error messages lack recovery guidance. ValueError exceptions ('Node is not allowlisted', 'Guest type is not allowlisted') tell LLM nothing about next steps. No categorization of errors as retryable vs user-fixable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Descriptions lack actionable context. 'Retrieve cluster status including nodes, cluster status, and HA resources' does not explain WHEN to call this vs list_guests, or what the LLM should do with the result. No dependency hints.
list_guests returns up to 500 items (max_items config) with no pagination. Large result sets blow context window. No limit parameter, no offset/cursor, no total count in response.