UnrealMCP
虚幻引擎最全面的MCP服务器。 87工具, 45种蓝图节点类型, 16个类别 --通过AI控制整个虚幻编辑器。
一个混合的Python+C++系统,允许AI助手(Claude、Cursor、Windsurf)创建蓝图、操纵节点图、管理参与者、编辑材料、构建UI小部件、设置动画状态机、调试带有断点的蓝图、填充数据表、配置增强输入——所有这些都可以通过自然语言通过 模型上下文协议.
专为虚幻引擎5.6+打造。
为什么是不现实的CP?
|
UnrealMCP |
Epic的内置MCP |
其他解决方案 |
| 工具 |
87 |
基本编辑器操作 |
~20-30 |
| 蓝图节点类型 |
45 |
有限 |
基本 |
| 类别 |
16 |
少量 |
3-4 |
| C++命令处理程序 |
82 |
不适用 |
不适用 |
| 蓝图调试 |
是 |
否 |
否 |
| 动画蓝图 |
是 |
否 |
否 |
| 小部件蓝图 |
是 |
否 |
否 |
| DataTable编辑 |
是 |
否 |
否 |
| 增强输入设置 |
是 |
否 |
否 |
| 生产状态 |
生产等级 |
基本 |
实验 |
建筑
AI Client ──stdio──> Python MCP Server ──TCP:55555──> C++ UE5 Editor Plugin
(87 tools) (82 command handlers)
mcp-server/ plugin/UnrealMCP/
- Python MCP服务器 --通过stdio实现MCP协议。将工具调用转换为TCP命令。
- C++UE5插件 --在虚幻编辑器中运行。监听TCP端口55555,使用本机UE5 C++API在游戏线程上执行命令。
- 协议 --4字节大端序长度前缀+JSON有效载荷。基于UUID的请求/响应匹配。支持高达10MB的有效载荷(用于截图)。
在端口55557上与Epic的内置MCP一起运行,两者独立运行,没有冲突。
快速设置
1.安装Python MCP服务器
cd mcp-server
python -m venv .venv
.venv/Scripts/activate # Windows
pip install -e .
2.安装UE5插件
复制 plugin/UnrealMCP/ 进入UE5项目 Plugins/ 文件夹并编译。通过检查输出日志进行验证:
UnrealMCP: Listening on port 55555
3.配置您的AI客户端
添加到您的 .claude.json (或使用 claude mcp add):
{
"mcpServers": {
"UnrealMCP": {
"command": "<path-to>/mcp-server/.venv/Scripts/python.exe",
"args": ["-m", "unreal_mcp.server"],
"cwd": "<path-to>/mcp-server"
}
}
}
你能用它做什么?
- 人工智能辅助游戏原型 --用自然语言描述游戏机制,让人工智能创建具有正确节点和连接的蓝图
- 自动化蓝图构建 --以编程方式构建复杂的节点图(健康系统、库存、人工智能行为)并自动布局它们
- 关卡设计 --创建/加载/保存地图,管理流媒体子级别,生成角色,设置变换,分配材质
- 运行时测试 --在编辑器会话中启动播放、暂停/恢复游戏、读取日志、在运行时使用断点调试蓝图
- UI原型设计 --使用17种小部件类型创建小部件蓝图,设置属性,构建完整的UMG层次结构
- 动画设置 --创建动画蓝图、状态机、过渡、混合空间和蒙太奇
- 数据驱动设计 --为物品、统计数据、对话、战利品创建和填充数据表;从CSV导入
- 输入配置 --创建InputActions和InputMappingContexts,使用修饰符和触发器配置WASD/游戏手柄绑定
- 批量操作 --生成数十个参与者,添加许多节点,或在单个工具调用中连接整个图形
工具参考
蓝图工具(11)
| 工具 |
说明 |
关键参数 |
create_blueprint |
创建新的Blueprint类或接口 |
name, parent_class (演员、爪子、角色、GameModeBase、玩家控制器、演员组件、场景组件), path, blueprint_type (正常,接口) |
list_blueprints |
列出目录中的所有Blueprint资产 |
path, recursive |
get_blueprint_info |
获取完整的蓝图结构 |
asset_path --返回变量、函数、组件、事件图、父类 |
compile_blueprint |
使用详细的错误诊断进行编译 |
asset_path --返回状态、错误计数、警告计数、每个节点的错误详细信息 |
delete_blueprint |
删除蓝图资产 |
asset_path |
add_blueprint_variable |
添加类型化成员变量 |
asset_path, variable_name, variable_type (布尔、整数、浮点、双精度、字符串、向量、旋转器、变换、对象:类名等), default_value, category, is_instance_editable |
remove_blueprint_variable |
删除成员变量 |
asset_path, variable_name |
add_blueprint_component |
向层次结构中添加组件 |
asset_path, component_class, component_name, parent_component, location, rotation, scale |
set_blueprint_component_defaults |
在BP组件模板上设置默认属性 |
asset_path, component_name, property_name, property_value |
remove_blueprint_component |
从SCS层次结构中删除组件 |
asset_path, component_name, promote_children |
implement_interface |
向蓝图添加蓝图接口 |
asset_path, interface_path |
节点图工具(9)
| 工具 |
说明 |
关键参数 |
add_node |
将节点添加到蓝图图中 |
asset_path, node_type (45种——见下文), function_name, target_class, node_position, params |
get_graph_nodes |
获取所有具有引脚和连接的节点 |
asset_path, graph_name --返回节点ID、类、位置、引脚详细信息、连接图 |
connect_pins |
将输出引脚连接到输入引脚 |
asset_path, source_node_id, source_pin_name, target_node_id, target_pin_name |
disconnect_pins |
断开引脚上的所有连接 |
asset_path, node_id, pin_name |
delete_node |
从图中删除节点 |
asset_path, node_id |
set_pin_value |
设置引脚的默认值 |
asset_path, node_id, pin_name, value |
create_function |
创建新的函数图 |
asset_path, function_name, inputs, outputs |
delete_function |
从蓝图中删除函数 |
asset_path, function_name |
arrange_graph |
使用分层图算法自动布局所有节点 |
asset_path, graph_name, horizontal_spacing, vertical_spacing |
45 Supported Node Types (click to expand)
| 类别 |
节点类型 |
描述 |
必填参数 |
| 函数 |
CallFunction |
呼叫任何UFUNCTION |
function_name, target_class |
|
CommutativeAssociativeBinaryOperator |
可扩展数学(加法、乘法…) |
function_name, target_class |
| 事件 |
Event |
内置事件 |
参数: event_name |
|
CustomEvent |
自定义事件 |
参数: event_name |
|
EnhancedInputAction |
增强输入事件 |
参数: input_action_path |
|
Self |
自我参照 |
-- |
| 变量 |
VariableGet |
获取变量 |
params: variable_name |
|
VariableSet |
设置变量 |
params: variable_name |
| 流量控制 |
Branch |
If/else |
-- |
|
Sequence |
执行顺序 |
参数: num_outputs |
|
MultiGate |
多个执行输出 |
-- |
|
Select |
按索引选择 |
-- |
|
DoOnceMultiInput |
多输入DoOnce |
-- |
|
MacroInstance |
标准宏(ForLoop、DoOnce、WhileLoop、ForEachLoop、Gate、FlipFlop、DoN、IsValid) |
参数: macro_name |
|
ForEachElementInEnum |
循环枚举值 |
参数: enum_name |
| 开关 |
SwitchInteger |
打开int |
-- |
|
SwitchString |
打开字符串 |
-- |
|
SwitchName |
打开FName |
-- |
|
SwitchEnum |
打开枚举 |
参数: enum_name |
| 铸造 |
DynamicCast |
转换为 |
params: target_class |
|
ClassDynamicCast |
类转换 |
参数: target_class |
| 结构体 |
MakeStruct |
制作结构 |
params: struct_type |
|
BreakStruct |
断开结构 |
参数: struct_type |
|
SetFieldsInStruct |
设置结构字段 |
params: struct_type |
| 容器 |
MakeArray |
使数组变为文字 |
num_inputs |
|
MakeMap |
使地图文字化 |
-- |
|
MakeSet |
设置文字 |
-- |
|
GetArrayItem |
数组索引访问 |
-- |
| 产卵 |
SpawnActorFromClass |
生成演员节点 |
-- |
|
GenericCreateObject |
构造对象 |
-- |
|
AddComponentByClass |
添加组件 |
-- |
|
CreateWidget |
创建小部件 |
参数: widget_class |
| 代表 |
CreateDelegate |
创建委托绑定 |
-- |
|
AddDelegate |
绑定到调度器 |
params: delegate_name |
|
RemoveDelegate |
解除与调度程序 |
参数的绑定: delegate_name |
|
CallDelegate |
消防调度员 |
参数: delegate_name |
|
ClearDelegate |
清除所有绑定 |
参数: delegate_name |
| 文本 |
FormatText |
设置带通配符的文本格式 |
-- |
|
EnumLiteral |
枚举值文字 |
params: enum_name |
| 杂项 |
Timeline |
时间线 |
参数: timeline_name |
|
Knot |
重新路由节点 |
-- |
|
LoadAsset |
异步加载资产 |
-- |
|
EaseFunction |
缓动/插值 |
-- |
|
GetClassDefaults |
获取类默认值 |
-- |
|
GetDataTableRow |
数据表查找 |
-- |
示例:
PrintString → node_type="CallFunction", function_name="PrintString", target_class="KismetSystemLibrary"
Delay → node_type="CallFunction", function_name="Delay", target_class="KismetSystemLibrary"
Branch → node_type="Branch"
For Loop → node_type="MacroInstance", params={"macro_name": "ForLoop"}
Cast To Actor → node_type="DynamicCast", params={"target_class": "Character"}
Make Vector → node_type="MakeStruct", params={"struct_type": "Vector"}
Spawn Actor → node_type="SpawnActorFromClass"
Timeline → node_type="Timeline", params={"timeline_name": "DoorTimeline"}
Input Action → node_type="EnhancedInputAction", params={"input_action_path": "/Game/Input/IA_Jump"}
演员工具(6)
| 工具 |
说明 |
关键参数 |
spawn_actor |
生成一个actor或Blueprint实例 |
actor_class, name, location, rotation, scale, blueprint_path |
delete_actor |
从级别中删除演员 |
actor_name |
set_actor_transform |
设置位置、旋转和/或比例 |
actor_name, location, rotation, scale |
get_actors_in_level |
列出所有演员(世界大纲视图) |
class_filter, name_filter, tag_filter |
find_actors |
按名称模式搜索演员 |
query |
duplicate_actor |
用偏移量复制演员 |
actor_name, new_name, location_offset |
属性工具(5)
| 工具 |
说明 |
关键参数 |
get_object_properties |
读取所有属性(相当于详细信息面板) |
object_path, category_filter, include_inherited |
set_object_property |
设置带有编辑器通知的属性 |
object_path, property_name (支持点符号: RelativeLocation.X), property_value |
get_component_hierarchy |
获取组件树 |
actor_name |
get_class_defaults |
获取类默认对象属性 |
class_name |
set_component_property |
在特定组件上设置属性 |
actor_name, component_name, property_name, property_value |
材料工具(4)
| 工具 |
说明 |
关键参数 |
create_material |
创建具有初始值的材质 |
name, path, base_color, roughness, metallic |
assign_material |
将材质应用于网格组件 |
actor_name, material_path, slot, component_name |
modify_material |
更新材料属性 |
asset_path, base_color, roughness, metallic, scalar_params, vector_params |
get_material_info |
获取物料参数和元数据 |
asset_path |
水平工具(7)
| 工具 |
说明 |
关键参数 |
get_level_info |
获取世界名称、持久级别和流媒体子级别 |
-- |
create_level |
创建新的空白地图或从模板创建 |
save_path, template_path |
save_level |
保存当前地图或保存所有脏包 |
asset_path, save_all |
load_level |
打开现有地图 |
map_path |
add_streaming_level |
添加流媒体子级别 |
package_name, streaming_class, location, rotation, create_new |
remove_streaming_level |
删除流媒体子级别 |
package_name |
set_level_visibility |
显示/隐藏子级别 |
package_name, visible, make_current |
资产工具(5)
| 工具 |
说明 |
关键参数 |
import_asset |
导入FBX、OBJ、PNG、WAV等格式。 |
file_path, destination_path, asset_name |
search_assets |
按类型和名称搜索内容浏览器 |
path, type, name_pattern, recursive |
get_asset_info |
获取详细的资产元数据 |
asset_path |
delete_asset |
通过参照检查删除资产 |
asset_path, force |
rename_asset |
重命名或移动资产 |
asset_path, new_path |
视口工具(2)
| 工具 |
说明 |
关键参数 |
take_screenshot |
将编辑器窗口捕获为PNG格式 |
width, height, filename |
focus_viewport |
移动编辑器相机 |
target, location, rotation, distance |
控制台工具(3)
| 工具 |
说明 |
关键参数 |
get_console_logs |
阅读最近的日志消息 |
count, verbosity_filter, category_filter |
execute_console_command |
运行控制台命令 |
command, target (编辑器或馅饼) |
batch_execute |
在一次TCP往返中执行多个命令 |
commands, stop_on_error |
PIE工具(4)
| 工具 |
说明 |
关键参数 |
start_pie |
在编辑器中开始播放 |
mode (视口、new_window、模拟) |
stop_pie |
停止PIE会话 |
-- |
get_pie_status |
获取PIE状态 |
-- |
set_pie_paused |
暂停或继续 |
paused |
批处理工具(3)
| 工具 |
说明 |
关键参数 |
batch_add_nodes |
在一次调用中添加多个节点 |
asset_path, nodes, stop_on_error |
batch_pin_operations |
在一次调用中连接引脚并设置值 |
asset_path, connections, pin_values |
batch_spawn_actors |
在一次通话中培养多个演员 |
actors, stop_on_error |
小工具(5)
| 工具 |
说明 |
关键参数 |
create_widget_blueprint |
创建UMG小部件蓝图 |
name, path, root_widget_type |
add_widget |
添加一个小部件(17种类型:按钮、文本块、图像、进度条等) |
asset_path, widget_type, widget_name, parent_name, slot_properties |
set_widget_property |
设置小部件属性 |
asset_path, widget_name, property_name, property_value |
get_widget_tree |
获取完整的小部件层次结构 |
asset_path |
remove_widget |
删除小部件 |
asset_path, widget_name |
动画工具(7)
| 工具 |
说明 |
关键参数 |
create_anim_blueprint |
创建动画蓝图 |
name, skeleton_path, path |
add_anim_state |
向AnimGraph状态机添加状态 |
asset_path, state_name, animation_asset |
add_anim_transition |
添加状态之间的转换 |
asset_path, source_state, target_state, duration, blend_mode |
set_anim_transition_rule |
设置转换条件 |
asset_path, source_state, target_state, rule_type |
add_blend_space |
创建BlendSpace资源 |
name, skeleton_path, axis_x_name, axis_y_name, samples |
add_anim_montage |
创建动画蒙太奇 |
name, animation_path, slot_name |
get_anim_graph |
获取状态机结构 |
asset_path |
调试工具(5)
| 工具 |
说明 |
关键参数 |
set_breakpoint |
在节点上设置/切换断点 |
asset_path, node_id, graph_name, enabled |
get_breakpoints |
列出蓝图中的所有断点 |
asset_path |
get_watch_values |
读取观察到的引脚值(暂停PIE) |
asset_path |
step_execution |
Step蓝图调试器 |
step_type (进入、结束、退出、简历) |
get_call_stack |
暂停时获取执行跟踪 |
-- |
DataTable工具(6)
| 工具 |
说明 |
关键参数 |
create_data_table |
使用行结构创建DataTable |
asset_name, package_path, row_struct |
add_data_table_row |
添加一行字段值 |
asset_path, row_name, values |
modify_data_table_row |
更新一行中的特定字段 |
asset_path, row_name, values |
delete_data_table_row |
删除一行 |
asset_path, row_name |
get_data_table_rows |
获取所有具有字段值的行 |
asset_path, row_name |
import_data_table_csv |
从CSV字符串导入行 |
asset_path, csv_data, append |
增强型输入工具(5)
| 工具 |
说明 |
关键参数 |
create_input_action |
创建增强的输入操作资产 |
asset_name, package_path, value_type (布尔值、轴1D、轴2D、轴3D) |
create_input_mapping_context |
创建输入映射上下文 |
asset_name, package_path |
add_input_mapping |
将键映射到具有修饰符和触发器的InputAction |
context_path, action_path, key, modifiers, triggers |
remove_input_mapping |
删除映射 |
context_path, action_path, key |
get_input_mapping_context |
从上下文中读取所有映射 |
context_path |
技术细节
使用UE5 C++API
- 蓝图:
FKismetEditorUtilities::CreateBlueprint(), FBlueprintEditorUtils::AddMemberVariable(), CompileBlueprint()
- 节点图:
UK2Node_CallFunction, UK2Node_Event, UK2Node_IfThenElse, UEdGraphSchema_K2::TryCreateConnection()
- 属性:
FProperty::ImportText_Direct() / ExportTextItem_Direct(), PreEditChange() / PostEditChangeProperty()
- 材料:
UMaterialFactoryNew::FactoryCreateNew(), UMaterial::GetEditorOnlyData(), UMaterialEditingLibrary
- 等级:
UEditorLoadingAndSavingUtils, UEditorLevelUtils, FEditorFileUtils
- 资产:
UAutomatedAssetImportData, ImportAssetsAutomated(), IAssetRegistry::GetAssets()
- 馅饼:
GEditor->RequestPlaySession(), RequestEndPlayMap(), SetPIEWorldsPaused()
- 数据表:
UDataTableFactory, FDataTableEditorUtils::AddRow(), CreateTableFromCSVString()
- 增强输入:
UInputAction, UInputMappingContext::MapKey(),修饰符和触发器
- 截图:Win32
PrintWindow(), IImageWrapper PNG编码
- 线程安全:所有命令通过以下方式在游戏线程上执行
AsyncTask(ENamedThreads::GameThread),通过以下方式撤消支持 FScopedTransaction
项目结构
UnrealMCP/
mcp-server/ # Python MCP server
src/unreal_mcp/
server.py # Entry point, FastMCP setup
connection.py # TCP client (4-byte prefix protocol)
tools/ # Tool definitions by category
blueprint.py # 11 Blueprint tools
node_graph.py # 9 Node Graph tools
actor.py # 6 Actor tools
property.py # 5 Property tools
material.py # 4 Material tools
viewport.py # 2 Viewport tools
console.py # 3 Console tools
level.py # 7 Level tools
asset.py # 5 Asset tools
pie.py # 4 PIE tools
batch.py # 3 Batch tools
widget.py # 5 Widget tools
anim.py # 7 Animation tools
debug.py # 5 Debug tools
datatable.py # 6 DataTable tools
input.py # 5 Input tools
plugin/UnrealMCP/ # C++ UE5 editor plugin
Source/UnrealMCP/
Private/
MCPTCPServer.cpp # TCP listener, command dispatch
Commands/ # 82 command handlers by category
Public/
Commands/ # Header files
需求
- 虚幻引擎5.6+
- Python 3.10+
- MCP SDK 1.0+(
pip install mcp)
- Windows(主要;macOS/Linux未测试)
- Visual Studio 2022(用于插件编译)
- MCP兼容的AI客户端(克劳德代码、克劳德桌面、光标、Windsurf等)
贡献
欢迎捐款。看 进展.md 关于路线图和已知问题。
许可证
麻省理工学院