Skillquality 0.46

ue5-mcp

Unreal Engine 5 development via the ECABridge MCP plugin, pixel streaming, and Python editor scripting. Use this skill whenever the user's session has Unreal Engine MCP tools available (tools with names like create_blueprint, create_actor, add_material_node, create_niagara_system

Price
free
Protocol
skill
Verified
no

What it does

UE5 MCP Development Skill

Battle-tested patterns for working with Unreal Engine 5 through ECABridge MCP tools (390+ tools on localhost:3000), pixel streaming, and Python editor scripting. Every piece of advice here comes from actual failures, crashes, and debugging sessions — not documentation.

ECABridge plugin: https://github.com/ibrews/ECABridge
This skill: https://github.com/ibrews/ue5-mcp


Session Startup Checklist

Run these steps at the start of every UE5 MCP session before doing any work.

  1. Understand the project state first. Run dump_level() to see all actors currently in the scene. Run find_assets(path_filter="/Game/") to see what assets exist. Never assume — read first, then act.
  2. Before editing any Blueprint, call dump_blueprint_graph(blueprint_path="...") to get the complete graph. Never guess the existing node structure. After edits, call compile_blueprint to surface errors and warnings.
  3. Before editing any material, call dump_material_graph(material_path="...") to read the current node graph.
  4. Before setting Niagara module inputs, call list_module_inputs(...) for the module — the function-call pin names from get_niagara_modules are NOT the same as the user-facing input names.
  5. Verify pixel streaming if neededtabs_context_mcp to get the current tab ID. Activate before starting, not mid-task.
  6. Save after every meaningful change. save_asset(asset_path) for one asset, save_dirty_assets() for everything dirty in memory, save_level() for the current level, or run_console_command("SaveAll") for a full editor save.

Rosetta Stone: Read Before You Write

ECABridge includes deep introspection commands that serialize any UE5 asset into structured JSON. Use these before modifying anything. Trying to edit a Blueprint, material, or Niagara system without reading its current structure first leads to broken connections and wasted calls.

CommandUse it for
dump_blueprint_graph(blueprint_path)Complete graph — all nodes, pins, connections, variables, components
dump_material_graph(material_path)All expression nodes, connections, material properties, compilation errors
dump_niagara_system(system_path)Emitter stacks, renderers, module inputs, parameter bindings
list_module_inputs(system_path, emitter_name, module_name, script_usage)User-facing module inputs (the ones the Niagara stack panel shows) — required reading before set_niagara_module_input
dump_widget_tree(widget_path)Full widget hierarchy — parent-child structure, slot properties, visibility
dump_level(max_actors=100)All actors with transforms, components, tags (lightweight or deep mode)
dump_asset(asset_path)Full JSON of any asset — all UPROPERTYs, sub-objects, references, metadata
get_component_property(blueprint_path, component_name, property_name)Read complement to set_component_property — verify a property landed
get_blueprint_components(blueprint_path, include_overrides=true)List components with per-component property overrides (template values that differ from class defaults). Use to debug "this component isn't behaving like a fresh one."
find_assets(class_filter, path_filter)Search asset registry by class, path, or name wildcard
get_asset_references(asset_path, direction)Dependency graph — what references what (use before deleting anything)
dump_metasound_graph(metasound_path)All MetaSound nodes, pins, connections, source inputs/outputs
dump_animation_blueprint(abp_path)State machines, transitions, AnimGraph nodes
dump_level_sequence(sequence_path)All bindings, tracks, sections, keyframe channel data
dump_datatable(datatable_path)Schema with types + all row data
compile_blueprint(blueprint_path)Compile + return errors[], warnings[], status enum (UpToDate, UpToDateWithWarnings, Error, Dirty)

Pattern: read → plan → edit → verify. Never skip the read step.

# Before touching BP_Rocket:
dump_blueprint_graph("/Game/Blueprints/BP_Rocket")

# Before deleting T_Hero texture:
get_asset_references("/Game/Textures/T_Hero", direction="referencers")  # who uses it?

# To understand the current scene:
dump_level(max_actors=50)

# To find all Niagara systems you could duplicate:
find_assets(class_filter="NiagaraSystem", path_filter="/Game/")

Tool Strategy: When to Use What

Quick Decision Table

What you need to doUse
Read any asset structure (Blueprint, material, Niagara, widget)dump_* Rosetta Stone commands first
Create/modify Blueprint graphs, components, variablesMCP
Create/edit materials, Niagara systems, MetaSoundsMCP
Spawn, move, delete level actorsMCP
UMG widgets, DataTablesMCP
Keyboard/mouse input during PIEPixel streaming
Click editor UI elements (menus, dialogs, dropdowns)Pixel streaming
Visual verification of live gameplay/particlesPixel streaming
Niagara module inputs (SpawnRate, velocity, etc.)MCP — list_module_inputs then set_niagara_module_input
Object reference properties on componentsMCP — set_component_property (handles object/soft-object/class/soft-class refs)
Bulk asset operations, Sequencer controlPython (still — no bulk MCP equivalent yet)
Reading Python output back into MCPActor Tags data channel

ECABridge MCP Tools (Primary)

390+ tools on localhost:3000. Categories include: Actor, Blueprint, Blueprint Node, Material, Material Node, Mesh, Niagara, MetaSound, MVVM, Widget/UMG, Sequencer, Animation, Lighting, Environment/PCG, AI/Navigation, DataTable, Editor, Asset.

Well-supported operations:

  • Creating/modifying Blueprints (components, variables, node graphs via Blueprint Lisp or batch_edit)
  • Spawning/deleting/transforming level actors
  • Creating and editing materials, meshes, textures
  • Reading Blueprint info, actor properties, asset metadata (via dump_* commands)
  • UMG widgets and MVVM bindings
  • MetaSound creation and editing
  • DataTable read/write
  • Starting/stopping PIE, console commands, viewport screenshots

Where MCP falls short (use Python or pixel streaming instead):

  • Cannot send keyboard/mouse input during PIE
  • Cannot interact with editor UI elements (dropdowns, dialog buttons, context menus)
  • set_niagara_dynamic_input still broken (use Python or bake the value)

Recently fixed (don't reach for Python first for these):

  • Object reference properties (Sound, StaticMesh, Material, WidgetClass, NiagaraSystem) now work via set_component_property — pass the asset path as property_value. Asset-path form auto-expands to the generated class for TSubclassOf<> properties.
  • Generic UMG widget creation: add_widget_element(widget_type="ProgressBar"|"VerticalBox"|...) — see UMG section.
  • Niagara: create_niagara_system returns working systems (is_active=true); set_niagara_module_input works for float/int/bool/vector2/vector3/position/color via the override-pin path. Use list_module_inputs first to discover input names.
  • add_blueprint_component resolves common plugin types: Niagara, Widget, PostProcess, Decal, Paper, etc.
  • save_asset(asset_path) and save_dirty_assets() for non-level persistence.
  • compile_blueprint returns errors[], warnings[], status enum (UpToDate, UpToDateWithWarnings, Error, Dirty).
  • get_component_property reads any property — use to verify a write took effect.

Pixel Streaming (localhost:80)

Use for things MCP genuinely can't do. Always call tabs_context_mcp first — tab IDs change between sessions. You'll need to click "CLICK TO START" or "DISCONNECTED. CLICK TO RESTART" to activate.

  • Game key input during PIE (1, 2, WASD, etc.)
  • Clicking editor UI elements MCP can't reach
  • Real-time visual verification

Important: Pixel streaming captures input focus, blocking the user's editor access. Game viewport needs a click to capture focus before key input works. Audio can't be heard through pixel streaming.

Python Editor Scripting (via unreal module)

Run via run_console_command("py your_code_here").

Best for: Niagara parameter manipulation, batch asset operations, Sequencer control, setting object reference properties.

Critical problem: Python stdout goes to the UE log — not back to MCP.

Workaround — Actor Tags data channel:

import unreal
result = "whatever you need to return"
note = unreal.EditorLevelLibrary.spawn_actor_from_class(
    unreal.Note, unreal.Vector(0, 0, 9999)
)
note.tags = [result[:200]]  # Name type, keep short

Read back via MCP: get_actor_properties("Note") → check tags array. Delete the Note actor after. Spawn a fresh Note actor for each read — stale actors return stale tags.

Required plugins: Python Editor Script Plugin, Python Foundation Packages.


Core UE5 Knowledge

Lumen Lighting

Always set lights to Movable mobility. Static or Stationary lights won't contribute to Lumen's global illumination.

Blueprint Instances vs Parent

Level-placed instances can retain stale editor overrides after the parent Blueprint is modified. Always check the level instance after changing the parent — you may need to revert overridden properties.

Never Delete/Modify Referenced Meshes

Deleting or transforming mesh assets while actors reference them causes a RegisteredElementType assertion crash. Before deleting any asset, run get_asset_references(asset_path="...", direction="referencers") to confirm nothing depends on it.

Safe pattern: Create NEW mesh assets, verify they work, then swap references on actors.

If you hit this crash, restart the editor — no data is lost, but unsaved changes are gone.

Rapid Actor Operations Crash

Spawning, deleting, and focusing the viewport on actors in quick succession triggers the same RegisteredElementType crash. Add pauses between spawn/delete/focus. Don't delete an actor immediately after focusing on it.

Editor Sprites vs Actual Particles

Screenshots show editor sprites (component icons) that look like particles but aren't. Always verify Niagara effects by:

  1. Check is_active: true via get_actor_properties
  2. Run PIE and take a PIE screenshot — more reliable than editor screenshots for particles
  3. Use pixel streaming for real-time visual confirmation

Save Frequently

Niagara assertion and MetaSound crashes revert unsaved changes. Save options:

  • save_level() — saves the current level and its dirty assets.
  • save_asset(asset_path="/Game/Path/AssetName") — saves a single asset by content path. Returns {saved, was_dirty}.
  • save_dirty_assets(include_maps=false) — saves every dirty content package (or also map packages with include_maps=true). Returns counts. This is the right tool after a batch of edits across multiple Blueprints/materials/widgets.
  • run_console_command("SaveAll") — full editor save, slowest path.

After saving a Blueprint, run dump_blueprint_graph to confirm your nodes survived — silent save failures do happen.


Niagara Particle System

Creating a Niagara System

create_niagara_system(asset_path="/Game/Effects/MyEffect", template="default")

template resolves to /Niagara/DefaultAssets/DefaultSystem for keywords (default, empty, sprite, fountain) — the resulting system inherits a working sprite emitter and is_active: true when spawned. Pass a /Game/... path to duplicate any working system you already have.

The previous factory-based creation produced systems that compiled cleanly but never emitted particles (is_active stayed false even after force-activate). The fix duplicates DefaultSystem instead, bypassing the empty-system bug entirely.

Setting Module Inputs

Two-step pattern — list first, then set:

# 1. Discover the actual user-facing inputs (these are NOT the same as get_niagara_modules' inner pins)
list_module_inputs(system_path="...", emitter_name="Fountain",
                   module_name="SpawnRate", script_usage="emitter_update")
# → [{name:"Module.SpawnRate", type:"NiagaraFloat", value_type:"float"}, ...]

# 2. Set using the discovered name (short or full handle both accepted)
set_niagara_module_input(system_path="...", emitter_name="Fountain",
                        module_name="SpawnRate", input_name="SpawnRate",
                        script_usage="emitter_update", value=250.0)

Supported value_type for set_niagara_module_input: float, int, bool, vector2, vector3, position, color. The error path on a wrong input_name lists what was available.

script_usage values: particle_spawn, particle_update, emitter_spawn, emitter_update, system_spawn, system_update. Same module name can appear in multiple stages (e.g., SpawnRate in emitter_update vs Initialize Particle in particle_spawn) — the script_usage disambiguates.

Spawning and Verifying

spawn_niagara_effect(system_path="/Game/Effects/MyEffect",
                    location={x:0,y:0,z:200}, name="Test")
get_niagara_actors(system_filter="MyEffect")
# → confirms is_active: true

Editor screenshots don't capture live particles — use PIE screenshot or pixel streaming for visual verification.

Still Broken

  • set_niagara_dynamic_input — "Failed to load random range script." Use Python or bake the value.

NiagaraComponent in Blueprints

add_blueprint_component(component_type="Niagara", component_name="VFX") works directly now — the component_type lookup falls back to /Script/Niagara.NiagaraComponent. Pair with set_component_property(property_name="Asset", property_value="/Game/.../NS_Foo") to assign the system.

For runtime spawning from a Blueprint graph, SpawnSystemAtLocation from NiagaraFunctionLibrary still applies.


Materials — Creation and Editing

Creating a Material

create_material(asset_path="/Game/Materials/M_Name", blend_mode="Opaque")

Blend modes: "Opaque", "Translucent", "Additive", "Masked".

Before editing an existing material: dump_material_graph(material_path="...") to read all nodes and connections first.

Material Node Types (add_material_node)

Node typeUse for
ConstantSingle float
Constant3VectorRGB color
Multiply / AddMath ops
TextureSampleTexture input
ScalarParameterExposed float parameter
VectorParameterExposed color/vector parameter
FresnelEdge glow

Emissive Glow Pattern

Set node values via set_material_node_property (not set_material_node_value — that tool doesn't exist). Use list_material_expression_types to discover valid node_type values for your engine version.

create_material(asset_path="/Game/Materials/M_Glow", blend_mode="Opaque")

add_material_node(material_path="...", node_type="Constant3Vector", node_name="GlowColor")
set_material_node_property(material_path="...", node_name="GlowColor",
                           property_name="Constant", value="(R=1.0,G=0.4,B=0.0)")

add_material_node(material_path="...", node_type="Constant", node_name="GlowIntensity")
set_material_node_property(material_path="...", node_name="GlowIntensity",
                           property_name="R", value="5.0")  # >1.0 enables bloom

add_material_node(material_path="...", node_type="Multiply", node_name="EmissiveMultiply")
connect_material_nodes(material_path="...", from_node="GlowColor", from_pin="RGB",
                       to_node="EmissiveMultiply", to_pin="A")
connect_material_nodes(material_path="...", from_node="GlowIntensity", from_pin="",
                       to_node="EmissiveMultiply", to_pin="B")
connect_material_nodes(material_path="...", from_node="EmissiveMultiply", from_pin="",
                       to_node="MaterialOutput", to_pin="EmissiveColor")

For complex graphs, prefer batch_edit_material_nodes to do all node creation + connections in one atomic call — fewer round trips and clearer rollback on failure.

After editing, run get_material_errors(material_path="...") to check for compile errors. If the graph compiled but visuals are wrong, dump_material_graph and inspect the connection list.

Key rule: Emissive intensity must exceed 1.0 to trigger bloom. Values of 3–10 produce visible bloom.

Gotcha: If Emissive shows no glow, check that Post Process Volume has Bloom enabled.

Translucent Material for Particles

Use blend_mode="Translucent" and shading_model="Unlit" — lit particle materials require normal vectors Niagara doesn't provide by default.

Applying Materials

  • To a static mesh actor: set_actor_material(actor="ActorName", material_slot=0, material="/Game/Materials/M_Name.M_Name")
  • To a Niagara system: set_niagara_material (reliable path)
  • To a Blueprint component: set_component_property(property_name="OverrideMaterials[0]", property_value="/Game/Materials/M_Foo.M_Foo") works for component-defaults. For runtime swap, SetMaterial Blueprint node still applies.

Material Compilation Lag

After creating or modifying, shader compilation takes seconds to minutes. Don't check visual output until done. Poll with dump_material_graph — when it returns without errors, compilation is complete.


UMG Widgets

Before modifying an existing widget: dump_widget_tree(widget_path="...") to read the full hierarchy. Use get_widget_info to inspect a single widget's variables and slot properties.

Creating a Widget Blueprint

create_umg_widget_blueprint(widget_name="WBP_HealthBar", path="/Game/UI", parent_class="UserWidget")

Adding Widget Elements

Three dedicated commands for the common cases (with richer initial setup):

add_text_block_to_widget(widget_path=".../WBP_HealthBar", text_block_name="HealthLabel",
                         text="HP", font_size=24, color={r:1,g:1,b:1,a:1})
add_button_to_widget(widget_path="...", button_name="StartButton", text="Start")
add_image_to_widget(widget_path="...", image_name="Icon")

For everything else, use add_widget_element — generic across all UMG classes:

add_widget_element(widget_path="...", widget_type="ProgressBar", element_name="HealthBar",
                   position={x:100,y:100}, size={width:300,height:30},
                   properties={Percent:0.75})

add_widget_element(widget_path="...", widget_type="VerticalBox", element_name="Stack")
add_widget_element(widget_path="...", widget_type="Border", element_name="Frame",
                   parent_name="Stack")  # nested inside Stack

widget_type is the unqualified UMG class name (ProgressBar, VerticalBox, HorizontalBox, CanvasPanel, Border, Spacer, Overlay, ScrollBox, SizeBox, ScaleBox, Slider, CheckBox, GridPanel, UniformGridPanel, RichTextBlock, Throbber, CircularThrobber, NamedSlot, BackgroundBlur, RetainerBox) or a fully qualified path (/Script/UMG.ProgressBar, /Script/PluginX.MyWidget).

Optional parent_name attaches under an existing panel. Without it, the new element goes on the root canvas — or, if the tree has no root yet and the new element is itself a panel, it becomes the root. position and size only apply on a CanvasPanel parent. properties is a JSON object applied via reflection (one entry per UPROPERTY on the constructed widget). The result includes properties_set and any properties_failed with a per-entry reason.

For a health bar: one ProgressBar element with properties: {Percent: <float>} is the right pattern. MVVM-bind the Percent property afterwards if you need runtime updates.

MVVM Bindings (the real binding API)

ECABridge MVVM uses a viewmodel-first pattern. Bindings flow from a ViewModel object's properties to widget properties, not directly from Blueprint variables.

set_widget_viewmodel(widget_path="...", viewmodel_class="/Game/UI/VM_PlayerHUD.VM_PlayerHUD")
bind_text_to_viewmodel(widget_path="...", widget_name="HealthLabel",
                       viewmodel_property="HealthText")
bind_visibility_to_viewmodel(widget_path="...", widget_name="LowHealthWarning",
                             viewmodel_property="bIsLowHealth")
bind_image_to_viewmodel(widget_path="...", widget_name="HealthIcon",
                        viewmodel_property="HealthIconBrush")

For non-text/visibility/image bindings, use add_viewmodel_binding (general form). Inspect existing bindings with get_viewmodel_bindings and the widget's available MVVM-eligible properties with get_widget_mvvm_properties.

Displaying a Widget in Game

Two paths:

Direct (no Blueprint nodes): add_widget_to_viewport(widget_path="...", z_order=0) — adds an instance of the widget to the player's viewport directly.

Blueprint-driven (for runtime instancing in BP graphs): add_blueprint_function_node with function_name="CreateWidget" and target_class="WidgetBlueprintLibrary", wired into AddToViewport. Use this when the widget needs to respond to gameplay events.

Gotcha: If the widget appears blank at runtime, CreateWidget is missing the owning player context. Use GetPlayerController(0) as the Owner pin.

In-World Widget Component (3D billboard)

add_blueprint_component(blueprint_path="...", component_type="Widget", component_name="HealthWidget")
set_component_property(blueprint_path="...", component_name="HealthWidget",
                       property_name="WidgetClass",
                       property_value="/Game/UI/WBP_HealthBar")

WidgetClass is a TSubclassOf<UUserWidget> (an FClassProperty). Pass either the asset path (/Game/UI/WBP_HealthBar) or the full generated-class path (/Game/UI/WBP_HealthBar.WBP_HealthBar_C); the asset-path form auto-expands.

Default draw mode is Screen Space; for world-space billboard, set Space to "World" via the same set_component_property call.

Bind Widget Events to Blueprint Functions

The function must already exist on the Widget Blueprint (use add_blueprint_event_node or the editor to create it first):

bind_widget_event(widget_path="/Game/UI/WBP_HUD",
                  widget_name="StartButton",
                  event_name="OnClicked",
                  function_name="HandleStartClicked")
compile_blueprint(blueprint_path="/Game/UI/WBP_HUD")

event_name accepts both the bare event name (OnClicked, OnHovered) and the underlying delegate property (OnClickedEvent) — the resolver tries the literal first, then with an Event suffix. Without function_name, the widget is just marked as a variable (legacy behavior).

If you don't know the function name, list candidates:

dump_blueprint_graph(blueprint_path="/Game/UI/WBP_HUD")  # functions[] in result

To discover what widget element types you can pass to add_widget_element:

list_widget_classes(name_filter="Box")  # → CheckBox, ComboBox, HorizontalBox, VerticalBox, ScrollBox, ...
list_widget_classes()  # all UWidget subclasses, with is_panel flag for parent eligibility

MetaSound — Crash Avoidance

The Multiply (Audio) Crash

Setting a float literal on an Audio-type pin crashes at RUNTIME (not edit time):

  • Crash: bExpectsNone [MetasoundDataFactory.h:395]
  • Rule: Never set scalar values on Audio-type pins. Connect audio buffers to audio pins.

After a MetaSound crash, all custom nodes are wiped — only OnPlay/OnFinished/Output survive. You must recreate from scratch. Save before every PIE test.

Pin Name Matching

Always call dump_metasound_graph(metasound_path="...") or get_metasound_nodes(include_details=true) before setting pins. Names are exact: SuperOscillator uses Frequency, Voices, Detune — not Base Frequency.

Safe Signal Chain Pattern

PerlinNoise(Audio) → Add(Audio).PrimaryOperand
SuperOscillator.Audio → Add(Audio).AdditionalOperands
Add(Audio).Out → OnePole_LPF.In
OnePole_LPF.Out → MonoOutput

No Multiply (Audio) in the chain — intentional.


Blueprint Wiring — Patterns and Gotchas

Read Before Writing

Always call dump_blueprint_graph(blueprint_path="...") before editing. It returns every graph, node, pin, connection, variable, and component. Never guess the existing structure.

Blueprint Lisp

ECABridge represents Blueprint graphs as Lisp-like S-expressions. Read with dump_blueprint_graph; the output is structured JSON. Write back with batch_edit_blueprint_nodes. The Lisp DSL format:

(graph EventGraph
  (node BeginPlay
    (then (node PrintString (string "Hello"))))
  (node EventTick
    (DeltaSeconds (node Multiply (A (var DeltaSeconds)) (B 2.0)))))

Key rules:

  • (node NodeName (pin value) ...) — one call per node
  • (then ...) — chains exec pins
  • (var VarName) — local variable reference
  • (self) — actor reference

AudioComponent Setup

  1. add_blueprint_component(component_type="Audio") — NOT "AudioComponent"
  2. set_component_property(property_name="bAutoActivate", property_value=false)
  3. set_component_property(property_name="Sound", property_value="/Game/Audio/MySound.MySound") — works directly now (FObjectProperty handling). For runtime swaps, you can still use a SetSound Blueprint node.
  4. Add Play / Stop at state transitions

Inserting Nodes Into Existing Exec Chains

  1. find_blueprint_nodes — locate the two connected nodes
  2. break_pin_connection — disconnect them
  3. batch_edit_blueprint_nodes — create new node(s)
  4. connect_blueprint_nodes — wire: prev.then → new.execute, new.then → next.execute

batch_edit_blueprint_nodes Tips

  • Component ref: {"type": "component", "component_name": "ComponentName"}
  • Function call: {"type": "function", "function_name": "FuncName", "target": "ComponentName", "target_class": "ClassName"}
  • Exec pins must be wired separately with connect_blueprint_nodes after batch creation.

Pin Value Formats

  • Object reference: /Game/Path/AssetName.AssetName
  • Struct (LinearColor, Vector): (R=1.0,G=0.0,B=0.0,A=1.0)

UltraDynamicSky Plugin

  • Spawn Ultra_Dynamic_Sky at origin. Spawn Ultra_Dynamic_Weather alongside it.
  • Weather vars are floats 0–1. Each has a - Manual Override bool companion.
  • Set the manual override bool to true BEFORE setting the weather value — otherwise random weather overrides it.
  • First spawn triggers 150+ shader compiles. Wait before judging visuals.
  • May conflict with existing DirectionalLights — hide or remove them.
  • Weather particles (rain, snow) are most visible during PIE. Editor viewport shows sky/clouds but may not show particles.

MetaHuman

ECABridge includes 22 MetaHuman commands for procedural character creation. The full technical reference (build environment, reflection patterns, groom flow, enum gotchas, 5.7 API pitfalls) lives in the Agile Lens knowledge base:

~/knowledge/departments/engineering/metahuman-mcp-reference.md

Read that file before working on any MetaHuman command implementation or debugging a MetaHuman pipeline failure. The docs/METAHUMAN.md in the ECABridge repo is a pointer to this same file.


Error Quick Reference

ErrorCauseFix
Unsupported property type 'X' for property 'Y'Property is a struct, array, map, or other unsupported reflection typeUse a Blueprint function node (Set… or batch_edit_blueprint_nodes) — set_component_property covers bool/int/float/double/string/name + object/soft-object/class/soft-class refs only
Unknown component typePlugin component type that the module-prefix fallback didn't catchPass the fully qualified class path (e.g. /Script/MyPlugin.MyComponent). Common ones (Engine, Niagara, UMG, Paper2D, MovieScene, CinematicCamera) are auto-resolved.
Input '<name>' not found in module '<X>'. Available inputs: [...]Wrong input name passed to set_niagara_module_inputThe error message lists the valid names. Use the short name (SpawnRate) or the full handle (Module.SpawnRate). Run list_module_inputs first if you don't know what's there.
Failed to load random range scriptset_niagara_dynamic_input is brokenNo MCP workaround; use Python or bake the value
bExpectsNone crash at PIEFloat literal on Audio-type pin in MetaSoundRestart editor, remove the literal, use audio buffer connections
RegisteredElementType crashReferenced mesh deleted/modified, or rapid spawn/delete sequenceRestart editor. Run get_asset_references before deleting anything.
is_active: false on Niagara actorPre-2026-04-30: factory-created system. Now fixed — re-create the system; create_niagara_system duplicates DefaultSystem under the hood and produces is_active=truen/a
Widget blank at runtimeCreateWidget missing owning player contextUse GetPlayerController(0) as the Outer pin
Material shows no bloomEmissive intensity ≤ 1.0 or Bloom disabled in Post ProcessSet emissive multiplier > 1.0 (try 5.0)
Blueprint nodes missing after saveSilent save failureRun dump_blueprint_graph to verify, recreate if missing

Capabilities

skillsource-ibrewsskill-ue5-mcptopic-agent-skillstopic-ai-toolstopic-claude-codetopic-mcptopic-ue5topic-unreal-engine

Install

Installnpx skills add ibrews/ue5-mcp
Transportskills-sh
Protocolskill

Quality

0.46/ 1.00

deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (29,126 chars)

Provenance

Indexed fromgithub
Enriched2026-05-18 19:08:14Z · deterministic:skill-github:v1 · v1
First seen2026-05-18
Last seen2026-05-18

Agent access

ue5-mcp — Clawmart · Clawmart