虚拟机控制服务

一个通过`vmrun` CLI直接控制VMware Fusion/Workstation虚拟机的MCP服务器,无需依赖REST API。

  • by havu0
  • TypeScript
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 havu0/vmware-mcp

使用说明

vmware mcp

MCP服务器,用于通过以下方式控制VMware Fusion/Workstation虚拟机 vmrun CLI。

与依赖REST API的现有VMware MCP服务器不同(vmrest),此服务器调用 vmrun 直接--不需要额外的守护进程。

npx vmware-mcp

快速开始

添加到您的MCP客户端配置中——代理将获得32个工具,用于完全控制VM。

凭据可以作为CLI参数传递,如果存储在配置文件、环境变量或 操作系统秘密存储.

有关工具使用工作流程和已知限制,请参阅 AGENT_GUIDE.md.

opencode

~/.config/opencode/opencode.json:

{
  "mcp": {
    "vmware": {
      "type": "local",
      "command": ["npx", "-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password",
        "--encryption-pass", "my-vm:encpass"
      ],
      "timeout": 300000
    }
  }
}
Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
Claude Code (CLI)
claude mcp add --transport stdio vmware -- npx -y vmware-mcp \
  --guest-user my-vm:admin --guest-pass my-vm:password

或手动输入 ~/.claude.json 或 .mcp.json (项目层面):

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp", "--guest-user", "my-vm:admin", "--guest-pass", "my-vm:password"]
    }
  }
}
Cursor

~/.cursor/mcp.json (全球)或 .cursor/mcp.json (项目):

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
Windsurf (Codeium)

~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
GitHub Copilot (VS Code)

.vscode/mcp.json (工作空间):

{
  "servers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}

注:用途 servers 钥匙,不是 mcpServers.

Cline (VS Code Extension)

通过Cline侧边栏进行配置→ MCP服务器,或手动:

macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ],
      "disabled": false
    }
  }
}
Roo Code (VS Code Extension)

~/.roo/mcp_settings.json (全球)或 .roo/mcp.json (项目):

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
Amazon Q Developer

~/.aws/amazonq/mcp.json (全球)或 .amazonq/mcp.json (项目):

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
Zed

~/.config/zed/settings.json --注意:使用 context_servers 不同结构的钥匙:

{
  "context_servers": {
    "vmware": {
      "command": {
        "path": "npx",
        "args": ["-y", "vmware-mcp",
          "--guest-user", "my-vm:admin",
          "--guest-pass", "my-vm:password"
        ]
      }
    }
  }
}
Continue.dev

~/.continue/config.json:

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
Sourcegraph Cody

~/.config/cody/mcp_servers.json:

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}
JetBrains AI Assistant

设置→ 工具→ AI助手→ 模型上下文协议(MCP)→ Add:

{
  "mcpServers": {
    "vmware": {
      "command": "npx",
      "args": ["-y", "vmware-mcp",
        "--guest-user", "my-vm:admin",
        "--guest-pass", "my-vm:password"
      ]
    }
  }
}

手动/全局安装

npm install -g vmware-mcp
vmware-mcp

配置

创建 ~/.config/vmware-mcp/config.json:

{
  "vmrun_path": "/Applications/VMware Fusion.app/Contents/Public/vmrun",
  "default_vm": "my-vm",
  "vms": {
    "my-vm": {
      "vmx_path": "/path/to/VM.vmwarevm/VM.vmx",
      "os_type": "windows",
      "guest_user": "admin",
      "guest_password": "password"
    },
    "linux-vm": {
      "vmx_path": "/path/to/Ubuntu.vmwarevm/Ubuntu.vmx",
      "os_type": "linux",
      "guest_user": "ubuntu",
      "guest_password": "password"
    }
  }
}

配置文件是可选的。VM也可以通过full指定 .vmx 路径和凭证可以来自其他来源。

vmrun路径默认值

平台 默认路径
macOS /Applications/VMware Fusion.app/Contents/Public/vmrun
窗户 C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe
Linux /usr/bin/vmrun

凭证解析

凭据按以下顺序解析(第一场比赛获胜):

优先级 来源 平台
1 配置文件 全部
2 CLI参数 全部
3 环境变量 全部
4 OS密钥存储 macOS钥匙串、Linux libsecret、Windows PasswordVault

如果配置或操作系统密钥存储中存在凭据,则不需要CLI参数或环境变量。

CLI参数

vmware-mcp --guest-user my-vm:admin --guest-pass my-vm:password --encryption-pass my-vm:encpass

备注:密码 !, $,或者其他shell特殊字符可能会被bash历史扩展所破坏。在bash中使用单引号('my-vm:p@ss!word'),或者更喜欢配置文件/OS机密存储区中带有特殊字符的密码。

环境变量

变量 描述
VMWARE_MCP_<VM>_USER 来宾操作系统用户名
VMWARE_MCP_<VM>_PASS 访客操作系统密码
VMWARE_MCP_<VM>_ENCRYPTION_PASS VM加密密码

<VM> 是配置中的大写VM名称(例如。, VMWARE_MCP_MY-VM_USER).

操作系统秘密存储

安全地存储凭据——没有明文文件。服务器会自动从本机存储中读取。

macOS(钥匙扣)

security add-generic-password -s vmware-mcp -a "my-vm/guest_user" -w "admin"
security add-generic-password -s vmware-mcp -a "my-vm/guest_password" -w "password"
security add-generic-password -s vmware-mcp -a "my-vm/encryption_password" -w "encpass"

Linux(libsecret——GNOME密钥环/KDE钱包)

secret-tool store --label="vmware-mcp" service vmware-mcp account "my-vm/guest_user" <<< "admin"
secret-tool store --label="vmware-mcp" service vmware-mcp account "my-vm/guest_password" <<< "password"
secret-tool store --label="vmware-mcp" service vmware-mcp account "my-vm/encryption_password" <<< "encpass"

Windows(凭据锁/密码库)

$vault = New-Object Windows.Security.Credentials.PasswordVault
$vault.Add((New-Object Windows.Security.Credentials.PasswordCredential("vmware-mcp", "my-vm/guest_user", "admin")))
$vault.Add((New-Object Windows.Security.Credentials.PasswordCredential("vmware-mcp", "my-vm/guest_password", "password")))
$vault.Add((New-Object Windows.Security.Credentials.PasswordCredential("vmware-mcp", "my-vm/encryption_password", "encpass")))

工具(32)

虚拟机生命周期(9)

工具 说明
vm_start 启动虚拟机(gui或headless)
vm_stop 温和或强制停机
vm_suspend 挂起到磁盘(加密的VM可能无法通过vmrun恢复)
vm_reset 重新启动(软或硬)
vm_pause / vm_unpause 暂停/恢复执行
vm_status 运行状态+IP地址
vm_list 正在运行的虚拟机,或所有已配置的虚拟机 all=true
vm_get_ip 访客IP(可选等待就绪)

客人执行(2)

工具 说明
guest_run_command 运行shell命令,返回stdout。自动检测shell(cmd/bash/powershell)
guest_run_program 启动一个程序(同步或即发即弃 no_wait)

文件操作(10)

工具 说明
file_copy_to_guest 主持人→ 来宾文件副本
file_copy_from_guest 客人→ 主机文件副本
guest_read_file 读取来宾文件内容
guest_file_exists 检查文件是否存在
guest_directory_exists 检查目录是否存在
guest_directory_create 创建目录
guest_delete_file 删除文件
guest_rename_file 重命名/移动文件
guest_list_directory 列出目录内容
guest_create_tempfile 创建临时文件,返回路径

快照(4)

工具 说明
vm_snapshot_create 创建命名快照(在运行加密VM时可能会失败)
vm_snapshot_revert 恢复到快照(可选 auto_start)
vm_snapshot_list 以树格式列出快照
vm_snapshot_delete 删除快照

过程管理(2)

工具 说明
guest_process_list 列出所有来宾进程
guest_kill_process 通过PID终止进程

屏幕和输入(2)

工具 说明
vm_capture_screen 截图为base64 PNG或保存到文件(需要访客凭据)
guest_type_keystrokes 向访客发送按键(需要macOS辅助功能权限)

变量和工具状态(3)

工具 说明
vm_read_variable 读取VM变量(运行时配置/guestVar/guestEnv)
vm_write_variable 写入VM变量
vm_check_tools 检查VMware工具状态(未知/已安装/正在运行)

已知限制

这些是 vmrun CLI约束,而不是此服务器中的错误。所有错误都包含可操作的提示。

限制 解决方法
运行加密VM时快照操作失败 请先停止VM
vm_suspend → vm_start 在加密的虚拟机上失败 使用 vm_stop / vm_start 相反
Guest命令有5分钟的硬超时 将长操作分解为较小的命令
guest_type_keystrokes 需要macOS辅助功能 在系统设置中授予权限
vm_capture_screen 需要访客凭据 配置guest_user/guest_password
端口转发仅适用于Windows主机 不适用于macOS Fusion

发展

git clone https://github.com/havu0/vmware-mcp.git
cd vmware-mcp
npm install
npm run build    # tsc
npm test         # vitest (70 tests)
npm run dev      # tsc --watch

许可证

麻省理工学院