Nutanix AIops
Nutanix AIops gives governed read/write access and deterministic diagnostics for Nutanix Prism Central v4 through 51 MCP tools.
Read clusters, hosts, VMs including AHV and ESXi, storage containers, subnets, catalog images/categories, snapshots, recovery points, protection domains, alerts, events, audit records, tasks, LCM inventory, and capacity runway.
Run read-only diagnostics and RCA: cluster health ranking, alert triage, per-alert root-cause analysis, and storage runway estimates.
Perform governed writes: VM power/shutdown/reboot/create/update/clone/delete/migrate, storage container create/update/delete, subnet create/delete, category create/assign, image delete, snapshot create/delete/restore, VM protection, protection-domain failover, alert acknowledge/resolve, LCM precheck/update, and undo apply.
Destructive writes support dry-run previews, automatic ETag/If-Match handling, before-state capture, and undo tokens where reversible.
Every call is audited locally, with runaway call guards and descriptive risk tiers; LCM update requires a passed precheck.
Connect securely to Prism Central on HTTPS :9440 with Basic auth and an encrypted password store.
Use via MCP server or CLI commands for init, doctor, overview, diagnostics, and common VM/cluster operations.
Governed AI-ops for Nutanix Prism Central (v4 REST API) — clusters, hosts, VMs (AHV + ESXi), storage, network, catalog, data protection / DR, alerts, LCM upgrades, and capacity.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Nutanix AIops list all VMs in Prism Central"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Nutanix AIops
Audit availability: Real writes require a committed
pendingaudit row and stop before contacting the platform if storage is unavailable. Reads and previews may continue with a warning; new audit rows store outcome summaries rather than full responses.
Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by Nutanix. Product and trademark names belong to their owners. MIT licensed.
Governed AI-ops for Nutanix Prism Central (v4 REST API) — clusters, hosts,
VMs (AHV + ESXi), storage, network, catalog, data protection / DR, alerts, LCM
upgrades, and capacity — with a built-in governance harness: unified audit
log, token/runaway budget guard, undo-token recording, and descriptive
risk-tier labels. Connects to Prism Central on HTTPS :9440 with
HTTP Basic auth (username + encrypted password). Self-contained: no dependencies
beyond httpx and the MCP SDK.
Why this over a read-only Nutanix MCP
Automatic ETag / If-Match on every mutation. The v4 API rejects an update or delete without the entity's current ETag — the classic footgun. This tool fetches and sends
If-Matchfor you.Automatic pagination — list tools walk every v4 page for you, and return a
{"<items>": [...], "returned", "limit", "truncated"}envelope so a capped read announces itself instead of looking like the whole estate.Absent is not empty — a field Prism Central did not return comes back as
null, never as"". v4 omits a lot of fields; the two facts stay distinct.Mixed-hypervisor VM listing —
vm_listreturns both AHV and ESXi guests under the same Prism Central (built for hypervisor-migration estates).Governance harness — audit / token+call budget / descriptive risk-tier labels / undo-token / prompt-injection sanitize, with dry-run + double-confirm on destructive writes.
Related MCP server: nutanix-mcp
What this tool does, and does not, decide
It delivers Nutanix Prism Central operations — reads and writes — accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the account you connect it with: connect with a Prism Central account holding only a read-only (Viewer) role, and the writes fail at the server — the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure. The
one thing the tool guarantees is that nothing is silent: every call, over MCP and
over the CLI alike, lands an audit row in ~/.nutanix-aiops/audit.db, and
destructive writes still capture their before-state and record an inverse where one
exists.
Each tool declares a
risk_level, carried into the audit row as a descriptive tier (none/confirm/review) — so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.
Running a smaller / local model? See agent-guardrails.md — it lists the guardrails this tool now enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.
Capability matrix (51 MCP tools)
Group | Tools | Count | R/W |
Clusters |
| 4 | 4 read |
VMs |
| 11 | 2 read · 9 write |
Storage |
| 4 | 1 read · 3 write |
Network |
| 4 | 2 read · 2 write |
Catalog |
| 5 | 2 read · 3 write |
Data protection / DR |
| 8 | 3 read · 5 write |
Alerts |
| 6 | 4 read · 2 write |
LCM (upgrades) |
| 3 | 1 read · 2 write |
Capacity |
| 2 | 2 read |
Diagnostics / RCA |
| 2 | 2 read |
Undo |
| 2 | 1 read · 1 write |
Total | 51 | 24 read · 27 write |
Diagnostics / RCA are the flagship reads. cluster_health_rca ranks the whole
estate — degraded fault-tolerance state, storage pools and containers over 80%
(warning) / 90% (critical), nodes not healthy or missing from inventory —
worst-first, each finding citing the measured percentage or raw Prism state that
tripped it. alert_triage_rca groups active alerts by severity with a count per
level, flags unacknowledged criticals, and surfaces the oldest unresolved alert
with its age. Both are read-only (risk_level="low") and deterministic — no
clock, no randomness, same input → same answer. analyze_alert complements them
at the single-alert level: it correlates an alert with its related
events into a probable-cause + suggested-actions summary. High-risk writes
(vm_delete, vm_migrate, storage_container_delete, subnet_delete,
snapshot_delete, snapshot_restore, pd_failover, image_delete,
lcm_update) support dry_run and, at the CLI, double confirmation.
Install
uv tool install nutanix-aiops # or: pipx install nutanix-aiopsQuick start
As a Claude Code plugin
One install gives an agent both the skill and the MCP server:
/plugin marketplace add AIops-tools/marketplace
/plugin install nutanix-aiops@aiops-toolsThe MCP server is fetched with uv and pinned to the
package version this plugin declares, so an audit row can be traced back to the
code that wrote it. Credentials are still configured with nutanix-aiops init — see below.
As an OpenClaw plugin
The same bundle is published on ClawHub, where one install delivers the skill and its MCP server together:
openclaw plugins install clawhub:@zw008/nutanix-aiops
openclaw skills info nutanix-aiops # expect: Visible to model: yesRestart the OpenClaw gateway afterwards so it loads the plugin. The MCP server is
fetched with uv, pinned to this exact release, so
uvx has to be on PATH — without it the skill still installs but reports
Visible to model: no. Credentials are configured exactly as below.
As a CLI or standalone MCP server
nutanix-aiops init # wizard: PC host / port 9440 / username / verify_ssl + encrypted password
nutanix-aiops doctor # config, secrets, connectivity + REST-RBAC preflight
nutanix-aiops overview # one-shot estate summary
nutanix-aiops diagnose cluster-health # worst-first RCA: resiliency, storage, nodes
nutanix-aiops vm list # AHV + ESXi VMsRun as an MCP server (stdio):
export NUTANIX_AIOPS_MASTER_PASSWORD=... # unlock the encrypted secret store non-interactively
nutanix-aiops mcpWhere that password then lives: an exported variable is readable by every process this shell starts and is recorded by shell history. On a shared or long-lived host, prefer the interactive prompt, or inject it from a secret manager for the life of the one command that needs it.
CLI
nutanix-aiops (Typer): init, overview, doctor, mcp; cluster list/health/hosts/util; vm list/get/power/delete/migrate (delete & migrate
take --dry-run + double confirm); diagnose cluster-health, diagnose alert-triage; secret set/list/rm/migrate/rotate-password.
The CLI is a convenience subset — the full 51-tool surface is via the MCP server.
Governance
Every MCP tool passes through the bundled @governed_tool harness:
Audit — every call (params, outcome summary, status, duration, risk tier, and any operator-supplied approver/rationale) is logged to
~/.nutanix-aiops/audit.db(relocatable viaNUTANIX_AIOPS_HOME). The CLI writes the same row the MCP path does — there is no unaudited entry point.Runaway guard — a safety backstop, not an authorization gate: the same call hammered in a tight loop trips a circuit breaker. Disable with
NUTANIX_RUNAWAY_MAX=0; optional hard ceilings viaNUTANIX_MAX_TOOL_CALLS/NUTANIX_MAX_TOOL_SECONDS.Undo recording — reversible writes record an inverse descriptor built from the fetched before-state (
vm_update→ prior CPU/memory,vm_migrate→ prior host).Risk tier — a descriptive label on the audit row derived from
risk_level; it gates nothing.
Credentials
The Prism Central password is stored encrypted in
~/.nutanix-aiops/secrets.enc (Fernet + scrypt) — never plaintext on disk.
Unlock with a master password from NUTANIX_AIOPS_MASTER_PASSWORD (MCP/CI) or an
interactive prompt (CLI). The non-secret connection details (host, port,
username, verify_ssl) live in ~/.nutanix-aiops/config.yaml. A legacy plaintext
env var NUTANIX_<TARGET>_PASSWORD is honoured as a fallback.
Gotcha: the Prism Central account needs REST API rights, not just Web UI access.
doctor's REST-RBAC preflight catches this early.
Supported scope & limitations
Validation status. All behaviour is currently validated against mocked v4 REST responses; it has not yet been run against a live Prism Central. The fastest live check is
nutanix-aiops doctor. Seedocs/VERIFICATION.mdfor the full live-verification checklist.Self-testable free on Nutanix Community Edition (CE): a single-node CE cluster + an X-Small Prism Central VM.
Least-verified paths: LCM update (
lcm_update), protection-domain failover (pd_failover), and ESXi-VM listing in particular need live validation.Out of scope this release: IAM / users / roles, Files / Objects / Volumes services, reports, X-Play playbooks, and anything outside Prism Central v4.
Missing a capability?
Missing a tool, an API dialect, or a workflow? Open an issue or PR — feedback and contributions are welcome.
Available Tools
51 toolsalert_acknowledgeADestructive
[WRITE][risk=medium] Acknowledge an alert. Auto-handles ETag; captures prior state.
Args:
alert_ext_id: Alert extId as returned by alert_list.
target: Prism Central target name from config; omit for the default.
Inputs: alert_ext_id (required), target.
alert_listARead-only
[READ] List alerts (extId, title, severity, impact, ack/resolved, affected entity).
Args:
severity: Filter to one severity (e.g. CRITICAL); omit for all severities.
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target, severity.
alert_resolveADestructive
[WRITE][risk=medium] Resolve an alert. Auto-handles ETag; captures prior state.
Args:
alert_ext_id: Alert extId as returned by alert_list.
target: Prism Central target name from config; omit for the default.
Inputs: alert_ext_id (required), target.
alert_triage_rcaARead-only
[READ] Triage active Prism alerts: per-severity counts + oldest unresolved.
Groups every unresolved alert by severity with a count per level, flags
critical alerts nobody has acknowledged, and surfaces the oldest unresolved
alert with its age in days (aged against the newest alert in the same feed,
so the analysis is clock-free and reproducible). Use analyze_alert on an
individual extId for the per-alert event correlation.
Args:
target: Prism Central target name from config; omit for the default.
Inputs: target.
analyze_alertARead-only
[READ] Root-cause analysis: correlate an alert with recent same-entity events.
Returns a probable cause and suggested actions plus the related events. Resilient
and deterministic — safe to run on a live, alerting cluster.
Args:
alert_ext_id: Alert extId as returned by alert_list.
target: Prism Central target name from config; omit for the default.
Inputs: alert_ext_id (required), target.
audit_listBRead-only
[READ] List config audit records (extId, operation type, user, creation time).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
capacity_runwayARead-only
[READ] Deterministic storage-runway estimate for a cluster (days-to-full).
Supply daily_growth_bytes (bytes/day) to project daysToFull; without it the
forecast is 'insufficient-data'. No clock or randomness — same inputs, same
answer.
Args:
cluster_ext_id: Cluster extId as returned by cluster_list.
daily_growth_bytes: Assumed daily storage growth in bytes (omit to skip forecast).
target: Prism Central target name from config; omit for the default.
Inputs: cluster_ext_id (required), target, daily_growth_bytes.
category_assignADestructive
[WRITE][risk=medium] Bulk-associate a category to a set of VMs.
Args:
category_ext_id: Category extId as returned by category_list.
vm_ext_ids: VM extIds (from vm_list) to associate the category with.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_ids (required), category_ext_id (required), target.
category_createBDestructive
[WRITE][risk=medium] Create a category key/value pair.
Args:
key: Category key (e.g. "Environment").
value: Category value (e.g. "Production").
description: Optional human-readable description.
target: Prism Central target name from config; omit for the default.
Inputs: key (required), value (required), target, description.
category_listARead-only
[READ] List categories (extId, key, value, description).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
cluster_healthARead-only
[READ] One cluster's health: services, resiliency/fault-tolerance, upgrade state.
Args:
cluster_ext_id: Cluster extId as returned by cluster_list.
target: Prism Central target name from config; omit for the default.
Inputs: cluster_ext_id (required), target.
cluster_health_rcaARead-only
[READ] Estate health RCA: resiliency state, storage headroom, nodes down.
Collects every cluster's health + utilization, all hosts, and all storage
containers, then reports worst-first findings: degraded fault-tolerance
state, cluster storage pools or containers over 80% (warning) / 90%
(critical), hosts whose nodeStatus is not healthy, and clusters reporting
fewer visible hosts than their nodeCount. Every finding cites the measured
percentage or the raw Prism state string that tripped it.
Args:
target: Prism Central target name from config; omit for the default.
Inputs: target.
cluster_listARead-only
[READ] List registered clusters (extId, name, AOS version, hypervisors, nodes).
Call this first — most other tools need a clusterExtId from here.
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
cluster_utilizationBRead-only
[READ] Point-in-time CPU / memory / storage / IOPS utilization for a cluster.
Args:
cluster_ext_id: Cluster extId as returned by cluster_list.
target: Prism Central target name from config; omit for the default.
Inputs: cluster_ext_id (required), target.
event_listARead-only
[READ] List events (extId, title, creation time, source entity).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
host_listARead-only
[READ] List hosts across all clusters (extId, cluster, hypervisor, CPU/mem).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
image_deleteADestructive
[WRITE][risk=high] Delete an image. Destructive — pass dry_run=True to preview first.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why. Captures the image's
prior name on the audit trail.
Args:
ext_id: Image extId as returned by image_list.
dry_run: If True, return what WOULD be deleted without deleting.
target: Prism Central target name from config; omit for the default.
Inputs: ext_id (required), target, dry_run.
image_listARead-only
[READ] List content-library images (extId, name, type, size, cluster placement).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
lcm_inventoryARead-only
[READ] List LCM-managed entities: current/available versions and updateAvailable.
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
lcm_precheckBDestructive
[WRITE][risk=medium] Run LCM prechecks for entities on a cluster (read-safe validation).
Args:
cluster_ext_id: Cluster extId as returned by cluster_list.
entity_ext_ids: LCM entity extIds (from lcm_inventory) to precheck.
target: Prism Central target name from config; omit for the default.
Inputs: cluster_ext_id (required), entity_ext_ids (required), target.
lcm_updateADestructive
[WRITE][risk=high] Perform an LCM firmware/software update. Pass dry_run=True to preview.
Destructive and NOT undoable — tagged risk=high (audit tier 'review');
NUTANIX_AUDIT_APPROVED_BY / NUTANIX_AUDIT_RATIONALE optionally annotate
who/why. Requires a precheck that passed: run lcm_precheck first and pass
the taskExtId it returned. The update is refused without it. The dry_run
preview enforces the same requirement, so a preview can never report an
update the real call would refuse.
Args:
cluster_ext_id: Cluster extId as returned by cluster_list.
entity_ext_ids: LCM entity extIds (from lcm_inventory) to update.
precheck_task_ext_id: taskExtId returned by lcm_precheck for these entities,
once that task has reached SUCCEEDED (check with task_list). Required —
the update is refused without it.
dry_run: If True, return what WOULD be updated without updating.
target: Prism Central target name from config; omit for the default.
Inputs: cluster_ext_id (required), entity_ext_ids (required), target, dry_run, +1 more.
pd_failoverADestructive
[WRITE][risk=high] Fail a protection domain over to a target cluster (DR event).
Destructive DR operation; pass dry_run=True to preview. Tagged risk=high
(audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY / NUTANIX_AUDIT_RATIONALE
optionally annotate who/why.
Args:
policy_ext_id: Protection policy extId as returned by protection_domain_list.
cluster_ext_id: Target cluster extId (from cluster_list).
dry_run: If True, preview the failover without performing it.
target: Prism Central target name from config; omit for the default.
Inputs: policy_ext_id (required), cluster_ext_id (required), target, dry_run.
protection_domain_listARead-only
[READ] List protection domains / policies (extId, name, replicationType).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
recovery_point_listARead-only
[READ] List recovery points (extId, vmExtId, create/expiration time, locationType).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
snapshot_createADestructive
[WRITE][risk=medium] Snapshot a VM (reversible → delete the snapshot). Auto-handles ETag.
Args:
vm_ext_id: VM extId as returned by vm_list.
name: Name for the new snapshot.
target: Prism Central target name from config; omit for the default.
Inputs: name (required), vm_ext_id (required), target.
snapshot_deleteADestructive
[WRITE][risk=high] Delete a VM snapshot. Destructive — pass dry_run=True to preview.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why. Captures the
snapshot's prior name on the audit trail.
Args:
vm_ext_id: VM extId as returned by vm_list.
snapshot_ext_id: Snapshot extId as returned by snapshot_list.
dry_run: If True, return what WOULD be deleted without deleting.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), snapshot_ext_id (required), target, dry_run.
snapshot_listARead-only
[READ] List a VM's snapshots (extId, name, createTime) — spot lingering snapshots.
Args:
vm_ext_id: VM extId as returned by vm_list.
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), limit, target.
snapshot_restoreADestructive
[WRITE][risk=high] Revert a VM to a snapshot. Destructive & NOT undoable — preview first.
Reverting overwrites the VM's current state; pass dry_run=True to preview.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why.
Args:
vm_ext_id: VM extId as returned by vm_list.
snapshot_ext_id: Snapshot extId as returned by snapshot_list.
dry_run: If True, preview the revert without performing it.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), snapshot_ext_id (required), target, dry_run.
storage_container_createADestructive
[WRITE][risk=medium] Create a storage container on a cluster.
Args:
name: New storage container name.
cluster_ext_id: Target cluster extId (from cluster_list).
replication_factor: Copies kept per block (default 2).
target: Prism Central target name from config; omit for the default.
Inputs: name (required), cluster_ext_id (required), target, replication_factor.
storage_container_deleteADestructive
[WRITE][risk=high] Delete a storage container. Destructive — pass dry_run=True first.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why. Captures the
container's prior capacity/RF on the audit trail.
Args:
ext_id: Storage container extId as returned by storage_container_list.
dry_run: If True, return what WOULD be deleted without deleting.
target: Prism Central target name from config; omit for the default.
Inputs: ext_id (required), target, dry_run.
storage_container_listARead-only
[READ] List storage containers (extId, name, cluster, capacity, usage, RF).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
storage_container_updateADestructive
[WRITE][risk=medium] Resize a container's capacity / replication (reversible → prior).
Args:
ext_id: Storage container extId as returned by storage_container_list.
max_capacity_bytes: New max capacity in bytes (omit to leave unchanged).
replication_factor: New replication factor (omit to leave unchanged).
target: Prism Central target name from config; omit for the default.
Inputs: ext_id (required), target, max_capacity_bytes, replication_factor.
subnet_createADestructive
[WRITE][risk=medium] Create a subnet on a cluster.
Args:
name: New subnet name.
cluster_ext_id: Target cluster extId (from cluster_list).
vlan_id: VLAN / network id for the subnet.
subnet_type: Subnet type (default VLAN).
target: Prism Central target name from config; omit for the default.
Inputs: name (required), vlan_id (required), cluster_ext_id (required), target, +1 more.
subnet_deleteADestructive
[WRITE][risk=high] Delete a subnet. Destructive — pass dry_run=True to preview first.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why. Irreversible, so the
audit trail captures the subnet's full prior state (name, description, type,
VLAN id, cluster, IP config and pools).
Args:
ext_id: Subnet extId as returned by subnet_list.
dry_run: If True, return what WOULD be deleted without deleting.
target: Prism Central target name from config; omit for the default.
Inputs: ext_id (required), target, dry_run.
subnet_getARead-only
[READ] One subnet by extId, with its current ETag surfaced for downstream writes.
Args:
ext_id: Subnet extId as returned by subnet_list.
target: Prism Central target name from config; omit for the default.
Inputs: ext_id (required), target.
subnet_listARead-only
[READ] List subnets (extId, name, type, VLAN, cluster, IP config).
Args:
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target.
task_listARead-only
[READ] List Prism Central tasks (extId, operation, status, %complete, entity).
Args:
status: Optional status filter, e.g. RUNNING / SUCCEEDED / FAILED.
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, status, target.
undo_applyADestructive
[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.
The inverse runs through its own governed tool, so its real risk tier is
tagged on its own audit row there. Pass dry_run=True to preview the
inverse call without executing it. A token can only be applied once.
Args:
undo_id: The undoId from undo_list (or an ``_undo_id`` in a write result).
dry_run: If True, preview the inverse tool + params without running it.
target: Passed through to the inverse tool when it accepts a target.
Inputs: undo_id (required), target, dry_run.
undo_listARead-only
[READ] List recorded, not-yet-applied undo tokens (most recent first).
Each entry names the original tool, the inverse tool that ``undo_apply``
would run, and a human note. Use the ``undoId`` with ``undo_apply``.
``truncated`` is measured — one extra row is fetched — so a capped listing
announces itself instead of looking like the complete set.
Each entry carries ``effectVerified``. False means the original write
lost its response, so the change it reverses is PROBABLE, not confirmed —
check the live state before applying, and do not report the result as a
restore of a state that may never have been reached.
Args:
limit: Max rows to return (default 50). Re-run with a higher limit when
the result reports ``truncated: true``.
target: Unused (undo state is host-local); accepted for CLI uniformity.
Inputs: limit, target.
vm_cloneBDestructive
[WRITE][risk=medium] Clone a VM to a new name.
Args:
vm_ext_id: Source VM extId as returned by vm_list.
new_name: Name for the clone.
target: Prism Central target name from config; omit for the default.
Inputs: new_name (required), vm_ext_id (required), target.
vm_createADestructive
[WRITE][risk=medium] Create a minimal VM on a cluster.
Args:
name: New VM name.
cluster_ext_id: Target cluster extId (from cluster_list).
num_sockets: vCPU sockets (default 1).
memory_bytes: RAM in bytes (default 4 GiB).
target: Prism Central target name from config; omit for the default.
Inputs: name (required), cluster_ext_id (required), target, num_sockets, +1 more.
vm_deleteADestructive
[WRITE][risk=high] Delete a VM. Destructive — pass dry_run=True to preview first.
Tagged risk=high (audit tier 'review'); NUTANIX_AUDIT_APPROVED_BY /
NUTANIX_AUDIT_RATIONALE optionally annotate who/why. Captures the VM's
prior name/power state on the audit trail.
Args:
vm_ext_id: VM extId as returned by vm_list.
dry_run: If True, return what WOULD be deleted without deleting.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, dry_run.
vm_getARead-only
[READ] One VM by extId, with its current ETag surfaced for downstream writes.
Args:
vm_ext_id: VM extId as returned by vm_list.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target.
vm_guest_shutdownADestructive
[WRITE][risk=medium] Graceful in-guest shutdown (reversible → power-on).
Args:
vm_ext_id: VM extId as returned by vm_list.
dry_run: If True, preview it (runs the self-lockout guard) without shutting down.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, dry_run.
vm_listARead-only
[READ] List VMs — AHV and (by default) ESXi-backed too; hypervisor field distinguishes.
AHV and ESXi are read from separate endpoints. If the ESXi read fails, the
AHV rows are still returned with `esxiError` set and `truncated: null`
(completeness unknown) — a partial list, not "no ESXi VMs".
Args:
include_esxi: Include ESXi-backed VMs Prism Central can see (default True).
limit: Max rows to return (default 500). The result reports
`returned`, `limit`, and `truncated` so a capped read is visible.
target: Prism Central target name from config; omit for the default.
Inputs: limit, target, include_esxi.
vm_migrateADestructive
[WRITE][risk=high] Live-migrate a VM to another host (reversible → prior host).
Pass dry_run=True to preview. Tagged risk=high (audit tier 'review');
NUTANIX_AUDIT_APPROVED_BY / NUTANIX_AUDIT_RATIONALE optionally annotate
who/why.
Args:
vm_ext_id: VM extId as returned by vm_list.
target_host_ext_id: Destination host extId (from host_list).
dry_run: If True, preview the migration without performing it.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target_host_ext_id (required), target, dry_run.
vm_power_offADestructive
[WRITE][risk=medium] Hard power off a VM (reversible → power-on).
Args:
vm_ext_id: VM extId as returned by vm_list.
dry_run: If True, preview it (runs the self-lockout guard) without powering off.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, dry_run.
vm_power_onADestructive
[WRITE][risk=medium] Power on a VM (reversible → power-off). Auto-handles ETag.
Args:
vm_ext_id: VM extId as returned by vm_list.
dry_run: If True, return what WOULD be powered on without doing it.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, dry_run.
vm_protectADestructive
[WRITE][risk=medium] Associate a VM with a protection policy.
Args:
vm_ext_id: VM extId as returned by vm_list.
policy_ext_id: Protection policy extId as returned by protection_domain_list.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), policy_ext_id (required), target.
vm_rebootADestructive
[WRITE][risk=medium] Reboot a VM (no distinct inverse).
Args:
vm_ext_id: VM extId as returned by vm_list.
dry_run: If True, return what WOULD be rebooted without doing it.
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, dry_run.
vm_updateADestructive
[WRITE][risk=medium] Resize a VM's CPU sockets / memory (reversible → prior values).
Args:
vm_ext_id: VM extId as returned by vm_list.
num_sockets: New vCPU socket count (omit to leave unchanged).
memory_bytes: New RAM in bytes (omit to leave unchanged).
target: Prism Central target name from config; omit for the default.
Inputs: vm_ext_id (required), target, num_sockets, memory_bytes.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 51 tools
Every tool targets a distinct resource/action, covering VMs, alerts, clusters, snapshots, subnets, storage containers, LCM, categories, images, undo, and RCA separately. The closest overlaps (vm_power_off vs vm_guest_shutdown, cluster_health vs cluster_health_rca, alert_list vs analyze_alert vs alert_triage_rca) are clearly differentiated by descriptions.
Names are overwhelmingly snake_case and follow a resource_action convention (vm_create, subnet_delete, storage_container_update). Minor deviations exist: analyze_alert is verb-first, while capacity_runway, cluster_health, and cluster_utilization are noun phrases, and pd_failover abbreviates protection_domain.
51 tools far exceeds the 3-15 well-scoped range and lands in the rubric's 50+ extreme-mismatch band. Although the Nutanix estate is broad, the set includes many thin read/write/RCA operations that would overwhelm tool selection.
The surface covers core Nutanix operational workflows: VM lifecycle/power/migration, snapshots, alerts, clusters, storage containers, subnets, LCM, categories, and undo. Gaps remain, such as subnet update, category unassign/delete, image create/update, protection-domain CRUD, and richer VM NIC/disk operations, but agents can work around most of these.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to manage Nutanix infrastructure via Prism Central and Prism Element APIs, including VM operations, cluster management, networking, and as-built report generation.28AGPL 3.0
- AlicenseAqualityDmaintenanceMCP server for Nutanix Prism Central v4 REST API, enabling AI agents to list and inspect VMs, control VM power state, list clusters, read alerts, and list subnets.8MIT
- AlicenseAqualityBmaintenanceAI-powered MCP server for managing Proxmox VE VMs and containers with built-in governance, audit logging, and reversibility.435MIT
- AlicenseAqualityAmaintenanceAI-powered Veeam Backup & Replication operations MCP server with tools for managing jobs, restores, sessions, and repositories, featuring built-in governance, audit logging, and safety controls.27MIT