内容
-vm-bridge
用于将运行在虚拟机(VM)中的任意MCP客户端隧道连接到unreal-mcp插件(绑定到主机localhost)的可复制设置。
> **架构说明:** unreal-mcp绑定到主机上的`127.0.0.1`,使其无法从虚拟机等外部接口访问。`netsh portproxy`规则将LAN可见的主转发回该环回地址,无需插件更改,无需共享文件无需自定义代理层。
```
-mcp-vm-bridge/
├── README.md
├── assets/
│ └── topology.svg
└── scripts/
├── umvb-setup.ps <- 一次性:、portproxy + 防 + 验证
├──-remove.ps1 <- 删除port防火墙规则
vb-status.ps1 <- 只读检查活动规则
└──-test.ps1 <- 来自VM的连接测试
```
## 前置条件
VMware Workstation,虚拟机网络适配器设置为接**,并且桥接适配器手动设置为物理以太网适配器(非自动)。这机在与主机相同的子获得LAN IP。安装了unreal-mcp插件real Engine。在虚拟机中安装MCP客户端(Claude Code、Cursor、Windsurf或HTTP MCP服务器的客户端) 预飞行检查清单
确认这三个层在运行桥接设置之前就绪。
| | 项目 | 操作 |
|-------|------|-----|
| Unreal(主机 插件`UnrealMCP`已启用 | 编辑 > > 搜索"MCP" |
| Unreal(主机) |`Terminal`已启用 | 插件 > 搜索" |
| Unreal(主机 插件`EditorToolset`已启用 | 编辑 > 插件搜索"EditorToolset" |
| Unreal(主机) |自动启动已开启 | 编辑 > 编辑器首选项 > 协议 |
| Unreal(主机 已生成`.mcp.json UE控制台:`ModelContextProtocol.GenerateClientConfig ClaudeCode``all`)— [Epic文档](https://dev.ep.com/documentation/unreal-engine/uncp-in-unreal-editor) |
| Unreal(主机) | 编辑器已打开 | MCP服务器与进程共存 |
| (主机) | port 防火墙已激活 | 以管理员身份运行`scripts/umvb-status.ps1` |
| 虚拟机 | `.mcp.json`位于项目根目录 | 参见步骤2 |
| 虚拟机 | MCP客户端已安装并登录 | 在终端中运行`claude`,如有必要,运行`/login` |
## 网络拓扑

## 步骤1:从获取主机IP
```cmd
ipconfig
ping <主机IP>
```
## 步骤2:配置MCP客户端(虚拟机)
在虚拟机上的项目根目录中创建`.mcp.json`(Claude Code格式,请适应您的客户端):
```json
{
"mcpServers": {
"unreal-mcp "type": "http",
"url": "http://<主机IP>:8000/mcp"
}
}
}
```
## 步骤3:在主机上运行设置(以管理员身份运行)
`scripts/umvb-setup.ps1`检测您的LAN IP,添加portproxy规则,打开防火墙,并进行验证。所有操作一次完成:
```powershell
.\scripts\umvb-setup.ps1
```
脚本会询问允许的源并将防火墙规则限定在它们(`remoteip`)上。这是混合设计:
- **单个虚拟机:** 输入虚拟机IP(例如`192.168.1.50`)。最严格的范围。
- **多个虚拟机:** 输入一个范围(`168.1.10-192.168.1.50`)、一个子网(`192.168.1.0/)或用逗号分隔的列表。
- **空白:** 将端口打开到整个LAN。不推荐real-mcp服务器没有身份验证。
为了使规则稳定,请为虚拟机分配静态DHCP保留。当租约更改时,指向移动地址的作用域会破坏桥接。
或者手动(将`<作用域>`替换为单个IP、范围、子网或列表):
```cmd
netsh interface portproxy add v4tov4 listenaddress=<主机IP> listenport=8000 connectaddress=127.0.1 connectport=8000
netsh adv firewall add rule name="unreal-mcp 虚拟机桥接" dir=in action=allow protocol=TCP localport=8000 remoteip=<作用域>
```
## 步骤4:验证
在**主机**上,确认两个条目都在监听:
```cmd
netstat -an | findstr 8000
```
预期输出:
```
TCP 127.0.0.1:8000 0.0.0.0:0 LISTENING <- unreal-mcp 插件
TCP <主机IP>:8000 0.0.0.0:0 LISTENING <- portproxy
```
从**虚拟机**运行测试脚本:
```powershell
.\scripts\umvb-test
```
> **PowerShell:**`被别名为`Invoke-WebRequest`。使用`curl.exe`调用真正的二进制文件。
`405 Method Not Allowed`响应是成功的指标。它意味着服务器可达且正在运行。MCP使用POST,因此GET探测始终返回405。
重启虚拟机中的M。`unreal-mcp`服务器应显示为已连接。
## 清理
运行`scripts/umvb-remove.ps1`(以管理员身份)或手动:
```cmd
netsh interface portproxy delete v4tov4 listenaddress=<主机IP> listenport=8000
netsh advfirewall firewall delete rule name="unreal-mcp 虚拟机桥接"
```
## 为什么不将unreal-mcp绑定到0.0.0.0?
一些社区分支提供此选项。**官方Epic插件**(UE 5.8+)故意绑定到`127.0.0.1`,并且没有为其提供配置。
此桥接尊重该设计选择,并且在不允许修补官方插件的环境中,是推荐的方法 企业用例
- **AI代理隔离。** 在中运行任何MCP客户端,以包含提示注入或受损的API密钥。
- **团队标准化。** 为整个工作室分发具有相同配置和工具集的即用虚拟机。
- **合规性。** 将AI流量路由到企业代理,记录和DLP,同时保持主机干净。
- **无需插件修改。** 与官方Epic unreal-mcp完全兼容。无需分支。
- **多代理支持。** 几个虚拟机或CI代理可以同时连接到同一个Unreal Editor实例。
## 限制
| 限制 | 缓解措施 |
|------------|------------|
| 基于IP:主机IP更改会破坏所有内容。 | 为主机分配静态IP`.mcp.json`。 |
| 需要稳定的本地网络,建议使用有线网络。 | 如果可能,避免为宿主适配器使用Wi-Fi。 |
| portproxy不透明,难以调试。 | `netsh interface portproxy show v4tov4` + 测试脚本。 |
| MCP服务器没有身份验证。 | 使用`remoteip`(单个IP、范围、子网或列表)限定防火墙规则,仅限受信任的LAN。 |
| Unreal Editor必须打开。 | 按设计。MCP服务器与编辑器一起死亡。 |