VMware AIops
PYPI · VMWARE-AIOPS
AI-powered VMware vCenter/ESXi VM lifecycle and deployment with 61 MCP tools.
Available components
Last scanned (3 hours ago)
Scores higher than 58% of PyPI servers
Category Cloud Infrastructure
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 4 of 48 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 17 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 14973 tokens (~245/item across 61 items; 61 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
- Stability check failed: the tool surface changed between 1.12.0 and 2.4.2: 38 tool removals, 0 breaking changes, 39 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (30% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 62 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 3 Nov 26 +16
- Malware scan: unverified → pass ▲ security
- 2 Nov 26 −1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 33.
- 31 Oct 26 −14
- Malware scan: pass → unverified ▼ security
- Security disclosure: unverified → pass ▲ functional
- 30 Oct 26 −1
- Security disclosure: pass → unverified ▼ functional
- 29 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37.
- 26 Oct 26 −1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 33.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed pypi/vmware-aiops@2.4.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 48 packages
| Packages resolved | 48 |
|---|---|
| Stale | 4 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
acknowledge_vcenter_alarm ~196
[WRITE] Acknowledge a triggered vCenter alarm — marks it as seen WITHOUT clearing it. This only marks the alarm; it does not clear it. The alarm stays in the active list with acknowledged=true until its condition clears or it is reset. To remove it entirely after fixing the root cause use reset_vcenter_alarm instead. Get exact entity_name and alarm_name from list_vcenter_alarms first; an unknown pair returns a not-found error. Returns: Dict: entity_name, alarm_name, action ("acknowledged"), acknowledged (true).
| Name | Type | Req | Description |
|---|---|---|---|
| alarm_name | string | yes | Exact alarm definition name, e.g. "Virtual machine CPU usage". |
| entity_name | string | yes | VM, ESXi host, or cluster the alarm fired on (from list_vcenter_alarms output). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
add_cluster_host ~192
[WRITE] Move an ESXi host that vCenter already manages into a cluster. The host must already be in vCenter inventory (standalone or in another cluster) — this does NOT register brand-new hosts and takes no host credentials; use the vCenter UI for first-time registration. Idempotent: a host already in the cluster returns success without change. Maintenance mode is not required to join (it IS required by remove_cluster_host). Check membership first with get_cluster_info. Returns a status string: moved, already-in-cluster, or a not-found error.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_name | string | yes | Destination cluster (create with create_cluster). |
| host_name | string | yes | Host name as shown in vCenter inventory, usually the FQDN, e.g. "esxi-01.lab.local". |
| target | – | – | vCenter target from config.yaml; omit for the default target. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
add_host_vmk ~341
[WRITE] Add a static-IP VMkernel adapter on a DVS portgroup - preview/confirm gated. Deliberately minimal shape for throwaway test vmks on L2-only segments (e.g. a TEP VLAN): static IPv4, NO gateway, NO services enabled. The DVS port allocation is handled internally - pass the distributed portgroup name. confirm=False validates (host + portgroup exist, IP/netmask/MTU legal, IP not already on the host) and returns the exact spec without writing; confirm=True creates and returns the assigned device name. Verify with list_host_vmks; remove with remove_host_vmk. Audited. Returns: Preview dict (action="preview") or result dict (action="created", device=e.g. "vmk2"). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True creates it. Do not set True because the user asked earlier; they have not seen the preview yet. |
| host_name | string | yes | ESXi host to add the vmk on. |
| ip | string | yes | Static IPv4 address for the vmk. |
| mtu | integer | – | MTU for the vmk (default 1500; 9000 for jumbo tests). |
| netmask | string | yes | Subnet mask (e.g. 255.255.255.0). |
| portgroup | string | yes | Distributed portgroup name to connect to. |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
apply_vm_plan ~469
[WRITE] Execute a previously created plan step by step. Without confirm=True this only previews: it returns blast_radius listing every step (index, action, target object), the count and indices of the destructive ones (delete, power off, revert, guest commands...), and blockers — and runs nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Each step is shown with its full parameters (passwords redacted). Each destructive step is measured as its own tool would measure it (delete_vm, power_off_vm, revert_vm_snapshot, run_vm_guest_command, delete_cluster ...), and that tool's blockers refuse the plan. A step on something an earlier step creates or changes is marked check "deferred": it is measured immediately before it runs, and the plan stops there if it fails. Refused: a step that ~/.vmware/rules.yaml denies for the tool that does the same thing (a plan step delete_vm is authorized as delete_vm, power_off as power_off_vm, and so on, also just before it runs), a target other than the one the plan was created against (no target is a target of its own), a step its tool would refuse, anything it could not read, a delete_vm step without its acknowledge_blast_radius (from a delete_vm preview), and any iscsi_* or storage_rescan step — those are gated in vmware-storage; run enable_iscsi, add_iscsi_target, remove_iscsi_target or rescan_storage there. With confirm=True steps run sequentially. On failure: stops immediately, keeps the plan file with per-step results, and returns rollback_available. On success: deletes the plan file. If a step fails and rollback_available is true, ask the user whether to rollback, then call rollback_vm_plan.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| plan_id | string | yes | The plan ID returned by create_vm_plan. |
| target | – | – | The vCenter/ESXi target the plan was created against. |
No output schema declared.
No examples provided.
attach_iso_to_vm ~177
[WRITE] Mount a datastore ISO into a VM's virtual CD-ROM drive. Reconfigures the existing CD-ROM (replacing any mounted ISO) or adds one on the VM's IDE controller; fails with a clear message if the VM has no IDE controller. Works whether the VM is powered on or off. Find ISO paths first with browse_datastore using pattern "*.iso". Returns a status string confirming attachment, or a VM-not-found / no-IDE-controller error.
| Name | Type | Req | Description |
|---|---|---|---|
| iso_ds_path | string | yes | Datastore path in bracket format, e.g. "[datastore1] iso/ubuntu-22.04.iso". |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default target. |
| vm_name | string | yes | Exact VM name as shown in vCenter inventory. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
batch_clone_vms ~181
[WRITE] Batch clone multiple VMs from a source VM (gold image). Each clone: full copy → optional reconfigure → optional snapshot → optional power on. Returns one dict per VM with its status. Clones run sequentially, so a long vm_names list may take a while — prefer batch_linked_clone_vms for disposable test copies.
| Name | Type | Req | Description |
|---|---|---|---|
| cpu | – | – | Override CPU count for all clones (optional). |
| memory_mb | – | – | Override memory for all clones (optional). |
| power_on | boolean | – | Power on each clone after creation. |
| snapshot_name | – | – | Snapshot each clone with this name (optional). |
| source_vm_name | string | yes | Source VM to clone from. |
| target | – | – | Optional vCenter/ESXi target name from config. |
| vm_names | array | yes | Names for the new VMs. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
batch_deploy_from_spec ~222
[WRITE] Deploy multiple VMs in one call from a declarative YAML spec file. Use for fleet provisioning (several VMs, shared defaults); for a single VM prefer deploy_vm_from_template, clone_vm, deploy_vm_from_ova, or deploy_linked_clone. The channel is chosen by spec keys: "source" (full clone), "template", "linked_clone: {source, snapshot}", per-VM "ova", else empty-VM creation (optionally "iso"). A "defaults" block sets cpu/memory_mb/disk_gb/network/ datastore/snapshot/power_on, overridable per VM. VMs deploy sequentially and one VM's failure does not stop the rest. Returns: One dict per VM: name, status ("ok" or "error"), and messages with per-step results.
| Name | Type | Req | Description |
|---|---|---|---|
| spec_path | string | yes | Local filesystem path to the deploy.yaml specification file. |
| target | – | – | vCenter/ESXi target name from config.yaml; omit to use the default target. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
batch_linked_clone_vms ~166
[WRITE] Batch create linked clones from a VM snapshot (fastest batch provisioning). Clones share the source disk via copy-on-write, so the source must stay intact. Returns one dict per clone. Prefer batch_clone_vms for independent copies.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline_snapshot | – | – | Snapshot each clone with this name (optional). |
| cpu | – | – | Override CPU count (optional). |
| memory_mb | – | – | Override memory (optional). |
| power_on | boolean | – | Power on each clone. |
| snapshot_name | string | yes | Clone base (from list_vm_snapshots). |
| source_vm_name | string | yes | Source VM to clone from. |
| target | – | – | Optional vCenter/ESXi target from config. |
| vm_names | array | yes | Names for the new linked clones. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
browse_datastore ~233
[READ] Search a vSphere datastore folder and all its subfolders for files. Use this to find OVA/ISO/VMDK paths before calling deploy_vm_from_ova or attach_iso_to_vm; for an estate-wide image sweep use scan_all_datastore_images. Returns the list envelope: 'items' is one row per file, and 'returned'/'total'/'truncated' state completeness. Every match in the searched folders is returned, so truncated is always false.
| Name | Type | Req | Description |
|---|---|---|---|
| datastore_name | string | yes | Name of the datastore to browse. |
| path | string | – | Datastore-relative folder to start from (empty string for root); a leading '/' or '..' is refused. The search is recursive, so the root returns matches from every folder; each row's ds_path ("[ds] di… |
| pattern | string | – | Glob pattern to filter files (e.g. "*.ova", "*.iso", "*"). |
| target | – | – | Optional vCenter/ESXi target name from config. |
No output schema declared.
No examples provided.
cancel_vm_ttl ~73
[WRITE] Cancel an existing TTL for a VM (prevents auto-deletion). Returns a status string. Use list_vm_ttls first for the exact vm_name. This only removes the schedule and never touches the VM itself.
| Name | Type | Req | Description |
|---|---|---|---|
| vm_name | string | yes | Name of the VM whose TTL should be cancelled. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
clone_vm ~178
[WRITE] Clone a VM. Without to_host/to_datastore the clone lands on the source's host+datastore. Returns a status string naming the clone. Full independent copy — slow and full disk cost; prefer deploy_linked_clone for near-instant test copies and batch_clone_vms for many at once. Cloning a running VM may capture a crash-consistent disk.
| Name | Type | Req | Description |
|---|---|---|---|
| new_name | string | yes | Name for the new clone. |
| power_on | boolean | – | Power on the clone after creation. |
| target | – | – | vCenter/ESXi target name from config. |
| to_datastore | – | – | Target datastore name (default: source's datastore). |
| to_host | – | – | Target ESXi host name (default: source's host). |
| vm_name | string | yes | Source VM (or template) name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
configure_cluster ~151
[WRITE] Reconfigure cluster HA/DRS settings. Returns a status string naming what changed. Pass only the fields to change; None leaves a setting untouched — then verify with get_cluster_info. drs_behavior applies only when DRS is enabled.
| Name | Type | Req | Description |
|---|---|---|---|
| drs | – | – | Enable (True) or disable (False) DRS, or None to leave unchanged. |
| drs_behavior | – | – | DRS behavior: "fullyAutomated", "partiallyAutomated", or "manual". |
| ha | – | – | Enable (True) or disable (False) HA, or None to leave unchanged. |
| name | string | yes | Cluster name. |
| target | – | – | Optional vCenter target name from config. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
convert_vm_to_template ~93
[WRITE] Convert a powered-off VM to a vSphere template. Returns a status string. Use this to freeze a golden image: afterwards the VM cannot be powered on and serves only as a clone source for deploy_vm_from_template.
| Name | Type | Req | Description |
|---|---|---|---|
| target | – | – | Optional vCenter/ESXi target name from config. |
| vm_name | string | yes | Name of the VM to convert (must be powered off). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_cluster ~206
[WRITE] Create a new empty cluster in a datacenter, optionally enabling HA and DRS. Fails with a clear error (no partial state) if the name already exists or drs_behavior is invalid. Then add hosts with add_cluster_host, change HA/DRS later with configure_cluster, and verify with get_cluster_info. Returns a status string naming the features enabled.
| Name | Type | Req | Description |
|---|---|---|---|
| datacenter | – | – | Datacenter name; omit for the first one on the target. |
| drs | boolean | – | True enables DRS (default False). |
| drs_behavior | string | – | "fullyAutomated" (default), "partiallyAutomated", or "manual". Only takes effect when drs=True. |
| ha | boolean | – | True enables vSphere HA (default False). |
| name | string | yes | Name for the new cluster; must be unique in the datacenter. |
| target | – | – | vCenter target from config.yaml; omit for the default target. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_drs_rule ~294
[WRITE] Create a VM-VM DRS rule (affinity or anti-affinity) - preview/confirm gated. rule_type "affinity" keeps the listed VMs together; "antiAffinity" keeps them apart (e.g. redundant appliance pairs on separate hosts). Requires >=2 distinct VMs, all members of the cluster. VM-Host rules hang off cluster VM/host groups and are not created here. Verify with list_drs_rules. Audited. Returns: Preview dict (action="preview", would_create) or result dict (action="created", created incl. the assigned key). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | Exact cluster name. |
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True creates it. Do not set True because the user asked earlier; they have not seen the preview yet. |
| enabled | boolean | – | Create the rule enabled (default) or disabled. |
| rule_name | string | yes | Name for the new rule; must be unique on the cluster. |
| rule_type | string | yes | "affinity" or "antiAffinity". |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
| vm_names | array | yes | VM names the rule governs (>=2, all in the cluster). |
No output schema declared.
No examples provided.
create_dvs_portgroup ~347
[WRITE] Create a VLAN-tagged portgroup on a dvSwitch - preview/confirm gated. confirm=False (default) validates everything (switch exists, name free, binding and VLAN legal) and returns the exact spec that WOULD be created without writing anything. confirm=True creates the portgroup and waits for the task. Verify afterwards with list_dvs_portgroups. Audited. binding="ephemeral" creates a portgroup with no pre-created port pool, attachable from the ESXi host client even when vCenter is down - use for a self-hosted VCSA's own management portgroup. num_ports is ignored for ephemeral. lateBinding is deprecated by vSphere and not offered. Returns: Preview dict (action="preview", would_create) or result dict (action="created", created). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| binding | string | – | "earlyBinding" (default) or "ephemeral". |
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True creates it. Do not set True because the user asked earlier; they have not seen the preview yet. |
| dvs_name | string | yes | Name of the distributed virtual switch to create it on. |
| name | string | yes | Name for the new portgroup; must be unique on the switch. |
| num_ports | integer | – | Port count for earlyBinding portgroups (default 8). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
| vlan_id | integer | yes | VLAN ID to tag (0-4094; 0 = none). |
No output schema declared.
No examples provided.
create_vm ~229
[WRITE] Create a new empty VM with the given hardware sizing. Creates a powered-off VM with one disk and one NIC. To populate it, attach an ISO (attach_iso_to_vm) and power it on, or use deploy_vm_from_ova or clone_vm for a ready-to-run guest. Fails before creating anything if the datastore is not found. Returns a status string with the new VM name.
| Name | Type | Req | Description |
|---|---|---|---|
| cpu | integer | – | vCPU count (default 2). |
| datastore_name | – | – | Target datastore; omit for the first accessible one. |
| disk_gb | integer | – | Primary disk size in GB (default 40). |
| folder_path | – | – | vCenter folder path; omit for the datacenter root. |
| memory_mb | integer | – | Memory in MB (default 4096). |
| network_name | string | – | Port group for the NIC (default "VM Network"). |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default. |
| vm_name | string | yes | Name for the new VM; must not already exist. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_vm_plan ~196
[WRITE] Create an execution plan for multi-step VM operations. Use for 2+ steps or 2+ VMs. Validates actions, checks the targets exist in vSphere, and generates a plan with rollback info per step. Each operation is a dict with "action" key plus action-specific params. Allowed actions: power_on, power_off, reset, suspend, create_vm, delete_vm, reconfigure, create_snapshot, delete_snapshot, revert_snapshot, clone, migrate, deploy_ova, deploy_template, linked_clone, attach_iso, convert_to_template. Returns plan dict with plan_id, steps, summary (vms_affected, irreversible_steps, rollback_available). Show to user for confirmation before calling apply_vm_plan.
| Name | Type | Req | Description |
|---|---|---|---|
| operations | array | yes | List of operation dicts, each with "action" + params. |
| target | – | – | Optional vCenter/ESXi target name from config. |
No output schema declared.
No examples provided.
create_vm_snapshot ~143
[WRITE] Create a snapshot of a VM. Returns a status string. Use this before a risky change so revert_vm_snapshot can undo it, then reclaim the space with delete_vm_snapshot — snapshots left for days grow delta disks and must not be treated as backups.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional description. |
| memory | boolean | – | Include memory state (heavier, allows resume). |
| quiesce | boolean | – | Quiesce guest filesystem (requires running VMware Tools). |
| snapshot_name | string | yes | Snapshot name. |
| target | – | – | vCenter/ESXi target name from config. |
| vm_name | string | yes | VM to snapshot. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_cluster ~185
[WRITE] Delete an empty cluster (no hosts must remain). Without confirm=True this only previews: it returns blast_radius (cluster name and id, host/VM/datastore counts and names, blockers) and deletes nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Refused: a cluster that still has hosts or VMs (evacuate members with remove_cluster_host first), or one whose members could not be read. Check get_cluster_info first. Returns a dict (action, blast_radius).
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| name | string | yes | Name of the cluster to delete. |
| target | – | – | Optional vCenter target name from config. |
No output schema declared.
No examples provided.
delete_drs_rule ~220
[WRITE] Delete a VM-VM DRS rule - confirm-gated, guarded. REFUSES non-VM-VM rules: VM-Host rules can carry licensing/compliance placement constraints (must-run-on licensed hosts) and hang off cluster groups - manage those in the vSphere UI. The preview and result both record the full rule definition so a mistaken delete can be recreated from the audit trail. Audited. Returns: Preview dict (action="preview", would_delete) or result dict (action="deleted", deleted). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | Exact cluster name. |
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True deletes it. Do not set True because the user asked earlier; they have not seen the preview yet. |
| rule_name | string | yes | Exact rule name (see list_drs_rules). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
delete_vm ~268
[WRITE] Delete a VM and its disks and snapshots (irreversible). Without confirm=True this only previews: it returns blast_radius (identity, host, disks, total size, snapshot count, blockers) and destroys nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user said "delete" earlier: they have not seen what it destroys yet. To delete, call again with confirm=True and acknowledge_blast_radius set to the preview's acknowledge_with object, unchanged. The VM is re-measured first; if it changed (another snapshot, a different VM under the same name), nothing is deleted and you must preview again. Refused outright: a powered-on or suspended VM (power it off with power_off_vm first), a VM whose disks or identity cannot be read, and a name that matches more than one VM. Use set_vm_ttl instead when the VM should only expire later.
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_blast_radius | – | – | The preview's acknowledge_with object. |
| confirm | boolean | – | False (default) previews; True deletes, with the acknowledgement. |
| target | – | – | vCenter/ESXi target name from config. |
| vm_name | string | yes | Exact name of the VM to delete. |
No output schema declared.
No examples provided.
delete_vm_snapshot ~420
[WRITE] Permanently delete a named snapshot, consolidating its delta disk into the parent. Without confirm=True this only previews: it returns blast_radius (VM and instance UUID, the snapshot's name, id and creation time, remove_children, how many child snapshots sit below it and how many snapshots would be removed) and deletes nothing. Show it to the user and get their decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Frees disk space and does NOT change the VM's current state (unlike revert_vm_snapshot). Works while the VM is powered on. Refused: a snapshot name that is not found, a name that matches more than one snapshot on the VM (vSphere allows duplicates; rename one first), and a snapshot tree that cannot be read. Run list_vm_snapshots first for exact names. Consolidation is slow for old/large deltas (often minutes). By default (wait=False) this returns a task id immediately so it does not block your context — poll it with get_vm_task_status. Set wait=True only for small snapshots (blocks up to 30 min). Returns: Dict with action (preview, snapshot_delete_started, snapshot_deleted), blast_radius, and result (carries the task id to poll via get_vm_task_status).
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| remove_children | boolean | – | False (default) = children are kept and consolidated; True = delete the entire snapshot subtree below this one as well. |
| snapshot_name | string | yes | Exact snapshot name from list_vm_snapshots output. |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default target. |
| vm_name | string | yes | Exact name of the VM owning the snapshot. |
| wait | boolean | – | False (default) = async, return task id at once; True = block. |
No output schema declared.
No examples provided.
deploy_linked_clone ~236
[WRITE] Create a linked clone from a VM snapshot — near-instant, minimal disk usage. The clone writes to a copy-on-write delta over the source's base disk, so it depends on the source staying intact. Fastest provisioning for test/dev fleets; use clone_vm for fully independent copies. Requires the named snapshot — run list_vm_snapshots first. Returns a status string with the new clone name.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline_snapshot | – | – | If set, snapshots the new clone with this name. |
| cpu | – | – | Override vCPU count; omit to keep the source's value. |
| memory_mb | – | – | Override memory in MB; omit to keep the source's value. |
| new_name | string | yes | Name for the new linked clone; must not already exist. |
| power_on | boolean | – | Power the clone on after creation (default False). |
| snapshot_name | string | yes | Clone base (from list_vm_snapshots). |
| source_vm_name | string | yes | Source VM name (must have at least one snapshot). |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
deploy_vm_from_ova ~262
[WRITE] Create a new VM by importing a local .ova file (OVF parse + VMDK upload). Use for local OVA files; for vSphere templates use deploy_vm_from_template, to copy an existing VM clone_vm. Returns a status string naming the new VM. Upload time scales with OVA size; fails before creating anything if the datastore is not found.
| Name | Type | Req | Description |
|---|---|---|---|
| datastore_name | string | yes | Target datastore (see browse_datastore). |
| folder_path | – | – | vCenter folder path; omit for the datacenter root. |
| network_name | string | – | Port group every network in the OVF is mapped to (default "VM Network"). Refused before anything is imported if no network, or more than one, has this name in the datacenter. |
| ova_path | string | yes | Local path to the .ova file (must be readable by this server). |
| power_on | boolean | – | Power the VM on after import (default False). |
| snapshot_name | – | – | If set, snapshots the new VM with this name. |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default. |
| vm_name | string | yes | Name for the new VM; must not already exist. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
deploy_vm_from_template ~192
[WRITE] Deploy a new VM by cloning from a vSphere template. Returns a status string. Use for VMs marked as templates; for a running source VM use clone_vm. Requires an existing template — convert_vm_to_template makes one.
| Name | Type | Req | Description |
|---|---|---|---|
| cpu | – | – | Override CPU count (optional). |
| datastore_name | – | – | Target datastore (template's own if omitted). |
| memory_mb | – | – | Override memory in MB (optional). |
| new_name | string | yes | Name for the new VM. |
| power_on | boolean | – | Power on after deployment. |
| snapshot_name | – | – | Snapshot the new VM with this name. |
| target | – | – | Optional vCenter/ESXi target from config. |
| target_host | – | – | ESXi host to place the VM on (list_esxi_hosts); omit to use the template's host and its resource pool. |
| template_name | string | yes | Source vSphere template name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
download_vm_guest_file ~254
[WRITE] Download a file from a VM and write it to a local path. Reads from the guest, writes the local filesystem — the write is why this is not a read tool. Returns a status string. Requires VMware Tools running in the guest OS. Use upload_vm_guest_file for the reverse direction; to capture command output use run_vm_guest_command_with_output instead — it redirects and downloads for you. Refuses a destination that already exists unless overwrite=True, and never writes through a symlink or over a directory. Pick a path that does not exist yet rather than passing overwrite=True by default.
| Name | Type | Req | Description |
|---|---|---|---|
| guest_path | string | yes | File path inside the guest to download. |
| local_path | string | yes | Local destination path, including the file name. |
| overwrite | boolean | – | True replaces an existing file at local_path (default False). |
| password | string | – | Guest OS password. |
| target | – | – | Optional vCenter/ESXi target name from config. |
| username | string | yes | Guest OS account to run as. Required — there is no default, so a call can never act as root without choosing root. |
| vm_name | string | yes | Target VM name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_access_info ~278
[READ] The account this server uses on a target, and whether it holds a tool's privileges. When to use: a tool failed with NoPermission, or before a write you want to know the configured account may run. Ask about one ``tool`` (e.g. clone_vm), or omit it to sort every tool of this server into granted / not granted / undetermined. What it returns: {target, account, checked_on, privileges {id: state}, and either ``tool`` {name, requires, verdict, meaning, missing_at_root} or the tools_* lists}, plus the account's direct permissions (role, on, propagate). Gotchas: privileges are checked on the vCenter/ESXi **root folder** only. ``not_granted_at_root`` does not mean no access — a permission on a cluster, folder or VM still lets the tool work there. ``undetermined`` means the platform did not answer, or the tool's deciding permission is not a vSphere privilege (ping_from_vmk); it is never to be read as granted. Changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| target | – | – | Optional vCenter/ESXi target name from config. Uses default if omitted. |
| tool | – | – | A tool name on this server, e.g. clone_vm (None = all tools). |
No output schema declared.
No examples provided.
get_cluster_health_summary ~291
[READ] One-glance health rollup for every cluster — "is anything on fire?". Aggregates hosts, VM power state, live CPU/memory pressure, triggered alarms and datastores thin-provisioned past 100% of capacity per cluster, assigns each a status ("ok"/"warn"/"critical"), and flattens the anomalies into a ranked ``top_issues`` focus list — the fast triage view for "what's wrong right now?". Read-only (delegates to the vmware-monitor library). Use it FIRST for a cross-cluster glance, then drill in with investigate_vm or investigate_host. Returns {totals, top_issues, issues_total, clusters, snapshot, customization_hint}. Lead with ``top_issues`` (worst first, each with a drill-down hint), ``clusters`` as context, ``customization_hint`` last. Point-in-time — no trending.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_filter | – | – | Case-insensitive substring to show only matching clusters. |
| include_vms | boolean | – | Roll up VM power counts (default True). False skips the VM pass on very large fleets. |
| target | – | – | Optional vCenter/ESXi target name from config. Uses default if omitted. |
| top_n | integer | – | Cap the top_issues focus list (default 10; 0 hides it). |
No output schema declared.
No examples provided.
get_cluster_info ~157
[READ] Get detailed cluster information: member hosts, HA/DRS config, resource capacity. Read-only, no side effects. Use before add_cluster_host / remove_cluster_host (shows membership and per-host maintenance mode) and to verify configure_cluster changes. Returns: Dict with name, host_count, hosts (each: name, connection_state, power_state, maintenance_mode), ha_enabled, ha_admission_control, drs_enabled, drs_behavior, total/effective CPU (MHz) and memory (GB). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Exact cluster name. |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
get_cross_vcenter_attention ~218
[READ] "What needs attention now?" across EVERY configured vCenter — one list. Runs get_cluster_health_summary against every configured target and returns one globally ranked ``top_issues`` list (worst first, each tagged with its ``vcenter``) plus a per-target rollup — "where do I look first, anywhere in the estate?". Degrades gracefully: an unreachable target is listed under ``unreachable`` and the rest still aggregate, but it is never counted as healthy: ``totals.worst_status`` is at least ``warn`` (``critical`` when no target answered) and ``totals.status_reason`` says why. Delegates to the vmware-monitor library (read-only). Lead with ``top_issues``, then drill in with investigate_vm. Point-in-time.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_filter | – | – | Case-insensitive cluster substring applied to every target. |
| top_n | integer | – | Cap the merged top_issues focus list (default 10). |
No output schema declared.
No examples provided.
get_vm_task_status ~208
[READ] Poll a long-running vSphere task by its id (from an async delete_vm_snapshot). Use after delete_vm_snapshot returns a task id, instead of re-running the delete. Returns state (queued/running/success/error/gone), progress percent, and the entity name. 'gone' means vCenter does not know the id: the task finished and was garbage-collected, or the id is wrong. It says nothing about success — re-list the resource to confirm the final state. A failed task reports its fault under 'task_error'; a top-level 'error' key would mean this poll itself failed. Returns: Dict with task_id, state, progress_pct, operation, entity, and task_error/note when relevant.
| Name | Type | Req | Description |
|---|---|---|---|
| target | – | – | vCenter/ESXi target name from config.yaml; omit to use the default target. |
| task_id | string | yes | The task id string returned by an async write operation. |
No output schema declared.
No examples provided.
investigate_datastore ~173
[READ] "What is happening around this datastore?" — one correlated drill-down. Correlates a datastore's capacity/free space/accessibility, the hosts that mount it, a rollup of the VMs it backs, alarms across datastore/host, and a merged **event timeline**. Delegates to the vmware-monitor library (read-only); do not dump the result raw. (Per-datastore latency is a separate perf report.) Use this AFTER get_cluster_health_summary flags storage pressure. Point-in-time.
| Name | Type | Req | Description |
|---|---|---|---|
| datastore_name | string | yes | Exact datastore name. Unknown names return a teaching error. |
| hours | integer | – | Event-timeline look-back window in hours (default 24). |
| target | – | – | Optional vCenter/ESXi target name from config (default if omitted). |
No output schema declared.
No examples provided.
investigate_host ~180
[READ] "What is happening around this ESXi host?" — one correlated drill-down. Correlates a host's state (connection, CPU/memory, ESXi version, uptime), its cluster context, a rollup of the VMs it runs, the datastores it mounts, alarms across host/cluster/datastore, live performance, and a merged **event timeline**. Delegates to the vmware-monitor library (read-only); do not dump the result raw. Use this AFTER get_cluster_health_summary flags a host. Point-in-time.
| Name | Type | Req | Description |
|---|---|---|---|
| host_name | string | yes | Exact host name. Unknown names return a teaching error. |
| hours | integer | – | Event-timeline look-back window in hours (default 24). |
| target | – | – | Optional vCenter/ESXi target name from config (default if omitted). |
No output schema declared.
No examples provided.
investigate_vm ~202
[READ] "What is happening around this VM?" — one correlated drill-down. Correlates everything around one VM so you don't stitch it together yourself: the VM's state, its host, cluster context, backing datastores, snapshots, triggered alarms, live performance, and a merged **event timeline** across VM, host, cluster and datastores (newest first). Batched, cheap even on large fleets. Delegates to the vmware-monitor library (read-only). Explain the result in operational language; do not dump it raw. Use this AFTER get_cluster_health_summary points at a problem VM. Point-in-time.
| Name | Type | Req | Description |
|---|---|---|---|
| hours | integer | – | Event-timeline look-back window in hours (default 24). |
| target | – | – | Optional vCenter/ESXi target name from config (default if omitted). |
| vm_name | string | yes | Exact VM name. Unknown names return a teaching error (list VMs first). |
No output schema declared.
No examples provided.
list_drs_rules ~143
[READ] List a cluster's DRS rules: VM-VM affinity/anti-affinity and VM-Host. Per rule: key, name, type (affinity / antiAffinity / vmHost), enabled, mandatory, and the member VM names (VM-VM) or group names (VM-Host). The verify pair for create/delete/set_drs_rule_enabled. Returns: Dict with cluster, count, and rules sorted by name. Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | Exact cluster name. |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
list_dvs_portgroups ~217
[READ] List distributed virtual portgroups, optionally scoped to one dvSwitch. Per portgroup: name, parent dvSwitch, binding type (earlyBinding / ephemeral), VLAN setting (id, trunk ranges, or pvlan), configured port count, and whether it is the switch's uplink portgroup. Use to verify create_dvs_portgroup results or to survey network config before changes. Returns: The family list envelope {items, returned, limit, total, truncated, hint}; each item is one portgroup. `portgroups` is kept as a deprecated alias for `items`. Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| dvs_name | – | – | dvSwitch name to scope to; omit to list across all switches. |
| limit | integer | – | Max portgroups to return (default 200). |
| offset | integer | – | Skip this many portgroups first (paging). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
list_host_vmks ~429
[READ] List VMkernel adapters, optionally scoped to one ESXi host. Per vmk: device, IP/netmask/dhcp, MTU, MAC, portgroup (standard or DVS), netstack, and which host services it is selected for (management, vmotion, vsan, ...). The verify pair for add_host_vmk/remove_host_vmk. Gotcha - this list is not automatically a complete estate inventory. vCenter answers property reads for a host it has lost contact with out of its own cache, so hosts it never reached appear here as rows with `reachable: false`, `device: null` and a `note` naming the connectionState, rather than being dropped. Check `hosts_unreachable` (and the `unreachable_note` present only when it is non-zero) before reporting the result as the full picture, and do not read a null field on such a row as a measurement - it means nobody looked. Adapters shown for an unreachable host are vCenter's last cached view. Returns: The family list envelope {items, returned, limit, total, truncated, hint} plus `hosts_unreachable` (int) and, when that is non-zero, `unreachable_note` (str). Each item is one VMkernel adapter, or one unread host when `reachable` is false; `services` is null when a host's service map could not be read. `truncated` stays a paging fact - an incomplete estate is reported by `hosts_unreachable`, not by it. `vmks` is kept as a deprecated alias for `items`. Errors return "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| host_name | – | – | ESXi host name; omit to list across all hosts. |
| limit | integer | – | Max vmks to return (default 100). |
| offset | integer | – | Skip this many vmks first (paging). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
list_vcenter_alarms ~180
[READ] List active/triggered alarms across the vCenter inventory. Start here for alarm work: it supplies the exact entity_name/alarm_name pair that acknowledge_vcenter_alarm and reset_vcenter_alarm require. Returns the list envelope: 'items' holds severity (critical/warning/info), entity name and type, alarm name, acknowledged flag, and trigger time; 'returned'/'limit'/'total'/'truncated'/'hint' state completeness, so a limited page is never mistaken for the whole picture. 'total' is the real active-alarm count — every alarm is collected before the limit is applied.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | – | – | Max number of alarms to return (None = all). Use when many alarms are active. |
| target | – | – | Optional vCenter target name from config. Uses default if omitted. |
No output schema declared.
No examples provided.
list_vm_plans ~120
[READ] List all pending/failed plans. Use this first to find a plan_id for apply_vm_plan or rollback_vm_plan. Returns the list envelope: 'items' holds plan summaries (plan_id, created_at, status, steps count, VMs affected), and 'returned'/'total'/ 'truncated' state whether the listing is complete. Every plan file is read, so truncated is always false. Listing never deletes: stale plans (>24h) are swept by create_vm_plan, not by this tool.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_vm_snapshots ~170
[READ] List the full snapshot tree of a VM, including nested child snapshots. Read-only, no side effects. Call this before revert_vm_snapshot, delete_vm_snapshot, or deploy_linked_clone to get exact snapshot names. 'items' is empty when the VM has no snapshots. Returns: The list envelope. 'items' is one dict per snapshot: name, description, created, state (power state at snapshot time), level (0 = root). The whole tree is walked, so 'total' is the real count and 'truncated' is always false.
| Name | Type | Req | Description |
|---|---|---|---|
| target | – | – | vCenter/ESXi target name from config.yaml; omit to use the default target. |
| vm_name | string | yes | Exact VM name as shown in vCenter inventory. |
No output schema declared.
No examples provided.
list_vm_ttls ~95
[READ] List all VMs with TTLs registered, including expiry time and status. Use this first to find the exact vm_name for cancel_vm_ttl. Returns the list envelope: 'items' holds TTL entries with remaining_minutes and expired flag, and 'returned'/'total'/'truncated' state whether the listing is complete. The whole TTL store is read, so truncated is always false.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
migrate_vm ~312
[WRITE] Migrate (vMotion) a VM to another host, optionally with storage vMotion. Without confirm=True this only previews: it returns blast_radius (VM and instance UUID, source host and datastores, target host with its connection and maintenance state, target datastore, and live vMotion vs cold migration) and moves nothing. Show it to the user and get their decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Refused: a target host that is not found, not connected, in maintenance mode or has no resource pool; a target datastore that is not found; a target host that does not mount the VM's datastores when to_datastore is omitted (vCenter rejects cross-host vMotion without shared storage — pass to_datastore); and anything above that cannot be read. The VM's current host with no to_datastore returns action "noop". Run get_cluster_info first for host names. Returns: Dict with action (preview, noop, migrated), blast_radius, and result.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| target | – | – | vCenter/ESXi target name from config. |
| to_datastore | – | – | Target datastore (required for cross-storage hosts). |
| to_host | string | yes | Target ESXi host name. |
| vm_name | string | yes | VM to migrate. |
No output schema declared.
No examples provided.
ping_from_vmk ~343
[READ] DF-bit-capable ping sourced from a host vmk - MTU path validation. Runs `esxcli network diag ping` on the ESXi host through the vSphere API (no host SSH). df=True sets Don't-Fragment so an oversized packet FAILS instead of fragmenting - that failure is the diagnostic: - df=True size=1572 proves a >=1600 MTU path (overlay/TEP floor) - df=True size=8972 proves full jumbo (9000 minus 28 bytes overhead) A too-big result reports 'Message too long' in the fault field rather than erroring - read success + fault together. Returns: Dict with request, success, and summary (transmitted/received/loss/ rtt) or fault (the esxcli failure text). Errors return "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Packets to send (default 3, max 60). |
| dest_ip | string | yes | IPv4 address to ping. |
| df | boolean | – | True sets the Don't-Fragment bit (the MTU probe mode). |
| host_name | string | yes | ESXi host to source the ping from. |
| netstack | – | – | Optional netstack instance (e.g. "vxlan" for real TEP vmks). |
| size | integer | – | ICMP payload bytes (default 56). Path proves size+28 MTU. |
| source_vmk | string | yes | VMkernel device to source from (e.g. "vmk2"). |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
No output schema declared.
No examples provided.
power_off_vm ~323
[WRITE] Power off a VM — graceful guest shutdown by default, hard power-off with force=True. Without confirm=True this only previews: it returns blast_radius (VM name and instance UUID, host, power state, VMware Tools status, and whether this is a guest shutdown or a hard power-off) and changes nothing. Show it to the user and get their decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Graceful mode calls VMware Tools guest shutdown and waits up to 120s; if it does not finish, action is "still_running". Refused: a graceful shutdown when Tools is not running or the VM is suspended (preview force=True instead), and a VM whose identity or power state cannot be read. An already-off VM returns action "noop". Use power_on_vm to start a VM; delete_vm requires it off first. Returns: Dict with action (preview, noop, powered_off, still_running), blast_radius, and the executor's message under result.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| force | boolean | – | False (default) = graceful guest shutdown via VMware Tools; True = immediate hard power-off (risks guest filesystem damage). |
| target | – | – | vCenter/ESXi target from config.yaml; omit for the default target. |
| vm_name | string | yes | Exact VM name as shown in vCenter inventory (case-sensitive). |
No output schema declared.
No examples provided.
power_on_vm ~101
[WRITE] Power on a virtual machine. Returns a status string; an already-on VM is a no-op. Reverse with power_off_vm. Call this first when a VM is off: guest tools such as run_vm_guest_command only work once VMware Tools has finished booting.
| Name | Type | Req | Description |
|---|---|---|---|
| target | – | – | Optional vCenter/ESXi target name from config. Uses default if omitted. |
| vm_name | string | yes | Exact name of the virtual machine. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
provision_vm_guest ~464
[WRITE] Provision a VM by running an ordered sequence of guest operations. Prefer this over repeated run_vm_guest_command / upload_vm_guest_file calls when the steps form one provisioning run. Steps stop on the first failure, so a partial run leaves the guest half-configured. Requires VMware Tools running in the guest. Without confirm=True this only previews: blast_radius names the VM (name, instance UUID), the guest account and every step it would run, in order, with counts per type, local file sizes and any blockers; nothing runs. Show it to the user. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Refused outright: VM not powered on, VMware Tools not running, an empty step list, a step with an unknown type or a missing key, an upload whose local file is missing or unreadable, a service step on a Windows guest, an unreadable identity or status, a name that matches more than one VM, or a rules.yaml deny on a guest tool these steps run: exec and service steps run_vm_guest_command and run_vm_guest_command_with_output, upload steps upload_vm_guest_file (the preview lists it as a blocker). Step types: - exec: {"type": "exec", "command": "apt-get install -y nginx"} - upload: {"type": "upload", "local_path": "...", "guest_path": "..."} - service: {"type": "service", "name": "nginx", "action": "start"} Returns: dict with success, completed_steps, total_steps, results, error, and blast_radius.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| password | string | yes | Guest OS password. |
| steps | array | yes | Ordered list of step dicts (see Step types). |
| target | – | – | Optional vCenter/ESXi target name from config. |
| timeout | integer | – | Per-step timeout in seconds (default 300). |
| username | string | yes | Guest OS username. |
| vm_name | string | yes | Target VM name. |
No output schema declared.
No examples provided.
reconfigure_vm ~152
[WRITE] Change a VM's vCPU count and/or memory. Pass only the fields you want to change; omitted fields are left untouched. Hot-add of CPU/memory requires it to be enabled on the VM and a running guest; otherwise power the VM off first (power_off_vm). Returns: Status string describing the applied change, or a VM-not-found error.
| Name | Type | Req | Description |
|---|---|---|---|
| cpu | – | – | New vCPU count; omit to leave unchanged. |
| memory_mb | – | – | New memory in MB; omit to leave unchanged. |
| target | – | – | vCenter/ESXi target name from config.yaml; omit to use the default target. |
| vm_name | string | yes | Exact name of the VM to reconfigure. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
remove_cluster_host ~234
[WRITE] Remove a host from a cluster (host must be in maintenance mode). Without confirm=True this only previews: it returns blast_radius (host name and id, maintenance mode, VM count, powered-on VM count, blockers) and moves nothing. Show that to the user and get their explicit decision. Do not set confirm=True on your own because the user asked earlier: they have not seen the preview yet. Refused: a host not in maintenance mode, a host with powered-on VMs, and a host whose state could not be read. Run get_cluster_info first for the exact member host names. The host is not deleted — it stays in vCenter inventory standalone; use add_cluster_host to move it back. Returns a dict.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_name | string | yes | Cluster to remove the host from. |
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True applies it. |
| host_name | string | yes | ESXi host name to remove (from get_cluster_info output). |
| target | – | – | Optional vCenter target name from config. |
No output schema declared.
No examples provided.
remove_host_vmk ~367
[WRITE] Remove a VMkernel adapter - confirm-gated, guarded, fail-closed. REFUSES (unless force_unprotected=True) when the vmk is selected for any host service (management/vmotion/vsan/...), lives on a non-default netstack (NSX TEPs on vxlan, dedicated vmotion/provisioning stacks - never visible in the service map), carries a default gateway route, or when any of that CANNOT be verified - unverifiable is treated as unsafe, never as clear. Test vmks created by add_host_vmk trip none of these and remove cleanly without force. ABSOLUTE, no override: the host's only management-enabled vmk is never removable - this call rides the interface it would delete. force_unprotected=True (together with confirm=True) overrides the non-absolute protections for deliberate teardown; the override and every bypassed protection are recorded in the result (and the audit trail). Returns: Preview dict (action="preview") or result dict (action="removed", plus forced/protections_bypassed when overridden). Errors return a dict with "error" + hint.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | False (default) returns the blast radius and changes nothing. True removes it. Do not set True because the user asked earlier; they have not seen the preview yet. |
| force_unprotected | boolean | – | True bypasses the non-absolute protections above. |
| host_name | string | yes | ESXi host the vmk lives on. |
| target | – | – | vCenter target name from config.yaml; omit to use the default target. |
| vmk | string | yes | Device name to remove (e.g. "vmk2"). |
No output schema declared.
No examples provided.
How do I install the VMware AIops MCP server?
VMware AIops runs locally as a PyPI package, launched with uvx vmware-aiops. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · vmware-aiops
claude mcp add vmware-skills-vmware-aiops -- uvx vmware-aiops
What is the VMware AIops MCP server?
VMware AIops is an MCP server listed in the public MCP registry as io.github.vmware-skills/vmware-aiops. AI-powered VMware vCenter/ESXi VM lifecycle and deployment with 61 MCP tools. This page covers its PyPI package (vmware-aiops).
Is the VMware AIops MCP server safe to use?
VMware AIops scores 60 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the VMware AIops MCP server expose?
VMware AIops exposes 61 tools: get_access_info, list_vcenter_alarms, acknowledge_vcenter_alarm, reset_vcenter_alarm, create_cluster, and 56 more. Their descriptions and schemas cost roughly 14,701 tokens of context every time the server is loaded.
Is the VMware AIops MCP server still maintained?
VMware AIops is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the VMware AIops MCP server under?
VMware AIops declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.