ESXi Read-Only Diagnostics

io.github.nicolasboattini由 GitHub 帳號 nicolasboattini 發布v0.1.1更新於 Oct 24, 2026

Read-only VMware ESXi diagnostics: CPU Ready, disk latency, snapshots, real space, hardware health.

概覽

AI 產生的概覽

唯讀 MCP 伺服器,讓 AI 助理查詢 VMware ESXi 主機或 vCenter 的效能、儲存、快照與硬體診斷資訊。

可以做什麼
一次呼叫完成主機全面診斷,或分別查詢主機型號、CPU、記憶體、ESXi 版本與儲存控制器。讀取硬體健康:感測器、記憶體、CPU,以及在廠商 CIM 提供者存在時的 RAID/磁碟狀態。檢視資料存放區(容量、精簡佈建超額配置、底層磁碟)與虛擬機(資源、氣球、交換、Tools、磁碟、客體剩餘空間)。列出快照的年齡與大小,找出各資料存放區中最大的檔案及可能的孤立磁碟。讀取效能指標(CPU Ready、Co-Stop、磁碟延遲、IOPS)的平均值、p95 與最大值,並用本機 SQLite 歷史做數週檢視。檢視事件、告警與失敗登入,檢查超配比例,並確認帳號權限。
適用情境
當你需要在獨立 ESXi 主機或 vCenter 上找出真正的瓶頸時使用,例如某台 ERP 虛擬機變慢、快照氾濫、精簡佈建超額配置或硬體感測器告警。適合在不能接受任何寫入操作的生產基礎設施上給助理唯讀存取權限。
執行需求
由 uv/uvx 管理的本機 Python 執行環境、可存取 ESXi API 連接埠(預設 443)的網路,以及專用的唯讀 ESXi 使用者。ESXI_HOST 與 ESXI_USER 為必填;密碼透過 --set-password 命令存入作業系統鑰匙圈,或由 ESXI_PASSWORD 提供。選用 ESXI_PORT、ESXI_VERIFY_SSL 與 ESXI_PERF_DB。需要 Claude Code 或 Claude Desktop 等 MCP 用戶端。
安裝前請注意
助理將取得生產基礎設施的存取憑證;請使用專用唯讀角色並用權限檢查工具確認。ESXI_PASSWORD 為明文,不建議使用,優先使用作業系統鑰匙圈。TLS 驗證預設關閉(ESXI_VERIFY_SSL=0),連線會接受自簽憑證。選用的收集器會在本機寫入含虛擬機名稱與指標的 SQLite 資料庫。授權金鑰以遮罩顯示。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

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

[PyPI] [Python] [MCP] [ESXi] [Solo lectura] [Licencia]

[Listed on mcpservers.org]


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

✨ 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

HerramientaQué devuelve
diagnostico_completoTodo lo de abajo en una sola llamada — el punto de partida ideal
host_infoFabricante, 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
salud_hardwareSensores (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
config_hostLicencia (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
datastoresCapacidad, usado, libre, % de uso, % provisionado (sobre-asignación thin), disco físico detrás de cada datastore y VMs que lo usan
vmsPor 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
snapshotsTodos los snapshots con fecha, antigüedad, tamaño real y marca de los que superan N días
performanceCPU %, 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ó
historial_perfLas mismas métricas sobre semanas, filtrables por horario laboral (ver Historial)
eventosErrores, advertencias, alarmas, tareas y logins fallidos, con la hora corregida por el desfase del reloj de ESXi
top_archivosLos archivos más grandes de cada datastore, a qué VM pertenecen y posibles huérfanos (vmdk sin VM registrada)
overcommitvCPU encendidas vs hilos físicos, RAM asignada vs física, VM más grande
verificar_permisosCon 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étodoPara qué
CreateContainerView / DestroyVista temporal de la propia sesión para listar objetos
PerformanceManager.QueryPerf y afinesMétricas de performance
HostDatastoreBrowser.SearchDatastoreSubFolders_TaskListar archivos de los datastores
EventManager.QueryEvents / CreateCollectorForEventsLeer eventos (el colector es de la sesión y se destruye al terminar)
AuthorizationManager.HasPrivilegeOnEntity / RetrieveEntityPermissionsVerificar los permisos del propio usuario
OptionManager.QueryOptions, HostImageConfigManager.*Get*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:

json
{ "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):

  1. Manage → Security & users → Roles → Add role — nombre ReadOnly+Browse:
    • ✅ System (Anonymous, Read, View)
    • ✅ Datastore → Browse datastore — solo ese; nada de Delete, FileManagement ni AllocateSpace
  2. Manage → Security & users → Users → Add user — por ejemplo mcp-readonly. Dejá Enable shell access desmarcado.
  3. Host → Actions → Permissions → Add user — elegí mcp-readonly, el rol ReadOnly+Browse y marcá Propagate to all children.

Sin Browse datastore el MCP funciona igual, pero top_archivos solo 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

bash
uvx esxi-readonly-mcp --set-password

Te 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

bash
claude mcp add esxi-readonly --scope user \  -e ESXI_HOST=192.0.2.10 -e ESXI_USER=mcp-readonly \  -- uvx esxi-readonly-mcp

Claude Desktop u otro cliente (en claude_desktop_config.json o equivalente):

json
{  "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.exe si el cliente no lo encuentra en el PATH (por ejemplo C:\\Users\\<usuario>\\.local\\bin\\uvx.exe).

Reiniciá el cliente y pedile: "verificá los permisos del MCP de ESXi".

Desde el código fuente

bash
git clone https://github.com/nicolasboattini/esxi-readonly-mcp.gitcd esxi-readonly-mcpuv syncuv run esxi-readonly-mcp --set-password

Y en el cliente MCP usá uv run --directory /ruta/a/esxi-readonly-mcp esxi-readonly-mcp como comando.

Probar sin cliente MCP

bash
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

VariableObligatoriaDefaultDescripción
ESXI_HOST✅—IP o nombre del ESXi (o del vCenter)
ESXI_USER✅—Usuario de solo lectura
ESXI_PASSWORD—Solo si no podés usar keyring (queda en texto plano en la config: evitalo)
ESXI_PORT443Puerto de la API
ESXI_VERIFY_SSL01 para verificar el certificado (por defecto se acepta el autofirmado de ESXi)
ESXI_PERF_DB~/.esxi-readonly-mcp/perf_historial.dbRuta 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:

bash
uvx esxi-readonly-mcp --collect

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

powershell
[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)).RepetitionRegister-ScheduledTask -TaskName "ESXi perf collect" -Action $a -Trigger $t -User $env:USERNAME

Linux / macOS (cron)

cron
5 7-20 * * 1-5  ESXI_HOST=192.0.2.10 ESXI_USER=mcp-readonly $HOME/.local/bin/uvx esxi-readonly-mcp --collect

La 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 standaloneDebería funcionar (misma API); reportá cualquier problema
vCenterSoportado en el código (usa QueryEvents e intervalos históricos), sin probar a fondo
pyVmomi 9.x + mcp 1.x✅ Probado (mcp 2.x cambió la API: el proyecto fija mcp<2)

⚠️ Limitaciones conocidas

  • Métricas históricas: sin vCenter, performance solo 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_hardware los 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 list por 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íntomaCausa probable
No hay password...Falta uvx esxi-readonly-mcp --set-password
vim.fault.InvalidLoginUsuario o contraseña incorrectos, o el usuario no tiene permiso asignado en el host
top_archivos avisa NoPermissionAl rol le falta Datastore → Browse datastore
performance sin datos con intervalo="semana"Normal en ESXi sin vCenter: usá realtime o historial_perf
No module named 'mcp.server.fastmcp'Se instaló mcp 2.x a mano; uv sync respeta mcp<2
El cliente no encuentra uvxPoné la ruta absoluta a uvx en command
Horas raras en eventosEl reloj de ESXi está desfasado (sin NTP); config_host muestra el desfase y eventos ya lo corrige

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

  1. Actualizar la versión en pyproject.toml y en server.json (dos lugares: version y packages[0].version).
  2. Commit, push y tag:
    bash
    git tag v0.1.1 && git push origin v0.1.1
  3. El workflow release.yml verifica 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

MIT

來源:README.md,提交 6097a40

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.1最新Sep 30, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分