虚幻引擎AI控制服务

UnrealMCP是一个为虚幻引擎5.6+设计的综合MCP服务器,通过AI控制整个虚幻编辑器,支持87种工具和45种蓝图节点类型。

  • by SallahBoussettah
  • C++
  • 本地部署
  • 更新于
在 GitHub 查看 SallahBoussettah/UnrealMCP

使用说明

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 关于路线图和已知问题。

许可证

麻省理工学院