关于 VMware AIops
VMware AIops 是一个社区项目,用于通过 AI 辅助执行 vCenter 和 ESXi 虚拟机生命周期操作与部署。其 MCP 工具涵盖虚拟机、集群、网络和计划操作,并提供只读调查报告,在变更前关联状态与事件。
主要功能
- 01虚拟机生命周期与部署操作
- 02来宾系统命令执行和文件传输
- 03集群与网络管理
- 04支持回滚的多步计划
- 05关联信息的只读调查报告
适用场景
- 01从 OVA 镜像部署和配置实验室虚拟机
- 02克隆测试虚拟机并通过 TTL 清理
- 03操作前调查虚拟机、主机或数据存储问题
MCP 相关
该 MCP 服务提供 61 种 VMware 操作工具,涵盖虚拟机生命周期、部署、集群、数据存储、网络及计划执行。它还提供只读健康检查和调查报告工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
60收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | any | 否 | 返回的警报最大数量(None = 全部)。活动警报较多时使用。 |
| target | any | 否 | 可选的配置中 vCenter 目标名称。省略时使用默认值。 |
详细介绍
VMware AIops
作者:Wei Zhou,VMware by Broadcom — [email protected] 这是 VMware 工程师发起的社区项目,并非 VMware 官方产品。 如需 VMware 官方开发者工具,请访问 developer.broadcom.com。
English | 中文
AI 驱动的 VMware vCenter/ESXi VM 生命周期管理与部署工具 — 61 个工具。
配套技能可处理其他所有事项:
技能 范围 安装 vmware-monitor 只读:清单、运行状况、警报、事件、指标 uv tool install vmware-monitorvmware-storage 数据存储、iSCSI、vSAN 管理 uv tool install vmware-storagevmware-vks Tanzu 命名空间、TKC 集群生命周期管理 uv tool install vmware-vks只需要只读监控? 请使用 VMware-Monitor — 代码库中不含任何具破坏性的代码。
升级到 2.0
2.0 将 38 个 MCP 工具重命名,使每个名称都以动词开头(例如,cluster_add_host → add_cluster_host、cluster_configure → configure_cluster、cluster_create → create_cluster)。完整的新旧名称对照表见
RELEASE_NOTES.md。其他方面均无变化:工具、参数、
安全门控和 CLI 命令都相同。如果 Agent 提示词、脚本或 ~/.vmware/rules.yaml 中引用了工具名称,请更新该名称(但不要更改已保存计划
文件中的 action 名称 — cluster_add_host、storage_rescan 等是计划操作,而非工具名称,拼写应保持不变)。不过,使用旧名称编写的拒绝
规则仍可正常工作,前提是 vmware-policy ≥ 1.18(vmware-audit policy 会列出因重命名而扩大的规则),而 vmware-pilot ≥ 1.13 会转换已保存工作流中的旧名称。
如果低于 2.0 的安装共用此 rules.yaml,也请将其升级到 vmware-policy ≥ 1.18.2:该版本会针对新旧名称检查每条规则,
因此同一个文件可同时供两者使用。
⚡ 快速调查报告(只读)
分诊 → 调查 → 采取行动,全程在一次对话中完成。五种观点鲜明的只读报告会在服务器端汇总并关联数据,并返回高信号结果(绝不会返回原始清单),让你在进行任何更改之前,先决定该去哪里查看。每种报告都可使用 --html 生成自包含的离线 HTML 快照(不包含外部资源;展开详情使用原生 <details> 折叠,无需 JavaScript)。所有报告均通过 AIops 自己的 vCenter 连接,委托给 vmware-monitor 库处理。
| 问题 | 命令 | 关联内容 |
|---|---|---|
| “现在有什么需要关注?”(涵盖所有 vCenter) | vmware-aiops attention | 将所有 vCenter 合并为一个全局排序的问题列表;无法访问的目标也能优雅降级处理 |
| “有没有什么情况很严重?”(涵盖所有集群) | vmware-aiops summary | 各集群的主机 + VM 电源状态 + 实时 CPU/内存 + 警报 → 按优先级排序的前 N 个问题 + 各集群状态 |
| “这台 VM 周围发生了什么?” | vmware-aiops investigate vm <name> | VM 状态 + 主机 + 集群 + 后备数据存储 + 快照 + 警报 + 性能 + 合并后的事件时间线 |
| “这台主机周围发生了什么?” | vmware-aiops investigate host <name> | 主机状态 + 集群 + 其上运行的 VM + 已挂载的数据存储 + 警报 + 性能 + 关联时间线 |
| “这个数据存储周围发生了什么?” | vmware-aiops investigate datastore <name> | 容量/可用空间 + 挂载该数据存储的主机 + 该数据存储承载的 VM + 警报 + 关联时间线 |
vmware-aiops attention # what needs attention now, all vCenters
vmware-aiops investigate vm web-01 --hours 72 # everything around a VM, then act on it
vmware-aiops investigate vm web-01 --html # → offline snapshot in ~/vmware-health/
通过 MCP 使用时,对应的工具为 get_cluster_health_summary、get_cross_vcenter_attention、investigate_vm、investigate_host、investigate_datastore。(需要安装 vmware-monitor。)
快速安装(推荐)
适用于 Claude Code、Cursor、Codex、Gemini CLI、Trae 和 30 多种 AI Agent:
# Via Skills.sh
npx skills add vmware-skills/VMware-AIops
# Via ClawHub
clawhub install @zw008/vmware-aiops
PyPI 安装(无需访问 GitHub)
# Install via uv (recommended)
uv tool install vmware-aiops
# Or via pip
pip install vmware-aiops
# China mainland mirror (faster)
pip install vmware-aiops -i https://pypi.tuna.tsinghua.edu.cn/simple
离线 / 隔离网络安装(从源代码安装)
本项目使用现代 PEP 517 构建系统(hatchling),因此按设计不提供
setup.py——这是预期行为,并非文件缺失。如果你克隆了源代码,并遇到
ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build,说明你的 pip 版本低于 21.3,无法使用非 setuptools 后端进行可编辑(-e)安装。可编辑模式只是开发时的便利功能,运行此工具并不需要它——请执行以下任一操作:
# 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 .
对于真正与外部网络隔离的主机,请在可联网的机器上构建 wheel 并复制过去——目标主机之后无需联网:
# 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-aiops
与其他 VMware MCP 服务相比的优势
大多数开源 VMware MCP 服务(例如 bright8192/esxi-mcp-server、
giuliolibrando/vmware-vsphere-mcp-server)都是单 vCenter VM 封装器:
列出 VM、控制电源、创建快照、进行基本监控,以及使用 confirm=True 标志。它们明确
不涵盖网络、存储、Kubernetes、运维分析、负载均衡或合规性——而且“记录日志”不等于审计跟踪。
这是一个包含 11 个软件包的系列中的一个技能,覆盖整个 VMware 环境,并通过受治理的执行框架运行 每个工具:
| 其他 VMware MCP 服务 | 本系列 | |
|---|---|---|
| VM 生命周期 + 监控 | ✅ | ✅ |
| NSX 网络(网段/网关/NAT/路由/IPAM) | ❌ | ✅ vmware-nsx |
| NSX 安全(DFW/组/IDS-IPS/traceflow) | ❌ | ✅ vmware-nsx-security |
| 存储(数据存储/iSCSI/vSAN) | ❌ | ✅ vmware-storage |
| Tanzu Kubernetes(Supervisor/Namespace/TKC) | ❌ | ✅ vmware-vks |
| Aria Operations(指标/警报/容量) | ❌ | ✅ vmware-aria |
| AVI / NSX ALB 负载均衡 + AKO | ❌ | ✅ vmware-avi |
| 合规基线 + 配置偏差(CIS/SCG/等保/PCI) | ❌ | ✅ vmware-harden |
| 受治理的执行框架(统一审计、策略引擎、Token 预算 + 失控熔断器、分级风险层级、撤销 Token、提示词注入净化) | ❌ | ✅ 每个工具均使用 vmware-policy |
如果你只在一个 vCenter 中对 VM 进行电源循环,单文件服务就够用了。如果你 运行的是实际的(受监管、由 NSX 分段、跨多个域)VMware 环境,并需要一位 能通过审计人员审批的 AI 运维人员,那么本系列正适合你——请参阅 docs/compliance-ready.md。
功能概览
此技能的功能
| 类别 | 工具 | 数量 |
|---|---|---|
| VM 生命周期 | 开机/关机、TTL 自动删除、恢复干净状态 | 6 |
| 部署 | OVA、模板、链接克隆、批量克隆/部署 | 8 |
| 来宾操作 | 执行命令、上传/下载文件、配置 | 5 |
| 计划/应用 | 多步骤规划并支持回滚 | 4 |
| 集群 | 创建、删除、HA/DRS 配置、添加/移除主机 | 6 |
| 数据存储 | 浏览文件、扫描镜像 | 2 |
| 网络 | dvSwitch 端口组列表/创建、主机 VMkernel 列表/添加/移除、DF-bit MTU 路径 ping | 6 |
| 访问权限 | 查看正在使用的账户,以及该账户是否拥有每个工具所需的权限(get_access_info、CLI access-info) | 1 |
CLI 与 MCP:应使用哪种模式
| 场景 | 建议 | 原因 |
|---|---|---|
| 本地/小型模型(Ollama、Qwen <32B) | CLI | 上下文约 2K Token,而 MCP 约为 10K;小型模型难以处理大量工具架构 |
| 对 Token 敏感的工作流 | CLI | SKILL.md + Bash 工具 = 最低开销 |
| 云端模型(Claude、GPT-4o) | 均可 | 两者都适用;MCP 可提供结构化 JSON 输入/输出 |
| 自动化流水线 / Agent 链接 | MCP | 类型安全的参数、结构化输出,无需解析 Shell |
| 监控 / 存储 / K8s | 配套技能 | 请参阅 vmware-monitor、vmware-storage、vmware-vks |
经验法则:使用 CLI 可提高成本效益并适配小型模型。使用 MCP 可借助大模型实现结构化自动化。
架构
User (Natural Language)
↓
AI CLI Tool (Claude Code / Gemini / Codex / Aider / Continue / Trae / Kimi)
↓ reads SKILL.md / AGENTS.md / rules
↓
vmware-aiops CLI
↓ pyVmomi (vSphere SOAP API)
↓
vCenter Server ──→ ESXi Cluster ──→ VM
or
ESXi Standalone Host ──→ VM
版本兼容性
| vSphere / VCF 版本 | 支持情况 | 备注 |
|---|---|---|
| VCF 9.1 / vSphere 9.1 | ✅ 完全支持 | 于 2026-05-12 发布。pyVmomi <10.0 可通过 SOAP 解析并建立连接;新的纯 REST 功能(PATCH /deployment/size、仅支持 IPv6 的 GOSC)尚未封装,相关功能请参阅 VCF Python SDK。 |
| VCF 9.0 / vSphere 9.0 | ✅ 完全支持 | pyVmomi 8.0.3+ 可通过 vSphere 9 SOAP API 建立连接。从 VCF 9 开始,pyVmomi 也已捆绑在统一的 VCF Python SDK 中。 |
| 8.0 / 8.0U1-U3 | ✅ 完全支持 | CreateSnapshot_Task 已弃用 → 请使用 CreateSnapshotEx_Task |
| 7.0 / 7.0U1-U3 | ✅ 完全支持 | 支持所有 API |
| 6.7 | ✅ 兼容 | 向后兼容,已测试 |
| 6.5 | ✅ 兼容 | 向后兼容,已测试 |
pyVmomi 会在 SOAP 握手期间自动协商 API 版本,无需手动配置。同一代码库可无缝管理 7.0 / 8.0 / 9.0 / 9.1 环境。
Broadcom 官方参考资料
- SDK:https://developer.broadcom.com/sdks — VCF Python SDK(推荐用于 VCF 9+,捆绑 pyVmomi + vSAN SDK)、vSphere Automation SDK for Python(REST API)
- REST API:https://developer.broadcom.com/xapis — vSphere Automation API、VCF API、SDDC Manager API
- 命令行工具:https://developer.broadcom.com/tools — PowerCLI 9.1、ESXCLI、OVF Tool
常见工作流
部署实验室环境
- 浏览数据存储中的 OVA 映像 →
vmware-aiops datastore browse <ds> --pattern "*.ova" - 从 OVA 部署虚拟机 →
vmware-aiops deploy ova ./image.ova --name lab-vm --datastore ds1 - 在虚拟机内安装软件 →
vmware-aiops vm guest-exec lab-vm --cmd /bin/bash --args "-c 'apt-get install -y nginx'" --user root - 创建基准快照 →
vmware-aiops vm snapshot-create lab-vm --name baseline - 设置 TTL 以自动清理 →
vmware-aiops vm set-ttl lab-vm --minutes 480
批量克隆以进行测试
- 创建计划:使用
create_vm_plan添加多个克隆和重新配置步骤 - 与用户一起审核计划(显示受影响的虚拟机和不可逆操作警告)
- 应用计划:
apply_vm_plan按顺序执行,失败时停止 - 如果失败:
rollback_vm_plan撤销已执行的步骤 - 为所有克隆设置 TTL,以便自动清理
将虚拟机迁移到另一台主机
- 通过
vmware-monitor检查虚拟机信息 → 验证电源状态和当前主机 - 迁移:
vmware-aiops vm migrate my-vm --to-host esxi-02 - 验证迁移是否完成
VM 生命周期
| 操作 | 命令 | 确认 | vCenter | ESXi |
|---|---|---|---|---|
| 开机 | vm power-on <name> | — | ✅ | ✅ |
| 正常关机 | vm power-off <name> | 两次 | ✅ | ✅ |
| 强制关机 | vm power-off <name> --force | 两次 | ✅ | ✅ |
| 重置 | 通过 create_vm_plan 执行计划操作 reset(MCP;无 CLI 命令) | — | ✅ | ✅ |
| 挂起 | 通过 create_vm_plan 执行计划操作 suspend(MCP;无 CLI 命令) | — | ✅ | ✅ |
| 创建 VM | vm create <name> --cpu --memory --disk | — | ✅ | ✅ |
| 删除 VM | vm delete <name> | 两次 | ✅ | ✅ |
| 重新配置 | vm reconfigure <name> --cpu --memory | 两次 | ✅ | ✅ |
| 创建快照 | vm snapshot-create <name> --name <snap> | — | ✅ | ✅ |
| 列出快照 | vm snapshot-list <name> | — | ✅ | ✅ |
| 恢复快照 | vm snapshot-revert <name> --name <snap> | 两次 | ✅ | ✅ |
| 删除快照 | vm snapshot-delete <name> --name <snap> [--no-wait] | 两次 | ✅ | ✅ |
| 任务状态 | vm task-status <task-id> | — | ✅ | ✅ |
| 克隆 VM | vm clone <name> --new-name <new> | 两次 | ✅ | ✅ |
| vMotion | vm migrate <name> --to-host <host> | 两次 | ✅ | ❌ |
| 设置 TTL | vm set-ttl <name> --minutes <n> | 两次 | ✅ | ✅ |
| 取消 TTL | vm cancel-ttl <name> | — | ✅ | ✅ |
| 列出 TTL | vm list-ttl | — | ✅ | ✅ |
| 清理环境 | vm clean-slate <name> [--snapshot baseline] | 两次 | ✅ | ✅ |
| 访客系统执行命令 | vm guest-exec <name> --cmd /bin/bash --args "..." --user <account> | 两次 | ✅ | ✅ |
| 访客系统执行命令(含输出) | 仅 MCP:run_vm_guest_command_with_output(必须提供 username)——无 CLI 命令 | — | ✅ | ✅ |
| 访客系统上传文件 | vm guest-upload <name> --local f.sh --guest /tmp/f.sh --user <account> | 两次 | ✅ | ✅ |
| 访客系统下载文件 | vm guest-download <name> --guest /var/log/syslog --local ./syslog --user <account> | — | ✅ | ✅ |
访客系统操作要求在访客 OS 内运行 VMware Tools,并且必须明确指定访客账户——CLI 使用
--user,MCP 使用username。没有默认账户,因此除非选择 root,否则任何调用都不会以 root 身份运行。run_vm_guest_command_with_output(仅 MCP;CLI 没有对应命令)会自动检测 Linux/Windows shell 并捕获 stdout/stderr。
计划 → 应用(多步骤操作)
对于涉及 2 个或更多步骤或 2 个或更多 VM 的复杂操作,请使用计划/应用工作流,而不是逐项执行:
| 步骤 | 执行内容 |
|---|---|
| 1. 创建计划 | AI 调用 create_vm_plan——验证操作、检查 vSphere 中的目标,并生成包含回滚信息的计划 |
| 2. 审阅 | AI 向用户展示计划:步骤、受影响的 VM、不可逆操作警告 |
| 3. 应用 | apply_vm_plan 会先预览;使用 confirm=True 时按顺序执行,遇到失败即停止。每个受限步骤都由相应工具单独检查;iSCSI/重新扫描步骤会被拒绝(请使用 vmware-storage) |
| 4. 回滚(如失败) | 询问用户是否回滚,然后由 rollback_vm_plan 撤销已执行的步骤(跳过不可逆步骤);每个破坏性回滚步骤都会先经过检查,检查被拒绝时回滚即停止 |
计划存储在 ~/.vmware-aiops/plans/ 中,成功后自动删除,并在 24 小时后自动清理。
VM 部署与置备
| 操作 | 命令 | 耗时 | vCenter | ESXi |
|---|---|---|---|---|
| 从 OVA 部署 | deploy ova <path> --name <vm> | 数分钟 | ✅ | ✅ |
| 从模板部署 | deploy template <tmpl> --name <vm> | 数分钟 | ✅ | ✅ |
| 链接克隆 | deploy linked-clone --source <vm> --snapshot <snap> --name <new> | 数秒 | ✅ | ✅ |
| 挂载 ISO | deploy iso <vm> --iso "[ds] path/to.iso" | 即时 | ✅ | ✅ |
| 转换为模板 | deploy mark-template <vm> | 即时 | ✅ | ✅ |
| 批量克隆 | deploy batch-clone --source <vm> --count <n> | 数分钟 | ✅ | ✅ |
| 批量部署(YAML) | deploy batch spec.yaml | 自动 | ✅ | ✅ |
集群管理
| 操作 | 命令 | 确认 | vCenter | ESXi |
|---|---|---|---|---|
| 集群信息 | cluster info <name> | — | ✅ | ❌ |
| 创建集群 | cluster create <name> [--ha] [--drs] | — | ✅ | ❌ |
| 删除集群 | cluster delete <name> | 二次确认 | ✅ | ❌ |
| 添加主机 | cluster add-host <cluster> --host <host> | 二次确认 | ✅ | ❌ |
| 移除主机 | cluster remove-host <cluster> --host <host> | 二次确认 | ✅ | ❌ |
| 配置 HA/DRS | cluster configure <name> [--ha/--no-ha] [--drs/--no-drs] | 二次确认 | ✅ | ❌ |
remove-host要求主机先进入维护模式;主机会从集群中移出,并作为独立主机放入数据中心的主机文件夹。
警报管理
| 操作 | 命令 | 确认 | vCenter | ESXi |
|---|---|---|---|---|
| 列出已触发的警报 | alarm list [--target <t>] | — | ✅ | ❌ |
| 确认警报 | alarm acknowledge <entity> <alarm> | — | ✅ | ❌ |
| 清除(重置)警报 | alarm reset <entity> <alarm> | 二次确认 | ✅ | ❌ |
影响范围:vSphere 没有针对单个警报的清除 API。
alarm reset使用AlarmManager.ClearTriggeredAlarms,会清除与指定警报实体类型(主机/VM/全部)和当前状态(红色/黄色)匹配的所有已触发警报,而不仅是指定的警报。系统会先查找指定警报(拼写错误会立即失败),输出中的scope字段会准确报告清除的范围。如果警报背后的条件仍然存在,已清除的警报会自动再次触发。
数据存储浏览器
| 功能 | vCenter | ESXi | 详情 |
|---|---|---|---|
| 浏览文件 | ✅ | ✅ | 列出任意数据存储路径中的文件/文件夹 |
| 扫描映像 | ✅ | ✅ | 在所有数据存储中查找 ISO、OVA、OVF、VMDK |
定时扫描与通知
| 功能 | 详情 |
|---|---|
| 守护进程 | 基于 APScheduler,可配置扫描间隔(默认 15 分钟) |
| 多目标扫描 | 依次扫描所有已配置的 vCenter/ESXi 目标 |
| 扫描内容 | 每个周期:已触发的警报、过去 lookback_hours 内的 vCenter 事件,以及 ESXi 主机日志 hostd、vmkernel、vpxa 中的新增行 |
| 主机日志 | 增量读取:每行在每次守护进程运行期间只报告一次(守护进程重启后,会重新读取每个日志最后 500 行一次)。日志轮转,或两个周期之间新增行超过 500 行时,会添加一条 info 行,说明哪些行未扫描。读取主机日志需要 Global.Diagnostics 权限,而 vCenter 的只读角色不包含此权限;无法读取的日志会生成一条说明原因的 info 行,绝不会静默显示“一切正常” |
| 日志分析 | 主机日志中匹配 error、fail、critical、panic、lost access、cannot、timeout、refused、corrupt 的行——包含 critical/panic/corrupt 的行为 critical,其余为 warning |
| 结构化日志 | JSONL 输出到 ~/.vmware-aiops/scan.log——记录每个问题,包括 info 行 |
| Webhook | Slack、Discord 或任意 HTTP 端点。接收每个严重问题以及每条警报/事件警告;主机日志警告仅写入扫描日志,不发送 info 行 |
| 周期摘要 | 守护进程日志输出中每个周期一行:发现的问题(以及发送到 webhook 的数量)、无法读取的主机日志、含未扫描行的日志、失败的扫描阶段。如果任何扫描阶段失败或无法访问某个目标,会显示 Scan INCOMPLETE,绝不会显示“一切正常” |
| 守护进程管理 | daemon start/stop/status、PID 文件、正常关闭 |
安全功能
| 功能 | 详情 |
|---|---|
| 试运行模式(仅限 CLI) | --dry-run 会打印确切的 API 调用而不执行;适用于每项 CLI 写入操作,但 deploy iso、deploy mark-template、vm cancel-ttl 和 vm guest-download 除外 |
| 计划 → 确认 → 执行 → 记录 | CLI 工作流:显示当前状态、确认更改、执行并写入审计日志 |
| 二次确认(仅限 CLI) | 破坏性 CLI 命令和部署 CLI 命令(vm 的 power-off、delete、reconfigure、snapshot-revert/delete、clone、migrate、set-ttl、clean-slate、guest-exec、guest-upload;deploy 的 ova、template、linked-clone、batch、batch-clone、mark-template;cluster 的 delete、add-host、remove-host、configure、drs-rule-set/create/delete;alarm reset)需要依次通过 2 次提示确认,且无法通过任何标志绕过 |
| 只有破坏性 MCP 工具需要确认 | Agent 通过 MCP 可见的 43 个写入工具中,有 23 个(所有标注为破坏性的工具,以及 migrate_vm 和网络/DRS 编写工具)会先预览,并需要 confirm=True;其余 20 个(创建、克隆、部署、开机、重新配置、创建快照、添加主机、模板和 ISO 操作、来宾下载、计划创建、确认警报)会在首次调用时执行。没有审批层级,也没有只读开关。写入操作是否生效取决于 vCenter 账户的权限,操作记录则由审计跟踪保存。请参阅什么能保护你 |
| 拒绝操作记录 | 被拒绝的 CLI 确认会记录在审计跟踪中 |
| 审计跟踪 | 所有操作都会连同前后状态记录到 ~/.vmware-aiops/audit.log(JSONL) |
| 输入验证 | 会验证 VM 名称、CPU(1-128)、内存(128-1048576 MB)和磁盘(1-65536 GB) |
| 密码保护 | 加载 .env 文件时会检查权限;密码不会出现在 shell 历史记录中 |
| 支持自签名 SSL 证书 | verify_ssl: false — 仅适用于隔离实验环境中使用自签名证书的 ESXi;生产环境应使用由 CA 签名的证书 |
| 提示词注入防护 | 输出前会截断 vSphere 事件消息和主机日志、移除控制字符,并用边界标记包裹 |
| Webhook 数据范围 | 默认禁用。配置后,守护进程只会向你的 URL 发送:每个严重问题(警报、事件、包含 critical/panic/corrupt 的 ESXi 日志行、无法连接的目标)以及每条警告警报/事件——主机日志警告只保留在扫描日志中,且永远不会发送 info 行。每个问题都包含其实体名称和消息:经过清理的警报、事件或 ESXi 日志文本,或连接错误;其中可能包含主机名、IP 地址和用户名。不会发送该技能配置或 .env 中的凭据 |
| 等待任务完成 | 所有异步操作都会等待完成并报告结果 |
| 状态验证 | 操作前检查(VM 是否存在、电源状态是否正确) |
vCenter 与 ESXi 对比
| 功能 | vCenter | 独立 ESXi |
|---|---|---|
| vMotion 迁移 | ✅ | ❌ |
| 跨主机克隆 | ✅ | ❌ |
| 集群管理 | ✅ | ❌ |
| 所有 VM 生命周期操作 | ✅ | ✅ |
| OVA/Template/Linked Clone 部署 | ✅ | ✅ |
| 数据存储浏览与镜像扫描 | ✅ | ✅ |
| 快照 | ✅ | ✅ |
| 来宾操作 | ✅ | ✅ |
清单、警报、事件、传感器、主机服务和扫描现已移至 vmware-monitor。
能保护你的措施
上表列出了两个不同的操作面,值得明确说明哪些保护措施适用于哪些操作面,因为搞错这一点比没有保护措施更糟——你相信某个防护措施后,就会停止采取其他补救措施。
在命令行中,破坏性命令会要求确认两次,且没有绕过标志;--dry-run 会预览每项写入操作,但 deploy iso、deploy mark-template、vm cancel-ttl 和 vm guest-download 除外。这可以防止人类输错命令,但无法防范 Agent,因为 Agent 可以通过 yes | 满足这两次确认。
通过 MCP,所有标记为破坏性的工具,加上 migrate_vm 和网络/DRS 配置工具——43 个写入工具中共有 23 个,包括 power_off_vm、migrate_vm、delete_cluster、快照、虚拟机客户机、TTL、Clean Slate 和计划工具,以及 reset_vcenter_alarm——都接受一个名为 confirm 的参数,其默认行为是不执行写入的预览:直接调用会返回影响范围,不会更改任何内容。confirm=True 会重新测量;如果预览发现阻碍(例如虚拟机未运行 VMware Tools、目标主机处于维护模式、集群中仍有主机、快照缺失或重复),或无法读取某些内容,就会拒绝执行,并记录一条说明性错误,作为失败审计。delete_vm 还要求传回预览中回显的 acknowledge_with;如果虚拟机自预览后发生变化,或处于开机或挂起状态,就会拒绝执行。其余 20 个写入工具——创建、克隆、部署、开机、重新配置、创建快照、添加主机、模板和 ISO 操作、客户机下载、创建计划、确认警报——首次调用时就会执行。确认不等于授权,因此我们移除了 VMWARE_READ_ONLY 开关(它只在 MCP 操作路径上生效,而任何拥有 shell 的 Agent 都能通过命令行绕过它)。预览所能提供的保障更有限:Agent 不会破坏它尚未检查过的内容。
**真正决定写入能否执行的是 vCenter/ESXi 服务账户。**为技能配置一个仅拥有工作所需权限的账户;其余操作由 vCenter 在所有操作面上自行拒绝,无法从技能内部绕过。若要让 Agent 只读运行,请为其配置只读的 vCenter 角色——只需做出这一个决定,就能在权限判定处强制执行。调用方看到结果之前,每次调用都会记录到 ~/.vmware/audit.db 中,你可以据此了解发生了什么。~/.vmware/rules.yaml 中可选的 deny 规则会在每次 MCP 调用前检查,并可拒绝操作,例如拒绝对标记为 environment: production 的目标进行写入。随附的基准配置不会拒绝任何操作;这些规则在同一进程内运行,是叠加在 RBAC 之上的防护措施,而非替代品。
**run_vm_guest_command 是最需要谨慎考虑的工具。**它会使用提供的凭据,在客户机操作系统中运行调用方提供的命令;必须指定 username(没有默认账户),且命令内容不受任何限制。客户机账户是独立于 vCenter 的另一个授权边界——只读 vCenter 角色不会限制此工具在虚拟机内部的操作。该技能不会存储客户机凭据:通过 MCP 使用时,凭据会作为工具参数被 Agent 看到(审计记录中的密码会被隐藏)。请使用权限最小化的客户机账户,不要向 Agent 提供其不需要的客户机凭据。upload_vm_guest_file 会读取服务器进程有权读取的任何本地文件。
各工具是否受控的完整清单见 references/capabilities.md;工具数量由测试套件对照实时工具注册表核验,而非手动维护。
故障排除
“未找到虚拟机”错误
vSphere 中的虚拟机名称区分大小写。请使用 vmware-monitor inventory vms 中显示的确切名称。
Guest exec 返回空输出
使用 run_vm_guest_command_with_output 代替 run_vm_guest_command——它会自动捕获 stdout/stderr。基础的 run_vm_guest_command 只返回退出代码。
部署 OVA 超时
大型 OVA 文件(>10GB)可能会超过默认的 120s 超时时间。上传通过 HTTP NFC 租约进行——请确保运行 vmware-aiops 的机器与 ESXi 之间的网络稳定。
计划应用中途失败
运行 vmware-aiops plan list 查看失败的计划状态。询问用户是否要使用 rollback_vm_plan 回滚。回滚期间会跳过不可逆步骤(delete_vm)。
连接被拒绝 / SSL 错误
- 验证目标是否可访问:
vmware-aiops doctor - 对于自签名证书:在 config.yaml 中设置
verify_ssl: false(仅限实验室环境)
doctor 报告“no vSphere role”,或每条命令都失败并提示“session is not authenticated”
该账户可以登录,但没有 vSphere 角色,因此 vCenter 不会为其创建会话(AIops#47)。请在 vCenter 根文件夹中为其分配角色(只读或更高权限):Administration > Access Control > Global Permissions。更改密码无济于事。vmware-aiops doctor 会明确报告此情况,而 attention 会将此类目标计为未读(总体至少为 WARN)。
支持的 AI 平台
| 平台 | 状态 | 配置文件 | AI 模型 |
|---|---|---|---|
| Claude Code | ✅ 原生 Skill | skills/vmware-aiops/SKILL.md | Anthropic Claude |
| Gemini CLI | ✅ 上下文文件 + MCP | skills/vmware-aiops/SKILL.md | Google Gemini |
| OpenAI Codex CLI | ✅ Skill + AGENTS.md | skills/vmware-aiops/SKILL.md | OpenAI GPT |
| Aider | ✅ 约定 | skills/vmware-aiops/SKILL.md | 任意(云端 + 本地) |
| Continue CLI | ✅ 规则 | skills/vmware-aiops/SKILL.md | 任意(云端 + 本地) |
| Trae IDE | ✅ 规则 | skills/vmware-aiops/SKILL.md | Claude/DeepSeek/GPT-4o/Doubao |
| Kimi Code CLI | ✅ Skill | skills/vmware-aiops/SKILL.md | Moonshot Kimi |
| MCP 服务 | ✅ MCP 协议 | vmware_aiops/mcp_server/ | 任意 MCP 客户端 |
| Python CLI | ✅ 独立运行 | N/A | N/A |
平台比较
| 功能 | Claude Code | Gemini CLI | Codex CLI | Aider | Continue | Trae IDE | Kimi CLI |
|---|---|---|---|---|---|---|---|
| 云端 AI | Anthropic | OpenAI | 任意 | 任意 | 多种 | Moonshot | |
| 本地模型 | — | — | — | Ollama | Ollama | — | — |
| Skill 系统 | SKILL.md | 上下文文件 | SKILL.md | — | 规则 | 规则 | SKILL.md |
| MCP 支持 | 原生 | 原生 | 通过 Skills | 第三方 | 原生 | — | — |
| 免费层级 | — | 60 req/min | — | 自托管 | 自托管 | — | — |
MCP 服务集成
vmware-aiops MCP 服务适用于任何兼容 MCP 的 Agent 或工具。可直接使用的配置模板位于 examples/mcp-configs/。
| Agent / 工具 | 本地模型支持 | 配置模板 | 集成指南 |
|---|---|---|---|
| 小怪(Xiaoguai) | ✅ 可自托管,支持任何大模型 | MCP 配置 | 指南 |
| Goose | ✅ Ollama、LM Studio | goose.json | 指南 |
| LocalCowork | ✅ 完全离线 | localcowork.json | 指南 |
| mcp-agent | ✅ Ollama、vLLM | mcp-agent.yaml | 指南 |
| VS Code Copilot | — | vscode-copilot.json | 指南 |
| Cursor | — | cursor.json | 指南 |
| Continue | ✅ Ollama | continue.yaml | 指南 |
| Claude Code | — | claude-code.json | — |
小怪(Xiaoguai) —— 来自同一位维护者的可自托管、审计优先的 Agent 平台(Rust,单一二进制文件 + 内嵌 SQLite)。它将 vmware-aiops MCP 服务作为其中一个工具箱运行;它既是 MCP 使用方,也是 MCP 服务,其 HMAC 链式审计日志和人在环路中的审批关卡,与本工具自身的审计 + 确认设计相契合。请参阅其 MCP 集成指南。
完全本地运行(无需云 API):
# Aider + Ollama + vmware-aiops (via SKILL.md)
aider --conventions skills/vmware-aiops/SKILL.md --model ollama/qwen2.5-coder:32b
# Any MCP agent + local model + vmware-aiops MCP server
# See examples/mcp-configs/ for your agent's config format
安装
步骤 0:先决条件
# Python 3.10+ required
python3 --version
# Node.js 18+ required for Gemini CLI and Codex CLI
node --version
步骤 1:克隆并安装 Python 后端
所有平台共用同一个 Python 后端。
git clone https://github.com/vmware-skills/VMware-AIops.git
cd VMware-AIops
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
步骤 2:配置
mkdir -p ~/.vmware-aiops
cp config.example.yaml ~/.vmware-aiops/config.yaml
# Edit config.yaml with your vCenter/ESXi targets
通过 .env 文件设置密码(推荐):
# Use the template
cp .env.example ~/.vmware-aiops/.env
# Edit and fill in your passwords, then lock permissions
chmod 600 ~/.vmware-aiops/.env
安全提示:建议使用
.env文件,而不要通过命令行export设置密码,以避免密码出现在 shell 历史记录中。.env文件应设置为chmod 600(仅所有者可读写)。
密码环境变量命名约定:
VMWARE_{TARGET_NAME_UPPER}_PASSWORD
# Replace hyphens with underscores, UPPERCASE
# Example: target "home-esxi" → VMWARE_HOME_ESXI_PASSWORD
# Example: target "prod-vcenter" → VMWARE_PROD_VCENTER_PASSWORD
安全最佳实践
- 绝不在脚本或配置文件中硬编码密码
- 绝不将密码作为命令行参数传递(可通过
ps查看) - 始终使用
~/.vmware-aiops/.env,并设置权限为chmod 600 - 始终通过
config.yaml配置连接——凭据会自动从.env加载 - 配置文件内容:
config.yaml存储目标主机名、端口以及.env文件的引用。它不包含密码或令牌。所有机密信息仅存储在.env中 - TLS:默认启用。仅在隔离的实验室环境中,针对使用自签名证书的 ESXi 主机禁用
- Webhook:默认禁用。启用后,守护进程只会向你自行配置的 URL 发送信息——不会发送到任何第三方服务——发送内容包括每个严重问题(警报、事件、与严重/紧急/损坏相匹配的 ESXi 日志行、无法连接的目标)以及每条警报/事件警告;主机日志警告会保留在扫描日志中,
info行则不会发送。负载包含完整的问题文本(实体名称、警报名称、事件消息、ESXi 日志摘录、连接错误),其中可能包含主机名、IP 地址和用户名;不会包含配置文件或.env中的任何凭据 - 最小权限:使用权限最少的专用 vCenter 服务账户。仅用于监控时,建议使用只读的 VMware-Monitor
- 提示词注入防护:所有来自 vSphere 的内容都会在输出前进行截断、剥除控制字符并用边界标记包裹
- 代码审查:建议在部署到生产环境前审查源代码和提交历史记录
- 生产安全:生产环境请改用只读的 VMware-Monitor。AI Agent 可能会误解上下文并执行意料之外的破坏性操作——现实中的事故表明,缺乏适当隔离的 AI 驱动基础设施工具可能会删除生产数据库和整个环境。VMware-Monitor 从代码层面消除了这一风险:其代码库中不存在任何破坏性功能
第 3 步:连接 AI 工具
选择以下一项(或多项):
选项 A:Claude Code
方法 1:Skills.sh 或 ClawHub(推荐)
任一安装程序都会自动将技能安装到 Claude Code 的技能目录中:
npx skills add vmware-skills/VMware-AIops
# or
clawhub install @zw008/vmware-aiops
方法 2:手动安装技能
git clone https://github.com/vmware-skills/VMware-AIops.git
cd VMware-AIops
# Copy the skill into Claude Code's personal skills directory
mkdir -p ~/.claude/skills/vmware-aiops
cp -r skills/vmware-aiops/. ~/.claude/skills/vmware-aiops/
如需访问工具(而不仅仅是技能上下文),还需注册 MCP 服务:
claude mcp add vmware-aiops -- vmware-aiops mcp
重启 Claude Code,然后:
> Show me all VMs on esxi-lab.example.com
提交到官方市场
此插件也可以提交到 Anthropic 官方插件目录,供公众发现。
选项 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-aiops/SKILL.md ./GEMINI.md
如需访问工具(而不仅仅是上下文),请在 ~/.gemini/settings.json 中注册 MCP 服务:
{
"mcpServers": {
"vmware-aiops": {
"command": "vmware-aiops",
"args": ["mcp"],
"env": { "VMWARE_AIOPS_CONFIG": "~/.vmware-aiops/config.yaml" }
}
}
}
然后启动 Gemini CLI:
gemini
> Show me all VMs on my ESXi host
选项 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-aiops
cp skills/vmware-aiops/SKILL.md ~/.codex/skills/vmware-aiops/SKILL.md
# Copy AGENTS.md to project root
cp skills/vmware-aiops/SKILL.md ./AGENTS.md
然后启动 Codex CLI:
codex --enable skills
> List all VMs on my ESXi
选项 D:Aider(支持本地模型)
# 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-aiops/SKILL.md
# Or with local model via Ollama
aider --conventions skills/vmware-aiops/SKILL.md \
--model ollama/qwen2.5-coder:32b
选项 E:Continue CLI(支持本地模型)
# Install Continue CLI
npm i -g @continuedev/cli
# Copy rules file
mkdir -p .continue/rules
cp skills/vmware-aiops/SKILL.md .continue/rules/vmware-aiops.md
为本地模型配置 ~/.continue/config.yaml:
models:
- name: local-coder
provider: ollama
model: qwen2.5-coder:32b
然后:
cn
> Check ESXi health and alarms
选项 F:Trae IDE
将规则文件复制到项目的 .trae/rules/ 目录:
mkdir -p .trae/rules
cp skills/vmware-aiops/SKILL.md .trae/rules/project_rules.md
Trae IDE 的 Builder Mode 会在启动时读取 .trae/rules/ 中的 Markdown 文件。
注意:你也可以在 Trae IDE 中安装 Claude Code 扩展,并直接使用
.claude/skills/格式。
选项 G:Kimi Code CLI
# Copy skill file to Kimi skills directory
mkdir -p ~/.kimi/skills/vmware-aiops
cp skills/vmware-aiops/SKILL.md ~/.kimi/skills/vmware-aiops/SKILL.md
选项 H:MCP 服务(Glama / Claude Desktop)
MCP 服务通过 Model Context Protocol 将 VMware 操作作为工具提供。可与任何兼容 MCP 的客户端配合使用(Claude Desktop、Cursor 等)。
执行 uv tool install vmware-aiops 后,只需一条命令即可启动 MCP 服务(v1.5.15+):
# Recommended — single command, no network re-resolve
vmware-aiops mcp
# With a custom config path
VMWARE_AIOPS_CONFIG=/path/to/config.yaml vmware-aiops mcp
Claude Desktop 配置(claude_desktop_config.json):
{
"mcpServers": {
"vmware-aiops": {
"command": "vmware-aiops",
"args": ["mcp"],
"env": {
"VMWARE_AIOPS_CONFIG": "/path/to/config.yaml"
}
}
}
}
替代方式:uvx(无需安装)或旧版入口点
# Run without installing (requires PyPI access each launch)
uvx --from vmware-aiops vmware-aiops mcp
# Legacy entry point (still works, kept for backward compatibility)
vmware-aiops-mcp
处于企业 TLS 代理之后? uvx 可能会因
invalid peer certificate: UnknownIssuer而失败。 请使用上面推荐的vmware-aiops mcp形式(无需网络),或设置UV_NATIVE_TLS=true。
选项 I:独立 CLI(无需 AI)
# Already installed in Step 1
source .venv/bin/activate
vmware-aiops vm power-on my-vm --target home-esxi
vmware-aiops deploy ova ./ubuntu.ova --name my-vm --target home-esxi
vmware-aiops datastore browse datastore1 --target home-esxi
更新 / 升级
已经安装?重新运行对应渠道的安装命令即可获取最新版本:
| 安装渠道 | 更新命令 |
|---|---|
| ClawHub | clawhub install @zw008/vmware-aiops |
| Skills.sh | npx skills add vmware-skills/VMware-AIops |
| Git 克隆 | cd VMware-AIops && git pull origin main && uv pip install --no-sources -e .(如果不加 --no-sources,uv 会查找同级目录下的 ../VMware-Monitor 检出) |
| uv | uv tool install vmware-aiops --force |
查看当前版本:vmware-aiops --version
中国云模型
适用于偏好使用国内云 API 或访问海外服务受限的中国用户。
DeepSeek
经济实惠,编码能力强。
# Set DeepSeek API key (get from https://platform.deepseek.com)
export DEEPSEEK_API_KEY="your-key"
# Run with Aider
aider --conventions skills/vmware-aiops/SKILL.md \
--model deepseek/deepseek-coder
持久化配置 ~/.aider.conf.yml:
model: deepseek/deepseek-coder
conventions: skills/vmware-aiops/SKILL.md
Qwen(Alibaba Cloud)
Alibaba Cloud 的编码模型,提供免费套餐。
# Set DashScope API key (get from https://dashscope.console.aliyun.com)
export DASHSCOPE_API_KEY="your-key"
aider --conventions skills/vmware-aiops/SKILL.md \
--model qwen/qwen-coder-plus
或通过兼容 OpenAI 的端点使用:
export OPENAI_API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="your-dashscope-key"
aider --conventions skills/vmware-aiops/SKILL.md \
--model qwen-coder-plus-latest
Doubao(ByteDance)
export OPENAI_API_BASE="https://ark.cn-beijing.volces.com/api/v3"
export OPENAI_API_KEY="your-ark-key"
aider --conventions skills/vmware-aiops/SKILL.md \
--model your-doubao-endpoint-id
使用 Continue CLI
配置 ~/.continue/config.yaml:
# DeepSeek
models:
- name: deepseek-coder
provider: openai-compatible
apiBase: https://api.deepseek.com/v1
apiKey: your-deepseek-key
model: deepseek-coder
# Qwen
models:
- name: qwen-coder
provider: openai-compatible
apiBase: https://dashscope.aliyuncs.com/compatible-mode/v1
apiKey: your-dashscope-key
model: qwen-coder-plus-latest
本地模型(Aider + Ollama)
适用于完全离线运行——无需云 API、无需互联网,保障完全隐私。
Aider + Ollama + 本地 Qwen/DeepSeek 非常适合物理隔离环境。
第 1 步:安装 Ollama
# macOS
brew install ollama
# Linux — download from https://ollama.com/download and install manually
# See https://github.com/ollama/ollama for platform-specific instructions
第 2 步:拉取模型
| 模型 | 命令 | 大小 | 备注 |
|---|---|---|---|
| Qwen 2.5 Coder 32B | ollama pull qwen2.5-coder:32b | ~20GB | 最佳本地编码模型 |
| Qwen 2.5 Coder 7B | ollama pull qwen2.5-coder:7b | ~4.5GB | 低内存占用选项 |
| DeepSeek Coder V2 | ollama pull deepseek-coder-v2 | ~8.9GB | 推理能力强 |
| CodeLlama 34B | ollama pull codellama:34b | ~19GB | Meta 编码模型 |
硬件要求:32B → 约需 20GB VRAM(或使用 CPU 时需 32GB RAM)。7B → 需 8GB RAM。
第 3 步:使用 Aider 运行
pip install aider-chat
ollama serve
# Aider + local Qwen (recommended)
aider --conventions skills/vmware-aiops/SKILL.md \
--model ollama/qwen2.5-coder:32b
# Aider + local DeepSeek
aider --conventions skills/vmware-aiops/SKILL.md \
--model ollama/deepseek-coder-v2
# Low-memory option
aider --conventions skills/vmware-aiops/SKILL.md \
--model ollama/qwen2.5-coder:7b
持久化配置 ~/.aider.conf.yml:
model: ollama/qwen2.5-coder:32b
conventions: skills/vmware-aiops/SKILL.md
本地架构
User → Aider CLI → Ollama (localhost:11434) → Qwen / DeepSeek local model
│ ↓
│ reads AGENTS.md instructions
│ ↓
└──────────────────────────────→ vmware-aiops CLI ──→ ESXi / vCenter
提示:本地模型完全离线运行——非常适合物理隔离环境或严格的数据合规要求。
CLI 参考
# Diagnostics
vmware-aiops doctor # Check environment, config, connectivity
vmware-aiops doctor --skip-auth # Skip vSphere auth check (faster)
vmware-aiops access-info [--tool <mcp-tool>] [--target <name>] # Account in use + privileges per tool
# MCP Config Generator
vmware-aiops mcp-config generate --agent goose # Generate config for Goose
vmware-aiops mcp-config generate --agent claude-code # Generate config for Claude Code
vmware-aiops mcp-config list # List all supported agents
# VM operations
vmware-aiops vm power-on my-vm # Power on
vmware-aiops vm power-off my-vm # Graceful shutdown (2x confirm)
vmware-aiops vm power-off my-vm --force # Force power off (2x confirm)
vmware-aiops vm create my-new-vm --cpu 4 --memory 8192 --disk 100 # Create VM
vmware-aiops vm delete my-vm # Delete VM (asks twice; --dry-run previews)
vmware-aiops vm reconfigure my-vm --cpu 4 --memory 8192 # Reconfigure (2x confirm)
vmware-aiops vm snapshot-create my-vm --name "before-upgrade" # Create snapshot
vmware-aiops vm snapshot-list my-vm # List snapshots
vmware-aiops vm snapshot-revert my-vm --name "before-upgrade" # Revert snapshot
vmware-aiops vm snapshot-delete my-vm --name "before-upgrade" # Delete snapshot (waits ≤30 min for consolidation)
vmware-aiops vm snapshot-delete my-vm --name "old-big" --no-wait # Fire async, return a task id
vmware-aiops vm task-status task-1234 # Poll an async task by id
vmware-aiops vm clone my-vm --new-name my-vm-clone # Clone VM
vmware-aiops vm migrate my-vm --to-host esxi-02 # vMotion
vmware-aiops vm set-ttl my-vm --minutes 60 # Auto-delete in 60 min
vmware-aiops vm cancel-ttl my-vm # Cancel TTL
vmware-aiops vm list-ttl # Show all TTLs
vmware-aiops vm clean-slate my-vm --snapshot baseline # Revert to baseline (2x confirm)
# Guest Operations (requires VMware Tools in guest)
vmware-aiops vm guest-exec my-vm --cmd /bin/bash --args "-c 'whoami'" --user root
vmware-aiops vm guest-upload my-vm --local ./script.sh --guest /tmp/script.sh --user root
vmware-aiops vm guest-download my-vm --guest /var/log/syslog --local ./syslog.txt --user root
# Plan → Apply (multi-step operations)
vmware-aiops plan list # List pending/failed plans
# Deploy
vmware-aiops deploy ova ./ubuntu.ova --name my-vm --datastore ds1 # Deploy from OVA
vmware-aiops deploy template golden-ubuntu --name new-vm # Deploy from template
vmware-aiops deploy linked-clone --source base-vm --snapshot clean --name test-vm # Linked clone (seconds)
vmware-aiops deploy iso my-vm --iso "[datastore1] iso/ubuntu-22.04.iso" # Attach ISO
vmware-aiops deploy mark-template golden-vm # Convert VM to template
vmware-aiops deploy batch-clone --source base-vm --count 5 --prefix lab # Batch clone
vmware-aiops deploy batch deploy.yaml # Batch deploy from YAML spec
# Cluster
vmware-aiops cluster info my-cluster # Cluster details (HA/DRS status)
vmware-aiops cluster create my-cluster --ha --drs # Create cluster with HA+DRS
vmware-aiops cluster delete my-cluster # Delete cluster (2x confirm)
vmware-aiops cluster add-host my-cluster --host esxi-03 # Add host to cluster (2x confirm)
vmware-aiops cluster remove-host my-cluster --host esxi-03 # Remove host (2x confirm)
vmware-aiops cluster configure my-cluster --ha --drs # Configure HA/DRS (2x confirm)
# Alarm management
vmware-aiops alarm list # List triggered alarms
vmware-aiops alarm acknowledge esxi-01 "Host memory usage" # Acknowledge alarm
vmware-aiops alarm reset esxi-01 "Host memory usage" # Clear alarms (2x confirm; clears ALL matching entity type + status)
# Datastore (browse and scan only — iSCSI/vSAN moved to vmware-storage)
vmware-aiops datastore browse datastore1 --path "iso/" # Browse datastore
vmware-aiops datastore scan-images --target home-esxi # Scan all datastores for images
# Scan
vmware-aiops scan now # One-time scan of alarms and events (host logs: daemon only)
# Daemon
vmware-aiops daemon start # Start scanner
vmware-aiops daemon status # Check status
vmware-aiops daemon stop # Stop daemon
# Companion skills for other operations:
# vmware-monitor: inventory, alarms, events, sensors
# vmware-storage: datastores, iSCSI, vSAN
# vmware-vks: Tanzu/TKC cluster lifecycle
配置
所有选项请参见 config.example.yaml。
| 部分 | 键 | 默认值 | 说明 |
|---|---|---|---|
| targets | name | — | 易读名称 |
| targets | host | — | vCenter/ESXi 主机名或 IP |
| targets | type | vcenter | vcenter 或 esxi |
| targets | port | 443 | 连接端口 |
| targets | verify_ssl | true | 验证目标的 TLS 证书(仅对使用自签名证书的实验室主机设为 false) |
| scanner | interval_minutes | 15 | 扫描频率 |
| scanner | severity_threshold | warning | 最低严重级别:critical/warning/info |
| scanner | lookback_hours | 1 | 向前追溯的时间范围 |
| scanner | log_types | — | 没有任何代码会读取此项——守护进程始终读取 hostd、vmkernel 和 vpxa 主机日志。设置此项不会产生任何影响 |
| notify | log_file | ~/.vmware-aiops/scan.log | JSONL 日志输出 |
| notify | webhook_url | — | Webhook 端点(Slack、Discord 等) |
项目结构
VMware-AIops/
├── skills/ # Skills index (npx skills add)
│ └── vmware-aiops/
│ ├── SKILL.md # Slimmed-down skill (progressive disclosure)
│ └── references/ # Detailed docs loaded on-demand
│ ├── capabilities.md # Full capabilities tables
│ ├── cli-reference.md # Complete CLI reference
│ └── setup-guide.md # Install, security, AI platforms
├── vmware_aiops/ # Python backend
│ ├── config.py # YAML + .env config
│ ├── connection.py # Multi-target pyVmomi
│ ├── cli/ # Typer CLI (double confirm)
│ ├── ops/ # Operations
│ │ ├── inventory.py # VMs, hosts, datastores, clusters
│ │ ├── health.py # Alarms, events, sensors
│ │ ├── vm_lifecycle.py # VM CRUD, snapshots, clone, migrate
│ │ ├── vm_deploy.py # OVA, template, linked clone, batch deploy
│ │ └── datastore_browser.py # Datastore browsing, image discovery
│ ├── scanner/ # Log scanning daemon
│ ├── notify/ # Notifications (JSONL + webhook)
│ └── mcp_server/ # MCP server wrapper
│ ├── server.py # FastMCP server with tools
│ └── __main__.py
├── examples/mcp-configs/ # MCP client config templates
├── tests/ # Test suite
├── smithery.yaml # Smithery marketplace config
├── RELEASE_NOTES.md
├── config.example.yaml
└── pyproject.toml
API 覆盖范围
基于 pyVmomi 构建(vSphere Web Services API / SOAP)。
| API 对象 | 用途 |
|---|---|
vim.VirtualMachine | 虚拟机生命周期、快照、克隆、迁移 |
vim.HostSystem | ESXi 主机信息、传感器、服务 |
vim.Datastore | 存储容量、类型、可访问性 |
vim.host.DatastoreBrowser | 文件浏览、映像发现(ISO/OVA/VMDK) |
vim.OvfManager | OVA 导入和部署 |
vim.ClusterComputeResource | 集群、DRS、HA |
vim.Network | 网络列表 |
vim.alarm.AlarmManager | 活动警报监控 |
vim.event.EventManager | 事件/日志查询 |
相关项目
| 技能 | 范围 | 工具 | 安装 |
|---|---|---|---|
| vmware-aiops | 虚拟机生命周期、部署、客户机操作、集群、数据存储浏览、分类处理 | 49 | uv tool install vmware-aiops |
| vmware-monitor | 只读监控、警报、事件、调查包 | 27 | uv tool install vmware-monitor |
| vmware-storage | 数据存储、iSCSI、vSAN | 11 | uv tool install vmware-storage |
| vmware-vks | Tanzu 命名空间、TKC 集群生命周期 | 20 | uv tool install vmware-vks |
| vmware-nsx | NSX 网络:网段、网关、NAT、路由、IPAM | 33 | uv tool install vmware-nsx-mgmt |
| vmware-nsx-security | DFW 策略/规则、安全组、Traceflow、IDS/IPS | 21 | uv tool install vmware-nsx-security |
| vmware-aria | Aria Operations 指标、警报、容量、异常 | 28 | uv tool install vmware-aria |
| vmware-avi | AVI(NSX ALB)负载均衡、AKO Kubernetes 运维 | 28 | uv tool install vmware-avi |
| vmware-harden | 合规基线(CIS / vSphere SCG / 等保 / PCI-DSS)、偏差检测 | 6 | uv tool install vmware-harden |
故障排查与贡献
如果遇到任何错误或问题,请将错误消息、日志或屏幕截图发送至 [email protected]。欢迎贡献,欢迎加入我们,共同维护和改进此项目!
远程访问(HTTPS)和限制工具
默认情况下,vmware-aiops mcp 通过 stdio 与一个本地客户端通信,并提供所有工具。两种选项可以改变这一点
(vmware-policy ≥ 1.21.0)。
通过 HTTPS 提供服务,让其他机器上的客户端也能连接。每个调用方都需要一个 bearer token:
vmware-audit token create alice # prints the token once; give it to alice
vmware-audit token list # names only
vmware-audit token revoke alice # refused from its next request, no restart
vmware-aiops mcp --transport https --host 0.0.0.0 --port 8443 \
--cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \
--public-name mcp.example.com
连接客户端(此处以 Claude Code 为例;任何支持 streamable HTTP 和自定义标头的 MCP 客户端都可以):
claude mcp add --transport http vmware-aiops https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"
{
"mcpServers": {
"vmware-aiops": {
"type": "http",
"url": "https://mcp.example.com:8443/mcp",
"headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }
}
}
}
- 没有 token 时服务不会启动;如果 Host/Origin 的值不在
--public-name范围内,服务会拒绝请求;绑定前还会检查未认证请求是否会收到 401。请使用客户端信任的、适用于这些名称的证书。 - 如果在同一台机器上使用 TLS 终止反向代理,请使用
--transport http --host 127.0.0.1 --public-name mcp.example.com,并透传Authorization标头。 - 如果负载均衡器或网关位于另一台机器上,请保留
--transport https(可以使用自签名证书),在--public-name中列出负载均衡器发送的 Host 名称,并让它转发Authorization。其健康检查可以使用无需 token 的GET /healthz,该请求只会返回{"status": "ok"}(vmware-policy ≥ 1.23.0)。 - 每个请求都发送
traceparent或X-Request-ID,以便将其记录在审计日志条目中;随后可通过vmware-audit log --correlation-id ID查找对应某个平台请求的调用。 - 读取或写入此服务文件的工具(此处包括客户机文件上传/下载、OVA 和部署规格文件)不会触及其配置、token、审计日志或 TLS 密钥;通过网络使用时,除非
VMWARE_MCP_FILE_ROOT指定了供这些工具使用的目录,否则这些工具默认关闭(vmware-policy ≥ 1.23.1)。 - 审计日志会将每个调用方记录为
token:<name>。调用会并行运行,每个目标最多使用VMWARE_MCP_POOL_SIZE个会话(默认值为 2);每个会话都是在目标上的一次登录,每个调用最多等待 300 s 来获取会话。 - 所有能访问该端点的人都会以此服务的账户身份操作。 Token 用于识别调用方;它们不会授予任何平台权限。请为每个权限级别运行一个端点。
- **一个端点供多人或多种角色使用:**运行一次
vmware-audit roles enable,然后为每个 token 分配一个角色(vmware-audit token create NAME --role reader,或在roles.yaml中指定包含工具和目标的角色;vmware-policy ≥ 1.24.0)。角色会限制 token 在此端点上可以调用的工具;它不能授予超出账户权限的权限。请参阅 vmware-policy 的 README 中的“网络调用方的角色”。
仅提供只读工具,以及你选择的写入工具:
vmware-aiops mcp --expose read --allow-write acknowledge_vcenter_alarm
# or: VMWARE_AIOPS_MCP_EXPOSE=read VMWARE_AIOPS_MCP_ALLOW_WRITE=acknowledge_vcenter_alarm vmware-aiops mcp
未提供的工具不会出现在客户端的工具列表中。值无效或指定了未知的写入工具时,服务会停止运行 (退出代码 2)。这会限制向客户端提供的工具,但不构成授权,因此账户本身应遵循最小权限原则。
详情:skills/vmware-aiops/references/setup-guide.md(“通过 HTTPS 提供 MCP 服务”、“限制提供的工具”)。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。