VMware Monitor

io.github.vmware-skills由 GitHub 帳號 vmware-skills 發布v2.5.0更新於 Nov 1, 2026

Read-only VMware vCenter/ESXi monitoring, 33 MCP tools; vSphere calls allowlist-gated in tests.

概覽

AI 產生的概覽

唯讀的 VMware vCenter/ESXi 監控伺服器,提供 33 個工具檢視清單、健康狀態、告警、事件與效能,不含任何破壞性操作。

可以做什麼
  • 列出並檢視清單:虛擬機、ESXi 主機、資料存放區、叢集、網路、資源集區、授權、憑證、NTP 與主機服務
  • 檢查健康與排查:叢集健康彙總、跨 vCenter 待關注清單、告警、事件、硬體感測器、主機日誌掃描、進行中工作與工作階段
  • 深入單一物件:針對虛擬機、主機或資料存放區的關聯調查包,以及虛擬機詳細資料、快照和即時 CPU/記憶體/磁碟/網路效能
  • 檢視快照與備份:全面掃描老舊快照,以及備份持有快照的時長
  • 檢查生命週期與容量:資料存放區精簡佈建超額配置、vLCM 修補合規與最近一次套用結果、記憶體分層、vCenter 部署規模,以及所用帳號具備的權限
適用情境
適合讓助理回答 vSphere 環境的問題——有哪些資源在執行、哪裡不健康、觸發了哪些告警或事件、還剩多少容量——同時讓環境維持嚴格唯讀。適用於單一 vCenter 排查,也適用於需要一份統一排序問題清單的多 vCenter 環境。
執行需求
以本機 Python 套件執行(需 Python 3.10+),可用 uvx、uv tool install 或 pip 安裝;清單未宣告驗證機制。需要設定檔,由 VMWARE_MONITOR_CONFIG 指定,預設為 ~/.vmware-monitor/config.yaml,其中列出 vCenter/ESXi 目標(主機、連接埠、類型、verify_ssl)。目標密碼放在 .env 檔案中,使用 VMWARE_{TARGET_NAME_UPPER}_PASSWORD 變數。需要能透過網路存取 vCenter/ESXi 的 443 連接埠。
安裝前請注意
伺服器會以設定的帳號登入 vCenter/ESXi,建議使用專用的唯讀角色帳號;讀取主機日誌需要 Global.Diagnostics 權限。密碼存放在 .env 檔案中,應設為 chmod 600,config.yaml 只應保存主機名稱和對該檔案的參照。選用的 webhook 告警會把去識別化後的告警、事件與日誌文字傳送到你設定的網址,其中可能包含主機名稱、IP 與使用者名稱。工具呼叫與 CLI 查詢會寫入本機稽核資料庫與日誌。唯讀限制依賴程式碼層的白名單檢查,只有執行測試套件時才會生效。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 VMware Monitor,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

VMware Monitor

For a read-only check of this skill with your model and agent host, use the shared model-fit self-test in the marketplace root.

Author: Wei Zhou, VMware by Broadcom — [email protected] 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 — 33 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.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 fourteen 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 dedicated account holding vCenter's built-in Read-Only role (which reads need more than that role).

What "read-only" does not cover. It is a claim about vCenter/ESXi: no code path changes their state. On vCenter the skill opens only its own login session and short-lived query handles it releases. It does write locally: ~/.vmware-monitor/config.yaml and .env (via init; plaintext passwords in .env are rewritten as b64: on load), audit logs (~/.vmware/audit.db for MCP calls, ~/.vmware-monitor/audit.log for CLI commands), --html snapshots in ~/vmware-health/, and — only after daemon start — daemon.pid, scan.log, and posts to a webhook you configured. Full table: setup guide.

[ClawHub] [Skills.sh] [Claude Code Marketplace] [License: MIT]

Companion Skills

SkillScopeToolsInstall
vmware-aiops ⭐ entry pointVM lifecycle, deployment, guest ops, clusters49uv tool install vmware-aiops
vmware-storageDatastores, iSCSI, vSAN11uv tool install vmware-storage
vmware-vksTanzu Namespaces, TKC cluster lifecycle20uv tool install vmware-vks
vmware-nsxNSX networking: segments, gateways, NAT, IPAM33uv tool install vmware-nsx-mgmt
vmware-nsx-securityDFW microsegmentation, security groups, Traceflow21uv tool install vmware-nsx-security
vmware-ariaAria Ops metrics, alerts, capacity planning28uv tool install vmware-aria
vmware-aviAVI (NSX ALB) load balancing, AKO on Kubernetes28uv tool install vmware-avi
vmware-hardenCompliance baselines, drift detection (read-only)6uv tool install vmware-harden
vmware-log-insightCentralized syslog search, aggregation, alerts7uv tool install vmware-log-insight
vmware-debugIncident timeline correlation, root cause2uv tool install vmware-debug
vmware-pilotMulti-step workflow orchestration, approval gates13uv tool install vmware-pilot

Upgrading to 2.0

2.0 renames 23 of its MCP tools so every name starts with a verb (e.g. active_sessions → list_active_sessions, active_tasks → list_active_tasks, certificate_status → get_certificate_status). The full old → new table is in RELEASE_NOTES.md. Nothing else changes: same tools, parameters, safety gates and CLI commands. If an agent prompt, script or ~/.vmware/rules.yaml names a tool, update it — though deny rules written with the old names keep working with vmware-policy ≥ 1.18 (vmware-audit policy lists any rule the renames widened), and vmware-pilot ≥ 1.13 translates old names in saved workflows. If an install older than 2.0 shares that rules.yaml, give it vmware-policy ≥ 1.18.2 too: it matches each rule against both the old and the new name, so one file serves both.

⚡ Quick Investigation Reports

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).

QuestionCommandWhat it correlates
"Is anything on fire?" across all clustersvmware-monitor summaryEvery cluster's hosts + VM power + live CPU/mem + alarms → ranked top-N issues + per-cluster status
"What needs attention now?" across all vCentersvmware-monitor attentionEvery 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
bash
# Triage the estate, then drill into whatever it flags:vmware-monitor attention                         # what needs attention now, all vCentersvmware-monitor summary --top 5                   # is anything on fire, one vCentervmware-monitor investigate vm web-01 --hours 72  # everything around a VM, 72h event windowvmware-monitor investigate vm web-01 --html      # → offline snapshot in ~/vmware-health/

Unknown object names return a teaching error naming exactly how to list objects. Via MCP these are the tools get_cluster_health_summary, get_cross_vcenter_attention, investigate_vm, investigate_host, investigate_datastore — the model calls them and explains the aggregated result in operational language. Full flags: references/cli-reference.md.

MCP Apps cluster health view (unreleased)

get_cluster_health_summary also advertises ui://vmware-monitor/cluster-health.html to MCP Apps hosts. A supporting host can render a live cluster dashboard and use its Investigate buttons to call the read-only host or datastore tool through the same MCP server, role, Policy and audit path. The HTML is self-contained and renders vSphere names as text. Hosts without MCP Apps support receive the same tool result as before. The view and real vCenter data have been verified through the production loopback HTTP transport; visual rendering in a current third-party host remains to be verified. This is separate from the CLI's offline --html snapshot.

Quick Install (Recommended)

Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, and 30+ AI agents:

bash
# Via Skills.shnpx skills add vmware-skills/VMware-Monitor
# Via ClawHubclawhub install @zw008/vmware-monitor

PyPI Install (No GitHub Access Required)

bash
# Install via uv (recommended)uv tool install vmware-monitor
# Or via pippip install vmware-monitor
# China mainland mirror (faster)pip install vmware-monitor -i https://pypi.tuna.tsinghua.edu.cn/simple

Offline / Air-Gapped Install (from source)

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:

bash
# From the source tree — a normal (non-editable) install builds a wheel:pip install .              # NOT  pip install -e .
# ...or upgrade pip first, and editable works too:pip install --upgrade pip && pip install -e .

For a truly air-gapped host, build the wheels on a connected machine and copy them over — the target then needs no network:

bash
# On a connected machine, collect this package + its dependencies as wheels:pip wheel . -w dist        # → dist/*.whl   (or: uv build, for just this package)
# Copy dist/ to the air-gapped host, then install offline:pip install --no-index --find-links dist vmware-monitor

Capabilities (Read-Only)

Architecture

User (Natural Language)  ↓AI CLI Tool (Claude Code / Gemini / Codex / Aider / Continue / Trae / Kimi)  ↓ Reads SKILL.md / AGENTS.md / rules  ↓vmware-monitor CLI (read-only)  ↓ pyVmomi (vSphere SOAP API)  ↓vCenter Server ──→ ESXi Clusters ──→ VMs    orESXi Standalone ──→ VMs

Version Compatibility

vSphere / VCF VersionSupportNotes
VCF 9.1 / vSphere 9.1✅ FullReleased 2026-05-12. pyVmomi <10.0 resolves and connects via SOAP.
VCF 9.0 / vSphere 9.0✅ FullpyVmomi 8.0.3+ connects against vSphere 9 SOAP API.
8.0 / 8.0U1-U3✅ FullpyVmomi 8.0.3+
7.0 / 7.0U1-U3✅ FullAll read-only APIs supported
6.7✅ CompatibleBackward-compatible, tested
6.5✅ CompatibleBackward-compatible, tested
Official Broadcom References

1. Inventory

FeaturevCenterESXiDetails
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 onlyCPU 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

2. Health & Monitoring

FeaturevCenterESXiDetails
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); MCP interpretation_note bounds aggregate sensor conclusions — CLI health sensors, MCP get_host_sensors
Host Services✅✅hostd, vpxa running/stopped status — CLI health services, MCP get_host_services
Account Access✅✅Which account the server uses and whether it holds each tool's privileges on the root folder — CLI access-info, MCP get_access_info

Monitored Event Types:

CategoryEvents
VM FailuresVmFailedToPowerOnEvent, VmDiskFailedEvent, VmFailoverFailed
Host IssuesHostConnectionLostEvent, HostShutdownEvent, HostIpChangedEvent
StorageDatastoreCapacityIncreasedEvent, SCSI high latency
HA/DRSDasHostFailedEvent, DrsVmMigratedEvent, DrsSoftRuleViolationEvent
AuthUserLoginSessionEvent, BadUsernameSessionEvent

3. VM Info & Snapshot List (Read-Only)

FeatureDetails
VM InfoName, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs, folder_path
Snapshot ListList existing snapshots with name and creation time (no create/revert/delete) — CLI vm snapshot-list, MCP tool list_vm_snapshots
Backup WindowHow long backups held a snapshot open on a VM, from vCenter task history — CLI snapshots backup-window, MCP tool get_vm_backup_snapshot_history. A lower bound on the backup job, never its official duration

4. Scheduled Scanning & Notifications

FeatureDetails
DaemonAPScheduler-based, configurable interval (default 15 min)
Multi-target ScanSequentially scan all configured vCenter/ESXi targets
Scan ContentEach cycle: triggered alarms, vCenter events from the last lookback_hours, and new lines in the ESXi host logs hostd, vmkernel, vpxa
Host LogsRead incrementally: each line is reported once per daemon run (a restarted daemon re-reads each log's last 500 lines once). A rotated log, or more than 500 new lines between cycles, adds an info row saying which lines were not scanned. Reading host logs needs the Global.Diagnostics privilege, which vCenter's Read-Only role does not include; a log that cannot be read becomes an info row with the reason, never a silent "all clear"
Log AnalysisHost-log lines matching error, fail, critical, panic, lost access, cannot, timeout, refused, corrupt — lines with critical/panic/corrupt are critical, the rest warning
Structured LogJSONL output to ~/.vmware-monitor/scan.log — every issue, info rows included
WebhookSlack, Discord, or any HTTP endpoint. Receives every critical issue and every alarm/event warning; host-log warnings go to the scan log only, and info rows are never sent
Cycle SummaryOne line per cycle in the daemon's log output: findings (and how many went to the webhook), unreadable host logs, logs with unscanned lines, failed passes. If any pass failed or a target could not be reached it reads Scan INCOMPLETE, never "all clear"
Daemon Managementdaemon start/stop/status, PID file, graceful shutdown

5. Safety Features

FeatureDetails
Code-Level IsolationIndependent 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 TrailMCP tool calls and every CLI command that reaches vCenter logged to ~/.vmware/audit.db (SQLite, via vmware-policy); CLI queries also append to ~/.vmware-monitor/audit.log (JSONL)
Password Protection.env file loading with permission check (warn if not 600)
SSL Self-signed Supportverify_ssl: false — only for ESXi with self-signed certs in isolated labs; production should use CA-signed certificates
Prompt Injection ProtectionvSphere event messages and host logs are truncated, sanitized, and wrapped in boundary markers
Webhook Data ScopeDisabled by default. When configured, the daemon posts to your URL only: every critical issue (alarms, events, ESXi log lines matching critical/panic/corrupt, targets it could not connect to) and every alarm/event warning — host-log warnings stay in the scan log, and info rows are never sent. Each issue carries its entity name and message: sanitized alarm, event, or ESXi log text, or the connection error, which can include host names, IPs, and user names. No credentials from the skill's config or .env are sent
Production RecommendedAI 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

What's NOT Included (By Design)

These operations do not exist in this repository:

  • ❌ Power on/off, reset, suspend VMs
  • ❌ Create, delete, reconfigure VMs
  • ❌ Create, revert, delete snapshots
  • ❌ Clone or migrate VMs
  • ❌ _double_confirm, _show_state_preview, _validate_vm_params

For these operations, use the full VMware-AIops repository.


Running with local or small models? See skills/vmware-monitor/references/agent-guardrails.md.


Common Workflows

Daily Health Check

  1. Check alarms: vmware-monitor health alarms --target prod-vcenter
  2. Review recent events: vmware-monitor health events --hours 24 --severity warning
  3. List hosts: vmware-monitor inventory hosts — check connection state and memory usage

Investigate a Specific Object (drill-down)

One call correlates the object with its surrounding infrastructure and recent history — see ⚡ Quick Investigation Reports above.

  1. Start from triage: vmware-monitor attention (all vCenters) or vmware-monitor summary (one)
  2. Drill into what it flags: vmware-monitor investigate vm <name> (or host / datastore)
  3. Widen the event window with --hours 72; share it with --html (offline snapshot)
  4. If the name is unknown → the teaching error names how to list objects (inventory vms/hosts, list_all_datastores)

Set Up Continuous Monitoring

  1. Configure webhook in ~/.vmware-monitor/config.yaml
  2. Start daemon: vmware-monitor daemon start
  3. Daemon scans every 15 min, sends alerts to Slack/Discord

Troubleshooting

Alarms returns empty but vCenter shows alarms

The 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.

"Connection refused" error

  1. Run vmware-monitor doctor to diagnose
  2. Verify target hostname/IP and port (443) in config.yaml
  3. For self-signed certs: trust the CA; set verify_ssl: false only for an isolated lab host

Events returns too many results

Use severity filter: --severity warning (default) filters out info-level events. Use --hours 4 to narrow the time range.

VM info shows "guest_os: unknown"

VMware Tools not installed or not running in the guest. Install/start VMware Tools for guest OS detection, IP address, and guest family info.

Doctor passes but commands fail with timeout

vCenter may be under heavy load. Try targeting a specific ESXi host directly instead of vCenter, or increase connection timeout in config.yaml.

doctor reports "no vSphere role", or every command fails with "session is not authenticated"

The account logs in but has no vSphere role, so vCenter gives it no session (AIops#47). Assign it a role (Read-Only or higher) on the vCenter root folder: Administration > Access Control > Global Permissions. Changing the password will not help. vmware-monitor doctor reports this case by name, and attention counts such a target as unread (overall at least WARN).


Supported AI Platforms

PlatformStatusConfig FileAI Model
Claude Code✅ Native Skillskills/vmware-monitor/SKILL.mdAnthropic Claude
Gemini CLI✅ Context file + MCPskills/vmware-monitor/SKILL.mdGoogle Gemini
OpenAI Codex CLI✅ Skill + AGENTS.mdskills/vmware-monitor/SKILL.mdOpenAI GPT
Aider✅ Conventionsskills/vmware-monitor/SKILL.mdAny (cloud + local)
Continue CLI✅ Rulesskills/vmware-monitor/SKILL.mdAny (cloud + local)
Trae IDE✅ Rulesskills/vmware-monitor/SKILL.mdClaude/DeepSeek/GPT-4o
Kimi Code CLI✅ Skillskills/vmware-monitor/SKILL.mdMoonshot Kimi
MCP Server✅ MCP Protocolvmware_monitor/mcp_server/Any MCP client
Python CLI✅ StandaloneN/AN/A

Platform Comparison

FeatureClaude CodeGemini CLICodex CLIAiderContinueTrae IDEKimi CLI
Cloud AIAnthropicGoogleOpenAIAnyAnyMultiMoonshot
Local models———OllamaOllama——
Skill systemSKILL.mdContext fileSKILL.md—RulesRulesSKILL.md
MCP supportNativeNativeVia SkillsThird-partyNative——
Free tier—60 req/min—Self-hostedSelf-hosted——

MCP Server Integrations

The vmware-monitor MCP server works with any MCP-compatible agent or tool. Ready-to-use configuration templates are in examples/mcp-configs/. All 33 tools are read-only, enforced by the allowlist gate described above.

Agent / ToolLocal Model SupportConfig TemplateIntegration Guide
Xiaoguai (小怪)✅ Self-hosted, any LLMMCP setupGuide
Goose✅ Ollama, LM Studiogoose.jsonGuide
LocalCowork✅ Fully offlinelocalcowork.jsonGuide
mcp-agent✅ Ollama, vLLMmcp-agent.yamlGuide
VS Code Copilot—vscode-copilot.jsonGuide
Cursor—cursor.json—
Continue✅ Ollamacontinue.yamlGuide
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):

bash
# Aider + Ollama + vmware-monitor (via SKILL.md)aider --conventions skills/vmware-monitor/SKILL.md --model ollama/qwen2.5-coder:32b
# Any MCP agent + local model + vmware-monitor MCP server# See examples/mcp-configs/ for your agent's config format

Installation

Step 0: Prerequisites

bash
# Python 3.10+ requiredpython3 --version
# Node.js 18+ required for Gemini CLI and Codex CLInode --version

Step 1: Clone & Install Python Backend

bash
git clone https://github.com/vmware-skills/VMware-Monitor.gitcd VMware-Monitorpython3 -m venv .venvsource .venv/bin/activatepip install -e .

Step 2: Configure

bash
mkdir -p ~/.vmware-monitorcp config.example.yaml ~/.vmware-monitor/config.yaml# Edit config.yaml with your vCenter/ESXi targets

Set passwords via .env file (recommended):

bash
cp .env.example ~/.vmware-monitor/.envchmod 600 ~/.vmware-monitor/.env# Edit and fill in your passwords

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 go to user-configured URLs only and carry no credentials from your config — but they do carry vSphere's own alarm, event, and log text, which can include host names, IPs, and user names. We recommend a dedicated service account with vCenter's built-in Read-Only role.

Password environment variable naming convention:

VMWARE_{TARGET_NAME_UPPER}_PASSWORD# Replace hyphens with underscores, UPPERCASE# Example: target "home-esxi" → VMWARE_HOME_ESXI_PASSWORD# Example: target "prod-vcenter" → VMWARE_PROD_VCENTER_PASSWORD

Step 3: Connect Your AI Tool

Choose one (or more) of the following:


Option A: Claude Code

Method 1: Skills.sh or ClawHub (recommended)

Either installer places the skill in Claude Code's skills directory for you:

bash
npx skills add vmware-skills/VMware-Monitor# orclawhub install @zw008/vmware-monitor

Method 2: Manual skill install

bash
git clone https://github.com/vmware-skills/VMware-Monitor.gitcd VMware-Monitor
# Copy the skill into Claude Code's personal skills directorymkdir -p ~/.claude/skills/vmware-monitorcp -r skills/vmware-monitor/. ~/.claude/skills/vmware-monitor/

For tool access (not just skill context), also register the MCP server:

bash
claude mcp add vmware-monitor -- vmware-monitor mcp

Restart Claude Code, then:

> Show me all VMs on esxi-lab.example.com

Option B: Gemini CLI
bash
# Install Gemini CLInpm install -g @google/gemini-cli
# Load the skill as project context (Gemini CLI reads GEMINI.md on startup)cp skills/vmware-monitor/SKILL.md ./GEMINI.md

For tool access (not just context), register the MCP server in ~/.gemini/settings.json:

json
{  "mcpServers": {    "vmware-monitor": {      "command": "vmware-monitor",      "args": ["mcp"],      "env": { "VMWARE_MONITOR_CONFIG": "~/.vmware-monitor/config.yaml" }    }  }}

Then start Gemini CLI:

gemini> Show me all VMs on my ESXi host

Option C: OpenAI Codex CLI
bash
# Install Codex CLInpm i -g @openai/codex# Or on macOS:# brew install --cask codex
# Copy skill to Codex skills directorymkdir -p ~/.codex/skills/vmware-monitorcp skills/vmware-monitor/SKILL.md ~/.codex/skills/vmware-monitor/SKILL.md
# Copy AGENTS.md to project rootcp skills/vmware-monitor/SKILL.md ./AGENTS.md

Then start Codex CLI:

bash
codex --enable skills> List all VMs on my ESXi

Option D: Aider (supports local models)
bash
# Install Aiderpip install aider-chat
# Install Ollama for local models (optional)# macOS:brew install ollamaollama pull qwen2.5-coder:32b
# Run with cloud APIaider --conventions skills/vmware-monitor/SKILL.md
# Or with local model via Ollamaaider --conventions skills/vmware-monitor/SKILL.md \  --model ollama/qwen2.5-coder:32b

Option E: Continue CLI (supports local models)
bash
# Install Continue CLInpm i -g @continuedev/cli
# Copy rules filemkdir -p .continue/rulescp skills/vmware-monitor/SKILL.md .continue/rules/vmware-monitor.md

Configure ~/.continue/config.yaml for local model:

yaml
models:  - name: local-coder    provider: ollama    model: qwen2.5-coder:32b

Then:

bash
cn> Check ESXi health and alarms

Option F: Trae IDE

Copy the rules file to your project's .trae/rules/ directory:

bash
mkdir -p .trae/rulescp skills/vmware-monitor/SKILL.md .trae/rules/project_rules.md

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.


Option G: Kimi Code CLI
bash
# Copy skill file to Kimi skills directorymkdir -p ~/.kimi/skills/vmware-monitorcp skills/vmware-monitor/SKILL.md ~/.kimi/skills/vmware-monitor/SKILL.md

Option H: MCP Server (Glama / Claude Desktop)

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+):

bash
# Recommended — single command, no network re-resolvevmware-monitor mcp
# With a custom config pathVMWARE_MONITOR_CONFIG=/path/to/config.yaml vmware-monitor mcp

Claude Desktop config (claude_desktop_config.json):

json
{  "mcpServers": {    "vmware-monitor": {      "command": "vmware-monitor",      "args": ["mcp"],      "env": {        "VMWARE_MONITOR_CONFIG": "/path/to/config.yaml"      }    }  }}
Alternative: uvx (no install) or legacy entry point
bash
# Run without installing (requires PyPI access each launch)uvx --from vmware-monitor vmware-monitor mcp
# Legacy entry point (still works, kept for backward compatibility)vmware-monitor-mcp

Behind a corporate TLS proxy? uvx may fail with invalid peer certificate: UnknownIssuer. Use the recommended vmware-monitor mcp form above (no network needed), or set UV_NATIVE_TLS=true.


Option I: Standalone CLI (no AI)
bash
# Already installed in Step 1source .venv/bin/activate
vmware-monitor inventory vms --target home-esxivmware-monitor health alarms --target home-esxivmware-monitor vm info my-vm --target home-esxi

Update / Upgrade

Already installed? Re-run the install command for your channel to get the latest version:

Install ChannelUpdate Command
ClawHubclawhub install @zw008/vmware-monitor
Skills.shnpx skills add vmware-skills/VMware-Monitor
Git clonecd VMware-Monitor && git pull origin main && uv pip install -e .
uvuv tool install vmware-monitor --force

Check your current version: vmware-monitor --version


Chinese Cloud Models

For users in China who prefer domestic cloud APIs or have limited access to overseas services.

DeepSeek

bash
export DEEPSEEK_API_KEY="your-key"aider --conventions skills/vmware-monitor/SKILL.md \  --model deepseek/deepseek-coder

Qwen (Alibaba Cloud)

bash
export DASHSCOPE_API_KEY="your-key"aider --conventions skills/vmware-monitor/SKILL.md \  --model qwen/qwen-coder-plus

Local Models (Aider + Ollama)

For fully offline operation — no cloud API, no internet, full privacy.

bash
brew install ollamaollama pull qwen2.5-coder:32bollama serve
aider --conventions skills/vmware-monitor/SKILL.md \  --model ollama/qwen2.5-coder:32b

CLI Reference

bash
# Diagnosticsvmware-monitor doctor                   # Check environment, config, connectivityvmware-monitor doctor --skip-auth       # Skip vSphere auth check (faster)vmware-monitor access-info [--tool <mcp-tool>] [--target <name>]  # Account in use + privileges per tool
# MCP Config Generatorvmware-monitor mcp-config generate --agent goose        # Generate config for Goosevmware-monitor mcp-config generate --agent claude-code  # Generate config for Claude Codevmware-monitor mcp-config list                          # List all supported agents
# Inventoryvmware-monitor inventory vms [--target <name>]vmware-monitor inventory vms --limit 10 --sort-by memory_mb   # Top 10 VMs by memoryvmware-monitor inventory vms --power-state poweredOn           # Only powered-on VMsvmware-monitor inventory vms --sort-by folder_path             # Group VMs by inventory folder# All `inventory vms` results include a `folder_path` field (e.g. `/Datacenters/Production/Web Tier`).# MCP tool `list_virtual_machines` additionally supports `folder_filter="Production"` for case-insensitive folder-tree search.vmware-monitor inventory hosts [--target <name>]vmware-monitor inventory datastores [--target <name>]vmware-monitor inventory clusters [--target <name>]
# Healthvmware-monitor health alarms [--target <name>]vmware-monitor health events [--hours 24] [--severity warning]
# VM Info (read-only)vmware-monitor vm info <vm-name>vmware-monitor vm snapshot-list <vm-name>
# Scanning & Daemonvmware-monitor scan now [--target <name>]vmware-monitor daemon startvmware-monitor daemon stopvmware-monitor daemon status

Configuration

See config.example.yaml for all options.

SectionKeyDefaultDescription
targetsname—Friendly name
targetshost—vCenter/ESXi hostname or IP
targetstypevcentervcenter or esxi
targetsport443Connection port
targetsverify_ssltrueVerify the target's TLS certificate (set false only for self-signed lab hosts)
scannerinterval_minutes15Scan frequency
scannerseverity_thresholdwarningMin severity: critical/warning/info
scannerlookback_hours1How far back to scan
notifylog_file~/.vmware-monitor/scan.logJSONL log output
notifywebhook_url—Webhook endpoint (Slack, Discord, etc.)

Project Structure

VMware-Monitor/├── skills/                        # Skills index (npx skills add)│   └── vmware-monitor/│       ├── SKILL.md│       └── references/            # Detailed docs loaded on-demand├── vmware_monitor/                # Python backend (read-only only)│   ├── config.py                  # YAML + .env config│   ├── connection.py              # Multi-target pyVmomi│   ├── cli.py                     # Typer CLI (read-only commands only)│   ├── ops/│   │   ├── inventory.py           # VMs, hosts, datastores, clusters│   │   ├── health.py              # Alarms, events, sensors│   │   └── vm_info.py                 # VM info, snapshot list (read-only)│   ├── scanner/                   # Log scanning daemon│   ├── notify/                    # Notifications (JSONL + webhook)│   └── mcp_server/                # MCP server (read-only tools only)├── examples/mcp-configs/          # MCP client config templates├── tests/                         # Test suite├── smithery.yaml                  # Smithery marketplace config├── RELEASE_NOTES.md├── config.example.yaml└── pyproject.toml

Related Projects

SkillScopeToolsInstall
vmware-monitorRead-only monitoring, alarms, events27uv tool install vmware-monitor
vmware-aiopsVM lifecycle, deployment, guest ops, clusters49uv tool install vmware-aiops
vmware-storageDatastores, iSCSI, vSAN11uv tool install vmware-storage
vmware-vksTanzu Namespaces, TKC cluster lifecycle20uv tool install vmware-vks

Troubleshooting & Contributing

If you encounter any errors or issues, please send the error message, logs, or screenshots to [email protected]. Contributions are welcome!

Remote access (HTTPS) and limiting tools

By default vmware-monitor mcp speaks stdio to one local client and offers every tool. Two options change that (vmware-policy ≥ 1.21.0).

Serve over HTTPS so clients on other machines can connect. Every caller needs a bearer token:

bash
vmware-audit token create alice          # prints the token once; give it to alicevmware-audit token list                  # names onlyvmware-audit token revoke alice          # refused from its next request, no restartvmware-monitor mcp --transport https --host 0.0.0.0 --port 8443 \    --cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \    --public-name mcp.example.com

Connect a client (Claude Code shown; any MCP client that supports streamable HTTP and custom headers works):

bash
claude mcp add --transport http vmware-monitor https://mcp.example.com:8443/mcp \    --header "Authorization: Bearer $VMWARE_MCP_TOKEN"
json
{  "mcpServers": {    "vmware-monitor": {      "type": "http",      "url": "https://mcp.example.com:8443/mcp",      "headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }    }  }}
  • The server will not start without a token, refuses Host/Origin values outside --public-name, and checks before it binds that unauthenticated requests get 401. Use a certificate your clients trust for those names.
  • Behind a TLS-terminating reverse proxy on the same machine use --transport http --host 127.0.0.1 --public-name mcp.example.com and pass the Authorization header through.
  • Behind a load balancer or gateway on another machine, keep --transport https (a self-signed certificate is fine), list in --public-name the host name the balancer sends as Host, and have it forward Authorization. Its health probe can use GET /healthz, which needs no token and returns only {"status": "ok"} (vmware-policy ≥ 1.23.0).
  • Send traceparent or X-Request-ID with each request to have it stored on the audit row; vmware-audit log --correlation-id ID then finds the calls behind one platform request.
  • The audit log records each caller as token:<name>. Calls run side by side, with up to VMWARE_MCP_POOL_SIZE (default 2) sessions per target; each session is a login on the target, and a call waits at most 300 s for one.
  • Everyone who can reach the endpoint acts with this server's account. Tokens identify callers; they grant nothing on the platform. Run one endpoint per privilege level.
  • Several people or roles on one endpoint: run vmware-audit roles enable once, then give each token a role (vmware-audit token create NAME --role reader, or a role in roles.yaml naming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".

Limiting tools: every tool of this server is read-only, so --expose read changes nothing here; it exists for the write-capable skills. Least privilege comes from the account the server uses.

Details: skills/vmware-monitor/references/setup-guide.md ("Serving MCP over HTTPS", "Limiting which tools are offered").

License

MIT

來源:README.md,提交 03868e3

工具

33

list_virtual_machines

[READ] List virtual machines, with filtering, sorting, and field selection. Returns the family list envelope {items, returned, limit, total, truncated, hint}; ``total`` is the real post-filter count, so read ``truncated`` before summarising. Over 50 VMs with no limit/fields, only the first five fields below come back (``mode`` says which). ``vms`` is a deprecated pre-1.8.0 alias of ``items``, removed in 2.0 — read ``items``. Use this to resolve an exact VM name, then get_vm_info for detail or investigate_vm to drill into one; for a fleet-wide view start at get_cluster_health_summary instead.

輸入參數limitfieldstargetsort_byname_filterpower_statefolder_filter

list_esxi_hosts

[READ] List ESXi hosts with CPU cores, memory, version, VM count, and uptime. Returns the list envelope; ``total`` is the real host count. Static config only (cores, total GB) — use this to resolve a host name, then get_host_performance for live load or investigate_host to drill into one host.

輸入參數limittarget

list_all_datastores

[READ] List datastores with capacity, free space, type, and VM count. Returns the list envelope with a real ``total``. Raw free/used only — use this to resolve a datastore name, then get_datastore_capacity for thin-provisioning over-commit risk or investigate_datastore to drill into one datastore.

輸入參數limittarget

list_all_clusters

[READ] List clusters with host count, DRS/HA status, and resource totals. Returns the list envelope with a real ``total``. Each row's ``moid`` (e.g. domain-c123) is the cluster id the vLCM patch tools take. Static topology only — use this to resolve a cluster name, then get_cluster_health_summary, which supersedes stitching this with list_esxi_hosts and get_alarms yourself.

輸入參數limittarget

get_cluster_health_summary

[READ] One-glance health rollup for every cluster — "is anything on fire?". Start here for single-vCenter triage. Batches hosts, VM power state, live CPU/memory pressure and alarms per cluster, scores each "ok"/"warn"/ "critical", and ranks the anomalies into ``top_issues``. Use this instead of stitching list_all_clusters + list_esxi_hosts + get_alarms yourself. Returns {totals, top_issues, issues_total, clusters, snapshot, customization_hint} — not the list envelope. Lead with ``top_issues`` (worst first), show ``clusters`` as context, always echo ``customization_hint`` last. Point-in-time — no trending. ``top_issues`` includes datastores thin-provisioned past 100% of capacity (kind capacity, scope datastore), attributed to the cluster of a host that mounts them; get_datastore_capacity has the full table. Alarm issues carry ``condition_now`` and ``acknowledged_days``. Only a ``cleared`` alarm (its condition is read to be false now) ranks after live issues; an ``unknown`` one is not re-checked and keeps its severity rank, however long ago it was acknowledged — report it as possibly still live. Then drill into what ``top_issues`` names with investigate_vm, investigate_host or investigate_datastore; use get_cross_vcenter_attention to cover every target at once. Acting on a finding belongs to vmware-aiops.

輸入參數top_ntargetinclude_vmscluster_filter

investigate_vm

[READ] "What is happening around this VM?" — one correlated drill-down. Use this instead of stitching get_vm_info + list_vm_snapshots + get_alarms + get_vm_performance + get_events yourself. Returns one correlated bundle (not the list envelope): the VM's state, its host, cluster and backing datastores, its snapshots and triggered alarms, live performance, and a merged event timeline across VM/host/cluster/datastore (newest first). All reads are batched. Explain it in operational language; do not dump it raw. Reach for it after get_cluster_health_summary names a problem VM, or when asked "what's going on with <vm>?". Point-in-time snapshot — no trending. Acting on what you find (power, migrate, delete snapshot) belongs to vmware-aiops.

輸入參數hourstargetvm_name必填

investigate_host

[READ] "What is happening around this ESXi host?" — one correlated drill-down. Use this instead of stitching list_esxi_hosts + get_host_performance + get_alarms + get_events yourself. Returns one correlated bundle (not the list envelope): the host's state (connection, CPU/memory pressure, version, uptime), its cluster, a rollup of the VMs it runs, the datastores it mounts, alarms across host/cluster/datastore, live performance, and a merged event timeline. All reads are batched. Explain it in operational language; do not dump it raw. Reach for it after get_cluster_health_summary flags a host. Point-in-time snapshot — no trending; for syslog lines use scan_host_logs. Acting on a finding (maintenance mode, evacuate) belongs to vmware-aiops.

輸入參數hourstargethost_name必填

investigate_datastore

[READ] "What is happening around this datastore?" — one correlated drill-down. Use this instead of stitching list_all_datastores + get_datastore_capacity + get_alarms + get_events yourself. Returns one correlated bundle (not the list envelope): capacity / free space / accessibility, the hosts that mount it, a rollup of the VMs it backs, alarms across datastore/host, and a merged event timeline. All reads are batched. Explain it in operational language; do not dump it raw. Per-datastore latency is not included. Reach for it after get_cluster_health_summary flags storage pressure. Point-in-time snapshot — no trending. Freeing space (deleting snapshots, storage vMotion) belongs to vmware-aiops.

輸入參數hourstargetdatastore_name必填

get_cross_vcenter_attention

[READ] "What needs attention now?" across EVERY configured vCenter — one list. Start here when the estate has more than one vCenter. Rolls every configured target's cluster-health summary into one globally ranked ``top_issues`` list (worst first, each tagged with its ``vcenter``) plus a per-target rollup. Use this instead of calling get_cluster_health_summary once per target and merging yourself. Returns a rollup, not the list envelope; lead with ``top_issues``. Degrades gracefully: an unreachable target is listed under ``unreachable`` with a reason and the rest still aggregate, but it is never counted as healthy: ``totals.worst_status`` is at least ``warn`` (``critical`` when no target answered) and ``totals.status_reason`` says how many were not read. Point-in-time — no trending. Overlap is removed by identity: a host reached through a vCenter and as its own ESXi target counts once (hardware UUID), a datastore seen through both is one issue with the other view's figure under ``also_seen_via`` (datastore URL), and ``totals`` separates ``vcenters``, ``esxi_targets`` and ``unidentified_targets``. Then drill in with investigate_vm, investigate_host or investigate_datastore against the ``vcenter`` the issue names.

輸入參數top_ncluster_filter

list_all_networks

[READ] List networks with name, attached VM count, and accessibility. Returns the list envelope with a real ``total``. Name, vm_count and accessible only — no VLAN, uplink or NSX overlay detail. Use this to resolve a port-group name, then get_vm_info for the NICs of one VM. NSX segments live in vmware-nsx.

輸入參數limittarget

get_alarms

[READ] Get active/triggered alarms across the VMware inventory. Returns the list envelope with a real ``total``. Each alarm carries suggested_actions naming the companion skill and tool for remediation, who acknowledged it and when (``acknowledged_by`` / ``acknowledged_at``), and ``condition_now``: ``holds`` (live), ``cleared`` (vCenter still shows it but its state condition is false now — a stale alarm; see ``condition_note``), or ``unknown`` (event/metric-based or unreadable — never guessed). The envelope's ``stale_alarms`` counts the cleared ones. An expired-vCenter-license alarm is re-checked against this vCenter's own license assignment. ``object_label`` names alarms about the vCenter appliance itself (e.g. "vCenter appliance 192.168.60.16") that sit on the inventory root; ``entity_name`` stays the object vmware-aiops resolves. Do not report a ``cleared`` alarm as a live problem; do not report an ``unknown`` one as resolved. Empty ``items`` with ``truncated`` False means there genuinely are no active alarms — never report "no data" otherwise. Use this for the raw alarm list; prefer get_cluster_health_summary when you want alarms folded into a whole-cluster verdict. Then drill into the flagged object with investigate_vm or investigate_host.

輸入參數limittarget

get_events

[READ] Get recent vCenter/ESXi events filtered by severity. Returns the list envelope, newest first. Up to 5000 events in the window are read; when more matched, ``read_truncated`` is true and ``read_note`` says how far back the read got — the oldest events were not examined, so narrow ``hours`` before concluding nothing happened earlier in the window. Severity is this skill's own ranking where it has one, and otherwise vCenter's published event catalogue. An event neither can rank comes back with severity "unknown" (it is returned, not filtered out) and is counted in the envelope's ``unclassified``, with ``classification_note`` explaining. An empty ``items`` alongside a non-zero ``unclassified`` does NOT mean the window was quiet — read the note before reporting all-clear. Use this for an inventory-wide event sweep. When you already know the object, prefer investigate_vm / investigate_host instead: they return the same events correlated with that object's state in one call. ESXi syslog lines are not events — use scan_host_logs for those.

輸入參數endhoursstarttargetseverityinclude_routine

get_host_sensors

[READ] Get hardware sensor status (temperature, voltage, fan, ...) for all hosts. Returns the list envelope with a real ``total``; each row has host, sensor_name, type, reading, unit and status (green/yellow/red). No rows for a host is not "hardware is fine": every connected host that reports no sensors is listed in ``hosts_without_sensors`` with ``cim_server_running`` / ``cim_server_policy`` (the CIM Server, sfcbd-watchdog, supplies the sensors; null = not read), and ``sensors_note`` says what that means — quote it. ``interpretation_note`` bounds what a red aggregate memory sensor proves: it does not identify a DIMM/slot, establish ECC errors, or predict failure. Keep observed status separate from a component diagnosis. Use this for physical hardware only — for CPU/memory load use get_host_performance, and follow up on a red sensor with investigate_host to see the alarms and events around that host.

輸入參數limittarget

get_host_services

[READ] Get host service status (running state and startup policy). Returns the list envelope; each row has host, service key, label, running (bool) and policy (on/off/automatic). Every matching host is enumerated, so ``truncated`` is always False. Use this to check whether SSH, NTP or the firewall service is in the expected state. For NTP specifically prefer get_ntp_status, which also reports the configured servers. Starting or stopping a service is a write — this skill cannot do it; use vmware-aiops.

輸入參數targethost_name

scan_host_logs

[READ] Scan recent ESXi host syslog lines for error/warning patterns. Reads the last ``lines`` entries of the hostd/vmkernel/vpxa logs via the diagnostic system and returns only the lines matching known trouble patterns (error, fail, critical, panic, lost access, timeout, …). Severity follows the level ESXi wrote on the line (Cr/Er/Wa/In…, raw token in ``log_level``); a critical keyword still wins. By default findings are grouped by pattern — each item has count, hosts, first_seen/last_seen (log time), severity, source (``host_log:<key>``), pattern and one sample; ``lines_matched`` is the ungrouped count. ``group=false`` returns one row per line (severity, source, message, time, entity, log_level, log_time). Returns the list envelope {items, returned, limit, total, truncated, hint}. ``total`` is null on purpose — this is "errors within the scanned window", not all errors ever. ``logs_unavailable`` lists every host/log that could NOT be read, with the reason (e.g. the account lacks Global.Diagnostics); empty ``items`` means nothing matched only when ``logs_unavailable`` is empty too. Use this when get_events or investigate_host show a host in trouble but not why: vCenter events and ESXi syslog are different sources. Filter with ``host_name`` to keep the scan fast on large clusters; a name that matches no host returns an error (get the exact name from list_esxi_hosts), not an empty result. Every call reads the last ``lines`` lines afresh.

輸入參數grouplinestargethost_name

get_vm_info

[READ] Get detailed information about one VM (CPU, memory, disks, NICs, snapshots). Returns a single detail dict, not the list envelope. Static configuration only — for live CPU/memory use get_vm_performance, and for the same VM correlated with its host, alarms and events use investigate_vm. Use this when you already know the exact name; get it from list_virtual_machines first, since an unknown name returns a teaching error rather than a match. Reconfiguring the VM belongs to vmware-aiops.

輸入參數targetvm_name必填

list_vm_snapshots

[READ] List all snapshots of one VM, including the nesting hierarchy. Returns the list envelope, one row per snapshot with name, description, created timestamp, state and level (0 = root; children are level+1). Empty ``items`` with ``truncated`` False means the VM genuinely has no snapshots. Read-only — creating, reverting and deleting snapshots live in vmware-aiops. Use this for one known VM; prefer find_aging_snapshots to sweep the whole inventory for old or sprawling snapshots. Get the name from list_virtual_machines first — an unknown name returns a teaching error.

輸入參數targetvm_name必填

get_host_performance

[READ] Real-time CPU/memory/disk/network utilisation per ESXi host. Returns the list envelope with a real ``total`` (hosts that reported metrics). Unlike list_esxi_hosts (static config: cores, total GB) this is LIVE 20-second PerfManager data: cpu_usage_pct, mem_usage_pct, mem_consumed_mb, disk_kbps, net_kbps, busiest first. Disconnected hosts and hosts without a real-time provider are skipped, not reported as zero. Point-in-time only — no historical trend. Use this to find which host is hot, then investigate_host to drill into it, or get_vm_performance to see which VMs on it are driving the load.

輸入參數limittargethost_name

get_vm_performance

[READ] Real-time CPU/memory/disk/network utilisation per virtual machine. Returns the list envelope with a real ``total`` (VMs that reported metrics) — with the default limit of 25, ``truncated`` tells you whether more VMs sit behind it. LIVE data (cpu_usage_pct, mem_usage_pct, mem_consumed_mb, mem_ballooned_mb, mem_swapped_mb, disk_read_kbps, disk_write_kbps, net_kbps), busiest first. mem_usage_pct is mem.usage.average — ACTIVE guest memory over configured, not consumed, so it can read low on a VM under pressure; non-zero mem_ballooned_mb (mem.vmmemctl.average) or mem_swapped_mb (mem.swapped.average) is the pressure signal. ``counters`` names the counter behind every field. Only powered-on VMs have a real-time provider; powered-off VMs are skipped. Point-in-time only. Use this to rank load across VMs; for one VM's configuration use get_vm_info, and to see the same VM correlated with its host, alarms and events use investigate_vm.

輸入參數limittargetvm_name

find_aging_snapshots

[READ] Sweep ALL VMs for snapshots and flag old / sprawling ones. Use this for fleet-wide snapshot sprawl; prefer list_vm_snapshots when you only care about one VM. Returns {total_snapshots, old_snapshots, vms_with_snapshots, threshold_days, snapshots[], hint} — a rollup, not the list envelope. Each row has age_days, is_old and an est_size_mb lower bound (snapshotData+snapshotMemory; delta-disk growth is not separable per-snapshot via the API). Read-only — deleting snapshots belongs to vmware-aiops.

輸入參數limittargetonly_oldage_threshold_days

get_vm_backup_snapshot_history

[READ] How long backups held a snapshot open on one VM, from task history. Image-level backup products (Veeam, Commvault, Rubrik, NetBackup) snapshot the VM, copy the frozen disks, then delete the snapshot. vCenter records both ends, so the backup window is recoverable without credentials for the backup server. This is a LOWER BOUND on the job, not its duration: work the product does before the snapshot is taken and after it is removed is invisible to vCenter. The returned ``basis`` says so — quote it alongside any figure. Returns a rollup, not the list envelope: counts, four hour statistics (backup_active / snapshot_present / total_window / snapshot_removal), latest_cycle, longest_cycle, and ``unmatched`` rows for creations with no removal (a backup that left its snapshot behind) or removals whose creation predates the window. Read two fields before reporting all-clear. ``history_unavailable`` non-null means the history could not be read at all — that is not "no backups". ``coverage_note`` non-null means vCenter has already expired part of the requested window (``task.maxAge`` — 30 days by default; the option is NOT called vpxd.task.maxAge, which raises vim.fault.InvalidName), so the counts describe a shorter period than ``days`` asked for. ``window_fully_covered`` is the positive form: True when retention is at least ``days`` and nothing in the window can have expired, so a VM whose oldest task is recent was simply quiet; None when retention or the history could not be read. An unmatched creation is not a failed backup. Each one carries ``status: "open"``, ``age_hours``, this VM's ``longest_completed_cycle_hours`` and ``possibly_in_progress`` — True while it is inside that VM's own observed envelope, False past it, None when there is no completed cycle to compare against. Do not report ``incomplete_cycles`` as failures without reading those. The creation *task* itself, during the seconds it executes, is absent entirely: no completion time yet, so it forms ne

輸入參數dayslimittargetvm_name必填include_cycles

get_certificate_status

[READ] Per-host ESXi management certificate expiry. An expired ESXi cert drops host management — this surfaces it before the outage. Returns the list envelope with a real ``total``; each row has host, not_after, days_until_expiry and an ``expiring`` flag, soonest first. Host certificates only — the vCenter appliance's own certificate is not covered. Use this alongside get_license_status and get_ntp_status for a platform-hygiene sweep. Renewing a certificate is a write this skill cannot do; use vmware-aiops or vCenter directly.

輸入參數limittargetwarn_days

get_license_status

[READ] vCenter/ESXi license inventory with usage and expiry. Returns the list envelope, one row per license: name, edition_key, total/used units, unlimited flag (row total == 0) and expiration. Every license is enumerated, so ``truncated`` is always False — this is the complete inventory. Use this to catch over-allocation or an approaching expiry, alongside get_certificate_status and get_ntp_status for a platform-hygiene sweep. ``assignments`` says which license each asset (vCenter, hosts, clusters) is assigned, with ``expired`` per asset — use it to tell whether an "expired license" alarm still applies. It is null with ``assignments_note`` when the account cannot read assignments. License keys are never returned. Assigning a license is a write.

輸入參數target

get_ntp_status

[READ] Per-host NTP configuration health (servers + ntpd service state). Returns the list envelope; every matching host is enumerated, so ``truncated`` is always False. Each row has host, reachable, ntp_servers, ntpd_running, ntpd_policy and a ``healthy`` flag (servers configured AND ntpd running). The SOAP API does not expose live clock offset or stratum — this is configuration health only; for actual offset use esxcli on the host. healthy/ntp_servers/ntpd_running are null — not false/empty — for a host vCenter could not reach or could not read. Null means nothing was observed; false means NTP is misconfigured. Filtering rows for `healthy == false` will not surface the unread ones, so check the envelope's `hosts_unreachable` and `hosts_unreadable` counts (with `unreachable_note` / `unreadable_note`) before reporting the estate as healthy. Unreachable: vCenter cannot reach the host (reachable false). Unreadable: this account cannot read the host's state (reachable null) — not known to be down. The envelope's ``ntp_sources_consistent`` compares hosts with each other: false when hosts that have servers configured use different ones (each row can still be healthy — this is how clocks drift apart), with ``ntp_sources_note`` naming which host uses which servers; null when fewer than two hosts have servers to compare. Prefer this over get_host_services for time problems: that tool reports whether ntpd runs but not which servers are configured. Fixing NTP is a write; use vmware-aiops.

輸入參數targethost_name

get_datastore_capacity

[READ] Per-datastore capacity with thin-provisioning over-commit. Returns the list envelope with a real ``total``: capacity_gb, free_gb, committed_gb, provisioned_gb, used_pct, overcommit_pct, riskiest first. Adds the risk signal list_all_datastores lacks — overcommit_pct over 100% means more space is promised to VMs than physically exists, so a thin datastore can fill up while still showing free space. Point-in-time. Whose figure: ``view`` (vCenter / ESXi host / unknown) and ``view_note``. Provisioned space is summed by the endpoint over the VMs it has registered on the datastore, so a vCenter and a directly-reached ESXi host can report different provisioned_gb for one datastore — each row's ``vm_count`` says how many VMs the figure covers, and ``vms_not_connected`` names those reported as orphaned/inaccessible/disconnected (None = could not be read). The figures can also differ with the same vm_count: each endpoint aggregates uncommitted space itself. Use this for the capacity view, then investigate_datastore to drill into a specific datastore's hosts, VMs and alarms. Reclaiming space (delete snapshots, storage vMotion) belongs to vmware-aiops.

輸入參數limittarget

get_resource_pool_usage

[READ] Per-resource-pool CPU/memory reservation, limit, and current usage. Returns the list envelope with a real ``total``; each row has name, cpu_reservation_mhz, cpu_limit_mhz, cpu_usage_mhz, mem_reservation_mb, mem_limit_mb, mem_usage_mb, sorted by memory usage descending. A limit of -1 means unlimited. Pool names are not cluster-qualified, so identical names in different clusters may look alike. Use this when a VM is throttled but its host is not busy — the cap is usually the pool. Then get_vm_performance to see which VMs in it are demanding, or get_cluster_health_summary for the cluster-level picture.

輸入參數limittarget

list_active_tasks

[READ] In-flight (and optionally just-completed) vCenter tasks. Answers "why is the cluster busy?". Returns the list envelope {items, returned, limit, total, truncated, hint} with a real ``total``; each row has name, entity, state, progress_pct, start_time, user, an active flag and error (for failed recent tasks), running/queued first, then newest first — so ``limit`` drops the oldest. vCenter keeps only a short recent-task window, so an old task may simply be gone rather than absent. Use this before blaming load: a migration or clone in flight explains pressure that get_host_performance shows. Pair with list_active_sessions to see who started it. Read-only — cancelling a task belongs to vmware-aiops.

輸入參數limittargetinclude_recent

list_active_sessions

[READ] Currently authenticated vCenter/ESXi sessions (who is logged in). Returns the list envelope with a real ``total``; each row has user_name, full_name, login_time, last_active, ip_address, user_agent (which client — e.g. Aria's adapter shows ``VMware vim-java``), call_count, kind (user/service) and a ``current`` flag for this skill's own session. vCenter's own solution users (``vpxd-extension-<machine id>`` and similar) are folded by default and counted in ``service_sessions``. Requires the Sessions privilege; low-privilege accounts get a single explanatory row instead of a traceback. Use this to attribute a change to a person — pair it with list_active_tasks, which names the user who started each task. Read-only — terminating a session is not supported here.

輸入參數limittargetinclude_service

get_access_info

[READ] The account this server uses on a target, and whether it holds a tool's privileges. When to use: a tool failed with NoPermission, returned fewer objects than expected, or you want to know up front what the configured account may read. Ask about one ``tool``, or omit it to sort every tool of this server into granted / not granted / undetermined. What it returns: {target, account, checked_on, privileges {id: state}, and either ``tool`` {name, requires, verdict, meaning, missing_at_root} or the tools_* lists}, plus the account's direct permissions (role, on, propagate). Gotchas: privileges are checked on the vCenter/ESXi **root folder** only. ``not_granted_at_root`` does not mean no access — a permission on a cluster, folder or VM still lets the tool work there. ``undetermined`` means the platform did not answer and is never to be read as granted. Permissions held through a group count in the verdict but are not listed by name.

輸入參數tooltarget

get_host_memory_tiering

[READ] Per-host memory tiering (vSphere 9.1) and NVMe uplift ratio. When to use: to see which ESXi hosts back RAM with NVMe (memory tiering, 8.0U3+), how large each tier is, and how much of a host's apparent memory rides on NVMe rather than DRAM. This is the only source of measured tier byte sizes. Returns the list envelope {items, returned, limit, total, truncated, hint}. Each row: host, tiering_type (noTiering|hardwareTiering|softwareTiering), tiering_active, dram_gb, nvme_gb, total_tiered_gb, uplift_ratio (total/DRAM, None if DRAM unknown), and a per-tier breakdown. A host with tiering off reads as tiering_type "noTiering", nvme_gb 0.0 — that is a real "checked, none", not a gap. Gotchas: reads pyVmomi HostSystem.hardware.memoryTierInfo (needs ESXi 8.0U3+/9.x); older hosts report tiering_type "unknown". Read-only.

輸入參數limittargethost_name

get_cluster_patch_compliance

[READ] vLCM software (patch) compliance for one cluster (vSphere Automation REST). When to use: to check whether a cluster's hosts match their assigned software image/baseline before or after a patch cycle. Complements get_host_memory_tiering (that is per-host hardware; this is per-cluster lifecycle state). What it returns: {available, cluster, status, hosts_total, non_compliant_hosts, scan_time, note, fields}. ``available: False`` means vCenter answered 503 — it is likely mid-patch (vSphere has no maintenance-ETA endpoint; retry shortly), not an error. Endpoint and field parse verified against a live VCF 9.1 vCenter (see ``note``). Gotchas: ``cluster`` must be the cluster MoID (e.g. domain-c123), which the REST API requires — get it from list_all_clusters, not the display name. Read-only: reports compliance only; it never runs a remediation.

輸入參數targetcluster必填

get_cluster_last_apply_result

[READ] Result of the last vLCM remediation (apply) on one cluster (REST). When to use: after a patch/remediation, to confirm the last apply succeeded and when it finished. Use get_cluster_patch_compliance for current drift; use this for the outcome of the most recent apply. What it returns: {available, cluster, status, end_time, note, fields}, read defensively. A cluster never remediated may return a "not found" teaching error; a 503 yields ``available: False`` (mid-patch, retry). Gotchas: ``cluster`` is the cluster MoID (e.g. domain-c123) — see list_all_clusters. Read-only. Endpoint and field parse verified against a live VCF 9.1 vCenter.

輸入參數targetcluster必填

get_vcenter_deployment_size

[READ] vCenter appliance deployment size (NEW in vSphere 9.1, REST). When to use: to read the vCenter appliance's current (and, where reported, target) deployment size class — capacity-planning context that inventory/perf tools do not cover. What it returns: {available, note, fields} where ``fields`` is a defensive passthrough of the endpoint's top-level scalar values. ``available: False`` means vCenter answered 503 (busy/restarting) or is older than 9.1 — ``reason`` says which; nothing crashed, and neither is a failure. Gotchas: 9.1-only endpoint — an older vCenter returns ``available: False``, not data. Endpoint and field parse verified against a live VCF 9.1 vCenter. Read-only.

輸入參數target

版本歷史

10
  1. v2.5.0最新Nov 1, 2026
  2. v2.4.2Oct 19, 2026
  3. v2.4.1Oct 17, 2026
  4. v2.4.0Oct 16, 2026
  5. v2.3.1Oct 16, 2026
  6. v2.3.0Oct 15, 2026
  7. v2.1.0Oct 15, 2026
  8. v2.0.0Oct 14, 2026
  9. v1.16.0Sep 20, 2026
  10. v1.15.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分