使用说明
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
