VMware-Monitor
This is a read-only VMware vCenter/ESXi monitoring server — no destructive operations (power off, delete, create, snapshot, clone, migrate) are possible. Compatible with vSphere 6.5–8.0.
Capabilities:
List Virtual Machines — Name, power state, CPU, memory, guest OS, and IP address
List ESXi Hosts — CPU cores, memory, ESXi version, VM count, uptime, and hardware sensors (temperature, voltage, fan status)
List Datastores — Capacity, free space, type (VMFS/NFS), usage percentage, and VM count
List Clusters — Host count, DRS/HA status, and resource totals (vCenter only)
Get Active Alarms — All active/triggered alarms with severity, entity, and timestamp
Get Events — Recent vCenter/ESXi events filterable by time range and severity (critical/warning/info)
Get VM Details — Power state, guest OS, CPU, memory, IP, VMware Tools status, disks, NICs, and snapshots (read-only)
All tools accept an optional target parameter to specify which vCenter/ESXi host to query. Scheduled scans with JSONL output and optional webhook notifications are also supported.
Supports sending automated monitoring alerts and scheduled scan summaries to Discord channels via webhooks.
Supports sending automated monitoring alerts and scheduled scan summaries to Slack channels via webhooks.
Provides read-only monitoring and inventory management for VMware vCenter and ESXi environments, including virtual machines, hosts, clusters, datastores, and system health status.
VMware Monitor
Author: Wei Zhou, VMware by Broadcom — wei-wz.zhou@broadcom.com This is a community-driven project by a VMware engineer, not an official VMware product. For official VMware developer tools see developer.broadcom.com.
English | 中文
Read-only VMware vCenter/ESXi monitoring — 32 tools. No destructive operations exist in this codebase, and a test enforces that.
Why a separate repository? VMware Monitor is fully independent from VMware-AIops. No power off, delete, create, reconfigure, snapshot-create/revert/delete, clone, or migrate functions exist in this codebase — not a prompt constraint, an absence.
How that is enforced, precisely.
tests/eval/regression/test_read_only_enforcement.pyparses every source file withastand requires each vSphere method the package calls to appear on a reviewed allowlist, cross-checked against pyVmomi's own type metadata: anything returning avim.Task, or gated by vCenter on a non-read privilege, fails unless a human wrote down why. Today that allowlist is nine methods. The check is a gate on the code as written — it cannot see a method name assembled at runtime, and nothing runs it automatically, so it holds only as far as someone runs the test suite. For a guarantee that does not depend on this repository at all, point the skill at a vCenter account with read-only permissions.
Companion Skills
Skill | Scope | Tools | Install |
vmware-aiops ⭐ entry point | VM lifecycle, deployment, guest ops, clusters | 49 |
|
Datastores, iSCSI, vSAN | 11 |
| |
Tanzu Namespaces, TKC cluster lifecycle | 20 |
| |
NSX networking: segments, gateways, NAT, IPAM | 33 |
| |
DFW microsegmentation, security groups, Traceflow | 21 |
| |
Aria Ops metrics, alerts, capacity planning | 28 |
| |
AVI (NSX ALB) load balancing, AKO on Kubernetes | 28 |
| |
Compliance baselines, drift detection (read-only) | 6 |
| |
Centralized syslog search, aggregation, alerts | 7 |
| |
Incident timeline correlation, root cause | 2 |
| |
Multi-step workflow orchestration, approval gates | 13 |
|
⚡ 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).
Question | Command | What it correlates |
"Is anything on fire?" across all clusters |
| Every cluster's hosts + VM power + live CPU/mem + alarms → ranked top-N issues + per-cluster status |
"What needs attention now?" across all vCenters |
| Every configured vCenter merged into one globally-ranked issue list; unreachable targets degrade gracefully |
"What's happening around this VM?" |
| VM state + host it runs on + cluster + backing datastores + snapshots + alarms + performance + a merged event timeline |
"What's happening around this host?" |
| Host state + cluster + the VMs it runs + mounted datastores + alarms + performance + correlated timeline |
"What's happening around this datastore?" |
| Capacity/free + mounting hosts + VMs it backs + alarms + correlated timeline |
# Triage the estate, then drill into whatever it flags:
vmware-monitor attention # what needs attention now, all vCenters
vmware-monitor summary --top 5 # is anything on fire, one vCenter
vmware-monitor investigate vm web-01 --hours 72 # everything around a VM, 72h event window
vmware-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 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.
Quick Install (Recommended)
Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, and 30+ AI agents:
# Via Skills.sh
npx skills add vmware-skills/VMware-Monitor
# Via ClawHub
clawhub install @zw008/vmware-monitorPyPI Install (No GitHub Access Required)
# Install via uv (recommended)
uv tool install vmware-monitor
# Or via pip
pip install vmware-monitor
# China mainland mirror (faster)
pip install vmware-monitor -i https://pypi.tuna.tsinghua.edu.cn/simpleOffline / 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:
# 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:
# 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-monitorRelated MCP server: VMWare MCP
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
or
ESXi Standalone ──→ VMsVersion Compatibility
vSphere / VCF Version | Support | Notes |
VCF 9.1 / vSphere 9.1 | ✅ Full | Released 2026-05-12. pyVmomi |
VCF 9.0 / vSphere 9.0 | ✅ Full | pyVmomi 8.0.3+ connects against vSphere 9 SOAP API. |
8.0 / 8.0U1-U3 | ✅ Full | pyVmomi 8.0.3+ |
7.0 / 7.0U1-U3 | ✅ Full | All read-only APIs supported |
6.7 | ✅ Compatible | Backward-compatible, tested |
6.5 | ✅ Compatible | Backward-compatible, tested |
Official Broadcom References
SDKs: https://developer.broadcom.com/sdks — VCF Python SDK (recommended for VCF 9+, bundles pyVmomi + vSAN SDK), vSphere Automation SDK for Python
REST APIs: https://developer.broadcom.com/xapis — vSphere Automation API, VCF API
CLI Tools: https://developer.broadcom.com/tools — PowerCLI 9.1, ESXCLI, OVF Tool
1. Inventory
Feature | vCenter | ESXi | Details |
List VMs | ✅ | ✅ | Name, power state, CPU, memory, guest OS, IP, |
List Hosts | ✅ | ⚠️ Self only | CPU cores, memory, ESXi version, VM count, uptime |
List Datastores | ✅ | ✅ | Capacity, free/used, type (VMFS/NFS), usage % |
List Clusters | ✅ | ❌ | Host count, DRS/HA status |
List Networks | ✅ | ✅ | Network name, associated VM count, accessibility — CLI |
2. Health & Monitoring
Feature | vCenter | ESXi | Details |
Active Alarms | ✅ | ✅ | Severity, alarm name, entity, timestamp |
Event/Log Query | ✅ | ✅ | Filter by time range, severity; 50+ event types |
Hardware Sensors | ✅ | ✅ | Per-sensor |
Host Services | ✅ | ✅ | hostd, vpxa running/stopped status — CLI |
Monitored Event Types:
Category | Events |
VM Failures |
|
Host Issues |
|
Storage |
|
HA/DRS |
|
Auth |
|
3. VM Info & Snapshot List (Read-Only)
Feature | Details |
VM Info | Name, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs, |
Snapshot List | List existing snapshots with name and creation time (no create/revert/delete) — CLI |
Backup Window | How long backups held a snapshot open on a VM, from vCenter task history — CLI |
4. Scheduled Scanning & Notifications
Feature | Details |
Daemon | APScheduler-based, configurable interval (default 15 min) |
Multi-target Scan | Sequentially scan all configured vCenter/ESXi targets |
Scan Content | Alarms + Events + Host logs (hostd, vmkernel, vpxd) |
Log Analysis | Regex pattern matching: error, fail, critical, panic, timeout |
Structured Log | JSONL output to |
Webhook | Slack, Discord, or any HTTP endpoint |
Daemon Management |
|
5. Safety Features
Feature | Details |
Code-Level Isolation | Independent repository — zero destructive functions in codebase, checked by an AST allowlist gate over every vSphere call ( |
Audit Trail | All queries logged to |
Password Protection |
|
SSL Self-signed Support |
|
Prompt Injection Protection | vSphere event messages and host logs are truncated, sanitized, and wrapped in boundary markers |
Webhook Data Scope | Sends monitoring summaries to user-configured URLs only — no third-party services by default |
Production Recommended | AI agents can misinterpret context and execute unintended destructive operations — real-world incidents have shown AI-driven tools deleting production databases and entire environments. VMware-Monitor removes that class of risk from its own code: no destructive code paths exist, and the allowlist gate fails the build if one is added. Pair it with a read-only vCenter account for defence that does not rely on this codebase. Use VMware-AIops only in dev/lab environments |
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
Check alarms:
vmware-monitor health alarms --target prod-vcenterReview recent events:
vmware-monitor health events --hours 24 --severity warningList 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.
Start from triage:
vmware-monitor attention(all vCenters) orvmware-monitor summary(one)Drill into what it flags:
vmware-monitor investigate vm <name>(orhost/datastore)Widen the event window with
--hours 72; share it with--html(offline snapshot)If the name is unknown → the teaching error names how to list objects (
inventory vms/hosts,list_all_datastores)
Set Up Continuous Monitoring
Configure webhook in
~/.vmware-monitor/config.yamlStart daemon:
vmware-monitor daemon startDaemon 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
Run
vmware-monitor doctorto diagnoseVerify target hostname/IP and port (443) in
config.yamlFor self-signed certs: set
verify_ssl: false
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.
Supported AI Platforms
Platform | Status | Config File | AI Model |
Claude Code | ✅ Native Skill |
| Anthropic Claude |
Gemini CLI | ✅ Context file + MCP |
| Google Gemini |
OpenAI Codex CLI | ✅ Skill + AGENTS.md |
| OpenAI GPT |
Aider | ✅ Conventions |
| Any (cloud + local) |
Continue CLI | ✅ Rules |
| Any (cloud + local) |
Trae IDE | ✅ Rules |
| Claude/DeepSeek/GPT-4o |
Kimi Code CLI | ✅ Skill |
| Moonshot Kimi |
MCP Server | ✅ MCP Protocol |
| Any MCP client |
Python CLI | ✅ Standalone | N/A | N/A |
Platform Comparison
Feature | Claude Code | Gemini CLI | Codex CLI | Aider | Continue | Trae IDE | Kimi CLI |
Cloud AI | Anthropic | OpenAI | Any | Any | Multi | Moonshot | |
Local models | — | — | — | Ollama | Ollama | — | — |
Skill system | SKILL.md | Context file | SKILL.md | — | Rules | Rules | SKILL.md |
MCP support | Native | Native | Via Skills | Third-party | Native | — | — |
Free tier | — | 60 req/min | — | Self-hosted | Self-hosted | — | — |
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 32 tools are read-only, enforced by the allowlist gate described above.
Agent / Tool | Local Model Support | Config Template | Integration Guide |
✅ Self-hosted, any LLM | |||
✅ Ollama, LM Studio | |||
✅ Fully offline | |||
✅ Ollama, vLLM | |||
VS Code Copilot | — | ||
Cursor | — | — | |
Continue | ✅ Ollama | ||
Claude Code | — | — |
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):
# 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 formatInstallation
Step 0: Prerequisites
# Python 3.10+ required
python3 --version
# Node.js 18+ required for Gemini CLI and Codex CLI
node --versionStep 1: Clone & Install Python Backend
git clone https://github.com/vmware-skills/VMware-Monitor.git
cd VMware-Monitor
python3 -m venv .venv
source .venv/bin/activate
pip install -e .Step 2: Configure
mkdir -p ~/.vmware-monitor
cp config.example.yaml ~/.vmware-monitor/config.yaml
# Edit config.yaml with your vCenter/ESXi targetsSet passwords via .env file (recommended):
cp .env.example ~/.vmware-monitor/.env
chmod 600 ~/.vmware-monitor/.env
# Edit and fill in your passwordsSecurity note: Prefer
.envfile over command-lineexportto avoid passwords appearing in shell history.config.yamlstores only hostnames, ports, and a reference to the.envfile — it does not contain passwords or tokens. All secrets are stored exclusively in.env(chmod 600). Webhook notifications are disabled by default; when enabled, payloads contain no credentials, IPs, or PII — only aggregated alert metadata sent to user-configured URLs only. We recommend using a least-privilege read-only vCenter service account.
Password environment variable naming convention:
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_PASSWORDStep 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:
npx skills add vmware-skills/VMware-Monitor
# or
clawhub install @zw008/vmware-monitorMethod 2: Manual skill install
git clone https://github.com/vmware-skills/VMware-Monitor.git
cd VMware-Monitor
# Copy the skill into Claude Code's personal skills directory
mkdir -p ~/.claude/skills/vmware-monitor
cp -r skills/vmware-monitor/. ~/.claude/skills/vmware-monitor/For tool access (not just skill context), also register the MCP server:
claude mcp add vmware-monitor -- vmware-monitor mcpRestart Claude Code, then:
> Show me all VMs on esxi-lab.example.comOption B: Gemini CLI
# Install Gemini CLI
npm 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.mdFor tool access (not just context), register the MCP server in ~/.gemini/settings.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 hostOption C: OpenAI Codex CLI
# Install Codex CLI
npm i -g @openai/codex
# Or on macOS:
# brew install --cask codex
# Copy skill to Codex skills directory
mkdir -p ~/.codex/skills/vmware-monitor
cp skills/vmware-monitor/SKILL.md ~/.codex/skills/vmware-monitor/SKILL.md
# Copy AGENTS.md to project root
cp skills/vmware-monitor/SKILL.md ./AGENTS.mdThen start Codex CLI:
codex --enable skills
> List all VMs on my ESXiOption D: Aider (supports local models)
# Install Aider
pip install aider-chat
# Install Ollama for local models (optional)
# macOS:
brew install ollama
ollama pull qwen2.5-coder:32b
# Run with cloud API
aider --conventions skills/vmware-monitor/SKILL.md
# Or with local model via Ollama
aider --conventions skills/vmware-monitor/SKILL.md \
--model ollama/qwen2.5-coder:32bOption E: Continue CLI (supports local models)
# Install Continue CLI
npm i -g @continuedev/cli
# Copy rules file
mkdir -p .continue/rules
cp skills/vmware-monitor/SKILL.md .continue/rules/vmware-monitor.mdConfigure ~/.continue/config.yaml for local model:
models:
- name: local-coder
provider: ollama
model: qwen2.5-coder:32bThen:
cn
> Check ESXi health and alarmsOption F: Trae IDE
Copy the rules file to your project's .trae/rules/ directory:
mkdir -p .trae/rules
cp skills/vmware-monitor/SKILL.md .trae/rules/project_rules.mdTrae 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
# Copy skill file to Kimi skills directory
mkdir -p ~/.kimi/skills/vmware-monitor
cp skills/vmware-monitor/SKILL.md ~/.kimi/skills/vmware-monitor/SKILL.mdOption 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+):
# Recommended — single command, no network re-resolve
vmware-monitor mcp
# With a custom config path
VMWARE_MONITOR_CONFIG=/path/to/config.yaml vmware-monitor mcpClaude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"vmware-monitor": {
"command": "vmware-monitor",
"args": ["mcp"],
"env": {
"VMWARE_MONITOR_CONFIG": "/path/to/config.yaml"
}
}
}
}# 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-mcpBehind a corporate TLS proxy? uvx may fail with
invalid peer certificate: UnknownIssuer. Use the recommendedvmware-monitor mcpform above (no network needed), or setUV_NATIVE_TLS=true.
Option I: Standalone CLI (no AI)
# Already installed in Step 1
source .venv/bin/activate
vmware-monitor inventory vms --target home-esxi
vmware-monitor health alarms --target home-esxi
vmware-monitor vm info my-vm --target home-esxiUpdate / Upgrade
Already installed? Re-run the install command for your channel to get the latest version:
Install Channel | Update Command |
ClawHub |
|
Skills.sh |
|
Git clone |
|
uv |
|
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
export DEEPSEEK_API_KEY="your-key"
aider --conventions skills/vmware-monitor/SKILL.md \
--model deepseek/deepseek-coderQwen (Alibaba Cloud)
export DASHSCOPE_API_KEY="your-key"
aider --conventions skills/vmware-monitor/SKILL.md \
--model qwen/qwen-coder-plusLocal Models (Aider + Ollama)
For fully offline operation — no cloud API, no internet, full privacy.
brew install ollama
ollama pull qwen2.5-coder:32b
ollama serve
aider --conventions skills/vmware-monitor/SKILL.md \
--model ollama/qwen2.5-coder:32bCLI Reference
# Diagnostics
vmware-monitor doctor # Check environment, config, connectivity
vmware-monitor doctor --skip-auth # Skip vSphere auth check (faster)
# MCP Config Generator
vmware-monitor mcp-config generate --agent goose # Generate config for Goose
vmware-monitor mcp-config generate --agent claude-code # Generate config for Claude Code
vmware-monitor mcp-config list # List all supported agents
# Inventory
vmware-monitor inventory vms [--target <name>]
vmware-monitor inventory vms --limit 10 --sort-by memory_mb # Top 10 VMs by memory
vmware-monitor inventory vms --power-state poweredOn # Only powered-on VMs
vmware-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>]
# Health
vmware-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 & Daemon
vmware-monitor scan now [--target <name>]
vmware-monitor daemon start
vmware-monitor daemon stop
vmware-monitor daemon statusConfiguration
See config.example.yaml for all options.
Section | Key | Default | Description |
targets | name | — | Friendly name |
targets | host | — | vCenter/ESXi hostname or IP |
targets | type | vcenter |
|
targets | port | 443 | Connection port |
targets | verify_ssl | true | Verify the target's TLS certificate (set false only for self-signed lab hosts) |
scanner | interval_minutes | 15 | Scan frequency |
scanner | severity_threshold | warning | Min severity: critical/warning/info |
scanner | lookback_hours | 1 | How far back to scan |
notify | log_file | ~/.vmware-monitor/scan.log | JSONL log output |
notify | webhook_url | — | Webhook endpoint (Slack, Discord, etc.) |
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.tomlRelated Projects
Skill | Scope | Tools | Install |
Read-only monitoring, alarms, events | 27 |
| |
VM lifecycle, deployment, guest ops, clusters | 49 |
| |
Datastores, iSCSI, vSAN | 11 |
| |
Tanzu Namespaces, TKC cluster lifecycle | 20 |
|
Troubleshooting & Contributing
If you encounter any errors or issues, please send the error message, logs, or screenshots to zhouwei008@gmail.com. Contributions are welcome!
License
MIT
Available Tools
32 toolsactive_sessionsARead-onlyIdempotent
[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 and a current flag for this
skill's own session. 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 active_tasks, which names the user who started each task. Read-only — terminating a session is not supported here.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max session rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the response envelope with a real total, enumerates row fields, mentions the current-session flag, and describes privilege-dependent behavior (single explanatory row instead of a traceback). The read-only nature is consistently reinforced. No contradiction with readOnlyHint/idempotentHint/destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, purposeful sentences with no filler. The core purpose is front-loaded, followed by return shape, privilege caveat, use case, and limitation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description covers the return format, key fields, privilege requirements, failure/fallback behavior, and a practical pairing with active_tasks. The low parameter count and full schema coverage mean nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both limit and target already well described in the schema. The description does not add extra parameter-level detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('currently authenticated vCenter/ESXi sessions'), and clarifies 'who is logged in'. The scope is unmistakable and distinct from sibling list tools, with the [READ] marker reinforcing intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'to attribute a change to a person' and recommends pairing with active_tasks. It also notes that session termination is not supported, which is a clear exclusion. It could more explicitly contrast against read-only siblings, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
active_tasksARead-onlyIdempotent
[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. 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 host_performance shows. Pair with active_sessions to see who started it. Read-only — cancelling a task belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max task rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| include_recent | No | Also include recently completed/failed tasks (default True). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, and the description adds substantial context beyond those: the exact response envelope with a real total, row fields including error for failed tasks, running/queued ordering, and the vCenter short-recent-task-window caveat. This enriches the agent's mental model of what the tool does and what could go wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence earns its place: purpose, output shape, caveat, usage guidance, and cancellation boundary. It is front-loaded with the core purpose and then adds operational context without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by detailing the return envelope and row contents. It covers the tool's safety profile, its relationship to sibling tools, and the important vCenter retention caveat, making the tool fully actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents limit, target, and include_recent. The description adds contextual meaning around the returned envelope and the 'optionally just-completed' behavior, but it does not need to add parameter-level details; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('[READ] In-flight... vCenter tasks') and a precise resource, and immediately frames the tool's purpose with 'Answers "why is the cluster busy?"'. It differentiates from siblings by explicitly comparing to host_performance and active_sessions, so an agent can select it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: 'Use this before blaming load' and explains that an in-flight migration/clone explains pressure shown by host_performance. It also provides an exclusion by noting that cancelling a task belongs to vmware-aiops, and recommends pairing with active_sessions to see who started the task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
certificate_statusARead-onlyIdempotent
[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 license_status and ntp_status for a platform-hygiene sweep. Renewing a certificate is a write this skill cannot do; use vmware-aiops or vCenter directly.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max host rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| warn_days | No | Flag certs expiring within this many days (default 30). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent/non-destructive; the description adds non-obvious behavior: the list envelope has a real total, rows are sorted soonest-first, and only host certs are covered. It also confirms renewal is outside the tool's capability, reinforcing the read-only contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than strictly necessary (the outage-motivation sentence is not required for invocation), but it is front-loaded with the essential read/resource and every other sentence carries either return-format or routing information. Slight trimming would make it a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned row fields, sort order, scope limitation, and read-only boundary. Together with the fully documented schema, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (limit, target, warn_days) are already documented in the schema. The description adds no new parameter-level detail beyond mentioning the expiring flag, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with '[READ] Per-host ESXi management certificate expiry', a specific verb plus resource. It names the precise returned signal (expiring, days_until_expiry) and explicitly disclaims vCenter appliance coverage, leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Positions the tool as part of a platform-hygiene sweep alongside license_status and ntp_status, and explicitly states what it cannot do (renew certificates) with a pointer to vmware-aiops or vCenter. This gives an agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_health_summaryARead-onlyIdempotent
[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.
Then drill into what top_issues names with vm_investigation_bundle,
host_investigation_bundle or datastore_investigation_bundle; use
cross_vcenter_attention to cover every target at once. Acting on a finding
belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Cap ``top_issues`` (default 10; 0 omits it). ``issues_total`` is the pre-cap count. | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| include_vms | No | Roll up VM counts (default True); False skips that pass. | |
| cluster_filter | No | Case-insensitive substring; only matching clusters show (None = all, plus a standalone-hosts row). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, and the description reinforces this with '[READ]'. It adds valuable behavior beyond annotations: the return envelope shape, the 'not the list envelope' caveat, the point-in-time/no-trending limitation, and the instruction to echo customization_hint last.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries distinct value: purpose, use case, alternative, return behavior, point-in-time semantics, and drill-down routing. It is front-loaded with the core purpose and remains highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregation tool with no output schema, the description supplies the necessary return keys, the ranking behavior, the absence of trending, and the recommended next steps. All parameters are already fully described in the schema, so nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description does not add parameter-specific detail beyond what the schema already provides, which makes the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a one-glance health rollup for clusters, with a specific verb ('rollup', 'scores', 'ranks') and resource ('every cluster'). It distinguishes itself from sibling tools by explicitly saying to use it instead of stitching list_all_clusters + list_esxi_hosts + get_alarms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Start here for single-vCenter triage' and names the exact alternative tools for drill-down (vm_investigation_bundle, host_investigation_bundle, datastore_investigation_bundle) and broader coverage (cross_vcenter_attention). It even tells the agent that acting on a finding belongs to vmware-aiops, which is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_last_apply_resultARead-onlyIdempotent
[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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter target from config (default if omitted). | |
| cluster | Yes | Cluster MoID (e.g. domain-c123). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive, and the description adds substantial behavioral detail beyond that: the return shape, defensive reading behavior, the 'not found' teaching error for never-remediated clusters, and the 503 mid-patch retry semantics. It also notes endpoint/field verification against a live VCF 9.1 vCenter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured under clear headings, is front-loaded with the core read intent, and every sentence earns its place. It packs usage timing, return shape, error behavior, and a cross-tool pointer without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating the return fields and expected error cases. It also covers when to retry, how to interpret the MoID, and the read-only nature, making it complete for an agent to call the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds extra meaning by explaining that 'cluster' is the cluster MoID and pointing to list_all_clusters for discovery, which goes beyond the schema's 'Cluster MoID' text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource statement: it returns the result of the last vLCM remediation (apply) on one cluster via REST. It clearly distinguishes itself from the sibling cluster_patch_compliance by stating this is for the apply outcome, not current drift.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: use after a patch/remediation to confirm the last apply succeeded and when it finished. It names the alternative cluster_patch_compliance and tells the agent exactly when to use that instead, so the agent can select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_patch_complianceARead-onlyIdempotent
[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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter target from config (default if omitted). | |
| cluster | Yes | Cluster MoID (e.g. domain-c123). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/idempotentHint annotations by explaining that available: False indicates a 503 from vCenter, likely mid-patch, and should be retried rather than treated as failure. It also explicitly states the tool is read-only and never runs remediation, and notes verification against a live VCF 9.1 vCenter. This gives the agent actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections: purpose, when to use, return behavior, and gotchas. It is front-loaded with the core purpose and maintains focus without redundant filler. Each section adds operational value, and the length is appropriate given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers return fields, an important error/retry condition, a crucial MoID prerequisite, and the tool's non-destructive scope. Combined with the annotations and 100% schema coverage for parameters, the agent has sufficient context to select and invoke the tool correctly in a patch-compliance workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful value by specifying that 'cluster' must be a cluster MoID such as domain-c123, not a display name, and directs the agent to list_all_clusters for the correct value. It also explains the requirement originates from the REST API, which clarifies parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: '[READ] vLCM software (patch) compliance for one cluster.' It goes further than a generic statement by explaining what compliance means: checking whether hosts match their assigned image/baseline. It also distinguishes itself from sibling host_memory_tiering by noting per-cluster lifecycle state instead of per-host hardware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance: check before or after a patch cycle. It also contrasts with host_memory_tiering to help route selection. It gives a concrete prerequisite for the cluster parameter ('get it from list_all_clusters, not the display name'), though it does not enumerate exclusions or alternatives beyond that single sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cross_vcenter_attentionARead-onlyIdempotent
[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 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. Point-in-time — no trending.
Then drill in with vm_investigation_bundle, host_investigation_bundle or
datastore_investigation_bundle against the vcenter the issue names.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Cap the merged top_issues list (default 10); ``issues_total`` is the pre-cap count. | |
| cluster_filter | No | Case-insensitive cluster substring applied to every target (None = all clusters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses graceful degradation for unreachable targets, states that results are point-in-time with no trending, and explains that the return value is a rollup rather than the list envelope. This gives the agent useful behavioral expectations not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and each sentence adds distinct value: scope, aggregation model, alternative, return shape, failure handling, point-in-time semantics, and next-step guidance. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains the key return concepts: globally ranked top_issues, per-target rollup, unreachable section with reasons, and vcenter tagging. Combined with the parameter schema and annotations, the agent has enough context to invoke the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both top_n and cluster_filter, including defaults and behavior. The tool description does not add much specific parameter-level detail, but that is acceptable because schema coverage is 100%, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear interrogative framing ('What needs attention now?') tied to a specific resource ('every configured vCenter') and delivers one aggregated, globally ranked list. It explicitly contrasts itself with cluster_health_summary and the investigation bundles, making the tool unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to 'Start here when the estate has more than one vCenter' and tells the agent to use this 'instead of calling cluster_health_summary once per target and merging yourself.' It also names the drill-in successors for follow-up, leaving no ambiguity about when and with what to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datastore_capacityARead-onlyIdempotent
[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.
Use this for the capacity view, then datastore_investigation_bundle to drill into a specific datastore's hosts, VMs and alarms. Reclaiming space (delete snapshots, storage vMotion) belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max datastore rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnly and idempotent behavior. The description adds behavioral context beyond that: the list is ordered 'riskiest first', it is 'point-in-time', and it explains the overcommit semantics (over 100% means more promised than physically exists, thin datastore can fill while showing free). This goes beyond the annotation baseline, enriching agent understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: first sentence states the core purpose and return fields, second explains the unique risk signal, third provides usage and drilldown guidance. There is no filler, and the core information is front-loaded. The structure is tight and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-based list tool with no output schema, the description fully specifies the return fields, ordering, point-in-time nature, and the key risk concept. It also covers the follow-up actions and ownership boundaries. An agent has everything needed to decide when and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% (both 'limit' and 'target' are documented in the schema). The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate. No additional value is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '(READ) Per-datastore capacity with thin-provisioning over-commit.' It specifies the resource (datastores) and the unique angle (thin-provisioning over-commit, risk signal) and explicitly contrasts with list_all_datastores, which it says lacks the overcommit signal. This distinguishes it from siblings without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use it (capacity view) and then routes to datastore_investigation_bundle for drilling into hosts/VMs/alarms, and to vmware-aiops for reclaiming actions. This provides explicit context and alternatives, fulfilling the usage guidance requirement fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datastore_investigation_bundleARead-onlyIdempotent
[READ] "What is happening around this datastore?" — one correlated drill-down.
Use this instead of stitching list_all_datastores + 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 cluster_health_summary flags storage pressure. Point-in-time snapshot — no trending. Freeing space (deleting snapshots, storage vMotion) belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Event-timeline look-back window in hours (default 24). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| datastore_name | Yes | Exact datastore name; unknown names return a teaching error. Get it from list_all_datastores or datastore_capacity first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, but the description adds substantial behavioral detail: batched reads, correlated bundle vs list envelope, point-in-time snapshot semantics, output presentation guidance, and the caveat that per-datastore latency is omitted. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, output components, available alternatives, exclusions, and trigger context are each covered once. The [READ] tag and front-loaded purpose make the definition scannable despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex bundle tool with no output schema, the description fully carries the return semantics, including what is and is not included. It also positions the tool within the workflow relative to cluster_health_summary and remediation tools, so an agent has enough context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents datastore_name, hours, and target fully. The description reinforces the exact-name requirement and suggests where to source the name, but adds little new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete question and states it is a 'one correlated drill-down' for a datastore, listing exactly what the bundle contains (capacity, free space, hosts, VM rollup, alarms, event timeline). It differentiates itself from the individual list/get tools by explicitly naming the stitching alternative, and from sibling investigation bundles by the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a direct when-to-use instruction ('Reach for it after cluster_health_summary flags storage pressure') and names the alternative manual composition it replaces. Exclusions are explicit: no trending, no remediation, and per-datastore latency is not included, with remediation routed to vmware-aiops.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alarmsARead-onlyIdempotent
[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. 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 cluster_health_summary when you want alarms folded into a whole-cluster verdict. Then drill into the flagged object with vm_investigation_bundle or host_investigation_bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max alarms to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond annotations: it returns a list envelope with a real 'total', each alarm carries 'suggested_actions' naming a companion remediation tool, and empty 'items' with 'truncated' False means there are truly no active alarms. This prevents a likely misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then compactly covers return semantics, empty-result interpretation, and routing guidance. Every sentence earns its place, and the total length is reasonable for the amount of behavioral and routing information it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema, rich annotations, and no output schema, the description provides all necessary context: return envelope shape, the meaning of 'total', remediation guidance via suggested_actions, and explicit handling of empty/truncated results. Nothing an agent needs to invoke or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (limit and target) already have clear descriptions in the schema. The tool description does not add any parameter-level semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '[READ] Get active/triggered alarms across the VMware inventory,' naming a specific verb, resource, and scope. It further distinguishes itself from siblings by calling itself the 'raw alarm list' and pointing to alternatives like cluster_health_summary and investigation bundles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: 'Use this for the raw alarm list; prefer cluster_health_summary when you want alarms folded into a whole-cluster verdict. Then drill into the flagged object with vm_investigation_bundle or host_investigation_bundle.' This tells an agent exactly when to select this tool and when to route elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsARead-onlyIdempotent
[READ] Get recent vCenter/ESXi events filtered by severity.
Returns the list envelope. No row limit is applied, so truncated is False;
total is null because vCenter's event collector applies its own bounds —
widen hours if you need to be sure nothing older is being missed.
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 vm_investigation_bundle / host_investigation_bundle instead: they return the same events correlated with that object's state in one call. ESXi syslog lines are not events — use host_log_scan for those.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | How many hours back to query (default 24). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| severity | No | Minimum severity: "critical", "warning", or "info". | warning |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool read-only and idempotent, but the description adds substantial behavioral context beyond them: the envelope behavior, the reason total is null, the 'unknown' severity being returned rather than filtered, the unclassified counter, and the warning that empty items plus non-zero unclassified does not mean a quiet window. This is exactly the kind of nuance an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical, but every sentence carries essential interpretive or routing information. It is front-loaded with the core purpose, then builds through envelope semantics, severity quirks, and finally sibling-tool differentiation. No filler or redundancy is present; the length is justified by the subtle failure modes it prevents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description thoroughly explains the return envelope, key fields, caveats, and the unclassified/unknown edge cases. It also covers when to use this tool versus correlated bundles and log scanning. Given the tool's complexity, nothing needed for correct invocation or result interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters with 100% description coverage, so the baseline is 3. The description adds meaningful extra semantics for hours ('widen hours if you need to be sure nothing older is being missed') and severity (ranking behavior and 'unknown' handling), elevating it above baseline. Target is not elaborated, but the schema already describes it sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear '[READ] Get recent vCenter/ESXi events filtered by severity', identifying the exact verb, resource, and filtering dimension. It further differentiates from siblings by framing this as an 'inventory-wide event sweep' and explicitly contrasting with vm_investigation_bundle / host_investigation_bundle, making selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: 'Use this for an inventory-wide event sweep' states when to call it, and it names the preferred alternatives when the object is already known. It also excludes a common confusion case by stating ESXi syslog lines are not events and routing to host_log_scan. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_host_sensorsARead-onlyIdempotent
[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). Empty items means no host
exposes sensor data (e.g. nested ESXi), not that the query failed.
Use this for physical hardware only — for CPU/memory load use host_performance, and follow up on a red sensor with host_investigation_bundle to see the alarms and events around that host.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max sensor rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds valuable behavioral detail beyond those structured hints: it documents the list envelope's real 'total', the row fields, the green/yellow/red status values, and the critical meaning of empty 'items' as 'no host exposes sensor data' rather than a failed query. This directly prevents a common false-negative interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs each serve a distinct purpose: what it returns, how to interpret empty results, and when to use alternatives. The most important facts are front-loaded, and there is no filler or repetition. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, this description is complete: it covers purpose, returned fields, status semantics, empty-result interpretation, and routing to related tools. An agent has everything it needs to invoke the tool correctly and interpret the result without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both 'limit' and 'target' already documented: 'Max sensor rows to return (None = all)' and 'vCenter/ESXi target from config (default if omitted)'. The description does not add parameter-level syntax or examples, so the baseline 3 is appropriate because the schema carries the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get hardware sensor status (temperature, voltage, fan, ...) for all hosts.' It clearly names the resource, scope, and data categories, and distinguishes itself from siblings through the 'physical hardware only' framing. This is far beyond a tautology and gives an agent an immediate mental model of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('physical hardware only'), names the alternative for load data ('host_performance'), and gives a follow-up action for red sensors ('host_investigation_bundle'). It also explains an edge case (nested ESXi) to prevent misinterpretation. This is model guidance for when-to-use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_host_servicesARead-onlyIdempotent
[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 ntp_status, which also reports the configured servers. Starting or stopping a service is a write — this skill cannot do it; use vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | No | Filter to a single host by exact name (None = all hosts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the return envelope structure, row fields, and the guarantee that truncated is always False because all matching hosts are enumerated. It also states the read-only boundary explicitly, adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and dense, with the core purpose first, followed by return details, then usage guidance and exclusions. Every sentence earns its place and no information is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two optional parameters, read-only annotations, and no output schema, the description fully covers what the agent needs: the exact fields returned, the truncated behavior, a concrete use case, and a clear alternative for NTP. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter descriptions for target and host_name already document their meaning and defaults. The tool description does not add deeper semantics for these parameters, but the schema carries the required burden, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Get host service status (running state and startup policy).' It clearly distinguishes the tool from siblings by stating its scope (services, not sensors or VMs) and by explicitly pointing to ntp_status for NTP-specific checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use the tool ('check whether SSH, NTP or the firewall service is in the expected state'), names a preferred alternative for NTP (ntp_status), and excludes write operations by directing users to vmware-aiops for starting/stopping services.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_investigation_bundleARead-onlyIdempotent
[READ] "What is happening around this ESXi host?" — one correlated drill-down.
Use this instead of stitching list_esxi_hosts + 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 cluster_health_summary flags a host. Point-in-time snapshot — no trending; for syslog lines use host_log_scan. Acting on a finding (maintenance mode, evacuate) belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Event-timeline look-back window in hours (default 24). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | Yes | Exact ESXi host name; unknown names return a teaching error. Get it from list_esxi_hosts or cluster_health_summary first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only/idempotent; the description adds return-shape context ('one correlated bundle, not the list envelope'), batching behavior, point-in-time semantics, and output guidance (operational language, not raw dump). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses short paragraphs for alternatives, return contents, trigger context, and limitations. Every clause adds non-redundant information and nothing reads as filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by itemizing the bundle's contents (host state, cluster, VM rollup, datastores, alarms, performance, event timeline) and its operational caveats. Given the tool's read-only nature and well-documented parameters, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully documented in the schema with defaults and usage notes (e.g., exact host name, teaching error, hours look-back). The main description does not add parameter meaning, so the high schema coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific analytical operation ('correlated drill-down' around an ESXi host) and enumerates exactly what the bundle contains, distinguishing it from the list tools and from sibling bundle tools for VMs and datastores. The opening question makes the intent unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this instead of manually chaining four listed tools and specifies the trigger ('after cluster_health_summary flags a host'). It also gives exclusions: no trending, syslog needs host_log_scan, and remediation belongs to vmware-aiops.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_log_scanARead-onlyIdempotent
[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, …). Returns the list
envelope {items, returned, limit, total, truncated, hint}; each row has
severity, source (host_log:<key>), message, time and entity. total is
null on purpose — this is "errors within the scanned window", not all errors
ever, and empty items means nothing matched.
Use this when get_events or host_investigation_bundle 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.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | How many recent lines per log to scan (default 500). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | No | Filter to a single host by exact name (None = all hosts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior, and the description adds valuable behavioral detail: it explains that only matching lines are returned, describes the envelope format, and notably clarifies that 'total is null on purpose' and empty items means no matches. This prevents misinterpretation of scan results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the core purpose, then covers behavior, return format, the total-null caveat, and usage guidance without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, but the description fully covers the return envelope and row fields, plus the semantics of total and empty items. Combined with the complete input schema and annotations, nothing essential is missing for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds useful parameter context beyond the schema: it explains that 'lines' is per log and that 'host_name' can narrow the scan for performance. It does not add much for 'target', but the schema already adequately documents that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Scan recent ESXi host syslog lines for error/warning patterns') against a clear resource. It also differentiates from related tools by noting that vCenter events and ESXi syslog are different sources, which helps an agent select this tool among siblings like get_events and host_investigation_bundle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use the tool: 'Use this when get_events or host_investigation_bundle show a host in trouble but not why.' It also provides an optimization hint: 'Filter with host_name to keep the scan fast on large clusters.' This goes well beyond a vague context statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_memory_tieringARead-onlyIdempotent
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max host rows (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | No | Filter to one host by exact name (None = all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the operation as read-only and idempotent; the description adds useful behavioral detail beyond that: it reads pyVmomi HostSystem.hardware.memoryTierInfo, requires ESXi 8.0U3+/9.x, reports 'unknown' for older hosts, and clarifies that 'noTiering' means a real checked-none state rather than missing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, with front-loaded purpose, a 'When to use' section, return envelope details, and gotchas. The only minor redundancy is restating 'Read-only' at the end after '[READ]' and despite the readOnly annotation, but overall every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description fully explains the return shape, row fields, per-tier breakdown, and the special meaning of 'noTiering'. It also covers version prerequisites and behavior on older hosts, making it complete for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters completely, including defaults and filtering intent, with 100% coverage. The description does not add parameter-level detail, but the schema carries that burden adequately, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: reporting per-host memory tiering and NVMe uplift ratio. It also differentiates itself by claiming to be 'the only source of measured tier byte sizes,' which helps distinguish it from generic host-list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly begins with 'When to use' and lists concrete scenarios: identifying ESXi hosts backed by NVMe, checking tier sizes, and understanding how much memory rides on NVMe. It does not enumerate alternatives or explicit 'when not to use' conditions, but it provides clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_performanceARead-onlyIdempotent
[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 host_investigation_bundle to drill into it, or vm_performance to see which VMs on it are driving the load.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max host rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | No | Filter to a single host by exact name (None = all hosts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations already declaring readOnlyHint, openWorldHint, and idempotentHint, the description adds valuable behavioral nuance: data is from live 20-second PerfManager, disconnected hosts are skipped rather than reported as zero, results are busiest-first, and the data is point-in-time with no historical trend.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the essential read/live nature, then efficiently packs the most useful operational details without redundancy. Every sentence contributes either scope, differentiation, behavioral edge cases, or an alternative routing suggestion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description compensates by enumerating returned fields, explaining the 'total' envelope semantics, stating which hosts are excluded, and describing ordering. No hidden behaviors or call prerequisites remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a clear inline description (limit, target, host_name), so the schema already fully documents parameter semantics. The tool description adds no extra parameter guidance, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('[READ] Real-time CPU/memory/disk/network utilisation per ESXi host') and distinguishes itself from list_esxi_hosts by contrasting live PerfManager data with static config data. It also names specific fields returned, leaving no ambiguity about what the tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is explicit about when to use this tool: 'Use this to find which host is hot'. It also routes the agent to follow-up tools such as host_investigation_bundle and vm_performance, and contrasts with list_esxi_hosts for static host configuration needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
license_statusARead-onlyIdempotent
[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 certificate_status and ntp_status for a platform-hygiene sweep. Which host consumes which license is not reported — use list_esxi_hosts for the host inventory. Assigning a license is a write; use vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond that: it documents the list envelope, per-row fields, the unlimited flag semantics ('row total == 0'), and guarantees 'truncated is always False' because every license is enumerated. It also discloses what is not reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and [READ] marker, then returns semantics, usage context, exclusions, and alternatives. Each sentence contributes distinct information with no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return contents, which it does thoroughly: envelope type, row fields, unlimited flag semantics, and truncation behavior. It also covers scope limitations and related tools, making the tool self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'target' has 100% schema description coverage: 'vCenter/ESXi target from config (default if omitted).' The description adds no additional parameter-specific meaning, which is acceptable because the schema already carries the necessary semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: '[READ] vCenter/ESXi license inventory with usage and expiry.' It also distinguishes itself from siblings by explicitly stating that host-level license consumption is not reported and pointing to list_esxi_hosts, and by noting that license assignment belongs to vmware-aiops.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is explicit: 'Use this to catch over-allocation or an approaching expiry' and it is framed as part of a platform-hygiene sweep with certificate_status and ntp_status. It also gives clear when-not-to-use guidance: host consumption is handled by list_esxi_hosts and license assignment by vmware-aiops.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_clustersARead-onlyIdempotent
[READ] List clusters with host count, DRS/HA status, and resource totals.
Returns the list envelope with a real total. Static topology only — use this
to resolve a cluster name, then cluster_health_summary, which supersedes
stitching this with list_esxi_hosts and get_alarms yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max clusters to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond those hints: it labels the data as 'Static topology only' and warns about the 'list envelope' with a 'real total.' It also documents the intended workflow. Not as rich as full pagination/performance notes, but it genuinely supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no fluff. The core purpose is front-loaded, the return envelope note is brief, and the usage guidance is packed into a single efficient sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a minimal return expectation ('list envelope with a real total') and lists the visible fields. It also routes the agent to the correct next tool. A small gap remains: the description does not mention how limit interacts with total if paginated, but this is minor for a static topology list tool with well-covered schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both limit and target already have clear descriptions in the schema. The tool description adds no parameter-specific information, but because the schema fully documents both parameters, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List clusters with host count, DRS/HA status, and resource totals.' It also clarifies this is a static topology listing, distinguishing it from cluster_health_summary, a very close sibling. An agent knows exactly what data this tool provides and what it does not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs: 'use this to resolve a cluster name, then cluster_health_summary, which supersedes stitching this with list_esxi_hosts and get_alarms yourself.' This gives clear when-to-use guidance and directs the agent away from an alternative composition. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_datastoresARead-onlyIdempotent
[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 datastore_capacity for thin-provisioning
over-commit risk or datastore_investigation_bundle to drill into one datastore.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max datastores to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it read-only, idempotent, non-destructive, and open-world. The description adds useful context beyond annotations by mentioning the 'list envelope with a real total' and 'Raw free/used only', which helps set expectations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with the core purpose in the first line and follow-up guidance in two short sentences. No filler, and the key exclusions and successor tools are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple list operation, the description fully covers what the tool returns (envelope with fields and total), its limitation (raw free/used only), and when to use which alternative. With no output schema, the description adequately explains the return shape and all necessary context for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both 'limit' and 'target' fully described by the schema. The description does not add parameter-specific detail, which is acceptable given the baseline, but no extra value is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb 'List' with a specific resource (datastores) and enumerates the returned fields (capacity, free space, type, VM count). It also names two sibling tools as alternatives, making the tool's purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: to resolve a datastore name, and then routes to datastore_capacity or datastore_investigation_bundle for deeper analysis. Also notes that only raw free/used data is provided, implying it is not for thin-provisioning risk assessment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_networksARead-onlyIdempotent
[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 vm_info for the NICs of one VM. NSX segments live in vmware-nsx.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max networks to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by noting the return is a 'list envelope with a real total' and by explicitly limiting results to name, vm_count, and accessible, which helps set agent expectations beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences, with the core purpose front-loaded and each sentence adding necessary context: output shape, exclusions, workflow, and NSX routing. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with no output schema, the description covers the returned fields, the envelope behavior, the limitation of detail level, and the intended follow-up workflow. Combined with rich annotations and full schema coverage, this is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (limit and target) are already documented in the structured schema. The description does not need to compensate, and it does not meaningfully add parameter-level semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List networks') and enumerates the exact fields returned: name, attached VM count, and accessibility. It goes further by explicitly excluding VLAN, uplink, and NSX overlay detail, which cleanly distinguishes it from what an NSX-specific tool would provide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use case: 'Use this to resolve a port-group name, then vm_info for the NICs of one VM.' It also routes NSX segments to a different tool by stating 'NSX segments live in vmware-nsx,' telling the agent when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_esxi_hostsARead-onlyIdempotent
[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 host_performance for
live load or host_investigation_bundle to drill into one host.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hosts to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral context: the response is a list envelope, 'total' is the authoritative host count, and the values are static config rather than live load. This goes beyond what the annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. Every sentence earns its place: the first states the list purpose and fields, the second clarifies the envelope/total distinction, and the third routes the agent to the correct sibling tools. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only tool with two optional params and full schema coverage, the description is complete. It covers return shape, field content, the static-config caveat, and related tools, with annotations covering safety. Nothing needed for correct selection or invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented clearly. The tool description adds context around static vs. live data and host-name resolution, but it does not add significant parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), identifies the resource (ESXi hosts), and enumerates the returned fields (CPU cores, memory, version, VM count, uptime). It also separates this tool from related siblings by explicitly mentioning host_performance and host_investigation_bundle for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: use this for static config and resolving a host name, then use host_performance for live load or host_investigation_bundle for deep drill-down. It clearly distinguishes when to use this tool versus the stated alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_virtual_machinesARead-onlyIdempotent
[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 vm_info for detail or vm_investigation_bundle to drill into one; for a fleet-wide view start at cluster_health_summary instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max VMs (None = all). | |
| fields | No | Any of name, power_state, cpu, memory_mb, folder_path, guest_os, ip_address, host, uuid, tools_status (None = auto). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| sort_by | No | name | cpu | memory_mb | power_state | folder_path. | name |
| power_state | No | poweredOn | poweredOff | suspended. | |
| folder_filter | No | Case-insensitive folder_path substring; nested folders match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's job is to add runtime behavior. It does so in detail: the response envelope, the meaning of 'total' vs 'truncated', the 50-VM default-field truncation, and the deprecated 'vms' alias. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, response semantics, truncation caveat, deprecation note, and usage routing. It is front-loaded with the core operation and uses code formatting to isolate field names. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully carries return-value explanation: envelope fields, truncation semantics, and the deprecated alias. It also contextualizes the operation among siblings. For a read-only list tool with six optional parameters, nothing critical is missing for an agent to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine extra semantics beyond the schema by explaining how 'limit' and 'fields' interact under the 50-VM threshold and introducing the 'mode' field as an indicator of which fields were returned. This goes beyond simply restating parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states an explicit verb and resource: 'List virtual machines, with filtering, sorting, and field selection.' It further distinguishes itself by steering agents to use this for resolving an exact VM name, versus vm_info, vm_investigation_bundle, or cluster_health_summary for other needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final paragraph gives explicit routing guidance: use this tool to resolve an exact VM name, then delegate to vm_info for detail or vm_investigation_bundle for deeper investigation, and use cluster_health_summary for a fleet-wide view. This clearly tells the agent when this tool is the right choice and when a sibling is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ntp_statusARead-onlyIdempotent
[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
count and unreachable_note before reporting the estate as healthy.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter/ESXi target from config (default if omitted). | |
| host_name | No | Filter to a single host by exact name (None = all hosts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/idempotent, and the description adds valuable context beyond that: every host is enumerated so truncated is always False, null vs false semantics for unreachable hosts, and the need to check hosts_unreachable/unreachable_note before declaring the estate healthy. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The [READ] prefix and first line front-load purpose, then flow into return shape, null semantics, and routing guidance in logical order. Although longer than minimal, every sentence contributes an operational detail the agent needs; nothing feels wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description fully specifies the return envelope, row fields, the healthy flag logic, null behavior for unreachable hosts, and the unreachable-host caveat. For a two-optional-parameter read tool, this is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, and both params have descriptions (target from config; host_name filter by exact name). The description does not add parameter-level detail, but the schema already carries the full semantic burden, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reports per-host NTP configuration health covering servers and ntpd service state. It explicitly distinguishes itself from get_host_services for time problems, so the agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: prefer this over get_host_services for time problems because it covers configured servers plus ntpd state, use esxcli for live clock offset, and use vmware-aiops for fixes. This is clear when-to-use and when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resource_pool_usageARead-onlyIdempotent
[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 vm_performance to see which VMs in it are demanding, or cluster_health_summary for the cluster-level picture.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max pool rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavioral details beyond annotations: return structure (list envelope with total), field list, sorting by memory usage descending, meaning of -1 as unlimited, and the caveat about non-qualified pool names. This complements the readOnly and idempotent hints without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence earns its place: it front-loads the read marker and core purpose, details output format, then provides usage context. No redundant sentences, though it could be slightly tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains return fields, sorting, and special values, plus usage guidance. For a read-only tool with two optional parameters, this is complete; an agent can call it correctly without needing further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for both parameters is 100%, so the description adds minimal new meaning. It only indirectly references the limit parameter via the -1 semantics in results, but does not elaborate on the target parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns per-resource-pool CPU/memory reservation, limit, and usage, and enumerates the exact fields in each row. It names specific resources and the read action, distinguishing it from sibling tools that focus on hosts, VMs, clusters, or datastores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly specifies when to use this tool: "when a VM is throttled but its host is not busy." It also gives clear follow-up steps, mentioning vm_performance and cluster_health_summary as alternatives, effectively routing the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_agingARead-onlyIdempotent
[READ] Sweep ALL VMs for snapshots and flag old / sprawling ones.
Use this for fleet-wide snapshot sprawl; prefer vm_list_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max snapshot rows to return (None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| only_old | No | When True, return only snapshots past the threshold. | |
| age_threshold_days | No | Age above which a snapshot is flagged old (default 30). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds meaningful behavioral detail beyond that: the return shape is a 'rollup, not the list envelope,' and it discloses that est_size_mb is a 'lower bound' with an explanation of why (delta-disk growth not separable). It also flags that deletion belongs elsewhere. This adds value beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with the primary purpose and use case front-loaded in the first two sentences. Every sentence earns its place: purpose, usage, return structure, field caveats, and read-only note. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully explains the return structure (including fields like total_snapshots, old_snapshots, vms_with_snapshots, threshold_days, snapshots[], hint) and caveats about est_size_mb. It also covers the only behavioral caveat (read-only, no deletion). For a tool with 4 optional parameters and no output schema, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description does not add new parameter-level semantics beyond what the schema already provides, hence the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (sweep) and resource (ALL VMs' snapshots) with a clear purpose (flag old/sprawling ones). It distinguishes itself from the sibling vm_list_snapshots by saying 'prefer vm_list_snapshots when you only care about one VM.' This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this for fleet-wide snapshot sprawl' and directly names the alternative tool with the condition to switch. This is a textbook example of usage guidance, covering both when and when-not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vcenter_deployment_sizeARead-onlyIdempotent
[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); nothing crashed.
Gotchas: 9.1-only endpoint — older vCenters will 404 (authored teaching error). Endpoint and field parse verified against a live VCF 9.1 vCenter. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter target from config (default if omitted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations, explaining the exact return shape ({available, note, fields}), the meaning of available: False (vCenter 503, nothing crashed), and the 9.1-only endpoint behavior with older vCenters returning 404. This gives the agent essential runtime context and failure semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, well-structured into 'When to use,' 'What it returns,' and 'Gotchas.' Every sentence serves a purpose, and the most important information (what it reads, when to use it) appears first without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, no output schema, and rich annotations, the description covers all relevant context: purpose, use case, return format, failure semantics, API version constraints, and verification status. An agent has everything needed to correctly invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter 'target' with a clear description, so schema coverage is 100%. The tool description adds no parameter-specific details, but none are needed since the schema already covers it; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: '[READ] vCenter appliance deployment size,' and further specifies it reads current and target deployment size class. It also distinguishes itself from sibling inventory/perf tools by stating this is capacity-planning context they do not cover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' section explicitly states the intended use case: reading vCenter deployment size class for capacity planning. It also notes that inventory/perf tools do not cover this context, providing implicit guidance on alternatives, though it does not explicitly name a specific sibling to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vm_backup_snapshot_historyARead-onlyIdempotent
[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 (vpxd.task.maxAge, 30 days by default), so the counts
describe a shorter period than days asked for.
Duplicate VM names raise rather than resolve to one, because a duration attributed to the wrong same-named VM looks exactly like a correct answer. For snapshots that exist right now use vm_list_snapshots or snapshot_aging.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How far back to look, 1 to 365 (default 30). | |
| limit | No | Max cycle rows when include_cycles is set (capped at 200). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| vm_name | Yes | Exact VM name; duplicates are refused, not guessed. | |
| include_cycles | No | Also return the individual cycles, newest kept on cap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive, so the description adds substantial behavioral context beyond that: it returns a rollup rather than a raw list envelope, history_unavailable and coverage_note can indicate incomplete data, duplicate VM names raise an error, and the result is a lower bound on backup duration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every section earns its place: scope, lower-bound semantics, return shape, failure-signal fields, duplicate-name behavior, and pointer to alternatives. It is front-loaded with the core purpose and uses formatting to make caveats scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description carries the full burden of explaining what is returned: counts, four-hour statistics, latest and longest cycles, unmatched rows, and the two fields that must be checked before reporting all-clear. It also covers the duplicate-name failure mode and directs to sibling tools appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all five parameters with 100% coverage, so the baseline is 3. The description adds meaningful nuance for vm_name by stating that duplicate names are refused rather than guessed, and for days by explaining that coverage_note can mean the returned window is shorter than requested.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, measurable statement: 'How long backups held a snapshot open on one VM, from task history.' It names the exact resource, source of data, and one-VM scope, and it distinguishes this tool from snapshot_aging and vm_list_snapshots by pointing those tools at current snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes users to vm_list_snapshots or snapshot_aging for snapshots that exist right now, while positioning this tool as the historical backup-window view. It also clarifies when the data is meaningful (image-level backup products) and warns not to treat the result as the full backup job duration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vm_infoARead-onlyIdempotent
[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 vm_performance, and for the same VM correlated with its host, alarms and events use vm_investigation_bundle.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter/ESXi target from config (default if omitted). | |
| vm_name | Yes | Exact name of the virtual machine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds valuable behavior beyond those: it returns static configuration only, returns a single dict rather than a list envelope, and warns that an unknown name yields a teaching error instead of a match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. It covers return format, scope, error behavior, prerequisites, and sibling alternatives in a few sentences, with no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with rich annotations and siblings, the description covers all needed invocation context: what it returns, when to use it, what to call first, and which tools cover adjacent concerns. The lack of an output schema is mitigated by the explicit return-shape statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (target and vm_name) are already meaningfully documented in the schema. The description reinforces that vm_name must be exact and tells the agent where to get it, but does not add substantially new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: 'Get detailed information about one VM' and enumerates the included areas (CPU, memory, disks, NICs, snapshots). It further differentiates from siblings by noting it returns a single detail dict, not the list envelope, and explicitly contrasts with vm_performance and vm_investigation_bundle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is explicit about when to use the tool: 'Use this when you already know the exact name' and instructs to obtain it from list_virtual_machines first. It also names alternatives for live CPU/memory, for correlated host/alarms/events data, and for reconfiguration, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vm_investigation_bundleARead-onlyIdempotent
[READ] "What is happening around this VM?" — one correlated drill-down.
Use this instead of stitching vm_info + vm_list_snapshots + get_alarms + 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 cluster_health_summary names a problem VM, or when asked "what's going on with ?". Point-in-time snapshot — no trending. Acting on what you find (power, migrate, delete snapshot) belongs to vmware-aiops.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Event-timeline look-back window in hours (default 24). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| vm_name | Yes | Exact VM name; unknown names return a teaching error. Get it from list_virtual_machines or cluster_health_summary first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that all reads are batched, that the tool returns a correlated bundle rather than a list envelope, that the event timeline is merged and newest-first, and that the result is a point-in-time snapshot. It also adds an instruction to present output operationally rather than raw. These are meaningful behavioral details the annotations alone do not supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it states purpose, lists contents, gives usage triggers, sets expectations, and issues a clear output instruction. The most important information is front-loaded, and the length is justified by the tool's composite nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a composite read-only tool with no output schema, the description is unusually complete: it enumerates the returned components, states ordering, clarifies batch behavior, warns against trending/acting, and even documents error behavior for unknown VM names. An agent has enough context to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three parameters at 100% coverage, so the baseline is 3. The description adds useful semantic context by telling the agent where to obtain vm_name ('Get it from list_virtual_machines or cluster_health_summary first') and by tying hours/event timeline to the point-in-time nature of the bundle, which goes slightly beyond the raw schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear operational question ('What is happening around this VM?') and names the exact function: 'one correlated drill-down.' It lists the constituent data sources (VM state, host, cluster, datastores, snapshots, alarms, performance, event timeline), making it unambiguously distinct from individual sibling tools and from the host/datastore investigation bundles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use it ('after cluster_health_summary names a problem VM, or when asked "what's going on with <vm>?"'), when not to use it ('Point-in-time snapshot — no trending'; 'Acting on what you find ... belongs to vmware-aiops'), and what to use instead of stitching lower-level tools together. This is strong alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vm_list_snapshotsARead-onlyIdempotent
[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 snapshot_aging 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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | vCenter/ESXi target from config (default if omitted). | |
| vm_name | Yes | Exact name of the virtual machine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful behavioral context on top: distinguishing a genuinely empty snapshot list via 'empty items with truncated False,' explaining the level hierarchy, and clarifying that mutating snapshot operations live in vmware-aiops. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently organized into three short paragraphs, each earning its place: what/returns, alternatives and preconditions, and error behavior. Key scope and read-only details are front-loaded, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully equips an agent to call the tool correctly: exact parameter semantics, return envelope details, empty-result interpretation, the source for the VM name, and which sibling handles inventory-wide scanning. Despite having no output schema, the return structure is clearly documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already described in the schema. The description adds extra practical meaning by requiring an 'exact name,' telling the agent to obtain it from list_virtual_machines, and reinforcing that the target defaults from config. This goes beyond the baseline schema-only explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List all snapshots of one VM, including the nesting hierarchy.' It specifies what is returned per row (name, description, created timestamp, state, level) and explicitly distinguishes itself from mutating snapshot operations and related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use this for one known VM.' It names the alternative for sweeping inventory (snapshot_aging) and instructs the agent to get the VM name from list_virtual_machines first. It even warns about behavior for unknown names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vm_performanceARead-onlyIdempotent
[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,
disk_read_kbps, disk_write_kbps, net_kbps), busiest first. 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 vm_info, and to see the same VM correlated with its host, alarms and events use vm_investigation_bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max VM rows to return (default 25; None = all). | |
| target | No | vCenter/ESXi target from config (default if omitted). | |
| vm_name | No | Filter to a single VM by exact name (None = all powered-on VMs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses important runtime behavior: only powered-on VMs have a real-time provider and are included, powered-off VMs are skipped, data is point-in-time only, the returned total reflects VMs that reported metrics, and truncated indicates pagination. This meaningfully enriches what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose first, then response semantics, then usage guidance. Every sentence contributes information, with no filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does a strong job of explaining the response envelope, exposed metric fields, ordering, filtering behavior, and alternatives. An agent can correctly select and invoke this tool without needing additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful context about limit behavior and result ordering, but it does not materially explain individual parameters beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear statement of what the tool does: returns real-time CPU/memory/disk/network utilization per VM, prefixed with [READ]. It further differentiates itself from siblings by explicitly naming vm_info and vm_investigation_bundle as alternatives for different needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use this tool ('rank load across VMs') and explicitly points to alternatives for other scenarios: vm_info for a single VM's configuration and vm_investigation_bundle for host/alarms/events correlation. This gives an agent direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
32 tool updates
v1.9.2- Changed
active_sessions4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max session rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "active_sessionsOutput", "type": "object" }Afternull
- Changed
active_tasks5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / include_recent / description"Also include recently completed/failed tasks (default True)."
- added
Input schema / properties / limit / description"Max task rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "active_tasksOutput", "type": "object" }Afternull
- Changed
certificate_status5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max host rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / warn_days / description"Flag certs expiring within this many days (default 30)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "certificate_statusOutput", "type": "object" }Afternull
- Changed
cluster_health_summary5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / cluster_filter / description"Case-insensitive substring; only matching clusters show (None = all, plus a standalone-hosts row)."
- added
Input schema / properties / include_vms / description"Roll up VM counts (default True); False skips that pass."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / top_n / description"Cap ``top_issues`` (default 10; 0 omits it). ``issues_total`` is the pre-cap count."
- Added
cluster_last_apply_result - Added
cluster_patch_compliance - Changed
cross_vcenter_attention3 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / cluster_filter / description"Case-insensitive cluster substring applied to every target (None = all clusters)."
- added
Input schema / properties / top_n / description"Cap the merged top_issues list (default 10); ``issues_total`` is the pre-cap count."
- Changed
datastore_capacity4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max datastore rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "datastore_capacityOutput", "type": "object" }Afternull
- Changed
datastore_investigation_bundle4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / datastore_name / description"Exact datastore name; unknown names return a teaching error. Get it from list_all_datastores or datastore_capacity first."
- added
Input schema / properties / hours / description"Event-timeline look-back window in hours (default 24)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- Changed
get_alarms4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max alarms to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "get_alarmsOutput", "type": "object" }Afternull
- Changed
get_events6 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / hours / description"How many hours back to query (default 24)."
- added
Input schema / properties / severity / description"Minimum severity: \"critical\", \"warning\", or \"info\"."
- added
Input schema / properties / severity / enum[ "critical", "warning", "info" ]
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "get_eventsOutput", "type": "object" }Afternull
- Changed
get_host_sensors4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max sensor rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "get_host_sensorsOutput", "type": "object" }Afternull
- Changed
get_host_services4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / host_name / description"Filter to a single host by exact name (None = all hosts)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "get_host_servicesOutput", "type": "object" }Afternull
- Changed
host_investigation_bundle4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / host_name / description"Exact ESXi host name; unknown names return a teaching error. Get it from list_esxi_hosts or cluster_health_summary first."
- added
Input schema / properties / hours / description"Event-timeline look-back window in hours (default 24)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- Changed
host_log_scan5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / host_name / description"Filter to a single host by exact name (None = all hosts)."
- added
Input schema / properties / lines / description"How many recent lines per log to scan (default 500)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "host_log_scanOutput", "type": "object" }Afternull
- Added
host_memory_tiering - Changed
host_performance5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / host_name / description"Filter to a single host by exact name (None = all hosts)."
- added
Input schema / properties / limit / description"Max host rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "host_performanceOutput", "type": "object" }Afternull
- Changed
license_status3 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "license_statusOutput", "type": "object" }Afternull
- Changed
list_all_clusters4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max clusters to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "list_all_clustersOutput", "type": "object" }Afternull
- Changed
list_all_datastores4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max datastores to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "list_all_datastoresOutput", "type": "object" }Afternull
- Changed
list_all_networks4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max networks to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "list_all_networksOutput", "type": "object" }Afternull
- Changed
list_esxi_hosts4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max hosts to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "list_esxi_hostsOutput", "type": "object" }Afternull
- Changed
list_virtual_machines7 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / fields / description"Any of name, power_state, cpu, memory_mb, folder_path, guest_os, ip_address, host, uuid, tools_status (None = auto)."
- added
Input schema / properties / folder_filter / description"Case-insensitive folder_path substring; nested folders match."
- added
Input schema / properties / limit / description"Max VMs (None = all)."
- added
Input schema / properties / power_state / description"poweredOn | poweredOff | suspended."
- added
Input schema / properties / sort_by / description"name | cpu | memory_mb | power_state | folder_path."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- Changed
ntp_status4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / host_name / description"Filter to a single host by exact name (None = all hosts)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "ntp_statusOutput", "type": "object" }Afternull
- Changed
resource_pool_usage4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max pool rows to return (None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "resource_pool_usageOutput", "type": "object" }Afternull
- Changed
snapshot_aging5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / age_threshold_days / description"Age above which a snapshot is flagged old (default 30)."
- added
Input schema / properties / limit / description"Max snapshot rows to return (None = all)."
- added
Input schema / properties / only_old / description"When True, return only snapshots past the threshold."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- Added
vcenter_deployment_size - Added
vm_backup_snapshot_history - Changed
vm_info3 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / vm_name / description"Exact name of the virtual machine."
- Changed
vm_investigation_bundle4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / hours / description"Event-timeline look-back window in hours (default 24)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / vm_name / description"Exact VM name; unknown names return a teaching error. Get it from list_virtual_machines or cluster_health_summary first."
- Changed
vm_list_snapshots4 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / vm_name / description"Exact name of the virtual machine."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "vm_list_snapshotsOutput", "type": "object" }Afternull
- Changed
vm_performance5 fields changed- added
Input schema / additionalPropertiesfalse
- added
Input schema / properties / limit / description"Max VM rows to return (default 25; None = all)."
- added
Input schema / properties / target / description"vCenter/ESXi target from config (default if omitted)."
- added
Input schema / properties / vm_name / description"Filter to a single VM by exact name (None = all powered-on VMs)."
- changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "vm_performanceOutput", "type": "object" }Afternull
5 tool updates
v1.7.6- Added
cluster_health_summary - Added
cross_vcenter_attention - Added
datastore_investigation_bundle - Added
host_investigation_bundle - Added
vm_investigation_bundle
11 tool updates
v1.6.1- Added
active_sessions - Added
active_tasks - Added
certificate_status - Added
datastore_capacity - Added
host_log_scan - Added
host_performance - Added
license_status - Added
ntp_status - Added
resource_pool_usage - Added
snapshot_aging - Added
vm_performance
4 tool updates
v1.5.38- Added
get_host_sensors - Added
get_host_services - Added
list_all_networks - Added
vm_list_snapshots
1 tool update
v1.5.22- Changed
list_virtual_machines1 field changed- added
Input schema / properties / folder_filter{ "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Folder Filter" }
5 tool updates
v1.5.18- Changed
get_alarms1 field changed- added
Input schema / properties / limit{ "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }
- Changed
list_all_clusters1 field changed- added
Input schema / properties / limit{ "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }
- Changed
list_all_datastores1 field changed- added
Input schema / properties / limit{ "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }
- Changed
list_esxi_hosts1 field changed- added
Input schema / properties / limit{ "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }
- Changed
list_virtual_machines5 fields changed- added
Input schema / properties / fields{ "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" } - added
Input schema / properties / limit{ "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" } - added
Input schema / properties / power_state{ "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Power State" } - added
Input schema / properties / sort_by{ "default": "name", "title": "Sort By", "type": "string" } - changed
Output schema / (root)Before{ "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "list_virtual_machinesOutput", "type": "object" }Afternull
7 tool updates
v0.1.2- First observed
get_alarms - First observed
get_events - First observed
list_all_clusters - First observed
list_all_datastores - First observed
list_esxi_hosts - First observed
list_virtual_machines - First observed
vm_info
TDQS
Each tool has a clearly distinct purpose, and the descriptions actively steer agents toward the right choice (e.g. list_esxi_hosts vs host_performance for static vs live data, vm_list_snapshots vs snapshot_aging for single-VM vs fleet-wide). The investigation bundles are convenience compositions rather than duplicates, explicitly positioned against the raw getters. No two tools appear to do the same job.
Tool names are readable and often resource-prefixed (vm_*, host_*, cluster_*, datastore_*), but the overall convention is mixed: list_*/get_* verbs coexist with noun-phrase names like host_performance, snapshot_aging, active_tasks, and cluster_patch_compliance. Within subgroups the pattern is consistent, but there is no single predictable verb_noun scheme across the set.
At 32 tools, this is well above the typical 3-15 range and even above the 16-25 'heavy' band. While each tool is distinct, several are niche vSphere 9.1-only endpoints (host_memory_tiering, vcenter_deployment_size), making the overall selection surface large for an agent.
The read-only surface is very broad: hosts, VMs, clusters, datastores, networks, alarms/events, capacity, snapshots, platform hygiene, tasks/sessions, and vLCM are all covered. The main gaps are intentional and clearly documented — no historical trending and no storage/network performance depth such as per-datastore latency.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to manage VMware vSphere virtual infrastructure through comprehensive operations including VM power control, snapshot management, resource monitoring, performance analytics, and bulk operations with built-in safety confirmations for destructive actions.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage VMware vSphere infrastructure through 55 typed tools built on the govc CLI. It supports comprehensive operations including VM lifecycle management, snapshot control, datastore navigation, and networking configuration.253MIT
- AlicenseAqualityAmaintenanceAI-powered VMware vCenter/ESXi monitoring and operations. 20 MCP tools for inventory queries, health monitoring, VM lifecycle management, fast provisioning (Linked Clone, OVA, template deploy), snapshot management, and datastore browsing. Supports vSphere 6.5–8.0. Works with local models via Ollama/LM Studio.24470MIT
- AlicenseNot gradedqualityDmaintenanceEnables management of VMware vCenter and ESXi environments, including VM operations, resource management, and automation with Ollama AI and n8n workflows.4MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vmware-skills/VMware-Monitor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server