vmware-console-mcp
Enables control of VMware Player/Workstation virtual machines and ESXi/vCenter hosts: VM lifecycle (start/stop/reset/suspend), snapshots, cloning, file transfer, guest process execution, console screenshots, and keyboard/mouse simulation via built-in VNC, plus multi-host ESXi management through govc.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
vmware-console-mcp
用 MCP 工具操控 VMware Player / Workstation 虚拟机:生命周期、文件传输、guest 进程/命令、画面截屏、键鼠模拟。 底层只依赖 VMware 自己已开放的接口:
vmrun (VIX) → 生命周期 / 快照 / 克隆 / 文件 / guest 执行 / 进程 / 截屏 / 键入
VMware 内置 VNC (RemoteDisplay.vnc.*) + RFB → 控制台级截屏、鼠标、键盘(不需要在 guest 里装任何东西,BIOS/登录界面也能操作)
本地 VMware(Player/Workstation)部分零第三方依赖(只用 Node 内置模块);ESXi / vCenter 部分使用 govc 单文件二进制(运行 scripts/fetch-govc.ps1 下载,或设置 GOVC_PATH)。
目录
src/server.js MCP stdio 服务器(JSON-RPC)
src/tools.js 本地 VMware 28 个工具(本地) + 29 个(ESXi) + 总注册表
src/tools-esxi.js ESXi/vCenter 29 个工具(多主机)
src/esxi.js govc 封装 + 主机注册表(config/esxi-hosts.json)
src/vmrun.js vmrun 封装(自动探测 / 加密 VM / 超时保护)
src/vmx.js .vmx 读写(VNC 配置,自动备份 .vmx.bak)
src/console.js VNC 会话管理(截图缩放 / 鼠标 / 键盘)
src/rfb.js RFB 客户端(VMware 握手怪癖、raw 编码、分块拼接)
src/des.js VNC 认证用的纯 JS DES
src/png.js PNG 编码
src/keysym.js X11 keysym 映射(组合键、Unicode 输入)
tools/ govc 下载目录(二进制不入库,见 scripts/fetch-govc.*)
tools/vcsim/ vSphere 模拟器下载目录(仅测试用,不入库)
config/esxi-hosts.json ESXi 主机注册表(运行 esxi_add_host 后生成)
tests/unit.test.js 单元测试(DES/PNG/keysym/ESXi HID/VNC URI)
tests/probe.js MCP 协议冒烟测试
tests/e2e.js 本地 VM 端到端测试(VNC 截图/点击/打字/关机/删除)
tests/esxi-vcsim.js ESXi 后端测试(对 vcsim 模拟器跑管理接口)Related MCP server: VMware Workstation Pro MCP Server
环境要求
Windows(VMware Player/Workstation 已在默认路径安装;或设置 VMWARE_VMRUN 指向 vmrun.exe)
Node.js >= 18
目标 VM 关机时才能改 VNC 配置(工具会检查)
接入 MCP
任意支持 stdio 的 MCP 客户端:
{
"mcpServers": {
"vmware": {
"command": "node",
"args": ["<repo>/src/server.js"],
"env": {
"VMWARE_GUEST_USER": "<guest-user>",
"VMWARE_GUEST_PASSWORD": "<guest-password>"
}
}
}
}Claude Code / Codex 也可以用命令行添加(把路径换成你的):
claude mcp add vmware -- node <repo>/src/server.js
codex mcp add vmware -- node <repo>/src/server.js可选环境变量:
变量 | 用途 |
VMWARE_VMRUN | vmrun.exe 绝对路径(默认自动探测 Workstation/Player) |
VMRUN_HOST_TYPE | 强制 ws / player |
VMWARE_VM_PASSWORD | 加密虚拟机(.vmx 加密)的密码,vmrun 会带 -vp |
VMWARE_GUEST_USER / VMWARE_GUEST_PASSWORD | guest_* 工具的默认凭据 |
VMWARE_MCP_DEBUG | 1 时把调试日志写到 stderr |
GOVC_PATH | govc 可执行文件路径(默认 tools/govc.exe,先运行 scripts/fetch-govc.ps1;否则回退 PATH) |
ESXI_HOSTS_FILE | ESXi 主机注册表路径(默认 config/esxi-hosts.json) |
ESXI_GUEST_USER / ESXI_GUEST_PASSWORD | esxi_guest_* 工具的默认 guest 凭据 |
快速开始(控制台自动化,不装 guest 端)
关机目标 VM。
调用 vnc_enable {vmx: "D:\VMs\my-vm\my-vm.vmx", port: 5901, password: "<8-char-pw>"}
→ 自动备份 .vmx、写入 RemoteDisplay.vnc.enabled/port/password/ip=127.0.0.1。调用 vm_power {vmx, action: "start", gui: false}
→ 无头启动并等待 VNC 端口就绪。不要用 Player GUI 启动:Player GUI 启动时会传 RemoteDisplay.vnc.enabled=FALSE,把配置覆盖掉。调用 console_screenshot {vmx} → 返回 PNG(BIOS / 登录界面 / 桌面都能抓)。
console_mouse / console_type / console_key 操作画面。
vm_power {action: "stop", mode: "hard"} 关机。
已验证的效果(VMware Player 17.5 实测):
demo/bios-setup.png:PhoenixBIOS Setup 界面(开机前截图,来自一次性临时 VM)
真实主机/客户机截图属于内部资料,放在 demo/private/(git-ignored),不随仓库发布
tests/e2e.js 全流程通过:vnc_enable → start → screenshot → mouse move/click → type → ctrl+alt+delete → screenshot → stop
ESXi / vCenter 多主机(govc 后端)
支持同时管理多个 ESXi 主机(也兼容 vCenter);每台主机一个 alias,只读查询省略 alias 时会并行查全部主机。 后端使用 govmomi 官方 CLI govc(运行 scripts/fetch-govc.ps1 下载 v0.56.2,二进制不入库),无需在 ESXi 上装任何 agent。
添加主机
{ "alias": "lab1", "host": "192.0.2.10", "user": "root", "password": "***" }或推荐用环境变量保存密码:
{ "alias": "lab1", "host": "192.0.2.10", "user": "root", "password_env": "ESXI_LAB1_PASS" }调用 esxi_add_host(默认会先跑 govc about 验证,失败不落盘)。配置在 config/esxi-hosts.json; esxi_hosts 查看全部主机,esxi_remove_host 删除。
管理工具(29 个)
分组 | 工具 |
主机 | esxi_hosts, esxi_add_host, esxi_remove_host, esxi_test_host, esxi_host_info, esxi_firewall |
虚拟机 | esxi_vm_list, esxi_vm_info, esxi_vm_power(start/stop/reset/reboot/suspend), esxi_vm_create, esxi_vm_clone, esxi_vm_destroy, esxi_vm_register |
快照 | esxi_snapshot(list/create/revert/remove) |
存储 | esxi_datastore_ls, esxi_datastore_upload, esxi_datastore_download |
guest 内(Tools) | esxi_guest_run, esxi_guest_ps, esxi_guest_kill, esxi_guest_ls, esxi_guest_mkdir, esxi_guest_upload, esxi_guest_download |
控制台 | esxi_console_screenshot, esxi_console_key, esxi_console_type, esxi_console_mouse, esxi_vnc |
ESXi 控制台能力(与本地 VMware 的差异)
能力 | 实现方式 | 是否需要 Tools / 防火墙 |
截屏 | esxi_console_screenshot -> govc vm.console -capture(ESXi 的 /screen HTTP 端点) | 不需要 Tools;不经过 VNC 防火墙,开箱即用 |
键盘 | esxi_console_key / esxi_console_type -> govc vm.keystrokes(vSphere PutUsbScanCodes) | 不需要 Tools,BIOS/安装程序也能输入;不需要防火墙 |
鼠标 | esxi_console_mouse -> VM 内置 VNC(RFB),可经 SSH 隧道 | ESXi 没有公开鼠标 API;需要 esxi_vnc enable + 电源重开;外网访问要过防火墙,推荐 SSH 隧道(见下) |
VNC | esxi_vnc(status/enable/disable) -> govc vm.vnc 改 extraConfig | 关机时 enable,开机生效;端口/密码自动分配 |
防火墙 | esxi_firewall(list/enable) -> govc host.esxcli | 只能启用已存在的规则集;ESXi 默认没有 vnc 规则集,需 SSH 手建 /etc/vmware/firewall/vnc.xml 后 esxcli network firewall refresh |
结论:看画面 + 按键盘完全不需要 guest 端和防火墙(截屏 + PutUsbScanCodes);需要鼠标时才走 VNC。
鼠标:SSH 隧道方式(推荐,不改 ESXi 防火墙)
ESXi 默认没有 vnc 防火墙规则集。用 SSH 本地转发绕过(ESXi 22 端口已开):
ssh -L 15902:127.0.0.1:5902 root@<esxi-host>
esxi_vnc {alias:"lab1", vm:"win10", action:"enable", port:5902, password:"********"}
esxi_vm_power {alias:"lab1", vm:"test-vm", action:"start"}
esxi_console_mouse {alias:"lab1", vm:"test-vm", action:"click", x:960, y:552,
vnc_host:"127.0.0.1", vnc_port:15902}实测记录(2026-11-12,两台 ESXi 6.5 测试主机)
能力 | 结果 |
esxi_add_host / test_host / host_info | 通(CPU/内存/版本信息正常;API 6.5) |
esxi_vm_list | 两台主机共约 100 台 VM,含电源状态/IP/guest 类型 |
esxi_vm_power start/stop | 通(test-vm 开关机验证) |
esxi_console_screenshot | 通,无需 Tools;1920x1104 PNG(开机 "Please wait"、锁屏、桌面都抓到) |
esxi_console_key / type | 通(PutUsbScanCodes):Enter 推进画面、文本输入 + 退格清除 |
esxi_vnc status/enable/disable | 通,返回 vnc://:pass@host:port |
VNC 截屏 + 鼠标 + 按键(SSH 隧道) | 通:RFB 3.8,1920x1104 全帧;鼠标点击后光标出现在屏幕中央(截图对比) |
esxi_snapshot list | 通 |
esxi_datastore mkdir/upload/ls/download/rm | 通(:上传→列目录→下载→内容一致→删除) |
esxi_firewall list | 通(46 个规则集,无 vnc 规则集,故鼠标走隧道) |
esxi_guest_* | ✅(Windows 本地账号):进程表、run(echo/whoami)、mkdir/upload/ls/download 往返、启动进程后按 PID kill 并验证消失 |
注意:ESXi 6.5 的 VNC 在实测中协商出 security=none(即使设置了 RemoteDisplay.vnc.password),因此不要把 VNC 端口直接暴露到网络;用 SSH 隧道或只绑内网/防火墙白名单。
多主机示例
esxi_vm_list # 所有已登记主机的 VM(并行)
esxi_vm_power {alias:"lab1", vm:"win10", action:"start"}
esxi_snapshot {alias:"lab1", vm:"win10", action:"create", name:"before-test"}
esxi_console_key {alias:"lab1", vm:"win10", keys:"f2"} # 进 BIOS
esxi_console_type {alias:"lab1", vm:"win10", text:"hello", enter:true}工具清单
生命周期 / 配置(vmrun)
工具 | 说明 |
vm_list | 运行中的 VM 列表(含 VNC 配置) |
vm_info | 单台 VM:显示名、guestOS、运行状态、Tools 状态、VNC 配置 |
vm_power | start / stop / reset / suspend / pause / unpause(start 默认 gui=false) |
vm_snapshot | list / create / revert / delete |
vm_clone | full / linked 克隆 |
vm_delete | 删除 VM(运行中需 force=true) |
vm_tools_state | VMware Tools 状态 |
vm_ip | guest IP(需要 Tools) |
vm_install_tools | 挂载 Tools ISO 并安装 |
vnc_enable / vnc_disable / vnc_status | 内置 VNC 开关、端口、密码、监听状态 |
控制台(VNC,无需 guest 端)
工具 | 说明 |
console_info | 连接并返回分辨率、名称、认证方式 |
console_screenshot | 截屏返回 PNG(可选 max_width 缩放、save_path 落盘) |
console_mouse | move / click / dblclick / rightclick / down / up / scroll |
console_type | 输入文本(物理按键,BIOS 也可用) |
console_key | 组合键,如 ctrl+alt+delete、f2 |
console_close | 关闭 VNC 会话(不关机) |
guest 操作(需要 VMware Tools + 登录凭据)
工具 | 说明 |
guest_run | 运行程序并返回退出码/输出 |
guest_script | 运行脚本(解释器 + 脚本文本) |
guest_processes / guest_kill | 进程枚举 / 终止 |
guest_copy_to / guest_copy_from | 文件双向传输 |
guest_mkdir / guest_ls | 目录操作 |
guest_type_keystrokes | 向 guest 键入(Tools 通道,适合已登录桌面) |
guest_screenshot | VIX captureScreen(Tools 通道;控制台截图请用 console_screenshot) |
关键限制与坑
VNC 配置只在开机时读取:必须关机 → vnc_enable → 用 vm_power 以 gui=false 启动。Player GUI 启动会强制 VNC=FALSE(实测)。
加密 VM:vmrun 会要求密码;设置 VMWARE_VM_PASSWORD(自动加 -vp),例如 D:\VMs\my-vm\my-vm.vmx 这类加密虚拟机。
VMware Player 的功能集:快照 / 克隆 / 模板属于 Workstation Pro 功能;Player 下 vmrun 可能返回"此操作不受支持"(实测 listSnapshots)。需要这些能力请安装 Workstation Pro。
guest_ 需要 Tools 且已登录*:无 Tools 时 vmrun 不会立刻报错而是挂起,本工具会先用 checkToolsState 预检并给出明确错误;如果仍有挂起,请传 timeout_ms。
坐标与缩放:console_screenshot 默认原始分辨率;若传了 max_width,返回的 scale 要原样传给 console_mouse(x/y 按 scale 换算)。
VNC 安全:password 最长 8 字符且传输不加密;工具只允许 bind 到 127.0.0.1/localhost/::1。不要暴露到局域网。
GUI 与自动化互斥:用 vmrun 无头启动后,Player 窗口不会显示该 VM(任务栏看不到),要人工看画面需用 VNC 客户端连 127.0.0.1:5901。同一 VM 不要同时用 GUI 启动。
ESXi 需要 govc:先运行 scripts/fetch-govc.ps1(Linux/macOS 用 scripts/fetch-govc.sh);缺失时所有 esxi_* 工具会报 govc 路径错误,也可设 GOVC_PATH。
ESXi 鼠标只有 VNC 通道:vSphere API 没有鼠标注入方法,esxi_console_mouse 依赖 esxi_vnc + 防火墙;纯键盘操作请用 esxi_console_key(无需 Tools/防火墙)。
ESXi 截屏依赖 /screen 端点:独立 ESXi 可用;vCenter 或某些版本失败时会自动回退到 VNC 截屏。
esxi_ 凭据*:esxi_add_host 直接传 password 会明文写入 config/esxi-hosts.json(权限尽力收紧);推荐 password_env。
测试
node --test tests/unit.test.js # DES/PNG/keysym 单元测试
node tests/probe.js # MCP 协议 + 工具清单
node tests/e2e.js --password test1234 # 本地 VM 端到端(会创建/删除一台临时空 VM,约 40 秒)
node tests/esxi-vcsim.js # ESXi 后端测试(启动 vcsim 模拟器,验证 govc 管理接口)
node tests/esxi-live.js <alias> --vm <name> --screenshot # 对真实主机做只读/截屏验证(需先 esxi_add_host)
# 已验证:add_host / hosts / vm_list / vm_info / vm_power / snapshot(create,list,revert,remove) / datastore_ls / host_info / vnc(status,enable) / remove_hoste2e 会临时创建一台 256MB 空 VM(tmp/e2e-vm),结束后通过 vm_delete 与文件清理删除,不碰现有虚拟机。
安全建议
这套工具等于把虚拟机控制台交给 agent;只在可丢弃的 VM / 快照上做自动化。
默认 loopback + 密码;生产环境建议再套 MCP 客户端侧的审批策略。
agent 的截图会带着客户机画面进入模型上下文,注意凭据与敏感信息。
完整的安全注意事项见 SECURITY.md;贡献指南见 CONTRIBUTING.md。
许可证与第三方
本项目代码:MIT,见 LICENSE。
govc / govmomi:Apache-2.0,运行 scripts/fetch-govc.* 时从官方 release 下载,不随仓库分发;src/tools-esxi.js 的 USB HID 键码表改编自 govc 源码,详见 NOTICE。
X11 keysyms、VMware 商标声明与"非官方项目"声明同样见 NOTICE。
本项目是独立的非官方自动化工具,与 Broadcom/VMware 无隶属关系;不重新分发 VMware 的任何二进制文件。
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Control your authorized Windows computers via OAuth: files, shell, apps, and task status.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables secure management of VMware vCenter 8.0+ environments through controlled operations including VM lifecycle management, snapshots, and resource discovery with built-in RBAC authorization, audit logging, and rate limiting.6MIT
- FlicenseNot gradedqualityBmaintenanceEnables controlling VMware Workstation Pro virtual machines, including listing, power management, snapshots, cloning, guest operations, networking, and screenshots.-
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to manage local VMware Workstation, Fusion, and Player virtual machines via vmrun, including power control, snapshots, guest file operations, and screen captures.BSD 2-Clause "Simplified"
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to control VMware Workstation virtual machines by viewing the console, operating the mouse and keyboard, running guest commands, and managing power and snapshots across multiple named Windows and Linux VMs.1MIT