MCP server for VMware vCenter / ESXi VM lifecycle management
Server defines 5 tools with clear action verbs (list_, create_, power_on_, power_off_, delete_). Tool descriptions are detailed and explain what each does, but parameter descriptions are minimal or missing. Input schemas are present with type declarations, but lack enum constraints for constrained values (e.g., vm_type, disk_provisioning, network_profile). Output schemas are not documented. Error handling is mentioned in descriptions but recovery guidance is absent. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels.
Create a VM that network boots first. vm_type: esxi, ubuntu, rhel (or any type defined in config templates). disk_provisioning: thin (default) or thick. network_profile: named profile from target config (e.g. standard, secure-boot).
Permanently delete a VM (power off if running, then destroy from disk). Accepts display name or moref ID (e.g. 'vm-42').
List VMs on a target with rich per-VM details. Returns a list of dicts. Each VM includes name, moref, BIOS UUID, power state, guest OS, CPU/memory, primary guest IP, every NIC (MAC + connected network + guest IPs when VMware Tools is running), and every virtual disk (capacity + datastore-relative file path). Implementation uses a single PropertyCollector RetrieveContents call, so it scales to the largest vCenters and ESXi hosts without per-VM round trips. - Standalone ESXi: lists all VMs on the host. - vCenter: lists all VMs in the specified datacenter (defaults to the target's configured datacenter). On error, returns a single dict with an "error" key.
Hard power off a VM by display name or moref ID (e.g. 'vm-42').
Power on a VM by display name or moref ID (e.g. 'vm-42').
Parameter descriptions are minimal or absent. 'target' and 'datacenter' in list_vms lack detail on format/constraints. 'vm_type', 'network_profile', 'disk_provisioning' in create_vm have no descriptions at all, forcing LLMs to guess valid values.
Constrained parameters lack enum declarations. 'vm_type' accepts 'esxi, ubuntu, rhel, or custom', but no enum constraint. 'disk_provisioning' accepts 'thin or thick', but no enum. 'network_profile' is free-form. LLMs will hallucinate invalid values.
Output schemas are not documented. list_vms returns 'a list of dicts' with fields described in prose, but no formal schema. create_vm, power_on_vm, power_off_vm, delete_vm have no documented return types. LLMs cannot plan downstream calls or extract fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No tool annotations despite clear risk levels. create_vm, power_on_vm, power_off_vm, delete_vm have WRITE or DESTRUCTIVE risk but lack readOnlyHint/destructiveHint annotations. Agents cannot distinguish safe from dangerous operations.
Error handling lacks recovery guidance. list_vms mentions 'On error, returns a single dict with an error key', but does not explain what the LLM should do next (retry, ask user, abort). delete_vm has no error guidance despite being destructive.