The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the VMware Monitor listing page.
Author: Wei Zhou, VMware by Broadcom — wei-wz.zhou@broadcom.com This is a community-driven project by a VMware engineer, not an official VMware product. For official VMware developer tools see developer.broadcom.com.
English | 中文
Read-only VMware vCenter/ESXi monitoring — 32 tools. No destructive operations exist in this codebase, and a test enforces that.
Why a separate repository? VMware Monitor is fully independent from VMware-AIops. No power off, delete, create, reconfigure, snapshot-create/revert/delete, clone, or migrate functions exist in this codebase — not a prompt constraint, an absence.
How that is enforced, precisely.
tests/eval/regression/test_read_only_enforcement.pyparses every source file withastand requires each vSphere method the package calls to appear on a reviewed allowlist, cross-checked against pyVmomi's own type metadata: anything returning avim.Task, or gated by vCenter on a non-read privilege, fails unless a human wrote down why. Today that allowlist is nine methods. The check is a gate on the code as written — it cannot see a method name assembled at runtime, and nothing runs it automatically, so it holds only as far as someone runs the test suite. For a guarantee that does not depend on this repository at all, point the skill at a vCenter account with read-only permissions.
| Skill | Scope | Tools | Install |
|---|---|---|---|
| vmware-aiops ⭐ entry point | VM lifecycle, deployment, guest ops, clusters | 49 | uv tool install vmware-aiops |
| vmware-storage | Datastores, iSCSI, vSAN | 11 | uv tool install vmware-storage |
| vmware-vks | Tanzu Namespaces, TKC cluster lifecycle | 20 | uv tool install vmware-vks |
| vmware-nsx | NSX networking: segments, gateways, NAT, IPAM | 33 | uv tool install vmware-nsx-mgmt |
| vmware-nsx-security | DFW microsegmentation, security groups, Traceflow | 21 | uv tool install vmware-nsx-security |
| vmware-aria | Aria Ops metrics, alerts, capacity planning | 28 | uv tool install vmware-aria |
| vmware-avi | AVI (NSX ALB) load balancing, AKO on Kubernetes | 28 | uv tool install vmware-avi |
| vmware-harden | Compliance baselines, drift detection (read-only) | 6 | uv tool install vmware-harden |
| vmware-log-insight | Centralized syslog search, aggregation, alerts | 7 | uv tool install vmware-log-insight |
| vmware-debug | Incident timeline correlation, root cause | 2 | uv tool install vmware-debug |
| vmware-pilot | Multi-step workflow orchestration, approval gates | 13 | uv tool install vmware-pilot |
Five opinionated, read-only reports that answer an operator's real questions — each aggregates and correlates server-side and hands back a high-signal result (never raw inventory). Every report also renders a self-contained offline HTML snapshot with --html (no external assets, nothing leaves the machine; drill-down detail collapses in native <details> sections, zero JavaScript).
| Question | Command | What it correlates |
|---|---|---|
| "Is anything on fire?" across all clusters | vmware-monitor summary | Every cluster's hosts + VM power + live CPU/mem + alarms → ranked top-N issues + per-cluster status |
| "What needs attention now?" across all vCenters | vmware-monitor attention | Every configured vCenter merged into one globally-ranked issue list; unreachable targets degrade gracefully |
| "What's happening around this VM?" | vmware-monitor investigate vm <name> | VM state + host it runs on + cluster + backing datastores + snapshots + alarms + performance + a merged event timeline |
| "What's happening around this host?" | vmware-monitor investigate host <name> | Host state + cluster + the VMs it runs + mounted datastores + alarms + performance + correlated timeline |
| "What's happening around this datastore?" | vmware-monitor investigate datastore <name> | Capacity/free + mounting hosts + VMs it backs + alarms + correlated timeline |
Unknown object names return a teaching error naming exactly how to list objects. Via MCP these are the tools cluster_health_summary, cross_vcenter_attention, vm_investigation_bundle, host_investigation_bundle, datastore_investigation_bundle — the model calls them and explains the aggregated result in operational language. Full flags: references/cli-reference.md.
Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, and 30+ AI agents:
This project uses the modern PEP 517 build system (hatchling), so there is no
setup.py by design — that is expected, not a missing file. If you cloned the
source and hit ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build, your pip is older than 21.3 and
cannot do an editable (-e) install with a non-setuptools backend. Editable
mode is a developer convenience, not needed to run the tool — do one of:
For a truly air-gapped host, build the wheels on a connected machine and copy them over — the target then needs no network:
| vSphere / VCF Version | Support | Notes |
|---|---|---|
| VCF 9.1 / vSphere 9.1 | ✅ Full | Released 2026-05-12. pyVmomi <10.0 resolves and connects via SOAP. |
| VCF 9.0 / vSphere 9.0 | ✅ Full | pyVmomi 8.0.3+ connects against vSphere 9 SOAP API. |
| 8.0 / 8.0U1-U3 | ✅ Full | pyVmomi 8.0.3+ |
| 7.0 / 7.0U1-U3 | ✅ Full | All read-only APIs supported |
| 6.7 | ✅ Compatible | Backward-compatible, tested |
| 6.5 | ✅ Compatible | Backward-compatible, tested |
| Feature | vCenter | ESXi | Details |
|---|---|---|---|
| List VMs | ✅ | ✅ | Name, power state, CPU, memory, guest OS, IP, folder_path (vCenter inventory folder, e.g. /Datacenters/Production/Web Tier); MCP list_virtual_machines supports folder_filter for case-insensitive folder-tree search |
| List Hosts | ✅ | ⚠️ Self only | CPU cores, memory, ESXi version, VM count, uptime |
| List Datastores | ✅ | ✅ | Capacity, free/used, type (VMFS/NFS), usage % |
| List Clusters | ✅ | ❌ | Host count, DRS/HA status |
| List Networks | ✅ | ✅ | Network name, associated VM count, accessibility — CLI inventory networks, MCP list_all_networks |
| Feature | vCenter | ESXi | Details |
|---|---|---|---|
| Active Alarms | ✅ | ✅ | Severity, alarm name, entity, timestamp |
| Event/Log Query | ✅ | ✅ | Filter by time range, severity; 50+ event types |
| Hardware Sensors | ✅ | ✅ | Per-sensor type (temperature/voltage/fan...), reading, unit, and health status (green/yellow/red) — CLI health sensors, MCP get_host_sensors |
| Host Services | ✅ | ✅ | hostd, vpxa running/stopped status — CLI health services, MCP get_host_services |
Monitored Event Types:
| Category | Events |
|---|---|
| VM Failures | VmFailedToPowerOnEvent, VmDiskFailedEvent, VmFailoverFailed |
| Host Issues | HostConnectionLostEvent, HostShutdownEvent, HostIpChangedEvent |
| Storage | DatastoreCapacityIncreasedEvent, SCSI high latency |
| HA/DRS | DasHostFailedEvent, DrsVmMigratedEvent, DrsSoftRuleViolationEvent |
| Auth | UserLoginSessionEvent, BadUsernameSessionEvent |
| Feature | Details |
|---|---|
| VM Info | Name, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs, folder_path |
| Snapshot List | List existing snapshots with name and creation time (no create/revert/delete) — CLI vm snapshot-list, MCP tool vm_list_snapshots |
| Backup Window | How long backups held a snapshot open on a VM, from vCenter task history — CLI snapshots backup-window, MCP tool vm_backup_snapshot_history. A lower bound on the backup job, never its official duration |
| Feature | Details |
|---|---|
| Daemon | APScheduler-based, configurable interval (default 15 min) |
| Multi-target Scan | Sequentially scan all configured vCenter/ESXi targets |
| Scan Content | Alarms + Events + Host logs (hostd, vmkernel, vpxd) |
| Log Analysis | Regex pattern matching: error, fail, critical, panic, timeout |
| Structured Log | JSONL output to ~/.vmware-monitor/scan.log |
| Webhook | Slack, Discord, or any HTTP endpoint |
| Daemon Management | daemon start/stop/status, PID file, graceful shutdown |
| Feature | Details |
|---|---|
| Code-Level Isolation | Independent repository — zero destructive functions in codebase, checked by an AST allowlist gate over every vSphere call (tests/eval/regression/test_read_only_enforcement.py) |
| Audit Trail | All queries logged to ~/.vmware-monitor/audit.log (JSONL) |
| Password Protection | .env file loading with permission check (warn if not 600) |
| SSL Self-signed Support | verify_ssl: false — only for ESXi with self-signed certs in isolated labs; production should use CA-signed certificates |
| Prompt Injection Protection | vSphere event messages and host logs are truncated, sanitized, and wrapped in boundary markers |
| Webhook Data Scope | Sends monitoring summaries to user-configured URLs only — no third-party services by default |
| Production Recommended | AI agents can misinterpret context and execute unintended destructive operations — real-world incidents have shown AI-driven tools deleting production databases and entire environments. VMware-Monitor removes that class of risk from its own code: no destructive code paths exist, and the allowlist gate fails the build if one is added. Pair it with a read-only vCenter account for defence that does not rely on this codebase. Use VMware-AIops only in dev/lab environments |
These operations do not exist in this repository:
_double_confirm, _show_state_preview, _validate_vm_paramsFor these operations, use the full VMware-AIops repository.
Running with local or small models? See skills/vmware-monitor/references/agent-guardrails.md.
vmware-monitor health alarms --target prod-vcentervmware-monitor health events --hours 24 --severity warningvmware-monitor inventory hosts — check connection state and memory usageOne call correlates the object with its surrounding infrastructure and recent history — see ⚡ Quick Investigation Reports above.
vmware-monitor attention (all vCenters) or vmware-monitor summary (one)vmware-monitor investigate vm <name> (or host / datastore)--hours 72; share it with --html (offline snapshot)inventory vms/hosts, list_all_datastores)~/.vmware-monitor/config.yamlvmware-monitor daemon startThe get_alarms tool queries triggered alarms at the root folder level. Some alarms are entity-specific — try checking events instead: vmware-monitor health events --hours 1 --severity info.
vmware-monitor doctor to diagnoseconfig.yamlverify_ssl: falseUse severity filter: --severity warning (default) filters out info-level events. Use --hours 4 to narrow the time range.
VMware Tools not installed or not running in the guest. Install/start VMware Tools for guest OS detection, IP address, and guest family info.
vCenter may be under heavy load. Try targeting a specific ESXi host directly instead of vCenter, or increase connection timeout in config.yaml.
| Platform | Status | Config File | AI Model |
|---|---|---|---|
| Claude Code | ✅ Native Skill | skills/vmware-monitor/SKILL.md | Anthropic Claude |
| Gemini CLI | ✅ Context file + MCP | skills/vmware-monitor/SKILL.md | Google Gemini |
| OpenAI Codex CLI | ✅ Skill + AGENTS.md | skills/vmware-monitor/SKILL.md | OpenAI GPT |
| Aider | ✅ Conventions | skills/vmware-monitor/SKILL.md | Any (cloud + local) |
| Continue CLI | ✅ Rules | skills/vmware-monitor/SKILL.md | Any (cloud + local) |
| Trae IDE | ✅ Rules | skills/vmware-monitor/SKILL.md | Claude/DeepSeek/GPT-4o |
| Kimi Code CLI | ✅ Skill | skills/vmware-monitor/SKILL.md | Moonshot Kimi |
| MCP Server | ✅ MCP Protocol | vmware_monitor/mcp_server/ | Any MCP client |
| Python CLI | ✅ Standalone | N/A | N/A |
| Feature | Claude Code | Gemini CLI | Codex CLI | Aider | Continue | Trae IDE | Kimi CLI |
|---|---|---|---|---|---|---|---|
| Cloud AI | Anthropic | OpenAI | Any | Any | Multi | Moonshot | |
| Local models | — | — | — | Ollama | Ollama | — | — |
| Skill system | SKILL.md | Context file | SKILL.md | — | Rules | Rules | SKILL.md |
| MCP support | Native | Native | Via Skills | Third-party | Native | — | — |
| Free tier | — | 60 req/min | — | Self-hosted | Self-hosted | — | — |
The vmware-monitor MCP server works with any MCP-compatible agent or tool. Ready-to-use configuration templates are in examples/mcp-configs/. All 32 tools are read-only, enforced by the allowlist gate described above.
| Agent / Tool | Local Model Support | Config Template | Integration Guide |
|---|---|---|---|
| Xiaoguai (小怪) | ✅ Self-hosted, any LLM | MCP setup | Guide |
| Goose | ✅ Ollama, LM Studio | goose.json | Guide |
| LocalCowork | ✅ Fully offline | localcowork.json | Guide |
| mcp-agent | ✅ Ollama, vLLM | mcp-agent.yaml | Guide |
| VS Code Copilot | — | vscode-copilot.json | Guide |
| Cursor | — | cursor.json | — |
| Continue | ✅ Ollama | continue.yaml | Guide |
| Claude Code | — | claude-code.json | — |
Xiaoguai (小怪) — a self-hostable, audit-first agent platform (Rust, single binary + embedded SQLite) from the same maintainer. It runs the read-only vmware-monitor MCP server as one of its toolboxes; being both an MCP consumer and an MCP server, its HMAC-chained audit log pairs naturally with this skill's read-only design — every query is logged, and no code path here mutates. See its MCP integration guide.
Fully local operation (no cloud API required):
Set passwords via .env file (recommended):
Security note: Prefer
.envfile over command-lineexportto avoid passwords appearing in shell history.config.yamlstores only hostnames, ports, and a reference to the.envfile — it does not contain passwords or tokens. All secrets are stored exclusively in.env(chmod 600). Webhook notifications are disabled by default; when enabled, payloads contain no credentials, IPs, or PII — only aggregated alert metadata sent to user-configured URLs only. We recommend using a least-privilege read-only vCenter service account.
Password environment variable naming convention:
Choose one (or more) of the following:
Method 1: Skills.sh or ClawHub (recommended)
Either installer places the skill in Claude Code's skills directory for you:
Method 2: Manual skill install
For tool access (not just skill context), also register the MCP server:
Restart Claude Code, then:
For tool access (not just context), register the MCP server in ~/.gemini/settings.json:
Then start Gemini CLI:
Then start Codex CLI:
Configure ~/.continue/config.yaml for local model:
Then:
Copy the rules file to your project's .trae/rules/ directory:
Trae IDE's Builder Mode reads .trae/rules/ Markdown files at startup.
Note: You can also install Claude Code extension in Trae IDE and use
.claude/skills/format directly.
The MCP server exposes VMware read-only monitoring as tools via the Model Context Protocol. Works with any MCP-compatible client (Claude Desktop, Cursor, etc.).
After uv tool install vmware-monitor, start the MCP server with one command (v1.5.15+):
Claude Desktop config (claude_desktop_config.json):
Behind a corporate TLS proxy? uvx may fail with
invalid peer certificate: UnknownIssuer. Use the recommendedvmware-monitor mcpform above (no network needed), or setUV_NATIVE_TLS=true.
Already installed? Re-run the install command for your channel to get the latest version:
| Install Channel | Update Command |
|---|---|
| ClawHub | clawhub install @zw008/vmware-monitor |
| Skills.sh | npx skills add vmware-skills/VMware-Monitor |
| Git clone | cd VMware-Monitor && git pull origin main && uv pip install -e . |
| uv | uv tool install vmware-monitor --force |
Check your current version: vmware-monitor --version
For users in China who prefer domestic cloud APIs or have limited access to overseas services.
For fully offline operation — no cloud API, no internet, full privacy.
See config.example.yaml for all options.
| Section | Key | Default | Description |
|---|---|---|---|
| targets | name | — | Friendly name |
| targets | host | — | vCenter/ESXi hostname or IP |
| targets | type | vcenter | vcenter or esxi |
| targets | port | 443 | Connection port |
| targets | verify_ssl | true | Verify the target's TLS certificate (set false only for self-signed lab hosts) |
| scanner | interval_minutes | 15 | Scan frequency |
| scanner | severity_threshold | warning | Min severity: critical/warning/info |
| scanner | lookback_hours | 1 | How far back to scan |
| notify | log_file | ~/.vmware-monitor/scan.log | JSONL log output |
| notify | webhook_url | — | Webhook endpoint (Slack, Discord, etc.) |
| Skill | Scope | Tools | Install |
|---|---|---|---|
| vmware-monitor | Read-only monitoring, alarms, events | 27 | uv tool install vmware-monitor |
| vmware-aiops | VM lifecycle, deployment, guest ops, clusters | 49 | uv tool install vmware-aiops |
| vmware-storage | Datastores, iSCSI, vSAN | 11 | uv tool install vmware-storage |
| vmware-vks | Tanzu Namespaces, TKC cluster lifecycle | 20 | uv tool install vmware-vks |
If you encounter any errors or issues, please send the error message, logs, or screenshots to zhouwei008@gmail.com. Contributions are welcome!
MIT