Unreal5MCP 是一个虚幻引擎 5 插件,实现了 Model Context Protocol (MCP) 服务器,允许 AI 工具(如 Claude)通过编程方式控制和交互虚幻引擎。
此插件允许 AI 代理直接修改您的虚幻引擎项目。虽然它是一个强大的工具,但也伴随着风险:
- AI 代理可能对项目进行意外更改
- 文件可能被意外删除或修改
- 项目设置可能被更改
- 资产可能被覆盖
重要安全措施:
- 始终使用源代码管理(如 Git 或 Perforce)
- 定期备份项目
- 先在单独的项目中测试插件
- 在提交更改之前仔细审查
使用此插件即表示您认可:
- 您对项目所做的任何更改负全部责任
- 插件作者对 AI 代理造成的任何损害、数据丢失或问题不承担责任
- 您自行承担使用风险
- ✅ TCP 服务器实现,用于虚幻引擎的远程控制
- ✅ 基于 JSON-RPC 的命令协议,用于 AI 工具集成
- ✅ 编辑器 UI 集成,便于访问 MCP 功能
- ✅ 全面的场景操作功能
- ✅ 蓝图创建和管理
- ✅ 灯光、摄像机等场景编辑工具
- ✅ 资源管理和材质创建
- ✅ 批量操作支持
- Windows (Win64)
- macOS
- Linux
- Unreal Engine 5.0 或更高版本(推荐 5.7)
- C++ 开发环境配置完成
- 至少 2GB 磁盘空间
将插件放置到项目的 Plugins 目录:
<ProjectRoot>/Plugins/unreal5-mcp/
右键单击 .uproject 文件,选择 "Generate Visual Studio project files"
- 在 IDE 中打开解决方案
- 编译项目(Debug 或 Development)
- 打开 Unreal Engine 编辑器
- 进入 Edit → Plugins
- 搜索 "Unreal5MCP"
- 启用插件
- 重启编辑器
在 Edit → Project Settings → Plugins → MCP Settings 中配置:
- Server Port: MCP 服务器端口(默认 13377)
- Client Timeout: 客户端超时时间(默认 30 秒)
- Max Concurrent Clients: 最大并发客户端数(默认 10)
- Enable Verbose Logging: 启用详细日志
- Auto Start on Editor Launch: 编辑器启动时自动启动服务器
获取当前关卡的信息,包括 Actor 列表、位置、旋转等。
参数:
include_actors: 是否包含 Actor 列表(默认 true)include_details: 是否包含位置、旋转等详细信息(默认 true)max_actors: 返回的最大 Actor 数量(默认 1000)
在场景中创建新对象。
参数:
class_name: 要创建的类的完整路径(必需)name: 对象名称(可选)location: 位置坐标 {x, y, z}(可选)rotation: 旋转欧拉角 {pitch, yaw, roll}(可选)scale: 缩放 {x, y, z}(可选)asset_path: 资源路径(对于 StaticMeshActor,可选)
修改场景中现有对象的属性。
参数:
actor_name: 要修改的 Actor 名称(必需)location: 新位置(可选)rotation: 新旋转(可选)scale: 新缩放(可选)
从场景中删除对象。
参数:
actor_name: 要删除的 Actor 名称(必需)
创建新的蓝图类。
参数:
path: 蓝图保存路径(必需)name: 蓝图名称(可选)parent_class: 父类路径(可选,默认 Character)
获取蓝图的详细信息。
参数:
path: 蓝图路径(必需)
修改蓝图属性。
参数:
path: 蓝图路径(必需)description: 蓝图描述(可选)
编译指定的蓝图。
参数:
path: 蓝图路径(必需)
设置编辑器视口的摄像机位置和旋转。
参数:
location: 摄像机位置 {x, y, z}(可选)rotation: 摄像机旋转 {pitch, yaw, roll}(可选)
获取当前编辑器视口摄像机的信息。
在场景中创建灯光。
参数:
type: 灯光类型 - "directional"、"point"(默认)、"spot"name: 灯光名称(可选)location: 位置 {x, y, z}(可选)intensity: 强度(默认 1000)temperature: 色温(默认 6500K)
在编辑器中选择或取消选择 Actor。
参数:
actor_name: Actor 名称(必需)select: 是否选择(默认 true)
获取当前在编辑器中选中的所有 Actor。
创建新材质。
参数:
path: 材质保存路径(必需)name: 材质名称(可选)
列出指定路径下的资源。
参数:
path: 搜索路径(默认 /Game)class: 资源类型过滤(可选)max_results: 返回的最大结果数(默认 100)
导入外部资源文件。
参数:
source_path: 源文件路径(必需)destination_path: 目标资源路径(必需)
一次性创建多个对象。
参数:
actors: 对象数组,每个对象包含 class_name、name、location 等
一次性修改多个对象。
参数:
actors: 对象数组,每个对象包含 name、location、rotation、scale 等
一次性删除多个对象。
参数:
actor_names: Actor 名称数组
import requests
import json
# 服务器配置
SERVER_URL = "http://localhost:13377"
def call_mcp(method_name, arguments):
"""调用 MCP 命令"""
request_data = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": method_name,
"arguments": arguments
},
"id": 1
}
response = requests.post(SERVER_URL, json=request_data)
return response.json()
# 示例:获取场景信息
result = call_mcp("get_scene_info", {
"include_actors": True,
"max_actors": 100
})
print(json.dumps(result, indent=2))
# 示例:创建对象
result = call_mcp("create_object", {
"class_name": "/Script/Engine.StaticMeshActor",
"name": "MyActor",
"location": {"x": 0, "y": 0, "z": 0}
})
print(json.dumps(result, indent=2))
# 示例:批量创建
result = call_mcp("batch_create", {
"actors": [
{
"class_name": "/Script/Engine.StaticMeshActor",
"name": f"Actor_{i}",
"location": {"x": i * 100, "y": 0, "z": 0}
}
for i in range(5)
]
})
print(json.dumps(result, indent=2))MCP 服务器日志保存在:
<ProjectRoot>/Plugins/unreal5-mcp/Logs/
MIT License
本项目参考了 kvick-games/UnrealMCP 项目。
欢迎贡献!请随时提交 Pull Request。
如有问题或功能请求,请在 GitHub 仓库中创建 issue。
A: 在编辑器工具栏中点击 "MCP Server" 按钮即可切换服务器状态。
A: 检查 Logs 目录中的日志文件,查看具体错误信息。
A: 目前 MCP 仅在编辑器模式下运行。如需在运行时使用,需要自定义扩展。
A: 是的,支持多达 10 个并发客户端(可在设置中调整)。
A: 在项目设置中禁用 Unreal5MCP 插件,或在启动时不启动服务器。
A: 单个命令消息的最大大小是 1MB。