VMware Aria Operations
Disclaimer: This is a community-maintained open-source project and is not affiliated with, endorsed by, or sponsored by VMware, Inc. or Broadcom Inc. "VMware" and "Aria" are trademarks of Broadcom. Source code is publicly auditable at github.com/vmware-skills/VMware-Aria under the MIT license.
VMware Aria Operations (vRealize Operations / VCF Operations 9.1) AI-assisted monitoring — 33 MCP tools for resources, alerts, alert definitions, capacity planning, anomaly detection, report automation, platform health, and VCF 9.1 fleet certificates/passwords/domains, diagnostic findings, and real-time PromQL metrics.
Domain-focused monitoring skill for Aria Operations 8.x / vRealize Operations 8.x.
Companion skills: vmware-nsx (networking), vmware-aiops (VM lifecycle), vmware-monitor (read-only vSphere), vmware-avi (AVI/ALB/AKO), vmware-harden (compliance baselines).
| vmware-pilot (workflow orchestration) | vmware-policy (audit/policy)
What This Skill Does
| Category |
Tools |
Count |
| Resources |
list, get details, metrics, health badge, top consumers |
5 |
| Alerts |
list, get details, investigate (alert→resource), acknowledge, cancel, list definitions |
6 |
| Alert Definitions |
list symptoms, create definition, enable/disable, delete |
4 |
| Capacity |
cluster overview, remaining capacity, time remaining, rightsizing |
4 |
| Reports |
list templates, generate, list, get status+download URL, delete |
5 |
| Anomaly |
list anomalies, risk badge |
2 |
| Health |
Aria platform health, collector group status |
2 |
| Fleet / PromQL (VCF Ops 9.1) |
fleet certificates, password accounts, VCF domains, diagnostic findings, real-time PromQL query |
5 |
Total: 33 tools (26 read-only + 7 write)
Quick Install
uv tool install vmware-aria
vmware-aria init # guided setup: writes config + .env (chmod 600, password grep-safe), then verifies
vmware-aria doctor
When to Use This Skill
Performance monitoring (daily proactive checks):
- Check VM contention: CPU Ready %, Memory Balloon, Swap usage
- Fetch time-series metrics for any resource (CPU, memory, disk, network)
- Find top consumers by CPU/memory/disk/network
- Check per-resource anomaly counts and risk badge scores
Alert management:
- List, investigate, acknowledge, or cancel active alerts
- List or filter alert definitions (templates)
- Create new alert definitions from symptom definitions (post-RCA)
- Enable or disable alert definitions; delete obsolete ones
Capacity planning:
- Cluster capacity remaining (CPU, memory, disk headroom)
- Time-until-full prediction per cluster
- Right-sizing: find over-provisioned or under-utilized VMs
- Capacity overview with Aria's built-in recommendations
Report automation:
- Generate scheduled or on-demand reports (capacity, performance, SLA)
- Poll report status until COMPLETED; get PDF/CSV download URL
- Delete generated reports after download
Use companion skills for:
- VM lifecycle: create, clone, snapshot, power →
vmware-aiops
- NSX networking: segments, gateways, NAT, routing →
vmware-nsx
- vSphere inventory, real-time alarms, events →
vmware-monitor
- Storage: iSCSI, vSAN, datastores →
vmware-storage
- Load balancing, AVI/ALB, AKO, Ingress →
vmware-avi
Related Skills — Skill Routing
| User Intent |
Recommended Skill |
| Aria Operations monitoring, alerts, capacity |
vmware-aria ← this skill |
| VM lifecycle, deployment, guest ops |
vmware-aiops |
| NSX networking: segments, gateways, NAT, routing |
vmware-nsx |
| Read-only vSphere inventory, events, alarms |
vmware-monitor |
| Storage: iSCSI, vSAN, datastores |
vmware-storage |
| Multi-step workflows with approval |
vmware-pilot |
| Compliance baselines (CIS / 等保 / PCI-DSS), drift detection, LLM remediation advisor |
vmware-harden (uv tool install vmware-harden) |
| Load balancer, AVI, ALB, AKO, Ingress |
vmware-avi (uv tool install vmware-avi) |
| Audit log query |
vmware-policy (vmware-audit CLI) |
Common Workflows
Diagnostic investigations: Before running any "why is X slow / failing / down" workflow, follow references/investigation-protocol.md. It enforces the four root-cause completeness criteria (falsifiability / sufficiency / necessity / mechanism) and the up-to-three-rounds deepening loop. Stopping at a partial conclusion is an anti-pattern — always self-check against the criteria before outputting a report.
Daily VM Health Check (Proactive Ops)
Judgment: don't chase the highest CPU consumer — chase the highest contention consumer. A VM at 90% CPU on a quiet host is healthy; a VM at 30% CPU but 15% Ready is starving. Key metrics: CPU Ready, Memory Balloon, Disk Latency.
- Find top CPU consumers →
vmware-aria resource top --metric cpu|usage_average --top 20 (this is the starting set, not the answer)
- Check CPU Ready on hot VMs →
vmware-aria resource metrics <vm-id> --metrics cpu.ready.summation --hours 24
5% = warning, >10% = problem, >20% = critical
- Check memory pressure →
vmware-aria resource metrics <vm-id> --metrics mem.balloon.average,mem.swapped.average --hours 24
- Balloon >0 = ESXi reclaiming memory; Swap >0 = severe — act immediately
- List active CRITICAL/IMMEDIATE alerts →
vmware-aria alert list --criticality CRITICAL
- Check anomaly counts →
vmware-aria anomaly list
- Cross-validate against the investigation protocol before reporting any "root cause" — high consumption is rarely the root, usually a downstream symptom
Investigate High CPU Alert
- List active CRITICAL alerts →
vmware-aria alert list --criticality CRITICAL
- Get alert details + symptoms →
vmware-aria alert get <alert-id>
- Find top CPU consumers →
vmware-aria resource top --metric cpu|usage_average
- Fetch 24h CPU metrics for the hot VM →
vmware-aria resource metrics <vm-id> --metrics cpu|usage_average --hours 24
- Check risk badge →
vmware-aria anomaly risk <vm-id>
- Acknowledge the alert →
vmware-aria alert acknowledge <alert-id>
Capacity Planning
- List clusters →
vmware-aria resource list --kind ClusterComputeResource
- Get remaining capacity →
vmware-aria capacity remaining <cluster-id>
- Predict time until full →
vmware-aria capacity time-remaining <cluster-id>
- Get capacity overview with recommendations →
vmware-aria capacity overview <cluster-id>
- Find rightsizing candidates →
vmware-aria capacity rightsizing
Post-Incident: Create Detection Alert (RCA Follow-up)
After resolving an incident, create an early-warning alert to prevent recurrence. Alert definition management is MCP-only (no CLI subcommands):
- Find matching symptom definitions → MCP
list_symptom_definitions (filter by name_filter / resource_kind)
- Create alert definition referencing symptoms → MCP
create_alert_definition with name, resource_kind, symptom_definition_ids, criticality (any one symptom firing triggers the alert)
- Verify it appears in definitions →
vmware-aria alert definitions --name "Gold VM CPU" (criticality shown is the max severity across the definition's states)
- Enable or disable later → MCP
set_alert_definition_state
Generate Capacity Report
- Find report template →
vmware-aria report definitions --name "Capacity"
- Trigger report generation →
vmware-aria report generate <definition-id> --resources <resource-id> (the Report API requires at least one resource UUID)
- Poll until completed →
vmware-aria report get <report-id> (repeat until status == COMPLETED)
- Download via the returned
download_url (PDF) or csv_url
- Clean up →
vmware-aria report delete <report-id>
Multi-Target Operations
All commands accept --target <name> to operate against a specific Aria Ops instance:
vmware-aria alert list --target prod
vmware-aria resource top --target lab
Usage Mode
| Scenario |
Recommended |
Why |
| Local/small models (Ollama, Qwen) |
CLI |
~2K tokens vs ~8K for MCP |
| Cloud models (Claude, GPT-4o) |
Either |
MCP gives structured JSON I/O |
| Automated pipelines |
MCP |
Type-safe parameters, structured output |
Running vmware-aria with a local or small model? See references/agent-guardrails.md for tool-calling guardrails (alert-to-resource correlation and Aria data fidelity).
MCP Tools (33 — 26 read, 7 write)
All MCP tools accept an optional target parameter to select which Aria Operations instance to connect to.
| Category |
Tool |
Type |
Description |
| Resource |
list_resources |
Read |
List VMs, hosts, clusters by resource kind |
|
get_resource |
Read |
Get resource details with health, risk, efficiency badges |
|
get_resource_metrics |
Read |
Fetch time-series metric stats for any resource |
|
get_resource_health |
Read |
Get health badge score (0–100) |
|
get_top_consumers |
Read |
Rank resources by CPU, memory, disk, or network usage |
| Alerts |
list_alerts |
Read |
List active alerts with criticality and resource ID (resolve names via get_resource) |
|
get_alert |
Read |
Get alert details with contributing symptoms (recommendations live on the alert definition) |
|
investigate_alert |
Read |
Resolve an alert to its confirmed affected resource in one call — returns both UUIDs explicitly labelled plus the vmware-monitor handoff |
|
acknowledge_alert |
Write |
Mark an alert as acknowledged (does not close it) |
|
cancel_alert |
Write |
Cancel (dismiss) an active alert |
|
list_alert_definitions |
Read |
List alert templates configured in Aria Ops |
| Alert Defs |
list_symptom_definitions |
Read |
List symptom definitions — use IDs when creating alert defs |
|
create_alert_definition |
Write |
Create new alert definition from symptom definition IDs |
|
set_alert_definition_state |
Write |
Enable or disable an alert definition |
|
delete_alert_definition |
Write |
Delete an alert definition permanently |
| Capacity |
get_capacity_overview |
Read |
Group-level remaining % + per-dimension headroom and days-until-full |
|
get_remaining_capacity |
Read |
Remaining CPU, memory, disk before hitting limits |
|
get_time_remaining |
Read |
Days until cluster capacity is exhausted |
|
list_rightsizing_recommendations |
Read |
VMs to resize: over/under-provisioned |
| Reports |
list_report_definitions |
Read |
List available report definition templates |
|
generate_report |
Write |
Trigger report generation (async; returns report_id) |
|
list_reports |
Read |
List generated reports, optionally by definition |
|
get_report |
Read |
Poll report status + get PDF/CSV download URLs |
|
delete_report |
Write |
Delete a generated report |
| Anomaly |
list_anomalies |
Read |
Per-resource anomaly counts (System Attributes|total_alarms metric) |
|
get_resource_riskbadge |
Read |
Risk score (0–100): likelihood of future problems |
| Health |
get_aria_health |
Read |
Aria platform node status (ONLINE/OFFLINE) |
|
list_collector_groups |
Read |
Collector agents status and connectivity |
| Fleet / PromQL (VCF Ops 9.1) |
fleet_certificate_list |
Read |
Certificate status/expiry across the VCF fleet |
|
fleet_password_account_list |
Read |
Managed password-account status (read-only; does not rotate) |
|
fleet_domain_list |
Read |
SDDC/workload domains behind one registered VCF integration |
|
findings_list |
Read |
Operations diagnostic findings (not compliance — see vmware-harden) |
|
promql_query |
Read |
Real-time PromQL instant query via the VODAP service (base path INFERRED, unverified on real hardware) |
Read/write split: 26 read-only, 7 write. All write operations are audit-logged to ~/.vmware/audit.db (via vmware-policy).
List results are envelopes — read truncated before you summarise
Every list-returning tool above (list_resources, get_top_consumers, list_alerts, list_alert_definitions, list_symptom_definitions, list_rightsizing_recommendations, list_report_definitions, list_reports, list_anomalies, list_collector_groups) returns an object, not a bare array:
{
"items": [ ... ],
"returned": 50,
"limit": 50,
"total": 213,
"truncated": true,
"hint": "Showing 50 of 213. Raise limit or narrow the query with a filter to see the rest."
}
Rules:
- Rows live under
items. An empty items with returned: 0 means the query genuinely matched nothing — report that, do not report a tool failure.
truncated: true means more rows exist. Never describe such a result as the complete set; either say it is a partial view or re-query with a higher limit or a narrower filter, as hint instructs.
truncated: false means the answer is complete — safe to summarise as the whole picture.
total: null means the API reported no collection size, so a page filled exactly to the limit is flagged truncated conservatively. It may in fact be complete; a follow-up query with a larger limit settles it.
list_anomalies also carries scanned, vm_total and scan_complete — limit bounds the answer, not the scan: the environment is ranked in full and the worst limit objects are returned. It returns only VMs with a non-zero anomaly count, so a short list is not evidence that the environment is clean; check truncated. With scan_complete: true, total is the number of anomalous objects found. With scan_complete: false the scan hit its cap, total is the environment's VM count, and a note says the ranking is partial.
CLI Quick Reference
# Resources
vmware-aria resource list [--kind VirtualMachine|HostSystem|ClusterComputeResource] [--name <filter>]
vmware-aria resource get <resource-id>
vmware-aria resource metrics <resource-id> --metrics cpu|usage_average,mem|usage_average --hours 4
vmware-aria resource metrics <vm-id> --metrics cpu.ready.summation,mem.balloon.average --hours 24
vmware-aria resource health <resource-id>
vmware-aria resource top --metric cpu|usage_average --kind VirtualMachine --top 10
# Alerts
vmware-aria alert list [--criticality CRITICAL|IMMEDIATE|WARNING|INFORMATION]
vmware-aria alert get <alert-id>
vmware-aria alert acknowledge <alert-id>
vmware-aria alert cancel <alert-id>
vmware-aria alert definitions [--name <filter>]
# Alert Definitions: creation/enable/disable/delete and symptom-definition
# lookup are MCP-only tools (list_symptom_definitions, create_alert_definition,
# set_alert_definition_state, delete_alert_definition) — no CLI subcommands.
# Capacity
vmware-aria capacity overview <cluster-id>
vmware-aria capacity remaining <resource-id>
vmware-aria capacity time-remaining <resource-id>
vmware-aria capacity rightsizing [--resource-id <vm-id>]
# Reports (async: generate → poll get → download → delete)
vmware-aria report definitions [--name <filter>]
vmware-aria report generate <definition-id> --resources <id1,id2> # at least one resource UUID required
vmware-aria report list [--definition-id <id>]
vmware-aria report get <report-id> # poll until status == COMPLETED; shows download_url
vmware-aria report delete <report-id>
# Anomaly
vmware-aria anomaly list [--resource-id <id>]
vmware-aria anomaly risk <resource-id>
# Health
vmware-aria health status
vmware-aria health collectors
# Diagnostics
vmware-aria doctor [--skip-auth]
Key Metric Names (for resource metrics command)
| Metric |
API Key |
What It Means |
| CPU Ready % |
cpu.ready.summation |
vCPU waiting for physical core; >5% = warning |
| CPU Used |
cpu.used.summation |
Actual CPU execution time |
| CPU Demand |
cpu.demand.average |
Total MHz requested by VM |
| Memory Active |
mem.active.average |
Actively used by guest OS (sizing) |
| Memory Consumed |
mem.consumed.average |
Footprint on host (capacity) |
| Memory Balloon |
mem.balloon.average |
>0 = ESXi reclaiming memory |
| Memory Swap |
mem.swapped.average |
>0 = severe pressure |
| Disk Read Latency |
disk.read.average |
Read I/O latency ms |
| Disk Write Latency |
disk.write.average |
Write I/O latency ms |
| Net Received |
net.received.average |
Inbound network KB/s |
| Net Transmitted |
net.transmitted.average |
Outbound network KB/s |
Full CLI reference with all options and output formats: see references/cli-reference.md
Troubleshooting
"Token not found" error after setup
The token acquisition request failed. Verify:
- Aria Ops is reachable:
vmware-aria doctor
- The
auth_source in config matches your environment (LOCAL, LDAP, AD)
- The password env var follows the naming convention:
VMWARE_ARIA_<TARGET>_PASSWORD
Resources appear missing from list_resources
The collector agent may be offline. Check list_collector_groups for any collectors in a DOWN state. Restart the affected collector from the Aria Ops UI under Administration > Collector Groups.
Metrics return empty data
The resource may not have metric collection configured, or the requested metric key is incorrect. Verify metric keys against the resource's available metrics in the Aria Ops UI (Metrics tab on the resource detail page).
"Password not found" error
Variable names follow the pattern VMWARE_ARIA_<TARGET_NAME_UPPER>_PASSWORD where hyphens become underscores. Example: target prod needs VMWARE_ARIA_PROD_PASSWORD. Check your ~/.vmware-aria/.env file.
invalid peer certificate: UnknownIssuer when running uvx (corporate TLS proxy)
uvx re-resolves dependencies from PyPI on every launch. Behind a corporate TLS-intercepting proxy whose CA is not in uv's bundled cert store, the handshake fails. Use the v1.5.15+ recommended single-command form vmware-aria mcp (after uv tool install vmware-aria — no network on launch), or set UV_NATIVE_TLS=true to make uv use the system cert store.
Safety
- Read-heavy: 26 of 33 tools are read-only
- Audit logging: Write operations logged to
~/.vmware/audit.db (SQLite WAL, via vmware-policy) with timestamp, user, target, operation, and result
- Token expiry handling: vRealizeOpsToken re-acquired automatically 60 seconds before expiry (6-hour sliding validity, extended on each call)
- Prompt injection defense: API text values sanitized via
_sanitize() — strips control characters, truncates to 500 chars
- Credential safety: Passwords loaded only from environment variables (
.env file), never from config.yaml
- Input validation: resource_id and alert_id validated before API calls; criticality values validated against known enum
Setup
uv tool install vmware-aria
mkdir -p ~/.vmware-aria
cp config.example.yaml ~/.vmware-aria/config.yaml
# Edit config.yaml with your Aria Operations host details
# Add to ~/.vmware-aria/.env (create if missing, chmod 600):
# VMWARE_ARIA_PROD_PASSWORD=<your-password>
chmod 600 ~/.vmware-aria/.env
vmware-aria doctor
All tools are automatically audited via vmware-policy. Audit logs: vmware-audit log --last 20
Full setup guide with multi-target config, MCP server setup, and Docker: see references/setup-guide.md
Architecture
User (natural language)
|
AI Agent (Claude Code / Goose / Cursor)
| reads SKILL.md
vmware-aria CLI or MCP server (stdio transport)
| Aria Operations Suite API (REST/JSON over HTTPS)
| POST /suite-api/api/auth/token/acquire → vRealizeOpsToken
Aria Operations Manager
|
VMs / Hosts / Clusters / Datastores / Alerts / Capacity
The MCP server uses stdio transport (local only, no network listener). Connections to Aria Ops use HTTPS on port 443 with vRealizeOpsToken authentication (6-hour sliding token validity, auto-refreshed).
Audit & Safety
All operations are automatically audited via vmware-policy (@vmware_tool decorator):
- Every tool call logged to
~/.vmware/audit.db (SQLite, framework-agnostic)
- Policy rules enforced via
~/.vmware/rules.yaml (deny rules, maintenance windows, risk levels)
- Risk classification: each tool tagged as low/medium/high/critical
- View recent operations:
vmware-audit log --last 20
- View denied operations:
vmware-audit log --status denied
vmware-policy is automatically installed as a dependency — no manual setup needed.
License
MIT — github.com/vmware-skills/VMware-Aria
1---2name: vmware-aria3description: Use this skill whenever the user needs VMware Aria Operations (rebranded VMware VCF Operations in VCF 9 and later) data — performance metrics, alerts, capacity planning, anomaly detection, and automated reports. Directly handles: query resource metrics, list/acknowledge/cancel alerts, manage alert definitions, check capacity and time-remaining forecasts, detect anomalies, generate and manage reports. Always use this skill for "check vSphere capacity", "what Aria Operations alerts are active", "show VMware anomalies", "generate an Aria report", "rightsizing recommendations", "VCF Operations alerts", or any Aria Operations / VCF Operations / vRealize Operations task. Combined with LLM, Aria data powers natural language reports: "give me a capacity report" → Aria collects data → LLM formats the report. Do NOT use for real-time vCenter alarms/events (use vmware-monitor), VM operations (use vmware-aiops), or NSX networking (use vmware-nsx). For load balancing/AVI/AKO use vmware-avi.4---56# VMware Aria Operations78> **Disclaimer**: This is a community-maintained open-source project and is **not affiliated with, endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" and "Aria" are trademarks of Broadcom. Source code is publicly auditable at [github.com/vmware-skills/VMware-Aria](https://github.com/vmware-skills/VMware-Aria) under the MIT license.910VMware Aria Operations (vRealize Operations / VCF Operations 9.1) AI-assisted monitoring — 33 MCP tools for resources, alerts, alert definitions, capacity planning, anomaly detection, report automation, platform health, and VCF 9.1 fleet certificates/passwords/domains, diagnostic findings, and real-time PromQL metrics.1112> Domain-focused monitoring skill for Aria Operations 8.x / vRealize Operations 8.x.13> **Companion skills**: [vmware-nsx](https://github.com/vmware-skills/VMware-NSX) (networking), [vmware-aiops](https://github.com/vmware-skills/VMware-AIops) (VM lifecycle), [vmware-monitor](https://github.com/vmware-skills/VMware-Monitor) (read-only vSphere), [vmware-avi](https://github.com/vmware-skills/VMware-AVI) (AVI/ALB/AKO), [vmware-harden](https://github.com/vmware-skills/VMware-Harden) (compliance baselines).14> | [vmware-pilot](../vmware-pilot/SKILL.md) (workflow orchestration) | [vmware-policy](../vmware-policy/SKILL.md) (audit/policy)1516## What This Skill Does1718| Category | Tools | Count |19|----------|-------|:-----:|20| **Resources** | list, get details, metrics, health badge, top consumers | 5 |21| **Alerts** | list, get details, investigate (alert→resource), acknowledge, cancel, list definitions | 6 |22| **Alert Definitions** | list symptoms, create definition, enable/disable, delete | 4 |23| **Capacity** | cluster overview, remaining capacity, time remaining, rightsizing | 4 |24| **Reports** | list templates, generate, list, get status+download URL, delete | 5 |25| **Anomaly** | list anomalies, risk badge | 2 |26| **Health** | Aria platform health, collector group status | 2 |27| **Fleet / PromQL** (VCF Ops 9.1) | fleet certificates, password accounts, VCF domains, diagnostic findings, real-time PromQL query | 5 |2829**Total**: 33 tools (26 read-only + 7 write)3031## Quick Install3233```bash34uv tool install vmware-aria35vmware-aria init # guided setup: writes config + .env (chmod 600, password grep-safe), then verifies36vmware-aria doctor37```3839## When to Use This Skill4041**Performance monitoring (daily proactive checks):**42- Check VM contention: CPU Ready %, Memory Balloon, Swap usage43- Fetch time-series metrics for any resource (CPU, memory, disk, network)44- Find top consumers by CPU/memory/disk/network45- Check per-resource anomaly counts and risk badge scores4647**Alert management:**48- List, investigate, acknowledge, or cancel active alerts49- List or filter alert definitions (templates)50- Create new alert definitions from symptom definitions (post-RCA)51- Enable or disable alert definitions; delete obsolete ones5253**Capacity planning:**54- Cluster capacity remaining (CPU, memory, disk headroom)55- Time-until-full prediction per cluster56- Right-sizing: find over-provisioned or under-utilized VMs57- Capacity overview with Aria's built-in recommendations5859**Report automation:**60- Generate scheduled or on-demand reports (capacity, performance, SLA)61- Poll report status until COMPLETED; get PDF/CSV download URL62- Delete generated reports after download6364**Use companion skills for**:65- VM lifecycle: create, clone, snapshot, power → `vmware-aiops`66- NSX networking: segments, gateways, NAT, routing → `vmware-nsx`67- vSphere inventory, real-time alarms, events → `vmware-monitor`68- Storage: iSCSI, vSAN, datastores → `vmware-storage`69- Load balancing, AVI/ALB, AKO, Ingress → `vmware-avi`7071## Related Skills — Skill Routing7273| User Intent | Recommended Skill |74|-------------|-------------------|75| Aria Operations monitoring, alerts, capacity | **vmware-aria** ← this skill |76| VM lifecycle, deployment, guest ops | **vmware-aiops** |77| NSX networking: segments, gateways, NAT, routing | **vmware-nsx** |78| Read-only vSphere inventory, events, alarms | **vmware-monitor** |79| Storage: iSCSI, vSAN, datastores | **vmware-storage** |80| Multi-step workflows with approval | **vmware-pilot** |81| Compliance baselines (CIS / 等保 / PCI-DSS), drift detection, LLM remediation advisor | **vmware-harden** (`uv tool install vmware-harden`) |82| Load balancer, AVI, ALB, AKO, Ingress | **vmware-avi** (`uv tool install vmware-avi`) |83| Audit log query | **vmware-policy** (`vmware-audit` CLI) |8485## Common Workflows8687> **Diagnostic investigations**: Before running any "why is X slow / failing / down" workflow, follow [`references/investigation-protocol.md`](references/investigation-protocol.md). It enforces the four root-cause completeness criteria (falsifiability / sufficiency / necessity / mechanism) and the up-to-three-rounds deepening loop. Stopping at a partial conclusion is an anti-pattern — always self-check against the criteria before outputting a report.8889### Daily VM Health Check (Proactive Ops)9091**Judgment**: don't chase the highest CPU consumer — chase the highest **contention** consumer. A VM at 90% CPU on a quiet host is healthy; a VM at 30% CPU but 15% Ready is starving. Key metrics: CPU Ready, Memory Balloon, Disk Latency.92931. Find top CPU consumers → `vmware-aria resource top --metric cpu|usage_average --top 20` (this is the **starting set**, not the answer)942. Check CPU Ready on hot VMs → `vmware-aria resource metrics <vm-id> --metrics cpu.ready.summation --hours 24`95 - >5% = warning, >10% = problem, >20% = critical963. Check memory pressure → `vmware-aria resource metrics <vm-id> --metrics mem.balloon.average,mem.swapped.average --hours 24`97 - Balloon >0 = ESXi reclaiming memory; Swap >0 = severe — act immediately984. List active CRITICAL/IMMEDIATE alerts → `vmware-aria alert list --criticality CRITICAL`995. Check anomaly counts → `vmware-aria anomaly list`1006. Cross-validate against the [investigation protocol](references/investigation-protocol.md) before reporting any "root cause" — high consumption is rarely the root, usually a downstream symptom101102### Investigate High CPU Alert1031041. List active CRITICAL alerts → `vmware-aria alert list --criticality CRITICAL`1052. Get alert details + symptoms → `vmware-aria alert get <alert-id>`1063. Find top CPU consumers → `vmware-aria resource top --metric cpu|usage_average`1074. Fetch 24h CPU metrics for the hot VM → `vmware-aria resource metrics <vm-id> --metrics cpu|usage_average --hours 24`1085. Check risk badge → `vmware-aria anomaly risk <vm-id>`1096. Acknowledge the alert → `vmware-aria alert acknowledge <alert-id>`110111### Capacity Planning1121131. List clusters → `vmware-aria resource list --kind ClusterComputeResource`1142. Get remaining capacity → `vmware-aria capacity remaining <cluster-id>`1153. Predict time until full → `vmware-aria capacity time-remaining <cluster-id>`1164. Get capacity overview with recommendations → `vmware-aria capacity overview <cluster-id>`1175. Find rightsizing candidates → `vmware-aria capacity rightsizing`118119### Post-Incident: Create Detection Alert (RCA Follow-up)120121After resolving an incident, create an early-warning alert to prevent recurrence. Alert definition management is **MCP-only** (no CLI subcommands):1221231. Find matching symptom definitions → MCP `list_symptom_definitions` (filter by `name_filter` / `resource_kind`)1242. Create alert definition referencing symptoms → MCP `create_alert_definition` with name, resource_kind, symptom_definition_ids, criticality (any one symptom firing triggers the alert)1253. Verify it appears in definitions → `vmware-aria alert definitions --name "Gold VM CPU"` (criticality shown is the max severity across the definition's states)1264. Enable or disable later → MCP `set_alert_definition_state`127128### Generate Capacity Report1291301. Find report template → `vmware-aria report definitions --name "Capacity"`1312. Trigger report generation → `vmware-aria report generate <definition-id> --resources <resource-id>` (the Report API requires at least one resource UUID)1323. Poll until completed → `vmware-aria report get <report-id>` (repeat until `status == COMPLETED`)1334. Download via the returned `download_url` (PDF) or `csv_url`1345. Clean up → `vmware-aria report delete <report-id>`135136### Multi-Target Operations137138All commands accept `--target <name>` to operate against a specific Aria Ops instance:139140```bash141vmware-aria alert list --target prod142vmware-aria resource top --target lab143```144145## Usage Mode146147| Scenario | Recommended | Why |148|----------|:-----------:|-----|149| Local/small models (Ollama, Qwen) | **CLI** | ~2K tokens vs ~8K for MCP |150| Cloud models (Claude, GPT-4o) | Either | MCP gives structured JSON I/O |151| Automated pipelines | **MCP** | Type-safe parameters, structured output |152153Running vmware-aria with a local or small model? See [`references/agent-guardrails.md`](references/agent-guardrails.md) for tool-calling guardrails (alert-to-resource correlation and Aria data fidelity).154155## MCP Tools (33 — 26 read, 7 write)156157All MCP tools accept an optional `target` parameter to select which Aria Operations instance to connect to.158159| Category | Tool | Type | Description |160|----------|------|:----:|-------------|161| Resource | `list_resources` | Read | List VMs, hosts, clusters by resource kind |162| | `get_resource` | Read | Get resource details with health, risk, efficiency badges |163| | `get_resource_metrics` | Read | Fetch time-series metric stats for any resource |164| | `get_resource_health` | Read | Get health badge score (0–100) |165| | `get_top_consumers` | Read | Rank resources by CPU, memory, disk, or network usage |166| Alerts | `list_alerts` | Read | List active alerts with criticality and resource ID (resolve names via `get_resource`) |167| | `get_alert` | Read | Get alert details with contributing symptoms (recommendations live on the alert definition) |168| | `investigate_alert` | Read | Resolve an alert to its confirmed affected resource in one call — returns both UUIDs explicitly labelled plus the vmware-monitor handoff |169| | `acknowledge_alert` | **Write** | Mark an alert as acknowledged (does not close it) |170| | `cancel_alert` | **Write** | Cancel (dismiss) an active alert |171| | `list_alert_definitions` | Read | List alert templates configured in Aria Ops |172| Alert Defs | `list_symptom_definitions` | Read | List symptom definitions — use IDs when creating alert defs |173| | `create_alert_definition` | **Write** | Create new alert definition from symptom definition IDs |174| | `set_alert_definition_state` | **Write** | Enable or disable an alert definition |175| | `delete_alert_definition` | **Write** | Delete an alert definition permanently |176| Capacity | `get_capacity_overview` | Read | Group-level remaining % + per-dimension headroom and days-until-full |177| | `get_remaining_capacity` | Read | Remaining CPU, memory, disk before hitting limits |178| | `get_time_remaining` | Read | Days until cluster capacity is exhausted |179| | `list_rightsizing_recommendations` | Read | VMs to resize: over/under-provisioned |180| Reports | `list_report_definitions` | Read | List available report definition templates |181| | `generate_report` | **Write** | Trigger report generation (async; returns report_id) |182| | `list_reports` | Read | List generated reports, optionally by definition |183| | `get_report` | Read | Poll report status + get PDF/CSV download URLs |184| | `delete_report` | **Write** | Delete a generated report |185| Anomaly | `list_anomalies` | Read | Per-resource anomaly counts (System Attributes\|total_alarms metric) |186| | `get_resource_riskbadge` | Read | Risk score (0–100): likelihood of future problems |187| Health | `get_aria_health` | Read | Aria platform node status (ONLINE/OFFLINE) |188| | `list_collector_groups` | Read | Collector agents status and connectivity |189| Fleet / PromQL (VCF Ops 9.1) | `fleet_certificate_list` | Read | Certificate status/expiry across the VCF fleet |190| | `fleet_password_account_list` | Read | Managed password-account status (read-only; does not rotate) |191| | `fleet_domain_list` | Read | SDDC/workload domains behind one registered VCF integration |192| | `findings_list` | Read | Operations diagnostic findings (not compliance — see vmware-harden) |193| | `promql_query` | Read | Real-time PromQL instant query via the VODAP service (base path INFERRED, unverified on real hardware) |194195**Read/write split**: 26 read-only, 7 write. All write operations are audit-logged to `~/.vmware/audit.db` (via vmware-policy).196197### List results are envelopes — read `truncated` before you summarise198199Every list-returning tool above (`list_resources`, `get_top_consumers`, `list_alerts`, `list_alert_definitions`, `list_symptom_definitions`, `list_rightsizing_recommendations`, `list_report_definitions`, `list_reports`, `list_anomalies`, `list_collector_groups`) returns an object, not a bare array:200201```json202{203 "items": [ ... ],204 "returned": 50,205 "limit": 50,206 "total": 213,207 "truncated": true,208 "hint": "Showing 50 of 213. Raise limit or narrow the query with a filter to see the rest."209}210```211212Rules:213214- **Rows live under `items`.** An empty `items` with `returned: 0` means the query genuinely matched nothing — report that, do not report a tool failure.215- **`truncated: true` means more rows exist.** Never describe such a result as the complete set; either say it is a partial view or re-query with a higher `limit` or a narrower filter, as `hint` instructs.216- **`truncated: false` means the answer is complete** — safe to summarise as the whole picture.217- **`total: null` means the API reported no collection size**, so a page filled exactly to the limit is flagged truncated conservatively. It may in fact be complete; a follow-up query with a larger limit settles it.218- **`list_anomalies` also carries `scanned`, `vm_total` and `scan_complete`** — `limit` bounds the answer, not the scan: the environment is ranked in full and the worst `limit` objects are returned. It returns only VMs with a non-zero anomaly count, so a short list is not evidence that the environment is clean; check `truncated`. With `scan_complete: true`, `total` is the number of anomalous objects found. With `scan_complete: false` the scan hit its cap, `total` is the environment's VM count, and a `note` says the ranking is partial.219220## CLI Quick Reference221222```bash223# Resources224vmware-aria resource list [--kind VirtualMachine|HostSystem|ClusterComputeResource] [--name <filter>]225vmware-aria resource get <resource-id>226vmware-aria resource metrics <resource-id> --metrics cpu|usage_average,mem|usage_average --hours 4227vmware-aria resource metrics <vm-id> --metrics cpu.ready.summation,mem.balloon.average --hours 24228vmware-aria resource health <resource-id>229vmware-aria resource top --metric cpu|usage_average --kind VirtualMachine --top 10230231# Alerts232vmware-aria alert list [--criticality CRITICAL|IMMEDIATE|WARNING|INFORMATION]233vmware-aria alert get <alert-id>234vmware-aria alert acknowledge <alert-id>235vmware-aria alert cancel <alert-id>236vmware-aria alert definitions [--name <filter>]237238# Alert Definitions: creation/enable/disable/delete and symptom-definition239# lookup are MCP-only tools (list_symptom_definitions, create_alert_definition,240# set_alert_definition_state, delete_alert_definition) — no CLI subcommands.241242# Capacity243vmware-aria capacity overview <cluster-id>244vmware-aria capacity remaining <resource-id>245vmware-aria capacity time-remaining <resource-id>246vmware-aria capacity rightsizing [--resource-id <vm-id>]247248# Reports (async: generate → poll get → download → delete)249vmware-aria report definitions [--name <filter>]250vmware-aria report generate <definition-id> --resources <id1,id2> # at least one resource UUID required251vmware-aria report list [--definition-id <id>]252vmware-aria report get <report-id> # poll until status == COMPLETED; shows download_url253vmware-aria report delete <report-id>254255# Anomaly256vmware-aria anomaly list [--resource-id <id>]257vmware-aria anomaly risk <resource-id>258259# Health260vmware-aria health status261vmware-aria health collectors262263# Diagnostics264vmware-aria doctor [--skip-auth]265```266267### Key Metric Names (for `resource metrics` command)268269| Metric | API Key | What It Means |270|--------|---------|--------------|271| CPU Ready % | `cpu.ready.summation` | vCPU waiting for physical core; >5% = warning |272| CPU Used | `cpu.used.summation` | Actual CPU execution time |273| CPU Demand | `cpu.demand.average` | Total MHz requested by VM |274| Memory Active | `mem.active.average` | Actively used by guest OS (sizing) |275| Memory Consumed | `mem.consumed.average` | Footprint on host (capacity) |276| Memory Balloon | `mem.balloon.average` | **>0 = ESXi reclaiming memory** |277| Memory Swap | `mem.swapped.average` | **>0 = severe pressure** |278| Disk Read Latency | `disk.read.average` | Read I/O latency ms |279| Disk Write Latency | `disk.write.average` | Write I/O latency ms |280| Net Received | `net.received.average` | Inbound network KB/s |281| Net Transmitted | `net.transmitted.average` | Outbound network KB/s |282283> Full CLI reference with all options and output formats: see `references/cli-reference.md`284285## Troubleshooting286287### "Token not found" error after setup288289The token acquisition request failed. Verify:2901. Aria Ops is reachable: `vmware-aria doctor`2912. The `auth_source` in config matches your environment (LOCAL, LDAP, AD)2923. The password env var follows the naming convention: `VMWARE_ARIA_<TARGET>_PASSWORD`293294### Resources appear missing from list_resources295296The collector agent may be offline. Check `list_collector_groups` for any collectors in a DOWN state. Restart the affected collector from the Aria Ops UI under Administration > Collector Groups.297298### Metrics return empty data299300The resource may not have metric collection configured, or the requested metric key is incorrect. Verify metric keys against the resource's available metrics in the Aria Ops UI (Metrics tab on the resource detail page).301302### "Password not found" error303304Variable names follow the pattern `VMWARE_ARIA_<TARGET_NAME_UPPER>_PASSWORD` where hyphens become underscores. Example: target `prod` needs `VMWARE_ARIA_PROD_PASSWORD`. Check your `~/.vmware-aria/.env` file.305306### `invalid peer certificate: UnknownIssuer` when running uvx (corporate TLS proxy)307308`uvx` re-resolves dependencies from PyPI on every launch. Behind a corporate TLS-intercepting proxy whose CA is not in uv's bundled cert store, the handshake fails. Use the v1.5.15+ recommended single-command form `vmware-aria mcp` (after `uv tool install vmware-aria` — no network on launch), or set `UV_NATIVE_TLS=true` to make uv use the system cert store.309310## Safety311312- **Read-heavy**: 26 of 33 tools are read-only313- **Audit logging**: Write operations logged to `~/.vmware/audit.db` (SQLite WAL, via vmware-policy) with timestamp, user, target, operation, and result314- **Token expiry handling**: vRealizeOpsToken re-acquired automatically 60 seconds before expiry (6-hour sliding validity, extended on each call)315- **Prompt injection defense**: API text values sanitized via `_sanitize()` — strips control characters, truncates to 500 chars316- **Credential safety**: Passwords loaded only from environment variables (`.env` file), never from `config.yaml`317- **Input validation**: resource_id and alert_id validated before API calls; criticality values validated against known enum318319## Setup320321```bash322uv tool install vmware-aria323mkdir -p ~/.vmware-aria324cp config.example.yaml ~/.vmware-aria/config.yaml325# Edit config.yaml with your Aria Operations host details326327# Add to ~/.vmware-aria/.env (create if missing, chmod 600):328# VMWARE_ARIA_PROD_PASSWORD=<your-password>329chmod 600 ~/.vmware-aria/.env330331vmware-aria doctor332```333334> All tools are automatically audited via vmware-policy. Audit logs: `vmware-audit log --last 20`335336> Full setup guide with multi-target config, MCP server setup, and Docker: see `references/setup-guide.md`337338## Architecture339340```341User (natural language)342 |343AI Agent (Claude Code / Goose / Cursor)344 | reads SKILL.md345vmware-aria CLI or MCP server (stdio transport)346 | Aria Operations Suite API (REST/JSON over HTTPS)347 | POST /suite-api/api/auth/token/acquire → vRealizeOpsToken348Aria Operations Manager349 |350VMs / Hosts / Clusters / Datastores / Alerts / Capacity351```352353The MCP server uses stdio transport (local only, no network listener). Connections to Aria Ops use HTTPS on port 443 with vRealizeOpsToken authentication (6-hour sliding token validity, auto-refreshed).354355## Audit & Safety356357All operations are automatically audited via vmware-policy (`@vmware_tool` decorator):358- Every tool call logged to `~/.vmware/audit.db` (SQLite, framework-agnostic)359- Policy rules enforced via `~/.vmware/rules.yaml` (deny rules, maintenance windows, risk levels)360- Risk classification: each tool tagged as low/medium/high/critical361- View recent operations: `vmware-audit log --last 20`362- View denied operations: `vmware-audit log --status denied`363364vmware-policy is automatically installed as a dependency — no manual setup needed.365366## License367368MIT — [github.com/vmware-skills/VMware-Aria](https://github.com/vmware-skills/VMware-Aria)