VMware虚拟机控制服务器

一个通过REST API控制VMware Workstation Pro的服务器,支持开关机、快照管理、IP查询等功能,可通过自然语言与Claude交互。

  • by cyberedgit
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 cyberedgit/vmware-mcp-server

使用说明

vmware mcp服务器

A. 模型上下文协议(MCP)服务器 让Claude通过内置的REST API直接控制VMware Workstation Pro(vmrest.exe).打开和关闭虚拟机、拍摄快照、查询IP地址、管理网络——所有这些都来自与Claude的自然语言对话。

人工智能生成项目 -此服务器完全由以下人员设计和编写 克劳德 (人类学)在现场对话中。没有代码是手写的。请参阅 起源故事 在......下面


特性

  • 列出所有已注册的VM及其当前电源状态
  • 打开、关闭、关闭、挂起、暂停和取消暂停虚拟机
  • 获取正在运行的虚拟机的IP地址(通过VMware工具)
  • 拍摄、列出和删除快照
  • 检查VM硬件配置(CPU、RAM、NIC)
  • 列出所有虚拟网络

需求


设置

1.启用VMware Workstation REST API

打开终端并运行:

vmrest --config

按照提示设置用户名和密码。然后启动API服务器:

vmrest

它应该打印 Serving HTTP on 127.0.0.1:8697。让这个终端打开。

密码策略: vmrest强制执行复杂性要求。使用大写、小写、数字和特殊字符的组合(例如。 MyPass@123).

2.克隆此仓库

git clone https://github.com/cyberedgit/vmware-mcp-server.git
cd vmware-mcp-server
npm install

3.设置环境变量

服务器从环境变量中读取凭据-凭据是 从不 硬编码。

$env:VMREST_USERNAME = "your_vmrest_username"
$env:VMREST_PASSWORD = "your_vmrest_password"
$env:VMREST_PORT     = "8697"

要使这些成为永久性的,请通过以下方式添加它们 系统属性>环境变量.

4.在克劳德桌面注册

编辑 %APPDATA%\Claude\claude_desktop_config.json 并在里面添加以下内容 mcpServers:

"vmware": {
  "command": "node",
  "args": ["C:\\path\\to\\vmware-mcp-server\\src\\server.js"],
  "env": {
    "VMREST_USERNAME": "your_vmrest_username",
    "VMREST_PASSWORD": "your_vmrest_password",
    "VMREST_PORT": "8697"
  }
}

5.重新启动克劳德桌面

完全退出Claude(系统托盘>退出)并重新启动。这 vmware 服务器将出现在您的工具中。

可用工具

|工具|说明| |---|---| | list_vms |列出所有VM,包括ID、名称、路径和电源状态| | get_vm |获取特定VM的详细信息(CPU、RAM、NIC)| | get_vm_power |获取虚拟机的当前电源状态| | power_on_vm |打开或恢复虚拟机| | power_off_vm |强制关闭虚拟机(硬停止)| | shutdown_vm |通过VMware工具优雅地关闭| | suspend_vm |暂停正在运行的虚拟机| | pause_vm |暂停正在运行的虚拟机| | unpause_vm |取消暂停VM的暂停| | get_vm_ip |获取正在运行的VM的IP地址(需要VMware Tools)| | list_snapshots |列出VM的所有快照| | take_snapshot |使用名称和可选描述创建快照| | delete_snapshot |按ID删除快照| | list_vm_networks |列出连接到VM的所有网络适配器| | list_networks |列出VMware Workstation中的所有虚拟网络|

更进一步-通过vmrun完全控制虚拟机内部

MCP服务器处理 管理程式级 -电源、快照、网络。但真正的力量来自于你将其与 vmrun,VMware的CLI工具,直接通过VMware Tools进行通信以执行命令 里面 正在运行的客户操作系统。 这意味着Claude不仅可以管理虚拟机,还可以在虚拟机内部工作。

vmrun支持什么

在来宾中运行任何命令:

vmrun -T ws -gu username -gp password runProgramInGuest "C:\path\to\vm.vmx" /bin/bash -c "whoami"

将文件从主机复制到VM中:

vmrun -T ws -gu username -gp password copyFileFromHostToGuest "vm.vmx" "C:\script.sh" "/tmp/script.sh"

将输出从VM中复制回来:

vmrun -T ws -gu username -gp password copyFileFromGuestToHost "vm.vmx" "/tmp/output.txt" "C:\output.txt"

列出来宾内部正在运行的进程:

vmrun -T ws -gu username -gp password listProcessesInGuest "vm.vmx"

全链条

一旦此MCP服务器连接到Claude,完整的工作流程如下:

You (natural language)
  -> Claude
  -> vmware-mcp-server  -> vmrest API  -> Power on VM, get IP, snapshots
  -> PowerShell MCP     -> vmrun       -> Execute commands inside guest OS

创建此项目的会话中的一个真实示例:Claude启动了一个挂起的Ubuntu VM,等待VMware Tools报告IP,然后使用 vmrun 在客户机中安装OpenSSH并确认其正在运行——所有这些都不需要直接接触虚拟机,也不需要虚拟机当时打开任何网络端口。

vmrun客户机命令的要求

  • VMware工具必须 已安装并正在运行 在客人内部
  • 有效的客户操作系统凭据(VM内的Linux/Windows用户名和密码)
  • 即使VM没有网络适配器,它也能工作-直接通过管理程序进行通信

进入虚拟机-方法比较

|方法|最适合|需要| |---|---|---| | vmrun |任何客户操作系统,无需网络|VMware工具+客户凭据| |SSH | Linux虚拟机| SSH服务器正在运行,网络连接| |WinRM | Windows虚拟机|启用WinRM,网络连接| vmrun 是建议的起点-零网络依赖性,在VMware Tools运行时即可使用。

Docker/VM部署所需的Windows端口代理: 默认情况下,vmrest绑定到 127.0.0.1 只有。要将其暴露给VM或Docker容器,请在Windows上以管理员身份运行以下命令:

netsh interface portproxy add v4tov4 listenaddress=192.168.244.1 listenport=8697 connectaddress=127.0.0.1 connectport=8697
New-NetFirewallRule -DisplayName vmrest-proxy-8697 -Direction Inbound -Protocol TCP -LocalPort 8697 -LocalAddress 192.168.244.1 -Action Allow

替换 192.168.244.1 使用您的VMware NAT适配器IP(获取NetIP地址|接口连接的位置-类似'威睿').


安全说明

  • 凭据仅通过环境变量传递,切勿将其提交给源代码管理
  • vmrest API仅侦听 localhost:8697 -默认情况下不暴露在网络中
  • 这 .gitignore 明确排除 vmrest.cfg 和 .env 文件

依赖项

|软件包|版本|作者|许可证| |---|---|---|---| | @modelcontextprotocol/sdk |^1.12.1 |人类学,PBC |麻省理工学院| | zod |^ 3.22.0 |科林·麦克唐纳|麻省理工学院| 这两个软件包都是MIT许可的,得到了积极的维护,并且没有已知的漏洞(npm audit 清洁)。

起源故事

这个项目没有计划。 我试图理解MCP的实际作用。我原以为在Claude Desktop中启用它可以让Claude广泛访问我的电脑——事实证明这是完全错误的。克劳德解释说,MCP是一个协议,而不是一个许可系统。每个服务器都是一个单独的连接器,只公开它明确构建的内容。在不安装任何服务器的情况下启用MCP绝对没有任何作用。 这个解释引发了一个问题:我们能把Claude连接到VMware Workstation吗?我的机器上有17个虚拟机,无法从Claude控制它们。我们搜索了现有的MCP服务器,但没有。我们发现的每个社区项目都是针对企业vCenter/ESXi的,没有针对桌面产品的。 所以我们建了一个。 Claude研究了VMware Workstation REST API(vmrest.exe),它内置于Workstation Pro中,但很少使用。在此过程中,我们遇到了几堵墙——Windows UAC阻止系统PATH修改,bcrypt密码散列兔洞试图以非交互方式配置vmrest,vmrest密码策略默默拒绝凭据,以及Claude MCP服务器在没有管理员权限的情况下运行。 每个问题都在同一次对话中得到了解决。到最后,克劳德已经:

  • 通过REST API在暂停的Ubuntu虚拟机上供电
  • 通过VMware工具检索其IP地址
  • 使用以下命令在客户机中安装OpenSSH vmrun 没有任何网络访问
  • 在正在运行的VM中执行命令并将输出复制回主机 这一切都源于自然语言。没有预先准备的脚本,也没有预先的模板。 此repo是该会话的直接输出。整个代码库由Claude(Anthropic)编写。没有一行是手写的。

免责声明

该项目完全由以下人员设计、架构和编写 克劳德,Anthropic制造的人工智能助手。 人类贡献者指导目标、提供环境并测试结果,但没有编写代码。这是一个现实世界的例子,展示了通过对话而不是计划开发构建的人工智能辅助工具的样子。

许可证

麻省理工学院 -免费使用、修改和分发。看 LICENSE 完整条款。 欢迎捐款。如果您扩展此功能以支持vSphere、ESXi或添加新工具,请打开PR。