{
  "markdown": "<!-- mcp-name: io.github.vmware-skills/vmware-monitor -->\n# VMware Monitor\n\n> **Author**: Wei Zhou, VMware by Broadcom — wei-wz.zhou@broadcom.com\n> This is a community-driven project by a VMware engineer, not an official VMware product.\n> For official VMware developer tools see [developer.broadcom.com](https://developer.broadcom.com).\n\nEnglish | [中文](README-CN.md)\n\n**Read-only** VMware vCenter/ESXi monitoring — 32 tools. No destructive operations exist in this codebase, and a test enforces that.\n\n> **Why a separate repository?** VMware Monitor is fully independent from [VMware-AIops](https://github.com/vmware-skills/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.\n>\n> **How that is enforced, precisely.** [`tests/eval/regression/test_read_only_enforcement.py`](tests/eval/regression/test_read_only_enforcement.py) parses every source file with `ast` and requires each vSphere method the package calls to appear on a reviewed allowlist, cross-checked against pyVmomi's own type metadata: anything returning a `vim.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.\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-vmware--monitor-orange)](https://clawhub.ai/skills/vmware-monitor)\n[![Skills.sh](https://img.shields.io/badge/Skills.sh-Install-blue)](https://skills.sh/vmware-skills/VMware-Monitor)\n[![Claude Code Marketplace](https://img.shields.io/badge/Claude_Code-Marketplace-blueviolet)](https://github.com/vmware-skills/VMware-Monitor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n\n### Companion Skills\n\n| Skill | Scope | Tools | Install |\n|-------|-------|:-----:|---------|\n| **[vmware-aiops](https://github.com/vmware-skills/VMware-AIops)** ⭐ entry point | VM lifecycle, deployment, guest ops, clusters | 49 | `uv tool install vmware-aiops` |\n| **[vmware-storage](https://github.com/vmware-skills/VMware-Storage)** | Datastores, iSCSI, vSAN | 11 | `uv tool install vmware-storage` |\n| **[vmware-vks](https://github.com/vmware-skills/VMware-VKS)** | Tanzu Namespaces, TKC cluster lifecycle | 20 | `uv tool install vmware-vks` |\n| **[vmware-nsx](https://github.com/vmware-skills/VMware-NSX)** | NSX networking: segments, gateways, NAT, IPAM | 33 | `uv tool install vmware-nsx-mgmt` |\n| **[vmware-nsx-security](https://github.com/vmware-skills/VMware-NSX-Security)** | DFW microsegmentation, security groups, Traceflow | 21 | `uv tool install vmware-nsx-security` |\n| **[vmware-aria](https://github.com/vmware-skills/VMware-Aria)** | Aria Ops metrics, alerts, capacity planning | 28 | `uv tool install vmware-aria` |\n| **[vmware-avi](https://github.com/vmware-skills/VMware-AVI)** | AVI (NSX ALB) load balancing, AKO on Kubernetes | 28 | `uv tool install vmware-avi` |\n| **[vmware-harden](https://github.com/vmware-skills/VMware-Harden)** | Compliance baselines, drift detection (read-only) | 6 | `uv tool install vmware-harden` |\n| **[vmware-log-insight](https://github.com/vmware-skills/VMware-Log-Insight)** | Centralized syslog search, aggregation, alerts | 7 | `uv tool install vmware-log-insight` |\n| **[vmware-debug](https://github.com/vmware-skills/VMware-Debug)** | Incident timeline correlation, root cause | 2 | `uv tool install vmware-debug` |\n| **[vmware-pilot](https://github.com/vmware-skills/VMware-Pilot)** | Multi-step workflow orchestration, approval gates | 13 | `uv tool install vmware-pilot` |\n\n## ⚡ Quick Investigation Reports\n\nFive 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).\n\n| Question | Command | What it correlates |\n|----------|---------|--------------------|\n| **\"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 |\n| **\"What needs attention now?\"** across all vCenters | `vmware-monitor attention` | Every configured vCenter merged into one globally-ranked issue list; unreachable targets degrade gracefully |\n| **\"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 |\n| **\"What's happening around this host?\"** | `vmware-monitor investigate host <name>` | Host state + cluster + the VMs it runs + mounted datastores + alarms + performance + correlated timeline |\n| **\"What's happening around this datastore?\"** | `vmware-monitor investigate datastore <name>` | Capacity/free + mounting hosts + VMs it backs + alarms + correlated timeline |\n\n```bash\n# Triage the estate, then drill into whatever it flags:\nvmware-monitor attention                         # what needs attention now, all vCenters\nvmware-monitor summary --top 5                   # is anything on fire, one vCenter\nvmware-monitor investigate vm web-01 --hours 72  # everything around a VM, 72h event window\nvmware-monitor investigate vm web-01 --html      # → offline snapshot in ~/vmware-health/\n```\n\nUnknown 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`](skills/vmware-monitor/references/cli-reference.md).\n\n### Quick Install (Recommended)\n\nWorks with Claude Code, Cursor, Codex, Gemini CLI, Trae, and 30+ AI agents:\n\n```bash\n# Via Skills.sh\nnpx skills add vmware-skills/VMware-Monitor\n\n# Via ClawHub\nclawhub install @zw008/vmware-monitor\n```\n\n### PyPI Install (No GitHub Access Required)\n\n```bash\n# Install via uv (recommended)\nuv tool install vmware-monitor\n\n# Or via pip\npip install vmware-monitor\n\n# China mainland mirror (faster)\npip install vmware-monitor -i https://pypi.tuna.tsinghua.edu.cn/simple\n```\n\n### Offline / Air-Gapped Install (from source)\n\nThis project uses the modern PEP 517 build system (hatchling), so there is **no\n`setup.py`** by design — that is expected, not a missing file. If you cloned the\nsource and hit `ERROR: File \"setup.py\" or \"setup.cfg\" not found ... editable mode\ncurrently requires a setuptools-based build`, your `pip` is older than 21.3 and\ncannot do an *editable* (`-e`) install with a non-setuptools backend. Editable\nmode is a developer convenience, not needed to run the tool — do one of:\n\n```bash\n# From the source tree — a normal (non-editable) install builds a wheel:\npip install .              # NOT  pip install -e .\n\n# ...or upgrade pip first, and editable works too:\npip install --upgrade pip && pip install -e .\n```\n\nFor a **truly air-gapped host**, build the wheels on a connected machine and copy\nthem over — the target then needs no network:\n\n```bash\n# On a connected machine, collect this package + its dependencies as wheels:\npip wheel . -w dist        # → dist/*.whl   (or: uv build, for just this package)\n\n# Copy dist/ to the air-gapped host, then install offline:\npip install --no-index --find-links dist vmware-monitor\n```\n\n---\n\n## Capabilities (Read-Only)\n\n### Architecture\n\n```\nUser (Natural Language)\n  ↓\nAI CLI Tool (Claude Code / Gemini / Codex / Aider / Continue / Trae / Kimi)\n  ↓ Reads SKILL.md / AGENTS.md / rules\n  ↓\nvmware-monitor CLI (read-only)\n  ↓ pyVmomi (vSphere SOAP API)\n  ↓\nvCenter Server ──→ ESXi Clusters ──→ VMs\n    or\nESXi Standalone ──→ VMs\n```\n\n### Version Compatibility\n\n| vSphere / VCF Version | Support | Notes |\n|----------------|---------|-------|\n| VCF 9.1 / vSphere 9.1 | ✅ Full | Released 2026-05-12. pyVmomi `<10.0` resolves and connects via SOAP. |\n| VCF 9.0 / vSphere 9.0 | ✅ Full | pyVmomi 8.0.3+ connects against vSphere 9 SOAP API. |\n| 8.0 / 8.0U1-U3 | ✅ Full | pyVmomi 8.0.3+ |\n| 7.0 / 7.0U1-U3 | ✅ Full | All read-only APIs supported |\n| 6.7 | ✅ Compatible | Backward-compatible, tested |\n| 6.5 | ✅ Compatible | Backward-compatible, tested |\n\n#### Official Broadcom References\n\n- **SDKs**: <https://developer.broadcom.com/sdks> — VCF Python SDK (recommended for VCF 9+, bundles pyVmomi + vSAN SDK), vSphere Automation SDK for Python\n- **REST APIs**: <https://developer.broadcom.com/xapis> — vSphere Automation API, VCF API\n- **CLI Tools**: <https://developer.broadcom.com/tools> — PowerCLI 9.1, ESXCLI, OVF Tool\n\n### 1. Inventory\n\n| Feature | vCenter | ESXi | Details |\n|---------|:-------:|:----:|---------|\n| 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 |\n| List Hosts | ✅ | ⚠️ Self only | CPU cores, memory, ESXi version, VM count, uptime |\n| List Datastores | ✅ | ✅ | Capacity, free/used, type (VMFS/NFS), usage % |\n| List Clusters | ✅ | ❌ | Host count, DRS/HA status |\n| List Networks | ✅ | ✅ | Network name, associated VM count, accessibility — CLI `inventory networks`, MCP `list_all_networks` |\n\n### 2. Health & Monitoring\n\n| Feature | vCenter | ESXi | Details |\n|---------|:-------:|:----:|---------|\n| Active Alarms | ✅ | ✅ | Severity, alarm name, entity, timestamp |\n| Event/Log Query | ✅ | ✅ | Filter by time range, severity; 50+ event types |\n| Hardware Sensors | ✅ | ✅ | Per-sensor `type` (temperature/voltage/fan...), reading, unit, and health `status` (green/yellow/red) — CLI `health sensors`, MCP `get_host_sensors` |\n| Host Services | ✅ | ✅ | hostd, vpxa running/stopped status — CLI `health services`, MCP `get_host_services` |\n\n**Monitored Event Types:**\n\n| Category | Events |\n|----------|--------|\n| VM Failures | `VmFailedToPowerOnEvent`, `VmDiskFailedEvent`, `VmFailoverFailed` |\n| Host Issues | `HostConnectionLostEvent`, `HostShutdownEvent`, `HostIpChangedEvent` |\n| Storage | `DatastoreCapacityIncreasedEvent`, SCSI high latency |\n| HA/DRS | `DasHostFailedEvent`, `DrsVmMigratedEvent`, `DrsSoftRuleViolationEvent` |\n| Auth | `UserLoginSessionEvent`, `BadUsernameSessionEvent` |\n\n### 3. VM Info & Snapshot List (Read-Only)\n\n| Feature | Details |\n|---------|---------|\n| VM Info | Name, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs, `folder_path` |\n| Snapshot List | List existing snapshots with name and creation time (no create/revert/delete) — CLI `vm snapshot-list`, MCP tool `vm_list_snapshots` |\n| 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 |\n\n### 4. Scheduled Scanning & Notifications\n\n| Feature | Details |\n|---------|---------|\n| Daemon | APScheduler-based, configurable interval (default 15 min) |\n| Multi-target Scan | Sequentially scan all configured vCenter/ESXi targets |\n| Scan Content | Alarms + Events + Host logs (hostd, vmkernel, vpxd) |\n| Log Analysis | Regex pattern matching: error, fail, critical, panic, timeout |\n| Structured Log | JSONL output to `~/.vmware-monitor/scan.log` |\n| Webhook | Slack, Discord, or any HTTP endpoint |\n| Daemon Management | `daemon start/stop/status`, PID file, graceful shutdown |\n\n### 5. Safety Features\n\n| Feature | Details |\n|---------|---------|\n| **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`](tests/eval/regression/test_read_only_enforcement.py)) |\n| **Audit Trail** | All queries logged to `~/.vmware-monitor/audit.log` (JSONL) |\n| **Password Protection** | `.env` file loading with permission check (warn if not 600) |\n| **SSL Self-signed Support** | `verify_ssl: false` — only for ESXi with self-signed certs in isolated labs; production should use CA-signed certificates |\n| **Prompt Injection Protection** | vSphere event messages and host logs are truncated, sanitized, and wrapped in boundary markers |\n| **Webhook Data Scope** | Sends monitoring summaries to user-configured URLs only — no third-party services by default |\n| **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](https://github.com/vmware-skills/VMware-AIops) only in dev/lab environments |\n\n### What's NOT Included (By Design)\n\nThese operations **do not exist** in this repository:\n\n- ❌ Power on/off, reset, suspend VMs\n- ❌ Create, delete, reconfigure VMs\n- ❌ Create, revert, delete snapshots\n- ❌ Clone or migrate VMs\n- ❌ `_double_confirm`, `_show_state_preview`, `_validate_vm_params`\n\nFor these operations, use the full [VMware-AIops](https://github.com/vmware-skills/VMware-AIops) repository.\n\n---\n\nRunning with local or small models? See [`skills/vmware-monitor/references/agent-guardrails.md`](skills/vmware-monitor/references/agent-guardrails.md).\n\n---\n\n## Common Workflows\n\n### Daily Health Check\n\n1. Check alarms: `vmware-monitor health alarms --target prod-vcenter`\n2. Review recent events: `vmware-monitor health events --hours 24 --severity warning`\n3. List hosts: `vmware-monitor inventory hosts` — check connection state and memory usage\n\n### Investigate a Specific Object (drill-down)\n\nOne call correlates the object with its surrounding infrastructure and recent history — see [⚡ Quick Investigation Reports](#-quick-investigation-reports) above.\n\n1. Start from triage: `vmware-monitor attention` (all vCenters) or `vmware-monitor summary` (one)\n2. Drill into what it flags: `vmware-monitor investigate vm <name>` (or `host` / `datastore`)\n3. Widen the event window with `--hours 72`; share it with `--html` (offline snapshot)\n4. **If the name is unknown** → the teaching error names how to list objects (`inventory vms/hosts`, `list_all_datastores`)\n\n### Set Up Continuous Monitoring\n\n1. Configure webhook in `~/.vmware-monitor/config.yaml`\n2. Start daemon: `vmware-monitor daemon start`\n3. Daemon scans every 15 min, sends alerts to Slack/Discord\n\n---\n\n## Troubleshooting\n\n### Alarms returns empty but vCenter shows alarms\n\nThe `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`.\n\n### \"Connection refused\" error\n\n1. Run `vmware-monitor doctor` to diagnose\n2. Verify target hostname/IP and port (443) in `config.yaml`\n3. For self-signed certs: set `verify_ssl: false`\n\n### Events returns too many results\n\nUse severity filter: `--severity warning` (default) filters out info-level events. Use `--hours 4` to narrow the time range.\n\n### VM info shows \"guest_os: unknown\"\n\nVMware Tools not installed or not running in the guest. Install/start VMware Tools for guest OS detection, IP address, and guest family info.\n\n### Doctor passes but commands fail with timeout\n\nvCenter may be under heavy load. Try targeting a specific ESXi host directly instead of vCenter, or increase connection timeout in `config.yaml`.\n\n---\n\n## Supported AI Platforms\n\n| Platform | Status | Config File | AI Model |\n|----------|--------|-------------|----------|\n| **Claude Code** | ✅ Native Skill | `skills/vmware-monitor/SKILL.md` | Anthropic Claude |\n| **Gemini CLI** | ✅ Context file + MCP | `skills/vmware-monitor/SKILL.md` | Google Gemini |\n| **OpenAI Codex CLI** | ✅ Skill + AGENTS.md | `skills/vmware-monitor/SKILL.md` | OpenAI GPT |\n| **Aider** | ✅ Conventions | `skills/vmware-monitor/SKILL.md` | Any (cloud + local) |\n| **Continue CLI** | ✅ Rules | `skills/vmware-monitor/SKILL.md` | Any (cloud + local) |\n| **Trae IDE** | ✅ Rules | `skills/vmware-monitor/SKILL.md` | Claude/DeepSeek/GPT-4o |\n| **Kimi Code CLI** | ✅ Skill | `skills/vmware-monitor/SKILL.md` | Moonshot Kimi |\n| **MCP Server** | ✅ MCP Protocol | `vmware_monitor/mcp_server/` | Any MCP client |\n| **Python CLI** | ✅ Standalone | N/A | N/A |\n\n### Platform Comparison\n\n| Feature | Claude Code | Gemini CLI | Codex CLI | Aider | Continue | Trae IDE | Kimi CLI |\n|---------|-------------|------------|-----------|-------|----------|----------|----------|\n| Cloud AI | Anthropic | Google | OpenAI | Any | Any | Multi | Moonshot |\n| Local models | — | — | — | Ollama | Ollama | — | — |\n| Skill system | SKILL.md | Context file | SKILL.md | — | Rules | Rules | SKILL.md |\n| MCP support | Native | Native | Via Skills | Third-party | Native | — | — |\n| Free tier | — | 60 req/min | — | Self-hosted | Self-hosted | — | — |\n\n### MCP Server Integrations\n\nThe vmware-monitor MCP server works with **any MCP-compatible agent or tool**. Ready-to-use configuration templates are in [`examples/mcp-configs/`](examples/mcp-configs/). All 32 tools are **read-only**, enforced by the allowlist gate described above.\n\n| Agent / Tool | Local Model Support | Config Template | Integration Guide |\n|-------------|:-------------------:|-----------------|-------------------|\n| **[Xiaoguai (小怪)](https://github.com/xiaoguai-agent/xiaoguai)** | ✅ Self-hosted, any LLM | [MCP setup](https://github.com/xiaoguai-agent/xiaoguai/blob/main/docs/book/src/api/mcp.md) | [Guide](https://github.com/xiaoguai-agent/xiaoguai) |\n| **[Goose](https://github.com/block/goose)** | ✅ Ollama, LM Studio | [`goose.json`](examples/mcp-configs/goose.json) | [Guide](docs/integrations/goose.md) |\n| **[LocalCowork](https://github.com/Liquid4All/localcowork)** | ✅ Fully offline | [`localcowork.json`](examples/mcp-configs/localcowork.json) | [Guide](docs/integrations/localcowork.md) |\n| **[mcp-agent](https://github.com/lastmile-ai/mcp-agent)** | ✅ Ollama, vLLM | [`mcp-agent.yaml`](examples/mcp-configs/mcp-agent.yaml) | [Guide](docs/integrations/mcp-agent.md) |\n| **VS Code Copilot** | — | [`vscode-copilot.json`](examples/mcp-configs/vscode-copilot.json) | [Guide](docs/integrations/vscode-copilot.md) |\n| **Cursor** | — | [`cursor.json`](examples/mcp-configs/cursor.json) | — |\n| **Continue** | ✅ Ollama | [`continue.yaml`](examples/mcp-configs/continue.yaml) | [Guide](docs/integrations/continue.md) |\n| **Claude Code** | — | [`claude-code.json`](examples/mcp-configs/claude-code.json) | — |\n\n> **[Xiaoguai (小怪)](https://github.com/xiaoguai-agent/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](https://github.com/xiaoguai-agent/xiaoguai/blob/main/docs/book/src/api/mcp.md).\n\n**Fully local operation** (no cloud API required):\n\n```bash\n# Aider + Ollama + vmware-monitor (via SKILL.md)\naider --conventions skills/vmware-monitor/SKILL.md --model ollama/qwen2.5-coder:32b\n\n# Any MCP agent + local model + vmware-monitor MCP server\n# See examples/mcp-configs/ for your agent's config format\n```\n\n---\n\n## Installation\n\n### Step 0: Prerequisites\n\n```bash\n# Python 3.10+ required\npython3 --version\n\n# Node.js 18+ required for Gemini CLI and Codex CLI\nnode --version\n```\n\n### Step 1: Clone & Install Python Backend\n\n```bash\ngit clone https://github.com/vmware-skills/VMware-Monitor.git\ncd VMware-Monitor\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -e .\n```\n\n### Step 2: Configure\n\n```bash\nmkdir -p ~/.vmware-monitor\ncp config.example.yaml ~/.vmware-monitor/config.yaml\n# Edit config.yaml with your vCenter/ESXi targets\n```\n\nSet passwords via `.env` file (recommended):\n```bash\ncp .env.example ~/.vmware-monitor/.env\nchmod 600 ~/.vmware-monitor/.env\n# Edit and fill in your passwords\n```\n\n> **Security note**: Prefer `.env` file over command-line `export` to avoid passwords appearing in shell history. `config.yaml` stores only hostnames, ports, and a reference to the `.env` file — 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.\n\nPassword environment variable naming convention:\n```\nVMWARE_{TARGET_NAME_UPPER}_PASSWORD\n# Replace hyphens with underscores, UPPERCASE\n# Example: target \"home-esxi\" → VMWARE_HOME_ESXI_PASSWORD\n# Example: target \"prod-vcenter\" → VMWARE_PROD_VCENTER_PASSWORD\n```\n\n### Step 3: Connect Your AI Tool\n\nChoose one (or more) of the following:\n\n---\n\n#### Option A: Claude Code\n\n**Method 1: Skills.sh or ClawHub (recommended)**\n\nEither installer places the skill in Claude Code's skills directory for you:\n\n```bash\nnpx skills add vmware-skills/VMware-Monitor\n# or\nclawhub install @zw008/vmware-monitor\n```\n\n**Method 2: Manual skill install**\n\n```bash\ngit clone https://github.com/vmware-skills/VMware-Monitor.git\ncd VMware-Monitor\n\n# Copy the skill into Claude Code's personal skills directory\nmkdir -p ~/.claude/skills/vmware-monitor\ncp -r skills/vmware-monitor/. ~/.claude/skills/vmware-monitor/\n```\n\nFor tool access (not just skill context), also register the MCP server:\n\n```bash\nclaude mcp add vmware-monitor -- vmware-monitor mcp\n```\n\nRestart Claude Code, then:\n```\n> Show me all VMs on esxi-lab.example.com\n```\n\n---\n\n#### Option B: Gemini CLI\n\n```bash\n# Install Gemini CLI\nnpm install -g @google/gemini-cli\n\n# Load the skill as project context (Gemini CLI reads GEMINI.md on startup)\ncp skills/vmware-monitor/SKILL.md ./GEMINI.md\n```\n\nFor tool access (not just context), register the MCP server in `~/.gemini/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vmware-monitor\": {\n      \"command\": \"vmware-monitor\",\n      \"args\": [\"mcp\"],\n      \"env\": { \"VMWARE_MONITOR_CONFIG\": \"~/.vmware-monitor/config.yaml\" }\n    }\n  }\n}\n```\n\nThen start Gemini CLI:\n```\ngemini\n> Show me all VMs on my ESXi host\n```\n\n---\n\n#### Option C: OpenAI Codex CLI\n\n```bash\n# Install Codex CLI\nnpm i -g @openai/codex\n# Or on macOS:\n# brew install --cask codex\n\n# Copy skill to Codex skills directory\nmkdir -p ~/.codex/skills/vmware-monitor\ncp skills/vmware-monitor/SKILL.md ~/.codex/skills/vmware-monitor/SKILL.md\n\n# Copy AGENTS.md to project root\ncp skills/vmware-monitor/SKILL.md ./AGENTS.md\n```\n\nThen start Codex CLI:\n```bash\ncodex --enable skills\n> List all VMs on my ESXi\n```\n\n---\n\n#### Option D: Aider (supports local models)\n\n```bash\n# Install Aider\npip install aider-chat\n\n# Install Ollama for local models (optional)\n# macOS:\nbrew install ollama\nollama pull qwen2.5-coder:32b\n\n# Run with cloud API\naider --conventions skills/vmware-monitor/SKILL.md\n\n# Or with local model via Ollama\naider --conventions skills/vmware-monitor/SKILL.md \\\n  --model ollama/qwen2.5-coder:32b\n```\n\n---\n\n#### Option E: Continue CLI (supports local models)\n\n```bash\n# Install Continue CLI\nnpm i -g @continuedev/cli\n\n# Copy rules file\nmkdir -p .continue/rules\ncp skills/vmware-monitor/SKILL.md .continue/rules/vmware-monitor.md\n```\n\nConfigure `~/.continue/config.yaml` for local model:\n```yaml\nmodels:\n  - name: local-coder\n    provider: ollama\n    model: qwen2.5-coder:32b\n```\n\nThen:\n```bash\ncn\n> Check ESXi health and alarms\n```\n\n---\n\n#### Option F: Trae IDE\n\nCopy the rules file to your project's `.trae/rules/` directory:\n\n```bash\nmkdir -p .trae/rules\ncp skills/vmware-monitor/SKILL.md .trae/rules/project_rules.md\n```\n\nTrae IDE's Builder Mode reads `.trae/rules/` Markdown files at startup.\n\n> **Note**: You can also install Claude Code extension in Trae IDE and use `.claude/skills/` format directly.\n\n---\n\n#### Option G: Kimi Code CLI\n\n```bash\n# Copy skill file to Kimi skills directory\nmkdir -p ~/.kimi/skills/vmware-monitor\ncp skills/vmware-monitor/SKILL.md ~/.kimi/skills/vmware-monitor/SKILL.md\n```\n\n---\n\n#### Option H: MCP Server (Glama / Claude Desktop)\n\nThe MCP server exposes VMware read-only monitoring as tools via the [Model Context Protocol](https://modelcontextprotocol.io). Works with any MCP-compatible client (Claude Desktop, Cursor, etc.).\n\n**After `uv tool install vmware-monitor`, start the MCP server with one command** (v1.5.15+):\n\n```bash\n# Recommended — single command, no network re-resolve\nvmware-monitor mcp\n\n# With a custom config path\nVMWARE_MONITOR_CONFIG=/path/to/config.yaml vmware-monitor mcp\n```\n\n**Claude Desktop config** (`claude_desktop_config.json`):\n```json\n{\n  \"mcpServers\": {\n    \"vmware-monitor\": {\n      \"command\": \"vmware-monitor\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"VMWARE_MONITOR_CONFIG\": \"/path/to/config.yaml\"\n      }\n    }\n  }\n}\n```\n\n<details>\n<summary>Alternative: uvx (no install) or legacy entry point</summary>\n\n```bash\n# Run without installing (requires PyPI access each launch)\nuvx --from vmware-monitor vmware-monitor mcp\n\n# Legacy entry point (still works, kept for backward compatibility)\nvmware-monitor-mcp\n```\n\n> **Behind a corporate TLS proxy?** uvx may fail with `invalid peer certificate: UnknownIssuer`.\n> Use the recommended `vmware-monitor mcp` form above (no network needed), or set `UV_NATIVE_TLS=true`.\n\n</details>\n\n\n---\n\n#### Option I: Standalone CLI (no AI)\n\n```bash\n# Already installed in Step 1\nsource .venv/bin/activate\n\nvmware-monitor inventory vms --target home-esxi\nvmware-monitor health alarms --target home-esxi\nvmware-monitor vm info my-vm --target home-esxi\n```\n\n---\n\n## Update / Upgrade\n\nAlready installed? Re-run the install command for your channel to get the latest version:\n\n| Install Channel | Update Command |\n|----------------|----------------|\n| ClawHub | `clawhub install @zw008/vmware-monitor` |\n| Skills.sh | `npx skills add vmware-skills/VMware-Monitor` |\n| Git clone | `cd VMware-Monitor && git pull origin main && uv pip install -e .` |\n| uv | `uv tool install vmware-monitor --force` |\n\nCheck your current version: `vmware-monitor --version`\n\n---\n\n## Chinese Cloud Models\n\nFor users in China who prefer domestic cloud APIs or have limited access to overseas services.\n\n### DeepSeek\n\n```bash\nexport DEEPSEEK_API_KEY=\"your-key\"\naider --conventions skills/vmware-monitor/SKILL.md \\\n  --model deepseek/deepseek-coder\n```\n\n### Qwen (Alibaba Cloud)\n\n```bash\nexport DASHSCOPE_API_KEY=\"your-key\"\naider --conventions skills/vmware-monitor/SKILL.md \\\n  --model qwen/qwen-coder-plus\n```\n\n### Local Models (Aider + Ollama)\n\nFor fully offline operation — no cloud API, no internet, full privacy.\n\n```bash\nbrew install ollama\nollama pull qwen2.5-coder:32b\nollama serve\n\naider --conventions skills/vmware-monitor/SKILL.md \\\n  --model ollama/qwen2.5-coder:32b\n```\n\n---\n\n## CLI Reference\n\n```bash\n# Diagnostics\nvmware-monitor doctor                   # Check environment, config, connectivity\nvmware-monitor doctor --skip-auth       # Skip vSphere auth check (faster)\n\n# MCP Config Generator\nvmware-monitor mcp-config generate --agent goose        # Generate config for Goose\nvmware-monitor mcp-config generate --agent claude-code  # Generate config for Claude Code\nvmware-monitor mcp-config list                          # List all supported agents\n\n# Inventory\nvmware-monitor inventory vms [--target <name>]\nvmware-monitor inventory vms --limit 10 --sort-by memory_mb   # Top 10 VMs by memory\nvmware-monitor inventory vms --power-state poweredOn           # Only powered-on VMs\nvmware-monitor inventory vms --sort-by folder_path             # Group VMs by inventory folder\n# All `inventory vms` results include a `folder_path` field (e.g. `/Datacenters/Production/Web Tier`).\n# MCP tool `list_virtual_machines` additionally supports `folder_filter=\"Production\"` for case-insensitive folder-tree search.\nvmware-monitor inventory hosts [--target <name>]\nvmware-monitor inventory datastores [--target <name>]\nvmware-monitor inventory clusters [--target <name>]\n\n# Health\nvmware-monitor health alarms [--target <name>]\nvmware-monitor health events [--hours 24] [--severity warning]\n\n# VM Info (read-only)\nvmware-monitor vm info <vm-name>\nvmware-monitor vm snapshot-list <vm-name>\n\n# Scanning & Daemon\nvmware-monitor scan now [--target <name>]\nvmware-monitor daemon start\nvmware-monitor daemon stop\nvmware-monitor daemon status\n```\n\n---\n\n## Configuration\n\nSee `config.example.yaml` for all options.\n\n| Section | Key | Default | Description |\n|---------|-----|---------|-------------|\n| targets | name | — | Friendly name |\n| targets | host | — | vCenter/ESXi hostname or IP |\n| targets | type | vcenter | `vcenter` or `esxi` |\n| targets | port | 443 | Connection port |\n| targets | verify_ssl | true | Verify the target's TLS certificate (set false only for self-signed lab hosts) |\n| scanner | interval_minutes | 15 | Scan frequency |\n| scanner | severity_threshold | warning | Min severity: critical/warning/info |\n| scanner | lookback_hours | 1 | How far back to scan |\n| notify | log_file | ~/.vmware-monitor/scan.log | JSONL log output |\n| notify | webhook_url | — | Webhook endpoint (Slack, Discord, etc.) |\n\n---\n\n## Project Structure\n\n```\nVMware-Monitor/\n├── skills/                        # Skills index (npx skills add)\n│   └── vmware-monitor/\n│       ├── SKILL.md\n│       └── references/            # Detailed docs loaded on-demand\n├── vmware_monitor/                # Python backend (read-only only)\n│   ├── config.py                  # YAML + .env config\n│   ├── connection.py              # Multi-target pyVmomi\n│   ├── cli.py                     # Typer CLI (read-only commands only)\n│   ├── ops/\n│   │   ├── inventory.py           # VMs, hosts, datastores, clusters\n│   │   ├── health.py              # Alarms, events, sensors\n│   │   └── vm_info.py             # VM info, snapshot list (read-only)\n│   ├── scanner/                   # Log scanning daemon\n│   ├── notify/                    # Notifications (JSONL + webhook)\n│   └── mcp_server/                # MCP server (read-only tools only)\n├── examples/mcp-configs/          # MCP client config templates\n├── tests/                         # Test suite\n├── smithery.yaml                  # Smithery marketplace config\n├── RELEASE_NOTES.md\n├── config.example.yaml\n└── pyproject.toml\n```\n\n## Related Projects\n\n| Skill | Scope | Tools | Install |\n|-------|-------|:-----:|---------|\n| **[vmware-monitor](https://github.com/vmware-skills/VMware-Monitor)** | Read-only monitoring, alarms, events | 27 | `uv tool install vmware-monitor` |\n| **[vmware-aiops](https://github.com/vmware-skills/VMware-AIops)** | VM lifecycle, deployment, guest ops, clusters | 49 | `uv tool install vmware-aiops` |\n| **[vmware-storage](https://github.com/vmware-skills/VMware-Storage)** | Datastores, iSCSI, vSAN | 11 | `uv tool install vmware-storage` |\n| **[vmware-vks](https://github.com/vmware-skills/VMware-VKS)** | Tanzu Namespaces, TKC cluster lifecycle | 20 | `uv tool install vmware-vks` |\n\n---\n\n## Troubleshooting & Contributing\n\nIf you encounter any errors or issues, please send the error message, logs, or screenshots to **zhouwei008@gmail.com**. Contributions are welcome!\n\n## License\n\nMIT\n",
  "bytes": 32016,
  "sha": "155077fa208c552ba58f214486f3739c75e716df93427273d93c2ee0e5d7d97a",
  "repo_slug": "vmware-skills/vmware-monitor",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_vmware_skills_vmware_monitor_28132677/readme"
}