Skip to content

Commit 19afd84

Browse files
committed
README: bump Niagara section to 96 commands + full 280 total
Niagara category grew from 54 to 96 commands. Regrouped the section so the new authoring surface is easy to find: - Added "Stack Input Binding Loop" subsection — get_niagara_module_input_binding / clear_niagara_module_input / list_niagara_input_source_menu, the read/clear/discover trio that answers "what is this input actually bound to?" with nested-child recursion. - Added "Script Properties (Details Panel)" subsection covering the full FVersionedNiagaraScriptData surface including TArray<FName> dependencies. - Added "Script Parameters (Input / Output)" subsection with the CRUD set that now cascades to Map Get / Map Set pins on remove. - Added "Graph Introspection" subsection — get_niagara_graph_nodes (3 resolver modes: scratch pad, emitter stack graph, standalone script), get_niagara_node_info, trace_niagara_connection, validate_niagara_graph. - Added "Graph Node CRUD" subsection covering add_niagara_graph_node (Op / FunctionCall / DataInterfaceFunction / ParameterMapGet / ParameterMapSet / Reroute / Input) and delete_niagara_graph_node. Highlighted the DataInterfaceFunction path — it's what lets you spawn real array.Length / array.Get nodes instead of HLSL workarounds. - Added "Pin Management" subsection — add_niagara_map_get_pin / add_niagara_map_set_pin / add_niagara_node_pin / rename_niagara_node_pin / remove_niagara_node_pin + connect/disconnect. - Added "Custom HLSL" subsection with pin-level CRUD. - Reorganized "Scratch Pad" into a proper CRUD block including apply_niagara_scratch_pad and apply_and_save_niagara_scratch_pad so the Apply / Apply & Save buttons show up clearly. - Expanded "Discovery" — list_niagara_data_interface_functions, find_niagara_scratch_pad_usage, resolve_niagara_built_in_dynamic_input, get_niagara_schema_actions, describe_niagara_type with the UEnum/UScriptStruct reflection fallback noted. - Called out the renderer binding reader's new fields (binding_name / bound_variable_type / dataset_variable) inline. - Noted nested-path support on set_niagara_module_input, set_niagara_dynamic_input, link_niagara_parameter, and clear_niagara_module_input. Also bumped the header count (238 → 280) and the category table entry.
1 parent f9bc023 commit 19afd84

1 file changed

Lines changed: 89 additions & 19 deletions

File tree

README.md

Lines changed: 89 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# UnrealMCP — AI Bridge for Unreal Engine 5
22

3-
Control Unreal Engine 5 editor from AI coding assistants (Claude Code, Cursor, Windsurf, etc.). Create materials, blueprints, Niagara VFX, StateTrees, spawn actors, manage data tables, profile performance, and more — **238 commands** across 13 categories, all without leaving your terminal.
3+
Control Unreal Engine 5 editor from AI coding assistants (Claude Code, Cursor, Windsurf, etc.). Create materials, blueprints, Niagara VFX, StateTrees, spawn actors, manage data tables, profile performance, and more — **280 commands** across 13 categories, all without leaving your terminal.
44

55
**Two ways to use it:**
66

@@ -55,7 +55,7 @@ pip install unrealmcp
5555
│ │
5656
│ C++ Plugin (UnrealMCPBridge) │
5757
│ TCP server on localhost:55557 │
58-
238 commands: materials, blueprints, │
58+
280 commands: materials, blueprints, │
5959
│ niagara, statetree, actors, data │
6060
│ tables, profiling, and more │
6161
└──────────────┬───────────────────────────┘
@@ -72,7 +72,7 @@ pip install unrealmcp
7272
└───────────────────┘ └────────────────────┘
7373
```
7474

75-
The C++ plugin runs inside the editor and exposes 238 commands over TCP. The CLI and MCP server are two different front doors to the same plugin.
75+
The C++ plugin runs inside the editor and exposes 280 commands over TCP. The CLI and MCP server are two different front doors to the same plugin.
7676

7777
---
7878

@@ -439,7 +439,7 @@ The script asks where to create the MCP config:
439439

440440
---
441441

442-
## All 238 Commands
442+
## All 280 Commands
443443

444444
| Category | Count | Highlights |
445445
|----------|------:|-----------|
@@ -452,7 +452,7 @@ The script asks where to create the MCP config:
452452
| [Actors & Level](#actors--level-19) | 19 | spawn, transform, properties, screenshot |
453453
| [Enhanced Input](#enhanced-input-21) | 21 | actions, mapping contexts, triggers, modifiers |
454454
| [Widgets — UMG](#widgets--umg-11) | 11 | widget tree, add/move/rename, slot props |
455-
| [**Niagara VFX**](#niagara-vfx-54-new) | **54** | systems, emitters, modules, renderers, scratch pad, parameters |
455+
| [**Niagara VFX**](#niagara-vfx-96) | **96** | systems, emitters, stack bindings (nested), scratch pad authoring, graph CRUD, DI member functions, source-menu discovery |
456456
| [**StateTree**](#statetree-33-new) | **33** | states, tasks, evaluators, transitions, conditions, bindings |
457457
| [Performance Profiling](#performance-profiling-3) | 3 | record .utrace + smart analysis (diagnose/spikes/flame) |
458458
| [Debug](#debug-2) | 2 | token tracking, debug toggle |
@@ -606,9 +606,9 @@ The script asks where to create the MCP config:
606606
| `get/set_slot_properties` | Layout slot properties |
607607
| `list_widget_types` | Available widget classes |
608608

609-
### Niagara VFX (54, NEW)
609+
### Niagara VFX (96)
610610

611-
Full coverage of the Niagara editor — create systems from templates, add and configure emitters, manage modules and renderers, write scratch pad HLSL, and spawn effects in the level. Built on Niagara's ViewModel API for safe asset modification.
611+
End-to-end Niagara authoring — read the full stack, mutate any binding (top-level or nested), author scratch-pad dynamic inputs from scratch, spawn arbitrary graph nodes including data-interface member functions, and discover every valid option the editor's dropdowns expose. Built on Niagara's exported ViewModel / Stack Graph APIs with safe replication of non-exported helpers.
612612

613613
#### Systems
614614
| Command | Description |
@@ -643,38 +643,99 @@ Full coverage of the Niagara editor — create systems from templates, add and c
643643
| `set_niagara_module_enabled` | Enable/disable a module |
644644
| `reorder_niagara_module` | Reorder within stack |
645645
| `get_niagara_module_inputs` | Inspect module inputs with current values |
646-
| `set_niagara_module_input` | Set static value on a module input |
647-
| `set_niagara_dynamic_input` | Replace input with a dynamic input function |
646+
| `set_niagara_module_input` | Set literal value (auto-routes Module.* inputs to rapid-iteration; supports nested dot-paths like `"Spawn Count.int32001"`) |
647+
| `set_niagara_dynamic_input` | Replace input with a dynamic input function (nested-path aware) |
648648
| `set_niagara_curve` | Set curve points on a curve input |
649649
| `get_niagara_module_versions` | List script versions |
650650

651+
#### Stack Input Binding Loop
652+
| Command | Description |
653+
|---------|-------------|
654+
| `get_niagara_module_input_binding` | Resolve mode (Default/Local/Linked/Dynamic/Data/Expression) + target + **recursive children** for every input in one call |
655+
| `clear_niagara_module_input` | Reset an input (or nested path) to default — equivalent to "Reset to Default" in the stack UI |
656+
| `list_niagara_input_source_menu` | Reproduces the editor's source dropdown — engine dynamic-input assets + scratch-pad DIs + link parameters grouped by namespace |
657+
651658
#### Parameters & Bindings
652659
| Command | Description |
653660
|---------|-------------|
654661
| `get_niagara_user_parameters` | List User-namespace parameters |
655662
| `add_niagara_user_parameter` | Add a User parameter |
656663
| `set_niagara_user_parameter` | Set a User parameter value |
657664
| `remove_niagara_user_parameter` | Remove a User parameter |
658-
| `link_niagara_parameter` | Bind module input to a parameter |
665+
| `link_niagara_parameter` | Bind module input to a parameter (supports nested dot-paths) |
659666
| `get_niagara_rapid_iteration_parameters` | RI param introspection |
660667
| `set_niagara_rapid_iteration_parameter` | Set RI param value |
668+
| `list_niagara_available_parameters` | Enumerate well-known + user + scratch-pad-scoped parameters |
661669

662670
#### Renderers
663671
| Command | Description |
664672
|---------|-------------|
665673
| `add_niagara_renderer` | Add Sprite/Mesh/Ribbon/Light renderer |
666674
| `remove_niagara_renderer` | Remove a renderer |
667-
| `get_niagara_renderer_info` | Renderer summary |
675+
| `get_niagara_renderer_info` | Renderer summary with per-binding detail (binding_name + bound_variable + type + dataset_variable) |
668676
| `get_niagara_renderer_properties` | Full renderer property dump |
669677
| `set_niagara_renderer_property` | Set renderer property |
670678
| `set_niagara_renderer_binding` | Bind renderer attribute to particle data |
671679

672-
#### Scratch Pad & Custom Modules
680+
#### Scratch Pad — CRUD & Apply
681+
| Command | Description |
682+
|---------|-------------|
683+
| `create_niagara_scratch_pad_module` | Create per-emitter scratch module (module / dynamic_input / function) |
684+
| `list_niagara_scratch_pad_modules` | List scratch pads on a system |
685+
| `duplicate_niagara_scratch_pad_module` | Duplicate with new name |
686+
| `rename_niagara_scratch_pad_module` | Rename in-place |
687+
| `delete_niagara_scratch_pad_module` | Remove from system |
688+
| `apply_niagara_scratch_pad` | Commit edit-copy → asset (Apply button) |
689+
| `apply_and_save_niagara_scratch_pad` | Apply + save asset (Apply & Save button) |
690+
| `create_niagara_module_asset` | Create reusable standalone Niagara Module Script asset |
691+
692+
#### Script Properties (Details Panel)
693+
| Command | Description |
694+
|---------|-------------|
695+
| `get_niagara_script_properties` | Read Category, Description, Keywords, ModuleUsageBitmask, ProvidedDependencies, RequiredDependencies, LibraryVisibility, bDeprecated, bExperimental, NumericOutputTypeSelectionMode, ScriptMetaData, ConversionUtility |
696+
| `set_niagara_script_properties` | Batch-set any subset (supports `TArray<FName>` like ProvidedDependencies and `TArray<FNiagaraModuleDependency>`) |
697+
698+
#### Script Parameters (Input / Output)
699+
| Command | Description |
700+
|---------|-------------|
701+
| `list_niagara_script_parameters` | Inputs + outputs on a scratch pad / standalone script |
702+
| `add_niagara_script_parameter` | Add input or output parameter with any registered type (incl. data interfaces) |
703+
| `remove_niagara_script_parameter` | Remove — **cascades to Map Get / Map Set pin cleanup automatically** |
704+
| `rename_niagara_script_parameter` | Rename across asset + edit-copy graphs |
705+
706+
#### Graph Introspection
707+
| Command | Description |
708+
|---------|-------------|
709+
| `get_niagara_graph_nodes` | List every node with `verbosity` (summary/connections/full) + `type_filter` + `name_filter`. Three resolver modes: scratch pad, emitter stack graph, standalone script |
710+
| `get_niagara_node_info` | Deep single-node inspect by `node_index` / `node_class` / `node_id` with pin layout, links, and type-specific fields (`op_name`, `function_script`, `hlsl_preview`, `input_name`/type) |
711+
| `trace_niagara_connection` | BFS upstream/downstream with `pin_name` filter — see the dependency chain without dumping the whole graph |
712+
| `validate_niagara_graph` | Classify orphaned / dead-end / missing-input nodes (skips `+Add` placeholders) |
713+
714+
#### Graph Node CRUD
715+
| Command | Description |
716+
|---------|-------------|
717+
| `add_niagara_graph_node` | Spawn Op / FunctionCall / **DataInterfaceFunction** / ParameterMapGet / ParameterMapSet / Reroute / Input node. DI member functions (e.g. `Array.Length`) use `UNiagaraDataInterface::GetFunctionSignatures` — same path as the right-click "Functions" submenu |
718+
| `delete_niagara_graph_node` | Delete by index or GUID, mirrors on asset + edit-copy |
719+
720+
#### Pin Management
673721
| Command | Description |
674722
|---------|-------------|
675-
| `create_niagara_scratch_pad_module` | Create per-emitter scratch module |
676-
| `set_niagara_scratch_pad_hlsl` | Write HLSL into scratch pad |
677-
| `create_niagara_module_asset` | Create reusable Niagara Module Script asset |
723+
| `add_niagara_map_get_pin` | Add a typed output pin to a Map Get (e.g. `Module.MyParam` as Vector) |
724+
| `add_niagara_map_set_pin` | Add a typed input pin to a Map Set (e.g. `Particles.Velocity`) |
725+
| `add_niagara_node_pin` | Add a pin to any UNiagaraNodeWithDynamicPins-derived node |
726+
| `rename_niagara_node_pin` | Rename a pin on a dynamic-pin node |
727+
| `remove_niagara_node_pin` | Remove a dynamic pin |
728+
| `connect_niagara_pins` | Wire two pins with UEdGraphSchema_Niagara::TryCreateConnection validation |
729+
| `disconnect_niagara_pins` | Break a pin connection |
730+
731+
#### Custom HLSL
732+
| Command | Description |
733+
|---------|-------------|
734+
| `set_niagara_scratch_pad_hlsl` | Write HLSL source into the scratch pad's Custom HLSL node (creates pins as needed) |
735+
| `add_niagara_custom_hlsl_input` | Add an input pin to a Custom HLSL node |
736+
| `add_niagara_custom_hlsl_output` | Add an output pin to a Custom HLSL node |
737+
| `rename_niagara_custom_hlsl_pin` | Rename a pin (also rewrites `{PinName}` references in the HLSL body) |
738+
| `remove_niagara_custom_hlsl_pin` | Remove a pin |
678739

679740
#### Events & Simulation Stages
680741
| Command | Description |
@@ -691,13 +752,22 @@ Full coverage of the Niagara editor — create systems from templates, add and c
691752
| `add_niagara_component` | Add NiagaraComponent to a Blueprint |
692753
| `get_niagara_actors` | Find spawned Niagara actors |
693754

694-
#### Discovery
755+
#### Discovery (zero-guess authoring)
695756
| Command | Description |
696757
|---------|-------------|
697-
| `list_niagara_modules` | List all available Niagara module scripts |
698-
| `list_niagara_emitter_templates` | List emitter templates |
758+
| `list_niagara_modules` | All available Niagara module scripts |
759+
| `list_niagara_emitter_templates` | Emitter templates |
699760
| `list_niagara_data_interfaces` | Available data interfaces (DI_*) |
761+
| `list_niagara_data_interface_functions` | **Member functions on a DI class** (Array.Length, Array.Get, etc.) — pass result to `add_niagara_graph_node(node_type="DataInterfaceFunction")` |
700762
| `list_niagara_parameter_types` | Parameter type registry |
763+
| `list_niagara_node_types` | Spawnable node classes with pin schema |
764+
| `get_niagara_node_type_info` | Pin schema for a node class or script asset |
765+
| `search_niagara_functions` | Find Niagara script assets by usage + name |
766+
| `get_niagara_schema_actions` | Full graph right-click menu — same source the editor uses. Returns `op_name` / `function_script` / `input_name` for direct use with `add_niagara_graph_node` |
767+
| `describe_niagara_type` | Type query — `FNiagaraTypeRegistry` types + **UEnum / UScriptStruct reflection fallback** for script-property enums and custom types |
768+
| `get_niagara_data_interface_schema` | Walk a DI class's editable property schema |
769+
| `find_niagara_scratch_pad_usage` | Reverse lookup — where is this scratch pad referenced? |
770+
| `resolve_niagara_built_in_dynamic_input` | AssetRegistry scan for engine-shipped DI scripts (no more hardcoded paths) |
701771

702772
### StateTree (33, NEW)
703773

@@ -853,7 +923,7 @@ Each editor picks a unique port automatically. The CLI and MCP server read the p
853923
Plugins/UnrealMCP/
854924
├── UnrealMCP.uplugin # Plugin manifest
855925
├── cli/ # Go CLI source (ue-cli)
856-
│ ├── cmd/ # Command definitions (238 commands)
926+
│ ├── cmd/ # Command definitions (280 commands)
857927
│ ├── internal/bridge/ # TCP client
858928
│ ├── internal/project/ # Plugin embedding & project detection
859929
│ └── npm/ # npm package wrapper

0 commit comments

Comments
 (0)