esxi-readonly-mcp
Read-only MCP server for diagnosing a standalone VMware ESXi host through an AI assistant — it exposes only query/inspection tools, never writes.
Full diagnostic:
diagnostico_completoruns everything in one call (permissions, host, hardware, config, datastores, VMs, snapshots, realtime performance, events, top files, overcommit).Host & config:
host_info(CPU, RAM, ESXi version, uptime, storage controllers),config_host(license, NTP/clock skew, SSH, services, NICs, vSwitches, portgroups, VMkernel).Hardware health:
salud_hardwarefor RAID, physical disks, temperature, fans, power supplies, memory and CPU sensors.Storage:
datastores(capacity, used, thin provisioning, backing disk) andtop_archivos(largest files, ownership, possible orphans).Virtual machines:
vms(state, vCPU, RAM, ballooning, swap, limits, Tools, disks thin/thick, guest free space) andovercommit(vCPU/RAM ratios).Snapshots:
snapshotslisting age, size and flagging those older than a threshold.Performance:
performance(CPU ready, Co-stop, disk latency, IOPS with avg/p95/max) andhistorial_perf(weeks of locally-collected history, business-hours filter).Events:
eventosfor errors, warnings, alarms, tasks and failed logins with clock-skew correction.Security check:
verificar_permisosconfirms the connecting user and whether it has any write privileges.
Provides read-only diagnostic tools for VMware ESXi hosts, enabling inspection of host hardware health, CPU/memory performance, datastores, VMs, snapshots, events, overcommit, and datastore files without exposing any write operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@esxi-readonly-mcp Hacé un diagnóstico completo del host y decime cuál es el cuello de botella"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🔍 esxi-readonly-mcp
Diagnóstico completo de VMware ESXi desde tu asistente de IA, sin poder romper nada.
Un servidor MCP que le da a Claude (o a cualquier cliente MCP) visibilidad total sobre tu host ESXi — CPU Ready, latencia de disco, snapshots, espacio real, salud del hardware, eventos — sin una sola herramienta de escritura.
¿Por qué?
Tenés un ESXi standalone (sin vCenter), el ERP anda lento y alguien propone gastar miles de dólares en hardware. Antes de comprar, necesitás saber qué recurso es el cuello de botella de verdad. Eso implica mirar métricas que el Host Client esconde o no guarda (CPU Ready, Co-Stop, latencia por disco virtual), cruzar el espacio provisionado contra el real y revisar snapshots, logs y sensores.
Con este MCP le preguntás a Claude "¿por qué está lenta la VM del ERP?" y él mismo consulta el host, cruza los datos y te responde con números.
Y como vas a darle acceso a un asistente de IA a tu infraestructura de producción, el servidor no expone ninguna operación que modifique algo: no puede apagar, borrar, crear, consolidar ni reconfigurar nada. Combinado con un usuario de ESXi con rol de solo lectura, la garantía es doble.
Related MCP server: VMware-Monitor
✨ Qué podés preguntarle
"Hacé un diagnóstico completo del host y decime cuál es el cuello de botella."
"¿Qué VM tiene más CPU Ready en la última hora?"
"¿Cuánto ocupa realmente cada VM en cada datastore?"
"¿Hay snapshots de más de 3 días?"
"¿Qué archivos grandes hay en los datastores que no pertenecen a ninguna VM?"
"¿Algún sensor de hardware en amarillo o rojo? ¿Hubo errores de disco esta semana?"
"¿Tengo overcommit de CPU? ¿Cuántas vCPU tengo por core físico?"
"¿Conviene más comprar RAM o cambiar el procesador?"
🧰 Herramientas
Herramienta | Qué devuelve |
| Todo lo de abajo en una sola llamada — el punto de partida ideal |
| Fabricante, modelo, serie, BIOS, CPU (cores / hilos / HT), RAM total y usada, versión y build de ESXi, uptime, política de energía, controladoras de storage |
| Sensores (temperaturas, ventiladores, fuentes, voltajes), memoria, CPU y estado de RAID/discos físicos si el host tiene el proveedor CIM del fabricante. Lista primero lo que no está en verde |
| Licencia (clave enmascarada) y vencimiento, NTP y desfase real del reloj, SSH/Shell, servicios activos, perfil de imagen, syslog, placas de red con velocidad de enlace, vSwitches, portgroups/VLANs, VMkernel |
| Capacidad, usado, libre, % de uso, % provisionado (sobre-asignación thin), disco físico detrás de cada datastore y VMs que lo usan |
| Por cada VM: estado, vCPU, RAM asignada / activa / consumida, ballooning, swap, reservas, límites, shares, VMware Tools, heartbeat, sincronización horaria, NICs (e1000 vs vmxnet3), controladoras, discos (thin/thick, usado real), espacio libre dentro del guest |
| Todos los snapshots con fecha, antigüedad, tamaño real y marca de los que superan N días |
| CPU %, CPU Ready %, Co-Stop %, latencia de CPU, memoria activa, ballooning, swap, latencia por disco virtual y por datastore, IOPS. Devuelve promedio, p95 y máximo con el momento en que ocurrió |
| Las mismas métricas sobre semanas, filtrables por horario laboral (ver Historial) |
| Errores, advertencias, alarmas, tareas y logins fallidos, con la hora corregida por el desfase del reloj de ESXi |
| Los archivos más grandes de cada datastore, a qué VM pertenecen y posibles huérfanos (vmdk sin VM registrada) |
| vCPU encendidas vs hilos físicos, RAM asignada vs física, VM más grande |
| Con qué usuario se conecta y si ese usuario tiene privilegios de escritura en ESXi |
Todas las respuestas vienen con valores de referencia (por ejemplo: CPU Ready > 10 % = contención) para que el asistente pueda interpretarlas sin adivinar.
🔒 Seguridad: cómo se garantiza que es solo lectura
1. En el código. El servidor solo lee propiedades y llama a estos métodos de la API de vSphere, todos de consulta:
Método | Para qué |
| Vista temporal de la propia sesión para listar objetos |
| Métricas de performance |
| Listar archivos de los datastores |
| Leer eventos (el colector es de la sesión y se destruye al terminar) |
| Verificar los permisos del propio usuario |
| Leer opciones y perfil de imagen |
No hay ninguna herramienta MCP para modificar nada, y el servidor le indica al asistente que no existen.
2. En ESXi. Usá un usuario dedicado con un rol de solo lectura (paso 1 de la instalación). Aunque algo
intentara escribir, ESXi lo rechazaría. verificar_permisos te confirma que quedó bien configurado:
{ "usuario": "mcp-readonly", "roles": ["ReadOnly+Browse"],
"privilegios_escritura_detectados": [], "solo_lectura_garantizado_por_ESXi": true }3. Credenciales. La contraseña nunca va en archivos de configuración: se guarda en el almacén de credenciales
del sistema operativo (Administrador de credenciales de Windows, Keychain en macOS, Secret Service en Linux)
mediante keyring. Las claves de licencia se muestran enmascaradas.
🚀 Instalación
Requisitos
uv(se encarga de Python y de las dependencias)Acceso por red al puerto 443 del ESXi
Un cliente MCP: Claude Code, Claude Desktop u otro
1. Crear un usuario de solo lectura en ESXi
En el Host Client (https://<ip-esxi>/ui):
Manage → Security & users → Roles → Add role — nombre
ReadOnly+Browse:✅ System (Anonymous, Read, View)
✅ Datastore → Browse datastore — solo ese; nada de Delete, FileManagement ni AllocateSpace
Manage → Security & users → Users → Add user — por ejemplo
mcp-readonly. Dejá Enable shell access desmarcado.Host → Actions → Permissions → Add user — elegí
mcp-readonly, el rolReadOnly+Browsey marcá Propagate to all children.
Sin Browse datastore el MCP funciona igual, pero
top_archivossolo ve archivos de VMs registradas (no ISOs ni huérfanos) y el espacio "usado" de discos thin es aproximado.
2. Guardar la contraseña en el almacén del sistema
uvx esxi-readonly-mcp --set-passwordTe pide el usuario de ESXi y la contraseña (sin mostrarla) y la guarda en el almacén de credenciales del sistema.
No hace falta clonar nada: uvx descarga el paquete de PyPI y lo ejecuta.
3. Registrar el servidor en tu cliente MCP
Claude Code
claude mcp add esxi-readonly --scope user \
-e ESXI_HOST=192.0.2.10 -e ESXI_USER=mcp-readonly \
-- uvx esxi-readonly-mcpClaude Desktop u otro cliente (en claude_desktop_config.json o equivalente):
{
"mcpServers": {
"esxi-readonly": {
"command": "uvx",
"args": ["esxi-readonly-mcp"],
"env": { "ESXI_HOST": "192.0.2.10", "ESXI_USER": "mcp-readonly" }
}
}
}En Windows usá la ruta completa a
uvx.exesi el cliente no lo encuentra en elPATH(por ejemploC:\\Users\\<usuario>\\.local\\bin\\uvx.exe).
Reiniciá el cliente y pedile: "verificá los permisos del MCP de ESXi".
Desde el código fuente
git clone https://github.com/nicolasboattini/esxi-readonly-mcp.git
cd esxi-readonly-mcp
uv sync
uv run esxi-readonly-mcp --set-passwordY en el cliente MCP usá uv run --directory /ruta/a/esxi-readonly-mcp esxi-readonly-mcp como comando.
Probar sin cliente MCP
ESXI_HOST=192.0.2.10 ESXI_USER=mcp-readonly uv run python -c "from esxi_readonly_mcp import server; import json; print(json.dumps(server._host_info(), indent=2))"(En PowerShell: $env:ESXI_HOST="192.0.2.10"; $env:ESXI_USER="mcp-readonly"; uv run python -c "...")
⚙️ Configuración
Variable | Obligatoria | Default | Descripción |
| ✅ | — | IP o nombre del ESXi (o del vCenter) |
| ✅ | — | Usuario de solo lectura |
| — | Solo si no podés usar | |
|
| Puerto de la API | |
|
|
| |
|
| Ruta de la base SQLite del historial de performance |
📈 Historial de performance
Un ESXi sin vCenter guarda solo la última hora de métricas (muestras cada 20 s). Para ver los picos reales de las últimas semanas en horario laboral, el servidor trae un modo recolector que guarda esa hora en una base SQLite local:
uvx esxi-readonly-mcp --collectProgramalo cada hora y después pedile a Claude, por ejemplo: "mostrame el historial de performance de las
últimas 4 semanas en horario laboral" (historial_perf(dias=28, solo_horario_laboral=True)).
Windows (Programador de tareas)
[Environment]::SetEnvironmentVariable("ESXI_HOST", "192.0.2.10", "User")
[Environment]::SetEnvironmentVariable("ESXI_USER", "mcp-readonly", "User")
$uvx = (Get-Command uvx).Source
$a = New-ScheduledTaskAction -Execute $uvx -Argument 'esxi-readonly-mcp --collect'
$t = New-ScheduledTaskTrigger -Daily -At 7:05am
$t.Repetition = (New-ScheduledTaskTrigger -Once -At 7:05am -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Hours 13)).Repetition
Register-ScheduledTask -TaskName "ESXi perf collect" -Action $a -Trigger $t -User $env:USERNAMELinux / macOS (cron)
5 7-20 * * 1-5 ESXI_HOST=192.0.2.10 ESXI_USER=mcp-readonly $HOME/.local/bin/uvx esxi-readonly-mcp --collectLa base contiene nombres de VMs y métricas. Por defecto vive en tu carpeta de usuario, fuera de cualquier repo.
🧪 Compatibilidad
Estado | |
ESXi 6.7 U3 standalone | ✅ Probado en producción |
ESXi 7.x / 8.x standalone | Debería funcionar (misma API); reportá cualquier problema |
vCenter | Soportado en el código (usa |
pyVmomi 9.x + mcp 1.x | ✅ Probado ( |
⚠️ Limitaciones conocidas
Métricas históricas: sin vCenter,
performancesolo ve ~1 hora. Usá--collect+historial_perf.Eventos: ESXi standalone guarda los últimos ~1000 eventos. Si un sistema de monitoreo abre sesiones constantemente (por ejemplo, Zabbix mal configurado), eso puede cubrir solo unas horas.
RAID y discos físicos:
salud_hardwarelos muestra solo si ESXi tiene el proveedor CIM del fabricante (Dell, HPE, Lenovo). Si no, revisalos en iDRAC / iLO / XCC.Lista de VIBs/drivers: requiere
Host.Config.Image, que también permite modificar la imagen; el MCP no lo pide. Alternativa:esxcli software vib listpor SSH.Dentro del guest: el MCP ve lo que reporta VMware Tools (unidades, espacio libre, IP), pero no archivos ni procesos dentro de la VM.
🛠️ Solución de problemas
Síntoma | Causa probable |
| Falta |
| Usuario o contraseña incorrectos, o el usuario no tiene permiso asignado en el host |
| Al rol le falta Datastore → Browse datastore |
| Normal en ESXi sin vCenter: usá |
| Se instaló |
El cliente no encuentra | Poné la ruta absoluta a |
Horas raras en eventos | El reloj de ESXi está desfasado (sin NTP); |
📁 Estructura
esxi-readonly-mcp/
├── src/esxi_readonly_mcp/
│ └── server.py # servidor MCP + --collect + --set-password
├── pyproject.toml # paquete PyPI (mcp<2, pyvmomi, keyring)
├── server.json # ficha para el registro oficial de MCP
├── uv.lock
└── README.md🤝 Contribuir
Issues y pull requests bienvenidos, sobre todo:
Pruebas en ESXi 7/8 y vCenter
Nuevas métricas o chequeos de solo lectura
La regla del proyecto es una sola: ninguna herramienta puede modificar el entorno. Un PR que agregue operaciones de escritura no se va a aceptar, aunque sea "opcional".
Publicar una versión (mantenedores)
Actualizar la versión en
pyproject.tomly enserver.json(dos lugares:versionypackages[0].version).Commit, push y tag:
git tag v0.1.1 && git push origin v0.1.1El workflow
release.ymlverifica que las versiones coincidan, compila, prueba el paquete, lo publica en PyPI y después en el registro oficial de MCP. Sin tokens: usa OIDC de GitHub.
📄 Licencia
Available Tools
13 toolsconfig_hostC
Configuracion del host: licencia (clave enmascarada) y vencimiento, NTP y desfase del reloj, SSH/Shell, servicios activos, perfil de imagen y VIBs/drivers de terceros, syslog, placas de red (velocidad de enlace), vSwitches, portgroups y VMkernel.
Inputs: no named parameters.
datastoresB
Datastores: capacidad, usado, libre, % de uso, % provisionado (thin), disco fisico donde esta cada uno y VMs.
Inputs: no named parameters.
diagnostico_completoB
Ejecuta todo junto: permisos, host, salud de hardware, configuracion, datastores, VMs, snapshots, performance realtime, eventos (warning/error 7 dias), top archivos y overcommit.
Inputs: dias_alerta_snapshot.
eventosB
Eventos de ESXi (errores de disco, reinicios de VMs, alarmas, tareas, logins fallidos). nivel: todos | warning (warning y error) | error. Fechas corregidas por el desfase del reloj de ESXi.
Inputs: dias, nivel, max_eventos, incluir_sesiones.
historial_perfC
Resumen de las metricas guardadas localmente por 'server.py --collect' (semanas de historia, aunque ESXi solo guarde 1 h). Filtra por horario laboral (lunes a viernes, hora local).
Inputs: dias, entidad, hora_fin, hora_inicio, +1 more.
host_infoB
Host: fabricante, modelo, CPU (cores/hilos/HT), RAM total y usada, version y build de ESXi, uptime, politica de energia y controladoras de storage.
Inputs: no named parameters.
overcommitB
Suma de vCPU vs cores/hilos fisicos y RAM asignada vs fisica (ratios de overcommit).
Inputs: no named parameters.
performanceA
Metricas de host y VMs: CPU uso, CPU Ready %, Co-Stop %, memoria activa/ballooning/swap, latencia de disco (total, por disco virtual y por datastore) e IOPS. Devuelve promedio, p95 y maximo con su momento. intervalo: realtime (20 s, ~1 h en ESXi standalone), dia, semana, mes, anio (estos requieren vCenter). max_muestras: 180 = 1 h en realtime. dias: rango hacia atras (alternativa a max_muestras).
Inputs: vm, dias, hora_fin, intervalo, +3 more.
salud_hardwareA
Salud del hardware segun ESXi: estado de la RAID y discos fisicos (PERC), sensores de temperatura, ventiladores, fuentes, memoria y CPU. Lista primero los elementos que no estan en verde.
Inputs: no named parameters.
snapshotsA
Todos los snapshots con fecha, antiguedad, tamano aproximado y marca de los que superan dias_alerta.
Inputs: dias_alerta.
top_archivosB
Archivos mas grandes de cada datastore (o de uno), con la VM a la que pertenecen y marca de posibles huerfanos.
Inputs: top, datastore.
verificar_permisosA
Muestra con que usuario se conecta y si ese usuario tiene privilegios de escritura en ESXi.
Inputs: no named parameters.
vmsC
Todas las VMs: estado, vCPU, RAM asignada/activa/consumida, ballooning, swap, reservas/limites, VMware Tools, discos (provisionado vs usado, thin/thick, datastore, controladora) y espacio libre dentro del guest.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Each tool targets a distinct ESXi monitoring area: permissions, host hardware, datastores, VMs, snapshots, performance, historical performance, largest files, overcommit, hardware health, events, host config, and a full diagnostic aggregator. Overlaps are minor and well explained, especially performance vs. historial_perf and the all-in-one diagnostico_completo. An agent can reliably select the right tool for a specific monitoring question.
All names use lowercase snake_case, but they mix English and Spanish terms (e.g., host_info, datastores, eventos, historial_perf) and mix noun phrases with one verb phrase (verificar_permisos). The pattern is readable but not predictable or consistent in language or grammatical style. A more uniform convention would improve clarity.
With 13 tools, the server is well-scoped for read-only ESXi diagnostics. Each tool covers a meaningful monitoring concern, and the aggregate diagnostico_completo tool provides a convenient full-scan option without bloating the set. This is within the ideal 3-15 range for an MCP server.
Coverage is broad: host, hardware health, config, datastores, VMs, snapshots, performance, events, overcommit, top files, and permissions are all represented. Minor gaps exist, such as explicit per-VM network details and local user/role enumeration beyond the current connection. These gaps are workable for most read-only diagnostic workflows.
Maintenance
Related MCP Connectors
Read-only local AI advice, shared reports and website audits. No PC scan or local actions.
Read-only server insight: why a Linux server or K8s cluster is slow, failing or changed.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
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.-
- AlicenseAqualityBmaintenanceRead-only VMware vCenter/ESXi monitoring. 8 MCP tools for VM inventory, host status, datastore capacity, cluster info, alarms, events, and VM details. Code-level enforced safety — no destructive operations exist in the codebase. Supports vSphere 6.5–8.0. Works with local models via Ollama/LM Studio.331,072 PyPI18MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLMs and AI agents to perform defensive security posture assessments, privilege escalation surface audits, and post-quantum cryptography readiness checks through read-only diagnostic tools.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to diagnose Kubernetes clusters through read-only MCP tools, such as inspecting pod status, logs, events, nodes, deployments, and HPA metrics via natural language queries.MIT