delete_vm
Permanently remove a virtual machine from vCenter by specifying its name or ID. The VM is powered off if running before deletion.
Instructions
Permanently delete a VM (power off if running, then destroy from disk). Accepts display name or moref ID (e.g. 'vm-42').
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_id | Yes | ||
| target | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- src/vcenter_mcp/tools/vm_delete.py:8-24 (handler)The delete_vm tool handler: powers off the VM if running, then destroys it permanently from disk. Uses lookup_vm to find by name or moref ID.
def delete_vm(name_or_id: str, target: str | None = None) -> str: """ Permanently delete a VM (power off if running, then destroy from disk). Accepts display name or moref ID (e.g. 'vm-42'). """ try: cfg = load_config() target_cfg = resolve_target(cfg, target) with vcenter_connection(target_cfg) as si: vm = lookup_vm(si, name_or_id) vm_name = vm.name if vm.runtime.powerState == vim.VirtualMachinePowerState.poweredOn: wait_for_task(vm.PowerOff()) wait_for_task(vm.Destroy_Task()) return f"VM '{vm_name}' has been permanently deleted" except Exception as e: return f"Error: {e}" - src/vcenter_mcp/tools/vm_delete.py:6-26 (registration)Registration function that wraps the delete_vm function with @mcp.tool() decorator to register it as an MCP tool.
def register_delete_tools(mcp) -> None: @mcp.tool() def delete_vm(name_or_id: str, target: str | None = None) -> str: """ Permanently delete a VM (power off if running, then destroy from disk). Accepts display name or moref ID (e.g. 'vm-42'). """ try: cfg = load_config() target_cfg = resolve_target(cfg, target) with vcenter_connection(target_cfg) as si: vm = lookup_vm(si, name_or_id) vm_name = vm.name if vm.runtime.powerState == vim.VirtualMachinePowerState.poweredOn: wait_for_task(vm.PowerOff()) wait_for_task(vm.Destroy_Task()) return f"VM '{vm_name}' has been permanently deleted" except Exception as e: return f"Error: {e}" - src/vcenter_mcp/server.py:21-21 (registration)Registration call in the main server setup, importing and invoking register_delete_tools to register the delete_vm tool.
register_delete_tools(mcp) - src/vcenter_mcp/client.py:47-77 (helper)Helper function that resolves a VM by managed object reference ID (vm-XXX) or display name, used by delete_vm to locate the target VM.
def lookup_vm(si, name_or_id: str): """ Find a VM by moref ID (e.g. 'vm-42') or display name. Raises ValueError if not found or if multiple VMs share the same display name. """ content = si.RetrieveContent() if _is_moref(name_or_id): ref = vim.VirtualMachine(name_or_id) ref._stub = si._stub return ref container = content.viewManager.CreateContainerView( content.rootFolder, [vim.VirtualMachine], True ) matches = [vm for vm in container.view if vm.name == name_or_id] container.Destroy() if not matches: raise ValueError(f"No VM found with name '{name_or_id}'") if len(matches) > 1: morefs = [vm._moId for vm in matches] raise ValueError( f"Multiple VMs named '{name_or_id}': {morefs}. Use a moref ID instead." ) return matches[0] def wait_for_task(task) -> None: """Wait for a vSphere task to complete. Raises on task error.""" WaitForTask(task) - src/vcenter_mcp/client.py:75-77 (helper)Helper function that awaits vSphere task completion, used by delete_vm to wait for PowerOff and Destroy_Task operations.
def wait_for_task(task) -> None: """Wait for a vSphere task to complete. Raises on task error.""" WaitForTask(task)