390+ MCP tools for UE5 editor automation via Claude, ChatGPT, or any MCP-compatible AI agent.
Using this with an AI agent? Pair it with ue5-mcp — a Claude Code / Cowork skill that loads the hard-won knowledge your agent needs to use these tools without crashing the editor or wasting hours on silent-fail APIs. ECABridge is the plugin (what tools exist); ue5-mcp is the field manual (which calls actually work, which crash, and the workarounds). Install both.
- 390+ MCP tools organized by category
- 12 Rosetta Stone commands — full JSON dumps of assets, blueprints, levels, materials, Niagara, sequencer, widgets, animation, MetaSound, and DataTables
- 6 workflow commands — project overview, cross-blueprint search, asset validation, snapshot/diff, undo-batching, class hierarchy
- 5 refactoring commands — replace references, bulk rename, search-and-replace properties, world settings
- 5 advanced system commands — landscape, source control, PCG graphs, Control Rig, Gameplay Ability System
- 22 MetaHuman commands — full procedural pipeline from asset creation through cloud texture/rig through groom attachment and outfit tinting
- 5 Enhanced Input commands — actions, mapping contexts, key bindings
- 2 Niagara Data Channel commands — create and dump cross-system data channels
- HTTP/SSE MCP server on localhost:3000 (Streamable HTTP transport)
- UE 5.7 compatible (built and tested against 5.7.4)
- No engine modifications — drop-in plugin
LLMs can't read binary .uasset or .umap files. These commands serialize UE5 assets into structured JSON, making any asset fully legible in a single MCP call:
| Command | What it does |
|---|---|
dump_asset |
Full JSON of any asset — all UPROPERTYs, sub-objects, references, metadata, optional thumbnail |
dump_blueprint_graph |
Complete Blueprint — all graphs, nodes, pins, connections, variables, components |
dump_level |
Full level state — all actors with transforms, components, tags. Lightweight or deep mode |
find_assets |
Search the asset registry by class, path, or name wildcard |
get_asset_references |
Dependency graph — what references what, with recursive depth |
dump_material_graph |
Complete material — all expression nodes, connections, material properties, compilation errors |
dump_niagara_system |
Full Niagara system — emitter stacks per stage, renderers, module inputs, parameters |
dump_level_sequence |
Complete sequencer — all bindings, tracks, sections, keyframe channel data |
dump_widget_tree |
Hierarchical widget tree — parent-child structure, slot properties, visibility |
dump_animation_blueprint |
AnimBP — state machines, states, transitions, AnimGraph nodes, variables |
dump_metasound_graph |
Full MetaSound — all nodes, pins, connections, source inputs/outputs |
dump_datatable |
Complete DataTable — schema with types + all row data in one call |
# See everything about a material
dump_asset(asset_path="/Game/Materials/M_Hero")
# Search for all blueprints in a folder
find_assets(class_filter="Blueprint", path_filter="/Game/Blueprints/")
# Read the full node graph of a blueprint
dump_blueprint_graph(blueprint_path="/Game/Blueprints/BP_Enemy")
# Get all actors in the current level (lightweight mode)
dump_level(max_actors=100)
# What would break if I changed this texture?
get_asset_references(asset_path="/Game/Textures/T_Hero_D", direction="referencers")
# Full Niagara system with module stacks and renderers
dump_niagara_system(system_path="/Game/Effects/NS_Fire")
# Read a complete sequencer timeline with keyframes
dump_level_sequence(sequence_path="/Game/Cinematics/MySeq")
# Inspect a widget tree hierarchy
dump_widget_tree(widget_path="/Game/UI/WBP_MainMenu")| Category | Commands | Highlights |
|---|---|---|
| Actor | 35+ | Spawn, delete, transform, find, duplicate, select, describe, hierarchy, tags, folders, visibility, mobility |
| Blueprint | 25+ | Create, compile, add nodes/variables/components, wire graphs, Blueprint Lisp DSL |
| Blueprint Node | 34+ | Events, functions, macros, casts, flow control, batch ops, auto-layout, full graph dump |
| Material | 16+ | Create materials/instances, edit node graphs, set parameters |
| Material Node | 20+ | Add/delete/connect nodes, set properties, auto-layout, error checking |
| Mesh | 40+ | Primitives, booleans, extrude, subdivide, simplify, UVs, import/export |
| Niagara | 20+ | Create systems/emitters, add modules/renderers, set parameters |
| MetaSound | 15+ | Create sources, add/connect nodes, set inputs, preview |
| MVVM | 7 | ViewModel binding, text/visibility/image bindings |
| Widget/UMG | 15+ | Create widgets, add text/buttons/images, bind events |
| Mutable/CO | 16 | Character customization: create/edit CO graphs, compile, runtime params, spawn actors |
| MetaHuman | 22 | Full procedural pipeline: create, describe (NL), face presets, body constraints, groom attach, makeup, cloud textures/rig, tint outfit, editor screenshot |
| Sequencer | 8 | Create sequences, bind actors, keyframe transforms, spawn cameras, camera properties (FOV/aperture), float key animation |
| Animation | 6 | Play/stop animations, list compatible anims, set AnimBP, skeleton info, create animations programmatically from bone keyframes |
| Lighting | 4 | Set light properties, get light info, one-command 3-point rig, post-process settings |
| Movie Render Queue | 2 | Render sequences to PNG/JPG/MP4 with configurable resolution, check render progress |
| Environment/PCG | 28+ | Generate grids/circles, walls, fog, sky, splines, gravity, batch spawn/set/destroy, physics simulation, impulse, visibility, teleport, scene stats, camera screenshots, decals, 3D text, describe actor, clone arrays, audio, triggers, align/distribute, scene snapshots, time dilation, measurements, scatter |
| AI/Navigation | 4 | Build navmesh, find paths, move actors, navmesh info |
| Data Table | 4 | Schema, rows, CRUD |
| Editor | 10+ | Viewport control, screenshots, PIE, console commands, save/open levels, full level dump |
| View | 3 | Camera control, scene description, frustum queries |
| Asset | 15+ | Import/export, create materials, thumbnails, dump_asset, find_assets, get_asset_references |
| Component | 5 | Properties, transforms, physics, static mesh |
| Project | 3+ | Settings, input mappings |
- Copy the plugin folder to your project's
Plugins/directory - Add to your
.uproject:{"Name": "ECABridge", "Enabled": true} - Build and launch the editor
- ECABridge starts automatically on
localhost:3000
{
"mcpServers": {
"ue5": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:3000/mcp"]
}
}
}# Initialize MCP session
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# List all tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# Spawn a cube
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"create_actor","arguments":{"actor_type":"StaticMeshActor","name":"MyCube","location":{"x":0,"y":0,"z":100},"mesh":"/Engine/BasicShapes/Cube"}}}'The plugin includes 15 commands for Epic's Mutable (Customizable Object) system, enabling AI-driven character creation:
# Create a customizable object
create_co → add_co_node → set_co_node_property → connect_co_nodes → compile_co
# Modify characters at runtime
set_co_instance_param(actor_name="CharacterActor", param_name="Body Type 1", param_value="Strong")
set_co_instance_param(actor_name="CharacterActor", param_name="Skin Tone", param_value=0.5)
set_co_instance_param(actor_name="CharacterActor", param_name="Head Accessories", param_value="Helmet")6 commands for cinematic creation:
create_level_sequence → add_sequence_camera → add_sequence_transform_key → play_sequence22 commands that drive Epic's MetaHuman Character pipeline end-to-end from natural-language prompts. No UI clicks required (after Epic sign-in).
Extending MetaHuman support? Read
docs/METAHUMAN.mdfirst — it points to the canonical technical reference with the reflection patterns, the Collection+Instance groom flow, theEMetaHumanCharacterSkinPreviewMaterialenum inversion gotcha, Epic sign-in requirements, and every 5.7 API pitfall we've already walked into. Copy the patterns; don't reinvent them.
The full pipeline:
create_metahuman(package_path="/Game/Characters", asset_name="MH_Hero")
describe_metahuman(character_path=".../MH_Hero",
description="tall muscular with vivid purple hair and green eyes and light freckled skin")
# matches: body, skin, eyes, hair keywords → sets 7+ properties
set_metahuman_face_preset(character_path=".../MH_Hero",
preset_path="/MetaHumanCharacter/Optional/Presets/Grace")
# 29 preset faces: Ada, Bruce, Celeste, Dominic, Grace, Isaiah, Jelena, Kelvin, Lorenzo, ...
set_metahuman_body_type(character_path=".../MH_Hero", body_type="f_tal_nrw")
# 18 body presets: {gender}_{height}_{weight}, e.g. m_tal_ovw, f_med_nrw
set_metahuman_body_constraints(character_path=".../MH_Hero", constraints=[
{name: "Height", target_measurement: 178, active: true},
{name: "Chest", target_measurement: 94, active: true},
{name: "Waist", target_measurement: 72, active: true}
]) # 30 parametric body dimensions in cm
set_metahuman_makeup(character_path=".../MH_Hero",
lip_type="Natural", lip_color={r:0.5,g:0.15,b:0.2,a:1},
eye_type="SoftSmokey", blush_type="Apple")
set_metahuman_preview_mode(character_path=".../MH_Hero", mode="skin")
open_metahuman_editor(character_path=".../MH_Hero")
download_metahuman_textures(character_path=".../MH_Hero") # cloud — needs Epic sign-in
rig_metahuman(character_path=".../MH_Hero", rig_type="full") # cloud
attach_metahuman_groom(slot_name="Hair",
wardrobe_item_path="/MetaHumanCharacter/Optional/Grooms/Bindings/Hair/WI_Hair_L_Straight")
attach_metahuman_groom(slot_name="Eyebrows",
wardrobe_item_path="/MetaHumanCharacter/Optional/Grooms/Bindings/Eyebrows/WI_Eyebrows_M_Dense")
# 96 hair/beard/eyebrow/eyelash grooms ship with the engine
refresh_metahuman_preview(character_path=".../MH_Hero")
spawn_metahuman_actor(character_path=".../MH_Hero")
tint_metahuman_outfit(actor_name="MetaHumanDefaultEditorPipelineActor0",
shirt_color={r:0.6,g:0.1,b:0.1,a:1})
take_metahuman_editor_screenshot(character_path=".../MH_Hero",
file_path="D:/Screenshots/Hero.png")Photo → MetaHuman workflow: pair Claude's vision with the MetaHuman commands. The AI analyzes a photo, extracts features (skin tone, hair style, face shape, beard, etc.), picks the closest preset from Epic's 29, attaches matching grooms, and builds a photo-inspired character. Not a perfect likeness (that needs Epic's Mesh-to-MetaHuman scan pipeline) but genuinely readable.
Commands: create, dump, describe, set_property, preview_mode, open_editor, build, download_textures, rig, spawn_actor, get/set_body_constraints, set_body_type, attach_groom, list_grooms, list_presets, set_face_preset, set_makeup, refresh_preview, take_editor_screenshot, tint_outfit.
Requires: Epic sign-in (click the person icon in the MetaHuman editor toolbar) for cloud operations — texture synthesis and auto-rigging both hit Epic's MetaHuman service.
Once the editor is running with ECABridge loaded, point your AI agent at it and try these:
See your whole level as JSON for the first time:
dump_level(max_actors=200)
Reverse-engineer any Blueprint without opening the editor:
dump_blueprint_graph(blueprint_path="/Game/Blueprints/BP_PlayerCharacter")
Understand a material's full node graph:
dump_material_graph(material_path="/Game/Materials/M_Landscape")
Find every asset of a type and then deep-dive one:
find_assets(class_filter="NiagaraSystem", path_filter="/Game/Effects/")
dump_niagara_system(system_path="/Game/Effects/NS_Explosion")
Check what would break before you change something:
get_asset_references(asset_path="/Game/Textures/T_BaseColor", direction="referencers", depth=2)
Read back a cinematic you built, keyframes and all:
dump_level_sequence(sequence_path="/Game/Cinematics/Intro", include_keyframes=true)
Inspect a UI widget tree hierarchy:
dump_widget_tree(widget_path="/Game/UI/WBP_HUD")
See an Animation Blueprint's state machine structure:
dump_animation_blueprint(anim_bp_path="/Game/Characters/ABP_Mannequin")
Dump a DataTable — schema and all rows at once:
dump_datatable(asset_path="/Game/Data/DT_WeaponStats")
Serialize any asset you can't otherwise read:
dump_asset(asset_path="/Game/SomeOpaqueAsset", include_thumbnail=true)
Get a bird's-eye view of an unfamiliar project:
get_project_overview(path="/Game/", max_depth=3)
Find every Blueprint that calls a specific function:
search_blueprint_usage(search_term="SetActorLocation", path_filter="/Game/Blueprints/")
Understand a class before you use it:
get_class_hierarchy(class_name="Character", include_functions=true)
Validate your work after making changes:
validate_asset(asset_path="/Game/Blueprints/BP_Enemy")
Track what changed — snapshot before, diff after:
snapshot_asset(asset_path="/Game/Materials/M_Hero")
# ...make changes...
diff_asset(asset_path="/Game/Materials/M_Hero", snapshot_id="<id from snapshot>")
Batch multiple operations into a single undo step:
batch_operation(
description="Setup enemy spawner",
commands=[
{name: "create_actor", arguments: {actor_type: "StaticMeshActor", name: "Spawner", ...}},
{name: "set_actor_material", arguments: {actor_name: "Spawner", material_path: "..."}},
{name: "add_actor_tag", arguments: {actor_name: "Spawner", tag: "EnemySpawn"}}
]
)
Swap all references to one asset with another (safe refactoring):
replace_asset_references(old_asset_path="/Game/Materials/M_Old", new_asset_path="/Game/Materials/M_New", dry_run=true)
Bulk rename assets with find/replace:
bulk_rename_assets(path_filter="/Game/Textures/", find="T_Old", replace="T_New", dry_run=true)
Change a property on every actor of a class at once:
search_and_replace_property(class_filter="PointLight", property_name="Intensity", find_value="5000", replace_value="3000")
Read or change world settings:
get_world_settings()
set_world_settings(property="KillZ", value="-10000")
Understand a class hierarchy before working with it:
get_class_hierarchy(class_name="Character", include_functions=true)
Inspect landscape terrain — components, layers, material:
dump_landscape()
Check source control status for pending changes:
get_source_control_status(path_filter="/Game/", include_unchanged=false)
Dump a PCG graph — all nodes, edges, parameters:
dump_pcg_graph(graph_path="/Game/PCG/PCGG_ForestSpawner")
Read a Control Rig's hierarchy (bones, controls, nulls):
dump_control_rig(rig_path="/Game/Characters/CR_Mannequin")
Inspect a Gameplay Ability / Effect / AttributeSet:
dump_gameplay_ability(asset_path="/Game/GAS/GA_Fireball")
Create a MetaHuman procedurally from natural language:
create_metahuman(package_path="/Game/Characters", asset_name="MH_Kai")
describe_metahuman(character_path="/Game/Characters/MH_Kai",
description="tall muscular dark-skinned man with brown eyes and black hair")
set_metahuman_face_preset(character_path="/Game/Characters/MH_Kai",
preset_path="/MetaHumanCharacter/Optional/Presets/Kelvin")
set_metahuman_body_type(character_path="/Game/Characters/MH_Kai", body_type="m_tal_ovw")
open_metahuman_editor(character_path="/Game/Characters/MH_Kai")
download_metahuman_textures(character_path="/Game/Characters/MH_Kai") # Epic cloud
rig_metahuman(character_path="/Game/Characters/MH_Kai", rig_type="full") # Epic cloud
attach_metahuman_groom(character_path="/Game/Characters/MH_Kai", slot_name="Hair",
wardrobe_item_path="/MetaHumanCharacter/Optional/Grooms/Bindings/Hair/WI_Hair_S_CurlyFade")
attach_metahuman_groom(character_path="/Game/Characters/MH_Kai", slot_name="Beard",
wardrobe_item_path="/MetaHumanCharacter/Optional/Grooms/Bindings/Beards/WI_Beard_L_Full")
refresh_metahuman_preview(character_path="/Game/Characters/MH_Kai")
Discover what groom assets you have available:
list_metahuman_grooms() # Groups 96 engine-shipped wardrobe items by slot
list_metahuman_presets() # Lists the 29 preset faces
Morph a MetaHuman's body with 30 parametric dimensions:
get_metahuman_body_constraints(character_path="/Game/Characters/MH_Hero")
set_metahuman_body_constraints(character_path="/Game/Characters/MH_Hero", constraints=[
{name: "Height", target_measurement: 185, active: true},
{name: "Chest", target_measurement: 108, active: true},
{name: "Thigh", target_measurement: 62, active: true}
])
Apply Hollywood makeup in one call:
set_metahuman_makeup(character_path="/Game/Characters/MH_Hero",
lip_type="Hollywood", lip_color={r:0.5,g:0.1,b:0.15,a:1},
eye_type="SoftSmokey", blush_type="Apple", foundation=true)
Drop a MetaHuman into the level and tint their outfit per-actor:
spawn_metahuman_actor(character_path="/Game/Characters/MH_Hero")
tint_metahuman_outfit(actor_name="MetaHumanDefaultEditorPipelineActor0",
shirt_color={r:0.1,g:0.3,b:0.8,a:1})
Capture the MetaHuman editor tab remotely:
take_metahuman_editor_screenshot(character_path="/Game/Characters/MH_Hero",
file_path="D:/Shots/hero.png")
Photo → MetaHuman (with Claude's vision in the loop): Share a photo with your AI agent. It analyzes the image (skin tone, hair, face shape, beard, etc.), picks the closest face preset, attaches matching grooms, and builds a photo-inspired MetaHuman. Not a perfect likeness — that requires Epic's Mesh-to-MetaHuman scan tool — but genuinely recognizable.
Build an input system from scratch:
create_input_action(asset_path="/Game/Input/IA_Jump", value_type="Digital")
create_input_mapping_context(asset_path="/Game/Input/IMC_Gameplay")
add_input_mapping(context_path="/Game/Input/IMC_Gameplay",
action_path="/Game/Input/IA_Jump", key="SpaceBar")
dump_input_mapping_context(context_path="/Game/Input/IMC_Gameplay")
Create a Niagara Data Channel for cross-system communication:
create_niagara_data_channel(
asset_path="/Game/FX/NDC_Hits",
variables=[{name: "Position", type: "Vector"}, {name: "Damage", type: "Float"}]
)
- Unreal Engine 5.7+
- Visual Studio 2022 (for building)
- For Mutable commands:
Mutableplugin enabled - For MetaHuman commands:
MetaHumanCharacterplugin enabled
Internal use — Agile Lens / ibrews