MCP server for QNAP Virtualization Station (QVS) - manage virtual machines, snapshots, and disks
Server has 6 tools with complete schemas and descriptions. Naming follows verb_noun convention (list_vms, get_vm, install_guest_agent_*). Descriptions are adequate (100-250 chars) but lack LLM-optimized guidance on when to use each tool vs alternatives. Critical gap: destructive tools (install_guest_agent_ssh, install_guest_agent_virsh) expose credentials as parameters (ssh_password, qnap_ssh_password), violating secret-injection pattern. No error handling guidance, no output schemas documented, no pagination support for list_vms. Tool composition is reasonable but could be tighter.
Get detailed information about a specific virtual machine.
Get the IP addresses assigned to a virtual machine. Requires the QEMU guest agent to be installed and running inside the VM. Install it with: sudo apt install qemu-guest-agent && sudo systemctl enable --now qemu-guest-agent
Get a lightweight status overview of all VMs. Faster than list_vms — returns only VM IDs and their current state (running, stopped, suspended, etc.).
DESTRUCTIVE: Install QEMU guest agent on a VM via direct SSH. This SSHes into the VM and installs the qemu-guest-agent package. The VM must be running and accessible via SSH from the machine running this MCP server. WARNING: The SSH password is passed as a tool argument and will be visible in MCP client logs. Use SSH key auth for the VM if this is a concern. Requires 'sshpass' to be installed on the machine running this server.
DESTRUCTIVE: Install QEMU guest agent on a VM via QNAP virsh console. This SSHes into the QNAP NAS, then uses virsh to send commands to the VM's serial console. Does NOT require knowing the VM's IP address. The VM must be running. WARNING: Requires SSH credentials for the QNAP NAS (not the VM). The password will be visible in MCP client logs.
Credentials exposed as tool parameters: ssh_password and qnap_ssh_password passed as string parameters. These will appear in MCP client logs, traces, and prompt history, violating secret-injection pattern.
No output schemas documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure (field names, types, nesting). Breaks tool-chain pattern.
No error handling guidance. Descriptions lack recovery hints (e.g., 'If VM not found, call list_vms first'). No indication of which errors are retryable vs fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 71 | 2026-07-28+ | v2 |
List all virtual machines on the QNAP NAS with their status. Returns VM names, IDs, states (running/stopped/suspended), and basic resource info.
list_vms lacks pagination parameters (limit, offset, page_size). No indication of result cap. Large VM inventories could blow context window.
Destructive tools (install_guest_agent_*) lack dry-run or explicit confirmation flow. 'confirm' boolean is present but descriptions don't explain what happens when false (preview vs abort).