power_on_vm
Power on a virtual machine by display name or moref ID, enabling quick startup of VMs on vCenter or ESXi hosts.
Instructions
Power on a VM by 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_power.py:7-18 (handler)The handler function that powers on a VM by name or moref ID. Connects to vCenter, looks up the VM, calls PowerOn(), and waits for the task to complete.
def power_on_vm(name_or_id: str, target: str | None = None) -> str: """Power on a VM by 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) task = vm.PowerOn() wait_for_task(task) return f"VM '{vm.name}' is now powered on" except Exception as e: return f"Error: {e}" - src/vcenter_mcp/server.py:15-21 (registration)Imports register_power_tools from vm_power module and calls it to register power_on_vm (and power_off_vm) as MCP tools.
from vcenter_mcp.tools.vm_power import register_power_tools from vcenter_mcp.tools.vm_delete import register_delete_tools register_list_tools(mcp) register_create_tools(mcp) register_power_tools(mcp) register_delete_tools(mcp) - src/vcenter_mcp/tools/vm_power.py:5-8 (registration)Registration decorator that registers power_on_vm as an MCP tool via @mcp.tool()
def register_power_tools(mcp) -> None: @mcp.tool() def power_on_vm(name_or_id: str, target: str | None = None) -> str: """Power on a VM by display name or moref ID (e.g. 'vm-42').""" - src/vcenter_mcp/client.py:47-77 (helper)Helper function lookup_vm() used by power_on_vm to find a VM by moref ID or display name.
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/config.py:26-33 (helper)Helper function resolve_target() used by power_on_vm to determine which vCenter target to connect to.
def resolve_target(cfg: dict, target_name: str | None = None) -> dict: name = target_name or cfg.get("default_target") if not name: raise ValueError("No target specified and no default_target set in config") target = cfg.get("targets", {}).get(name) if not target: raise ValueError(f"Target '{name}' not found in config. Available: {list(cfg.get('targets', {}).keys())}") return target