Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
UNREAL_HOSTNoThe host address of the Unreal Engine MCP plugin127.0.0.1
UNREAL_PORTNoThe port of the Unreal Engine MCP plugin55557

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
ping_unrealA

Ping the UnrealMCP bridge and return its health response.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: ping_unreal()

get_actor_identityC

Return actor labels, object names, full paths, classes, and Blueprint generated-class paths.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: get_actor_identity()

find_actors_by_classC

Find placed actors by native or Blueprint-generated class name/path.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: find_actors_by_class(class_name="Actor")

editor_list_blocking_dialogsA

List visible Unreal/Windows dialogs that can block MCP automation.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: editor_list_blocking_dialogs()

editor_dismiss_blocking_dialogB

Click a named button on a visible Unreal/Windows dialog, such as Yes, OK, Replace, or Cancel.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: editor_dismiss_blocking_dialog(button_text="Example")

insanitii_phase1_readiness_reportA

Run the Insanitii Phase 1 smoke-readiness checklist against the open editor.

The report prefers native bridge routes added for project smoke testing, then falls back to read-only UE Python probes when the running editor has not yet reloaded the latest UnrealMCP plugin binary.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_phase1_readiness_report()

insanitii_manual_control_readiness_reportB

Launch PIE and verify possessed-player movement/look readiness for Insanitii.

KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#complete-command-reference Example: insanitii_manual_control_readiness_report(mode="play", wait_seconds=10.0, stop_after_probe=True)

This is not a replacement for human feel testing. It proves the slice has a possessed pawn, visible movement/look mappings, gameplay input components, no obvious cursor trap, movement input response, and control rotation response.

insanitii_player_station_interaction_route_reportB

Launch PIE and verify player-view interaction traces for every Day 1 task station.

KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#complete-command-reference Example: insanitii_player_station_interaction_route_report(mode="play", wait_seconds=10.0, stop_after_probe=True)

This proves the possessed first-person pawn can be placed at each station approach, look through its camera at the Tripo-backed station mesh, resolve the station through the same visibility trace shape the detector uses, and complete through UInsanitiiInteractionDetectorComponent::AttemptInteract.

insanitii_phase2_lifestyle_reportB

Run the Insanitii Phase 2 lifestyle-framework readiness checklist.

This smoke workflow verifies that the native time, economy, and lifestyle manager classes are visible to the editor, the Blueprint wrapper exists, the manager actor is placed, and the manager can generate daily job options for the current lifestyle.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_phase2_lifestyle_report()

insanitii_phase3_objective_reportC

Run the Insanitii Phase 3 objective-loop readiness checklist.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_phase3_objective_report()

insanitii_place_ordinary_errand_stationsC

Place Insanitii ordinary-errand stations using small, crash-resistant UE Python chunks.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_place_ordinary_errand_stations()

insanitii_place_day1_set_dressingC

Place readable Day 1 prototype set dressing in small UE Python chunks.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_place_day1_set_dressing()

insanitii_world_reactivity_reportB

Verify Insanitii Day 1 reactive world actor tagging and director wiring.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_world_reactivity_report()

insanitii_save_load_reportB

Verify the Insanitii demo save/load skeleton restores day, cash, and mental state in PIE.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_save_load_report()

insanitii_phase3_pie_runtime_reportC

Launch PIE, probe Insanitii runtime systems, optionally exercise the Day 1 loop, and stop PIE.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_phase3_pie_runtime_report()

insanitii_audio_feedback_reportA

Verify Insanitii generated SoundWave assets and the level audio feedback director wiring.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: insanitii_audio_feedback_report()

inspect_static_mesh_sectionsA

Inspect one static mesh's original material and render sections.

KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#working-example

Example: inspect_static_mesh_sections(asset_path="/Game/Props/SM_Console", lod_index=0)

This is a bounded read-only native bridge operation. It accepts only a project asset below /Game/ and never saves, modifies, or exports the mesh. Polygon-group names preserve imported material-section identity needed for DCC round trips and material-family classification.

get_actors_in_levelA

Get a list of all actors in the current UE5 level.

Returns a compact single-line JSON array of actor objects when the editor is connected. When Unreal is unavailable, returns a structured JSON error object instead of an empty array so audits do not mistake a disconnected bridge for an empty level. Example: [{"name": "BP_MyActor", "type": "StaticMeshActor"}, ...]

Bug #3 fix:

  • Returns a JSON string so FastMCP sends it verbatim as a single TextContent block (no pydantic_core indent=2 pretty-printing).

  • Connected success responses keep the historical top-level JSON array.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: get_actors_in_level()

find_actors_by_nameC

Find actors in the level by name pattern (supports wildcards).

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: find_actors_by_name(pattern="Example")

spawn_actorA

Spawn a new actor in the current level.

Args: name: Unique name for the actor type: Actor type (StaticMeshActor, PointLight, Camera, etc.) location: [X, Y, Z] world location rotation: [Pitch, Yaw, Roll] in degrees

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: spawn_actor(name="ExampleName", type="Example")

delete_actorC

Delete an actor from the level by name.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: delete_actor(name="ExampleName")

set_actor_transformC

Set the transform (location, rotation, scale) of an actor.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: set_actor_transform(name="ExampleName")

get_actor_propertiesC

Get all properties of an actor by name.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: get_actor_properties(name="ExampleName")

set_actor_propertyC

Set a specific property on an actor instance.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: set_actor_property(name="ExampleName", property_name="ExampleName", property_value="ExampleName")

spawn_blueprint_actorB

Spawn an actor in the level from a Blueprint class.

Args: blueprint_name: Name of the Blueprint asset actor_name: Name to give the spawned actor location: [X, Y, Z] world location rotation: [Pitch, Yaw, Roll] in degrees

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: spawn_blueprint_actor(blueprint_name="/Game/MCP_Test/BP_Example", actor_name="ExampleName")

take_screenshotC

Take a screenshot of the Unreal Editor viewport.

The native bridge expects filepath; keep the public filename argument for compatibility and forward both names.

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: take_screenshot()

wp_load_regionB

Load a World Partition editor region by bounding box.

KB: see knowledge_base/25_WORLD_PARTITION_AND_HLOD.md#mcp-world-partition-and-hlod-tools Example: wp_load_region(center=[0, 0, 0], extent=[50000, 50000, 50000], label="Downtown Edit Window")

wp_unload_regionC

Unload matching World Partition editor region loaders.

KB: see knowledge_base/25_WORLD_PARTITION_AND_HLOD.md#mcp-world-partition-and-hlod-tools Example: wp_unload_region(label="Downtown Edit Window")

wp_create_data_layerB

Create or reuse a Data Layer asset and instance in the active editor world.

KB: see knowledge_base/25_WORLD_PARTITION_AND_HLOD.md#mcp-world-partition-and-hlod-tools Example: wp_create_data_layer(name="Gameplay_POIs", type="runtime", asset_path="/Game/DataLayers/Gameplay_POIs")

hlod_generateC

Run the World Partition HLOD builder commandlet for the active map.

KB: see knowledge_base/25_WORLD_PARTITION_AND_HLOD.md#mcp-world-partition-and-hlod-tools Example: hlod_generate(setup=True, build=True, layer="HLODLayer_Buildings")

hlod_assign_layerC

Assign an HLOD Layer asset to named actors or the current editor selection.

KB: see knowledge_base/25_WORLD_PARTITION_AND_HLOD.md#mcp-world-partition-and-hlod-tools Example: hlod_assign_layer(hlod_layer="/Game/HLOD/HLODLayer_Buildings", actors=["SM_Blockout_01"])

exec_pythonA

Execute arbitrary Python code inside Unreal Engine via the Python plugin.

Use this tool when you need to:

  • Create assets in custom project folders (create_blueprint always uses /Game/Blueprints/)

  • Query engine version: import unreal; print(unreal.SystemLibrary.get_engine_version())

  • Count or list assets: unreal.EditorAssetLibrary.list_assets('/Game', recursive=True)

  • Create Widget Blueprints, Behavior Trees, Blackboards, Animation Blueprints (use the appropriate factory class since they cannot be created with create_blueprint)

  • Perform bulk operations not covered by other MCP tools

Args: code: Valid Python code string to execute inside UE5. The 'unreal' module is available automatically. Example: "import unreal; print(unreal.SystemLibrary.get_engine_version())"

Returns: dict with 'output' (captured stdout) and 'success' flag.

IMPORTANT: Always use exec_python for:

  • Assets outside /Game/Blueprints/ (specify full path via AssetTools)

  • Widget Blueprints (WidgetBlueprintFactory)

  • Behavior Trees / Blackboards (BehaviorTreeFactory / BlackboardDataFactory)

  • Animation Blueprints (AnimBlueprintFactory)

  • Checking existing assets before creating duplicates

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: exec_python(code="Example")

save_blueprintA

Persist a Blueprint package to disk using the UnrealMCP C++ bridge.

This invokes the native save_blueprint MCP command, which writes the package via UEditorLoadingAndSavingUtils::SavePackages (UnrealEd). It does not call Python unreal.EditorAssetLibrary.save_asset / save_loaded_asset, which has crashed with EXCEPTION_ACCESS_VIOLATION in EditorScriptingUtilities on some UE 5.6 sessions.

Typical flow after editing a BP via MCP:

  1. compile_blueprint(blueprint_name=...) — marks modified (plugin safe path)

  2. save_blueprint(blueprint_name=...) — writes .uasset

Optional: only_if_dirty=True maps to the engine's "only save dirty packages" behavior; default False saves the listed package regardless.

Args: blueprint_name: Blueprint asset name (e.g. "BP_Cabal") only_if_dirty: If True, only persist if the package is dirty

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: save_blueprint(blueprint_name="/Game/MCP_Test/BP_Example")

focus_viewportB

Move the Unreal Editor viewport camera to focus on a world location.

Args: location: [X, Y, Z] world-space position to look at distance: How far back from the location to place the camera (cm)

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: focus_viewport()

create_blueprintA

Create a new Blueprint class in /Game/Blueprints/.

Args: name: Blueprint asset name (e.g., "BP_MyActor") parent_class: Parent class (Actor, Pawn, Character, PlayerController, GameModeBase, GameInstance, HUD, UserWidget, AIController, etc.)

Returns: Dict with 'name' and 'path' of the created Blueprint

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: create_blueprint(name="ExampleName", parent_class="Actor")

set_blueprint_parent_classA

Reparent an existing Blueprint to another Blueprint or C++ class.

Use this for deliberate class-architecture changes after inspecting the Blueprint and confirming the new parent still matches its components, variables, and gameplay responsibilities. Compile and read back the Blueprint after reparenting before making additional graph changes.

Args: blueprint_name: Blueprint asset name or path to reparent. new_parent_class: Parent Blueprint asset name/path or C++ class name.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_blueprint_parent_class(blueprint_name="/Game/MCP_Test/BP_Example", new_parent_class="Character")

bp_copy_componentA

Copy an SCS component from one Blueprint to another.

The native route creates a new component node with the same component class, copies editable template properties, preserves a matching parent component when present, and marks the destination Blueprint dirty using the plugin's deferred dirty-marking path.

Args: source_bp: Source Blueprint asset name or path. dest_bp: Destination Blueprint asset name or path. component_name: SCS component variable name to copy. new_component_name: Optional destination component name. Defaults to component_name.

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: bp_copy_component(source_bp="/Game/MCP_Test/BP_Source", dest_bp="/Game/MCP_Test/BP_Dest", component_name="ExampleComponent")

add_component_to_blueprintB

Add a component to an existing Blueprint.

Args: blueprint_name: Name of the Blueprint component_type: Component class (StaticMeshComponent, CameraComponent, SpringArmComponent, BoxComponent, AudioComponent, PointLightComponent, CharacterMovementComponent, etc.) component_name: Name for the new component location: Relative [X,Y,Z] location rotation: Relative [Pitch,Yaw,Roll] rotation scale: Relative [X,Y,Z] scale component_properties: Additional properties dict

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_component_to_blueprint(blueprint_name="/Game/MCP_Test/BP_Example", component_type="Actor", component_name="ExampleComponent")

set_static_mesh_propertiesB

Assign a static mesh (and optionally a material) to a StaticMeshComponent.

Args: blueprint_name: Blueprint name component_name: StaticMeshComponent name static_mesh: Asset path (e.g., "/Engine/BasicShapes/Sphere.Sphere") material: Optional material asset path

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_static_mesh_properties(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

set_component_propertyA

Set any property on a Blueprint component.

Args: blueprint_name: Blueprint name component_name: Component name property_name: C++ property name (e.g., "TargetArmLength", "bUsePawnControlRotation") property_value: Value (bool, int, float, string, or [x,y,z] array for vectors)

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_component_property(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent", property_name="ExampleName", property_value="ExampleName")

set_physics_propertiesB

Configure physics simulation on a primitive component.

Args: blueprint_name: Blueprint name component_name: Component name (must be a PrimitiveComponent) simulate_physics: Enable physics simulation gravity_enabled: Enable gravity mass: Mass in kg linear_damping: Linear damping coefficient angular_damping: Angular damping coefficient

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_physics_properties(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

compile_blueprintC

Compile a Blueprint to apply all changes.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: compile_blueprint(blueprint_name="/Game/MCP_Test/BP_Example")

set_blueprint_propertyB

Set a property on the Blueprint class default object (CDO).

Args: blueprint_name: Blueprint name property_name: Property name (e.g., "AutoPossessPlayer", "bUseControllerRotationYaw") property_value: New value

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_blueprint_property(blueprint_name="/Game/MCP_Test/BP_Example", property_name="ExampleName", property_value="ExampleName")

set_skeletal_mesh_propertiesA

Assign a SkeletalMesh asset and/or materials to a SkeletalMeshComponent in a Blueprint.

Use this for character armor pieces, clothing, accessories — any SkeletalMeshComponent that needs a mesh assigned and materials applied (textures).

Args: blueprint_name: Blueprint containing the SkeletalMeshComponent component_name: SCS variable name of the SkeletalMeshComponent skeletal_mesh: Content path to USkeletalMesh asset (e.g. "/Game/Characters/Armor/SK_ChestPlate") material: Shorthand — assign a single material to slot 0 (e.g. "/Game/Materials/M_ArmorBlue") materials: Per-slot list: [{"slot": 0, "material": "/Game/M_Foo"}, {"slot": 1, "material": "/Game/M_Bar"}] Use this when the mesh has multiple material slots.

Returns: Dict with 'success', 'component'

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_skeletal_mesh_properties(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

set_component_parent_socketA

Attach a Blueprint component to a named bone/socket on its parent SkeletalMeshComponent.

This is the correct way to make armor pieces "snap" to the right place on a character. Instead of manually tweaking relative transforms, you attach the armor SCS node to a specific bone socket (e.g. "hand_r", "spine_01", "head") and UE5 positions it automatically following skeleton animation.

Common bone socket names (UE5 Mannequin): "pelvis", "spine_01", "spine_02", "spine_03", "clavicle_l", "upperarm_l", "lowerarm_l", "hand_l", "clavicle_r", "upperarm_r", "lowerarm_r", "hand_r", "neck_01", "head", "thigh_l", "calf_l", "foot_l", "ball_l", "thigh_r", "calf_r", "foot_r", "ball_r"

Args: blueprint_name: Blueprint to modify component_name: SCS variable name of the child armor/accessory component parent_socket: Bone or socket name to attach to (e.g. "hand_r") parent_component: (optional) SCS variable name of the SkeletalMeshComponent to attach to. If omitted, only the socket name is updated on the current parent.

Returns: Dict with 'success', 'component', 'parent_socket'

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_component_parent_socket(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent", parent_socket="Example")

add_skeleton_socketA

Add or replace a socket on the USkeleton used by a skeletal mesh (e.g. GunBarrel).

Infantry uses the GunBarrel socket name with GetSocketTransform on the mesh. Sockets are stored on the skeleton asset; Python mesh.add_socket is unreliable in UE5.6.

Defaults parent the socket to ik_hand_gun (Mannequin weapon IK bone) with a 22 cm offset along local +X (typical muzzle direction). Override relative_rotation as [pitch, yaw, roll] in degrees if traces fire along the wrong axis.

Args: skeletal_mesh_path: Content path to the USkeletalMesh (e.g. /Game/.../SithSoldier). socket_name: Socket name (default GunBarrel). bone_name: Parent bone (default ik_hand_gun; use hand_r if your rig has no IK gun bone). relative_location: Optional [x, y, z] in cm relative to the bone. relative_rotation: Optional [pitch, yaw, roll] in degrees. relative_scale: Optional [x, y, z] scale (default 1,1,1). save: If True, persist the skeleton package via low-level SavePackage.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_skeleton_socket(skeletal_mesh_path="/Game/MCP_Test/Example")

set_pawn_propertiesA

Set common Pawn/Character class defaults on a Blueprint.

Use this after confirming the Blueprint is a Pawn or Character subclass. Compile and read back class defaults before building AI or possession workflows on top of the changed defaults.

Args: blueprint_name: Pawn/Character Blueprint asset name or path. auto_possess_player: Optional AutoPossessPlayer enum value/name. auto_possess_ai: Optional AutoPossessAI enum value/name. use_controller_rotation_yaw: Optional bUseControllerRotationYaw. use_controller_rotation_pitch: Optional bUseControllerRotationPitch. use_controller_rotation_roll: Optional bUseControllerRotationRoll. can_be_damaged: Optional bCanBeDamaged default.

Returns: Dict with per-property native mutation results.

KB: see knowledge_base/04_AI_SYSTEMS.md#pawn-and-controller-setup Example: set_pawn_properties(blueprint_name="/Game/BP_Enemy", auto_possess_ai="PlacedInWorldOrSpawned")

set_blueprint_ai_controllerA

Set the AIControllerClass on a Pawn/Character Blueprint.

This sets the AI Controller Class in the Blueprint's Class Defaults, which is required for AI movement (MoveToActor, SimpleMoveToActor) to work.

Args: blueprint_name: Name of the Blueprint (must be a Pawn or Character subclass). controller_class: Short class name like 'AIController' (default) or a custom controller class name.

Returns: Dict with 'blueprint', 'ai_controller_class', and 'success'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_blueprint_ai_controller(blueprint_name="/Game/MCP_Test/BP_Example")

get_blueprint_nodesA

Return every node in a Blueprint graph with full pin data.

Use this before editing a graph — it gives you node_id (GUID), node_name (short object name like 'K2Node_CallFunction_40'), node_type, position, function_name / event_name / variable_name where applicable, and a pins list (pin_id, pin_name, direction, type, default_value, linked_to).

graph_name special values: 'EventGraph' (default) — main event graph '*' or 'all' — EVERY graph in the Blueprint (EventGraph + functions + macros). Response has 'graphs' list with per-graph node lists, plus 'total_count'.

Args: blueprint_name: Asset name, e.g. 'ThePlayerCharacter' graph_name: Graph to inspect. Defaults to 'EventGraph'. Pass '*' or 'all' to get every graph at once. include_hidden_pins: Include hidden/internal pins in output.

Returns: Single-graph: Dict with 'nodes' list and 'count'. All-graphs: Dict with 'graphs' list (each has graph_name, nodes, count) and 'total_count'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_nodes(blueprint_name="/Game/MCP_Test/BP_Example")

get_node_by_idA

Fast single-node lookup — returns full pin data for exactly one node.

Use this instead of get_blueprint_nodes when you already know a node's ID or name and just need its current pin state (e.g. to verify a connection was made, or to read a default value).

node_id can be:

  • A GUID string (from previous add_* or get_blueprint_nodes calls)

  • A short object name, e.g. 'K2Node_CallFunction_40'

Returns the same structure as a single entry from get_blueprint_nodes: node_id, node_name, node_type, pos_x, pos_y, function_name / event_name / variable_name (where applicable), pins list (pin_id, pin_name, direction, type, default_value, linked_to).

Args: blueprint_name: Asset name, e.g. 'ThePlayerCharacter' node_id: GUID or short object name of the node. graph_name: Graph to search. Default 'EventGraph'. include_hidden_pins: Include hidden/internal pins. Default False.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_node_by_id(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example")

find_blueprint_nodesA

Find nodes in a Blueprint graph filtered by type and/or name.

node_type values: 'all' — every node 'event' — K2Node_Event (filter by event_name) 'function' — K2Node_CallFunction (filter by function_name) 'variable_get' — K2Node_VariableGet (filter by variable_name) 'variable_set' — K2Node_VariableSet (filter by variable_name) 'input_action' — K2Node_InputAction / K2Node_EnhancedInputAction Any class substring — e.g. 'IfThenElse', 'Knot', 'Self'

Args: blueprint_name: Asset name, e.g. 'ThePlayerCharacter' node_type: Filter type (see above). Default 'all'. graph_name: Graph to search. Default 'EventGraph'. event_name: Filter by event name (when node_type='event'). function_name: Filter by function name (when node_type='function'). variable_name: Filter by variable name (when node_type='variable_get/set'). input_action_name: Filter by action name / comment. node_name: Filter by exact node object name.

Returns: Dict with 'nodes' (full objects) and 'node_guids' (legacy GUID list).

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: find_blueprint_nodes(blueprint_name="/Game/MCP_Test/BP_Example")

connect_blueprint_nodesA

Connect an output pin on one node to an input pin on another.

source_node_id / target_node_id can be:

  • A GUID string (from get_blueprint_nodes / add_* commands)

  • The short object name, e.g. 'K2Node_CallFunction_40'

Pin name parameter (use EITHER form — both are accepted): source_pin / source_pin_name — output pin on the source node target_pin / target_pin_name — input pin on the target node

Common exec pin names: 'then' (output), 'execute' (input). Common data pin names: 'ReturnValue', 'Target', 'NewLocation', etc.

Returns a dict with source_node_id, target_node_id, source_pin, target_pin, and connection_verified (True/False). If connection_verified is False a 'warning' field explains why the connection may not have taken effect (type mismatch, schema disallow, etc.). When the schema outright forbids the connection the command returns an error with the schema's reason message.

Args: blueprint_name: Asset name. source_node_id: GUID or object name of the source node. target_node_id: GUID or object name of the target node. graph_name: Graph to operate on. Default 'EventGraph'. source_pin: Output pin name on the source node (alias: source_pin_name). target_pin: Input pin name on the target node (alias: target_pin_name). source_pin_name: Alias for source_pin (BUG-NEW compatibility). target_pin_name: Alias for target_pin (BUG-NEW compatibility).

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: connect_blueprint_nodes(blueprint_name="/Game/MCP_Test/BP_Example", source_node_id="Example", target_node_id="Example")

disconnect_blueprint_nodesA

Break pin connections in a Blueprint graph.

Two modes: A) Break ALL links on a single pin: Provide node_id + pin_name. B) Break a SPECIFIC link between two nodes: Provide source_node_id + source_pin + target_node_id + target_pin.

Args: blueprint_name: Asset name. graph_name: Graph to operate on. Default 'EventGraph'. node_id: (Mode A) Node GUID or name. pin_name: (Mode A) Pin to clear. source_node_id: (Mode B) Source node GUID or name. source_pin: (Mode B) Output pin on source. target_node_id: (Mode B) Target node GUID or name. target_pin: (Mode B) Input pin on target.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: disconnect_blueprint_nodes(blueprint_name="/Game/MCP_Test/BP_Example")

set_node_pin_valueA

Set a literal default value on an unconnected pin.

This is equivalent to typing a value into an exposed pin field in the Blueprint editor. The pin must NOT be connected to another node.

Examples: Boolean : value="true" or "false" Float : value="1.5" Integer : value="42" String : value="Hello" Vector : value="(X=100.0,Y=0.0,Z=0.0)" Rotator : value="(Pitch=0.0,Yaw=90.0,Roll=0.0)"

Args: blueprint_name: Asset name. node_id: Node GUID or short object name. pin_name: Pin name to set. value: New literal value as a string. graph_name: Graph to operate on. Default 'EventGraph'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_node_pin_value(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example", pin_name="Exec", value=0.0)

reconstruct_blueprint_nodeA

Force a Blueprint node to reconstruct after pin/default mutation.

Use this repair primitive after setting defaults or wiring wildcard nodes so UE can regenerate pins and propagate concrete types. Follow with graph readback and Blueprint compile diagnostics.

Args: blueprint_name: Asset name. node_id: Node GUID or short object name. graph_name: Graph containing the node. Default 'EventGraph'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#node-repair Example: reconstruct_blueprint_node(blueprint_name="/Game/MCP_Test/BP_Example", node_id="K2Node_CallFunction_40")

delete_blueprint_nodeB

Delete a node from a Blueprint graph (breaks all its connections first).

Args: blueprint_name: Asset name. node_id: Node GUID or short object name (e.g. 'K2Node_CallFunction_40'). graph_name: Graph to operate on. Default 'EventGraph'.

Returns: Dict with 'deleted_node_id' and 'deleted_node_name'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: delete_blueprint_node(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example")

add_blueprint_event_nodeB

Add an event node to a Blueprint graph.

Common event names: ReceiveBeginPlay, ReceiveTick, ReceiveEndPlay, ReceiveHit, ReceiveActorBeginOverlap, ReceiveActorEndOverlap

Args: blueprint_name: Asset name. event_name: Event to add. graph_name: Target graph. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id' and 'node_name'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_event_node(blueprint_name="/Game/MCP_Test/BP_Example", event_name="ExampleName")

add_blueprint_function_nodeA

Add a function-call node to a Blueprint graph.

function_name can be: • Short name: 'K2_GetActorLocation', 'SetActorLocation', 'PrintString' • Full UE path: '/Script/Engine.Actor:K2_GetActorLocation'

target (optional) identifies the class that owns the function: • Short name: 'KismetMathLibrary', 'KismetSystemLibrary', 'GameplayStatics', 'Actor', 'Character' • Full path: '/Script/Engine.KismetMathLibrary' • Leave empty to search the Blueprint's own class hierarchy.

Duplicate guard: by default (allow_duplicates=False) if a node with the same function name already exists within 32 units of node_position, the existing node is returned instead of creating a new one. Set allow_duplicates=True to force creation of a new node regardless.

params values can be strings, numbers, or booleans — all are handled.

Returns node_id, node_name, pins, and was_existing (True if the duplicate guard returned an existing node).

Args: blueprint_name: Asset name. function_name: Function to call (short name or full path). target: Class that owns the function (optional). graph_name: Graph to add node to. Default 'EventGraph'. params: Dict of pin_name -> default_value to set inline. node_position: Optional [X, Y] canvas position. allow_duplicates: Force new node even if one already exists nearby.

Returns: Dict with 'node_id', 'node_name', 'pins', 'was_existing'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_function_node(blueprint_name="/Game/MCP_Test/BP_Example", function_name="ExampleName")

add_blueprint_function_with_pinsA

Create or update a Blueprint function graph with typed signature pins.

Use this when an agent needs a reusable gameplay function, not a call node in an existing graph. Each pin entry supports name, type, and an optional sub_type for object/class-backed pins.

Args: blueprint_name: Asset name of the Blueprint. function_name: Function graph to create or update. inputs: Function input pins, e.g. [{"name": "Amount", "type": "float"}]. outputs: Function output pins, e.g. [{"name": "Success", "type": "bool"}]. is_pure: Whether to mark the function as pure when supported.

Returns: Dict with graph_name, entry_node_id, result_node_id, inputs, and outputs.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#function-signature-authoring Example: add_blueprint_function_with_pins( blueprint_name="/Game/MCP_Test/BP_Example", function_name="ComputeDamage", inputs=[{"name": "BaseDamage", "type": "float"}], outputs=[{"name": "FinalDamage", "type": "float"}], )

add_blueprint_variable_get_nodeA

Add a 'Get Variable' node for a Blueprint variable.

Args: blueprint_name: Asset name. variable_name: Name of the variable to get. graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position. target_class: Optional owning class (e.g. 'BP_SithSoldier' or 'BP_SithSoldier_C') when reading a variable from a cast pawn instead of the AnimBP self.

Returns: Dict with 'node_id', 'node_name', 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_variable_get_node(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

add_blueprint_variable_set_nodeA

Add a 'Set Variable' node for a Blueprint variable.

Args: blueprint_name: Asset name. variable_name: Name of the variable to set. graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position. target_class: Optional owning class when setting an external member (same resolution as native bridge).

Returns: Dict with 'node_id', 'node_name', 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_variable_set_node(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

add_blueprint_variableA

Add a member variable to a Blueprint.

Supported variable_type values: Boolean, Integer, Integer64, Float, Double, String, Name, Text, Vector, Rotator, Transform, Object/ (e.g. 'Object//Script/Engine.StaticMeshComponent')

Args: blueprint_name: Asset name. variable_name: New variable name. variable_type: Type string (see above). is_exposed: Expose in Details panel (BlueprintVisible + Edit). default_value: Optional initial value string (e.g. '0', 'true', '(X=0.0,Y=0.0,Z=0.0)'). Stored in both the FBPVariableDescription and the Blueprint CDO.

Returns: Dict with 'variable_name' and 'variable_type'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", variable_type="ExampleName")

add_blueprint_input_action_nodeA

Add a legacy Input Action event node (non-Enhanced Input).

For Enhanced Input actions that already exist in the graph use find_blueprint_nodes with node_type='input_action'.

Args: blueprint_name: Asset name. action_name: Input action name, e.g. 'Jump'. graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_input_action_node(blueprint_name="/Game/MCP_Test/BP_Example", action_name="ExampleName")

add_blueprint_self_referenceB

Add a 'Get a reference to self' node (returns this actor/object).

Args: blueprint_name: Asset name. graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_self_reference(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_get_self_component_referenceA

Add a node that gets a reference to one of the Blueprint's own components. Equivalent to dragging a component from the Components panel into the graph.

Args: blueprint_name: Asset name. component_name: Component variable name (e.g. 'CapsuleComponent'). graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_get_self_component_reference(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

get_blueprint_graphsA

List every graph inside a Blueprint: EventGraph(s), function graphs, macro graphs, and delegate graphs.

Use this to discover graph names before calling get_blueprint_nodes or add_blueprint_function_node with a non-default graph_name.

Args: blueprint_name: Asset name, e.g. 'ThePlayerCharacter'

Returns: Dict with 'graphs' list. Each entry has: graph_name - name to pass as graph_name to other tools graph_type - 'EventGraph', 'Function', 'Macro', or 'Delegate' node_count - number of nodes currently in the graph

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_graphs(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_enhanced_input_action_nodeA

Add an Enhanced Input Action event node (K2Node_EnhancedInputAction) to a Blueprint graph, wired to the specified UInputAction asset.

This is the correct node type for projects using Unreal Engine's Enhanced Input system (which replaces the legacy Input Actions in UE5). The node exposes Triggered / Started / Ongoing / Canceled / Completed exec pins as well as ActionValue, ElapsedSeconds, and TriggeredSeconds data pins.

action_asset can be: • Full object path: "/Game/OtherAssets/input/Actions/IA_Blink.IA_Blink" • Asset name only (will be found via Asset Registry): "IA_Blink"

After adding the node use connect_blueprint_nodes to wire the exec pins to your logic. Use get_blueprint_nodes to inspect the pin names.

Args: blueprint_name: Asset name of the Blueprint to edit. action_asset: UInputAction asset — full path or short name. graph_name: Target graph. Defaults to 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'input_action', 'input_action_path', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_enhanced_input_action_node(blueprint_name="/Game/MCP_Test/BP_Example", action_asset="/Game/MCP_Test/Example")

add_blueprint_get_component_nodeA

Add a node that gets a reference to one of the Blueprint's SCS components.

Unlike add_blueprint_get_self_component_reference (which blindly trusts the component name), this command validates the component against the Blueprint's SimpleConstructionScript and also searches inherited C++ component properties. It returns the component's actual class name in the response as 'component_class'.

Use this when you know a component was added in the Blueprint editor (e.g. StaticMeshComponent, CapsuleComponent, CharacterMovement).

Args: blueprint_name: Asset name. component_name: Variable name of the component (e.g. 'Mesh', 'CapsuleComponent', 'CharacterMovement'). graph_name: Graph to add node to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'component_name', 'component_class' (if found), and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_get_component_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_blueprint_branch_nodeA

Add a Branch (If/Then/Else) node to a Blueprint graph.

This is the standard UE5 Branch node with Condition (bool) input, True exec output, and False exec output.

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', and 'pins' (execute, Condition, True, False).

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_branch_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_cast_nodeA

Add a Cast node (K2Node_DynamicCast) to a Blueprint graph.

Args: blueprint_name: Asset name of the Blueprint. cast_target_class: Class to cast to. Accepts short names like 'AIController', 'ThePlayerCharacter', or full paths like '/Script/AIModule.AIController'. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'cast_class', and 'pins' (execute, Object, then/cast-success, CastFailed, As).

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_cast_node(blueprint_name="/Game/MCP_Test/BP_Example", cast_target_class="Actor")

add_blueprint_for_loop_nodeA

Add a standard ForLoop macro node to a Blueprint graph.

Pins: execute, First Index (int), Last Index (int), Loop Body (exec), Index (int), Completed (exec).

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. first_index: Starting index (default 0). last_index: Ending index (default 9). node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_for_loop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_for_each_loop_nodeB

Add a ForEachLoop macro node to a Blueprint graph.

Pins: execute, Array (wildcard array), Loop Body (exec), Array Element (wildcard), Array Index (int), Completed (exec).

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_for_each_loop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_sequence_nodeA

Add a Sequence macro node to a Blueprint graph.

A Sequence node executes multiple outputs in order (Then 0, Then 1, ...). Additional outputs can be added manually in the Blueprint editor.

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_sequence_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_do_once_nodeA

Add a DoOnce macro node to a Blueprint graph.

The DoOnce node only fires the Completed output once until Reset is triggered. Pins: execute, Reset (exec), Completed (exec), bIsOpen (bool).

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_do_once_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_gate_nodeA

Add a Gate macro node to a Blueprint graph.

A Gate passes execution through its Exit pin only when open. Pins: execute, Open (exec), Close (exec), Toggle (exec), Start Closed (bool), Exit (exec).

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. start_closed: Whether the gate starts closed (default False). node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_gate_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_flip_flop_nodeA

Add a FlipFlop macro node to a Blueprint graph.

Alternates between A and B exec outputs on each trigger. Pins: execute, A (exec), B (exec), IsA (bool).

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_flip_flop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_switch_on_int_nodeA

Add a Switch on Int node (K2Node_SwitchInteger) to a Blueprint graph.

Routes execution to Case 0, Case 1, ... Default based on an integer input.

Args: blueprint_name: Asset name of the Blueprint. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_switch_on_int_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_blueprint_spawn_actor_nodeB

Add a SpawnActorFromClass node (K2Node_SpawnActorFromClass) to a Blueprint graph.

Spawns a new actor of the given class at a given transform. Pins: execute, Class, SpawnTransform, CollisionHandlingOverride, Owner, Instigator, then, ReturnValue (actor ref).

Args: blueprint_name: Asset name of the Blueprint. actor_class: Short class name to pin as default (e.g. 'BP_AggroBot1'). Leave empty to leave the Class pin unwired. graph_name: Graph to add to. Default 'EventGraph'. node_position: Optional [X, Y] canvas position.

Returns: Dict with 'node_id', 'node_name', 'node_type', 'actor_class', and 'pins'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_spawn_actor_node(blueprint_name="/Game/MCP_Test/BP_Example")

set_spawn_actor_classA

Set the Class pin on an existing SpawnActorFromClass node.

Class pins use object defaults in UE 5.6, so use this helper after add_blueprint_spawn_actor_node instead of set_node_pin_value.

Args: blueprint_name: Asset name of the Blueprint. node_id: SpawnActor node GUID or node name. actor_class: Actor class name to assign, e.g. "BP_Projectile_C". graph_name: Graph containing the node. Default "EventGraph".

Returns: Dict with node_id and actor_class.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#spawnactor-class-pins Example: set_spawn_actor_class( blueprint_name="/Game/MCP_Test/BP_Example", node_id="9C2E...", actor_class="BP_Projectile_C", )

add_blueprint_comment_nodeA

Add a comment box (UEdGraphNode_Comment) to a Blueprint graph.

Comment boxes are visual organisers that group related nodes. They do not affect logic.

Args: blueprint_name: Asset name of the Blueprint. comment_text: Text shown in the comment header. graph_name: Graph to add to. Default 'EventGraph'. node_position: [X, Y] top-left corner of the comment box. width: Width in units (default 400). height: Height in units (default 200). color: Optional [R, G, B, A] color in 0..1 range. Defaults to white semi-transparent.

Returns: Dict with 'node_id', 'node_name', 'comment_text', 'pos_x', 'pos_y', 'width', 'height'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_blueprint_comment_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_comment_boxB

Create a color-coded Blueprint comment box.

This is a standards-friendly alias for add_blueprint_comment_node. Use it before placing nodes for a functional block.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: create_comment_box(blueprint_name="/Game/MCP_Test/BP_Example", comment_text="Example")

rename_blueprint_comment_nodeA

Rename and optionally recolor an existing Blueprint comment box.

Use this for graph polish after programmatic node creation. The node_id can be the comment GUID or node object name returned by graph inspection.

Args: blueprint_name: Asset name of the Blueprint. node_id: GUID or node name of the comment box. comment_text: New visible comment header text. graph_name: Graph containing the comment. Default 'EventGraph'. color: Optional [R, G, B, A] color in 0..1 range.

Returns: Dict with node_id, node_name, comment_text, and layout bounds.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#graph-readability-and-layout Example: rename_blueprint_comment_node(blueprint_name="/Game/BP_Door", node_id="COMMENT-NODE", comment_text="Interact Flow")

move_blueprint_nodeA

Reposition an existing node on the Blueprint graph canvas.

Useful for tidying up a graph after programmatic construction.

Args: blueprint_name: Asset name of the Blueprint. node_id: GUID or short name of the node to move. node_position: New [X, Y] canvas position. graph_name: Graph containing the node. Default 'EventGraph'.

Returns: Dict with 'node_id', 'node_name', 'new_pos_x', 'new_pos_y'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: move_blueprint_node(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example", node_position=[0.0, 0.0, 0.0])

get_blueprint_variable_defaultsA

Read the default value(s) of Blueprint member variables.

Returns both the FBPVariableDescription.DefaultValue (the value stored in the Blueprint asset) and the live CDO value exported as text.

Args: blueprint_name: Asset name of the Blueprint. variable_name: If specified, only return this variable. Leave empty to return ALL variables.

Returns: Dict with 'blueprint', 'count', and 'variables' array. Each variable entry has: 'variable_name', 'variable_type', 'default_value', 'tooltip', and optionally 'cdo_value'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_variable_defaults(blueprint_name="/Game/MCP_Test/BP_Example")

set_blueprint_variable_defaultA

Set the default value of a Blueprint member variable.

Updates both the FBPVariableDescription record and the CDO property via ImportText so changes are visible immediately without a full recompile.

Args: blueprint_name: Asset name of the Blueprint. variable_name: Exact name of the variable to update. default_value: New default value as a string (e.g. '42', 'true', '(X=1.0,Y=2.0,Z=3.0)' for vectors).

Returns: Dict with 'blueprint', 'variable_name', 'default_value', 'success'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: set_blueprint_variable_default(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", default_value=0.0)

get_blueprint_componentsA

List all components of a Blueprint (SCS + native C++ components).

For each SCS component the response includes its class name and any properties that differ from the component class defaults.

Args: blueprint_name: Asset name of the Blueprint.

Returns: Dict with 'blueprint', 'count', and 'components' array. Each component entry has: 'name', 'source' ('SCS' or 'NativeC++'), 'class', and optionally 'modified_properties' (dict of prop -> value).

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_components(blueprint_name="/Game/MCP_Test/BP_Example")

setup_navmeshA

Spawn or resize a NavMeshBoundsVolume in the current editor level.

If a NavMeshBoundsVolume already exists it will be resized and repositioned instead of creating a duplicate. After placement the navigation system is optionally rebuilt so AI characters can immediately use the navmesh.

Args: extent: Half-extents [X, Y, Z] in cm (default [5000, 5000, 500]). The volume will cover a 2X by 2Y by 2*Z area. location: Centre location [X, Y, Z] in cm (default [0, 0, 0]). rebuild: Trigger a nav-system rebuild after placement (default True).

Returns: Dict with 'action' ('created' or 'resized_existing'), 'actor' (volume name), 'rebuilt', 'success'.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: setup_navmesh()

get_blueprint_variablesA

List all member variables defined in a Blueprint class.

Returns each variable's name, type, default value, and category. Use this to inspect existing variables before adding new ones.

Args: blueprint_name: Blueprint asset name (e.g., "BP_MyCharacter") category: Optional category filter (empty string = return all)

Returns: Dict with 'variables' list. Each entry has: name, type, default_value, category, is_exposed, is_read_only

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_variables(blueprint_name="/Game/MCP_Test/BP_Example")

get_blueprint_functionsA

List all function graphs defined inside a Blueprint class.

Returns each function's name, input pins, and output pins. Use this before calling add_blueprint_function_node on a custom function, or before modifying an existing function graph.

Args: blueprint_name: Blueprint asset name (e.g., "BP_MyCharacter")

Returns: Dict with 'functions' list. Each entry has: name, inputs (list of {name, type}), outputs (list of {name, type})

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_blueprint_functions(blueprint_name="/Game/MCP_Test/BP_Example")

get_scs_nodesA

List every SimpleConstructionScript (SCS) component in a Blueprint.

Returns name, component_class, variable_guid, parent_name, is_root, and supports_overlap_events (True for PrimitiveComponent subclasses).

Use this BEFORE add_overlap_event or add_component_overlap_event to find the exact component_name and variable_guid needed. The variable_guid is required to create a K2Node_ComponentBoundEvent that is scoped to a specific component (not the whole actor).

Args: blueprint_name: Blueprint asset name (e.g. "BP_NPC")

Returns: Dict with 'scs_nodes' list. Each entry has: name, component_class, variable_guid, parent_name, is_root, supports_overlap_events

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: get_scs_nodes(blueprint_name="/Game/MCP_Test/BP_Example")

add_component_overlap_eventA

Add a K2Node_ComponentBoundEvent for a specific SCS component.

This is the programmatic equivalent of clicking the [+] button next to an event in the component's Details panel. Unlike add_overlap_event (actor-level), this node is scoped per-component GUID, so multiple components in the same Blueprint each get their own dedicated event node.

If the event node already exists for this component it is returned unchanged (already_existed=True).

Use get_scs_nodes first to confirm component_name and check that supports_overlap_events is True.

Args: blueprint_name: Blueprint asset name (e.g. "BP_NPC") component_name: SCS component variable name (e.g. "InteractionSphere") event_name: Delegate event name. Default "OnComponentBeginOverlap". Also: "OnComponentEndOverlap", "OnComponentHit". graph_name: Graph to add to. Default "EventGraph". node_position: Optional [X, Y] canvas position.

Returns: Dict with node_id, node_name, component_name, event_name, component_guid, already_existed, and pins list.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_component_overlap_event(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

create_input_mappingB

Create an input mapping in the project settings (legacy input system).

Args: action_name: Name of the input action (e.g., "Jump", "Fire", "MoveForward") key: Key binding (SpaceBar, LeftMouseButton, W, A, S, D, Gamepad_FaceButton_Bottom, etc.) input_type: "Action" (button press) or "Axis" (analog/continuous)

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview Example: create_input_mapping(action_name="ExampleName", key="ExampleName")

create_enhanced_input_actionB

Create an Enhanced Input Action asset (UE5 modern input system).

Args: action_name: Name of the input action asset value_type: "Digital" (bool), "Axis1D" (float), "Axis2D" (Vector2D), "Axis3D" path: Content browser path

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview Example: create_enhanced_input_action(action_name="ExampleName")

create_input_mapping_contextC

Create an Input Mapping Context for Enhanced Input system.

Args: context_name: Name of the IMC asset mappings: List of dicts with 'action' and 'key' fields path: Content browser path

Example mappings: [{"action": "IA_Jump", "key": "SpaceBar"}, {"action": "IA_Move", "key": "W"}]

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview Example: create_input_mapping_context(context_name="ExampleName")

add_input_mappingA

Add an input mapping to an existing Input Mapping Context (IMC).

Args: imc_name: Name of the Input Mapping Context (e.g., "IMC_Default") action_name: Name of the Input Action (e.g., "IA_Jump", "IA_WormholeTP") key: Key name to bind (e.g., "SpaceBar", "V", "T", "LeftMouseButton")

Returns: dict with success status, imc_name, action_name, key, and mapping_index

Example: add_input_mapping(imc_name="ExampleName", action_name="ExampleName", key="ExampleName")

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview

inspect_input_mapping_contextB

Inspect an Enhanced Input Mapping Context and return action/key mappings.

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview Example: inspect_input_mapping_context(imc_path_or_name="/Game/MCP_Test/Example")

check_blueprint_generated_classA

Verify that a Blueprint asset has a valid generated class and report parent/native class data.

KB: see knowledge_base/15_INPUT_SYSTEM_AND_UMG.md#overview Example: check_blueprint_generated_class(blueprint_path_or_name="/Game/MCP_Test/BP_Example")

create_umg_widget_blueprintC

Create a new UMG Widget Blueprint.

Args: widget_name: Widget asset name (e.g., "WBP_HUD", "WBP_MainMenu") parent_class: Parent class (default: "UserWidget") path: Content browser path (default: "/Game/UI")

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: create_umg_widget_blueprint(widget_name="/Game/MCP_Test/WBP_Example")

add_text_block_to_widgetA

Add a Text Block to a Widget Blueprint.

Args: widget_name: Widget Blueprint name text_block_name: Component name for the text block text: Display text position: [X, Y] canvas position size: [Width, Height] font_size: Font size in points color: [R, G, B, A] (0.0-1.0)

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_text_block_to_widget(widget_name="/Game/MCP_Test/WBP_Example", text_block_name="ExampleName")

add_button_to_widgetA

Add a Button to a Widget Blueprint.

Args: widget_name: Widget Blueprint name button_name: Component name for the button text: Button label position: [X, Y] canvas position size: [Width, Height] font_size: Font size color: [R,G,B,A] text color background_color: [R,G,B,A] button background color

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_button_to_widget(widget_name="/Game/MCP_Test/WBP_Example", button_name="ExampleName")

umg_add_widget_bindingA

Add or replace a Widget Blueprint property binding.

property_path uses '.' such as 'HealthText.Text' or 'HealthBar.Percent'. binding_target is the Blueprint function or property name that should drive the binding.

Args: widget: Widget Blueprint asset name or path. property_path: Widget tree property path, '.'. binding_target: Blueprint function/property that supplies the value. binding_kind: 'function' or 'property'. Default 'function'.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: umg_add_widget_binding(widget="/Game/MCP_Test/WBP_Example", property_path="HealthText.Text", binding_target="GetHealthText")

bind_widget_eventB

Bind a widget event (e.g., OnClicked) to a function.

Args: widget_name: Widget Blueprint name widget_component_name: Component name (e.g., button name) event_name: Event to bind ("OnClicked", "OnHovered", "OnUnhovered", "OnPressed", "OnReleased") function_name: Target function name (auto-generated if empty)

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: bind_widget_event(widget_name="/Game/MCP_Test/WBP_Example", widget_component_name="/Game/MCP_Test/WBP_Example", event_name="ExampleName")

bind_widget_component_eventA

Create or reuse a component-bound event node for a named sub-widget.

Use this for precise UMG event wiring on named widget variables such as Button.OnClicked, Button.OnHovered, or Slider.OnValueChanged. Unlike the legacy bind_widget_event route, this resolves the Widget Blueprint by full path, promotes the sub-widget to a Blueprint variable when needed, and binds the delegate to that specific widget property.

Args: widget_blueprint_path: Full Widget Blueprint asset path. widget_name: Named sub-widget in the WidgetTree, e.g. "BTN_Start". event_name: Delegate property name, e.g. "OnClicked". compile: Whether the native route should compile/save after binding.

Returns: Structured result with node_id, created, and variable_promoted.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#event-driven-widget-workflows Example: bind_widget_component_event(widget_blueprint_path="/Game/UI/WBP_MainMenu", widget_name="BTN_Start", event_name="OnClicked")

add_widget_to_viewportA

Instantiate a Widget Blueprint and add it to the game viewport.

Args: widget_name: Widget Blueprint name z_order: Rendering order (higher = on top)

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_widget_to_viewport(widget_name="/Game/MCP_Test/WBP_Example")

set_text_block_bindingC

Set up a dynamic property binding on a Text Block widget.

Args: widget_name: Widget Blueprint name text_block_name: Text Block component name binding_property: Blueprint variable to bind to binding_type: "Text", "Visibility", "ColorAndOpacity"

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: set_text_block_binding(widget_name="/Game/MCP_Test/WBP_Example", text_block_name="ExampleName", binding_property="ExampleName")

add_progress_bar_to_widgetA

Add a Progress Bar widget (useful for health/ammo bars).

Args: widget_name: Widget Blueprint name progress_bar_name: Component name position: [X, Y] position size: [Width, Height] fill_color: [R,G,B,A] fill color background_color: [R,G,B,A] background percent: Initial fill (0.0-1.0)

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_progress_bar_to_widget(widget_name="/Game/MCP_Test/WBP_Example", progress_bar_name="ExampleName")

add_image_to_widgetB

Add an Image widget to a Widget Blueprint.

Args: widget_name: Widget Blueprint name image_name: Component name texture_path: Texture asset path (optional) position: [X, Y] position size: [Width, Height] color: [R,G,B,A] tint color

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_image_to_widget(widget_name="/Game/MCP_Test/WBP_Example", image_name="ExampleName")

add_horizontal_box_to_widgetA

Add a Horizontal Box layout container to a Widget Blueprint.

From Ch. 11 (Round Transition screen): Horizontal Box arranges child widgets horizontally (left to right). Used for side-by-side text + values.

Args: widget_name: Widget Blueprint name box_name: Component name for the Horizontal Box position: [X, Y] position size: [Width, Height] anchor_preset: UMG anchor preset ("TopLeft", "TopCenter", "Center", etc.) size_to_content: Auto-size to fit children

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_horizontal_box_to_widget(widget_name="/Game/MCP_Test/WBP_Example", box_name="ExampleName")

add_vertical_box_to_widgetA

Add a Vertical Box layout container to a Widget Blueprint.

Vertical Box arranges child widgets vertically (top to bottom). Perfect for stacking buttons, labels, and stats in a menu.

Args: widget_name: Widget Blueprint name box_name: Component name for the Vertical Box position: [X, Y] position size: [Width, Height] anchor_preset: UMG anchor preset size_to_content: Auto-size to fit children

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_vertical_box_to_widget(widget_name="/Game/MCP_Test/WBP_Example", box_name="ExampleName")

add_canvas_panel_to_widgetB

Add a Canvas Panel to a Widget Blueprint (free-placement layout).

From Ch. 7: Canvas Panel allows absolute positioning of child widgets (drag and drop anywhere). It's the default root panel for most UMG widgets.

Args: widget_name: Widget Blueprint name panel_name: Component name for the Canvas Panel

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_canvas_panel_to_widget(widget_name="/Game/MCP_Test/WBP_Example")

add_slider_to_widgetA

Add a Slider widget for adjustable values (audio volume, sensitivity, etc.).

Args: widget_name: Widget Blueprint name slider_name: Component name position: [X, Y] position size: [Width, Height] min_value: Minimum slider value max_value: Maximum slider value default_value: Initial slider value step_size: Increment step

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_slider_to_widget(widget_name="/Game/MCP_Test/WBP_Example", slider_name="ExampleName")

add_checkbox_to_widgetA

Add a Checkbox widget for boolean toggles in menus.

Args: widget_name: Widget Blueprint name checkbox_name: Component name label_text: Optional label text next to the checkbox position: [X, Y] position is_checked: Initial checked state

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_checkbox_to_widget(widget_name="/Game/MCP_Test/WBP_Example", checkbox_name="ExampleName")

add_named_slot_to_widgetA

Add a Named Slot placeholder to a Widget Blueprint.

Named Slots allow child widget content injection when the widget is used as a parent. Essential for reusable frame/container widgets.

Args: widget_name: Widget Blueprint name slot_name: Named slot identifier position: [X, Y] position size: [Width, Height]

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_named_slot_to_widget(widget_name="/Game/MCP_Test/WBP_Example", slot_name="ExampleName")

create_hud_widgetA

Create a complete HUD Widget Blueprint from Ch. 7.

Builds a full first-person HUD with health bar, stamina bar, ammo counter, and targets-eliminated counter. Each element uses bindings to display live player variable values.

Mirrors the HUD created in Chapters 7-8 of the book:

  • Health/Stamina: Progress Bars with float bindings

  • Ammo: Text Block with integer binding

  • Targets Eliminated / Target Goal: Text Blocks

Args: widget_name: Widget Blueprint name health_bar: Include a health progress bar stamina_bar: Include a stamina progress bar ammo_counter: Include an ammo count text display targets_counter: Include a targets eliminated counter target_goal_display: Include a target goal counter round_display: Include a round number display folder_path: Content browser folder

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: create_hud_widget()

create_win_menu_widgetB

Create a Win/Victory screen Widget Blueprint as described in Ch. 8.

Creates a UMG Widget with a centered win message and buttons. From the book: "You Win!" message, Restart and Quit buttons.

Args: widget_name: Widget Blueprint name title_text: Main message (e.g., "You Win!", "Victory!") title_color: RGBA color for the title text show_restart_button: Include a Restart (reload level) button show_quit_button: Include a Quit Game button show_round_info: Include current round number display folder_path: Content browser folder

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: create_win_menu_widget()

add_widget_animationA

Add a UMG Widget Animation to animate widget properties over time.

Widget Animations allow smooth fades, slides, and scale effects in UI. Use PlayAnimation / StopAnimation nodes in Blueprint to trigger them.

Args: widget_name: Widget Blueprint name animation_name: Name for the animation (e.g., "FadeIn", "SlideOut") animated_property: Property to animate ("Opacity", "Scale", "Position") start_value: Starting value end_value: Ending value duration: Animation duration in seconds loop: Whether the animation loops

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_widget_animation(widget_name="/Game/MCP_Test/WBP_Example", animation_name="ExampleName")

add_remove_from_parent_nodeA

Add a RemoveFromParent node to hide/remove a widget from the viewport.

From Ch. 8 and Ch. 11: Used to close menus. When a player clicks "Resume" on the pause menu, RemoveFromParent removes the widget.

Args: blueprint_name: Blueprint to add the node to widget_variable: Variable holding the widget reference (empty = self) node_position: [X, Y] graph position

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_remove_from_parent_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_create_widget_nodeA

Add a CreateWidget node to instantiate a Widget Blueprint at runtime.

From Ch. 7 (Displaying HUD), Ch. 8 (Win menu), Ch. 11 (Lose/Pause menus): Creates a widget instance and optionally adds it to the viewport.

Args: blueprint_name: Blueprint to add the node to widget_class: Widget Blueprint class to instantiate owning_player_variable: PlayerController variable (empty = Get Player Controller) store_in_variable: Variable to store the widget reference (for later use) node_position: [X, Y] graph position

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: add_create_widget_node(blueprint_name="/Game/MCP_Test/BP_Example")

widget_add_childB

Add a child widget to a Widget Blueprint tree.

Args: widget_blueprint_path: Full Widget Blueprint asset path, e.g. /Game/UI/WBP_HUD or /Game/UI/WBP_HUD.WBP_HUD. child_class: Supported UMG class name such as CanvasPanel, TextBlock, Image, ProgressBar, Button, HorizontalBox, VerticalBox, Overlay, or SizeBox. child_name: Name for the new child widget. parent_name: Optional panel widget to attach under. If omitted, the child becomes the root when no root exists, or attaches to the root when the root is a panel.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: widget_add_child(widget_blueprint_path="/Game/MCP_Test/BP_Example", child_class="Actor", child_name="ExampleName")

widget_set_propertyB

Set a common property on a child widget.

Supported native properties include Text, FontSize, ColorAndOpacity, BrushTintColor, BrushSize, Percent, FillColorAndOpacity, Visibility, and RenderTransformAngle. Color and vector values should be comma-separated strings such as 1,0.2,0.1,1 or 256,64.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: widget_set_property(widget_blueprint_path="/Game/MCP_Test/BP_Example", widget_name="/Game/MCP_Test/WBP_Example", property_name="ExampleName", property_value="ExampleName")

widget_set_anchorC

Set CanvasPanelSlot anchor, position, size, and alignment.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: widget_set_anchor(widget_blueprint_path="/Game/MCP_Test/BP_Example", widget_name="/Game/MCP_Test/WBP_Example", anchor_min_x=0.0, anchor_min_y=0.0, anchor_max_x=0.0, anchor_max_y=0.0, position_x=0.0, position_y=0.0, size_x=0.0, size_y=0.0)

widget_get_childrenA

List children in a Widget Blueprint tree.

If parent_name is omitted, the native route returns the root widget plus the root panel's immediate children.

KB: see knowledge_base/06_UI_UMG_SYSTEMS.md#overview Example: widget_get_children(widget_blueprint_path="/Game/MCP_Test/BP_Example")

create_game_modeA

Create a GameModeBase Blueprint with optional class assignments.

The GameMode controls which classes (Pawn, HUD, PlayerController, etc.) are used when the level starts.

Args: name: Blueprint name (e.g., "BP_MyGameMode") default_pawn_class: Default pawn Blueprint name hud_class: HUD Blueprint name player_controller_class: PlayerController Blueprint name game_state_class: GameState Blueprint name spectator_class: Spectator pawn Blueprint name

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_game_mode(name="ExampleName")

create_player_controllerA

Create a PlayerController Blueprint.

Args: name: Blueprint name (e.g., "BP_MyPlayerController") show_mouse_cursor: Show mouse cursor in game enable_click_events: Enable actor click events enable_touch_events: Enable touch events

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_player_controller(name="ExampleName")

create_game_instanceA

Create a GameInstance Blueprint.

GameInstance persists across level loads and is ideal for storing player progress, settings, and cross-level data.

Args: name: Blueprint name (e.g., "BP_MyGameInstance")

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_game_instance(name="ExampleName")

create_hud_blueprintB

Create a HUD Blueprint.

Args: name: Blueprint name (e.g., "BP_MyHUD")

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_hud_blueprint(name="ExampleName")

set_game_mode_for_levelA

Set the GameMode override for the current level (World Settings).

Args: game_mode_name: GameMode Blueprint name

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: set_game_mode_for_level(game_mode_name="ExampleName")

net_describe_blueprint_replicationA

Inspect an Actor Blueprint's replication defaults, replicated variables, RepNotify callbacks, replicated components, and existing RPC functions.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_describe_blueprint_replication(blueprint_name="/Game/MCP_Test/BP_Example")

net_set_actor_replicatesC

Configure safe Actor replication defaults on an Actor-derived Blueprint.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_set_actor_replicates(blueprint_name="/Game/MCP_Test/BP_Example")

net_set_component_replicatesC

Configure replication-by-default on a Blueprint SCS component template.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_set_component_replicates(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

net_configure_replicated_propertyC

Configure an existing Blueprint member variable as none, replicated, or RepNotify.

Supported replication_condition values include none, initial_only, owner_only, skip_owner, simulated_only, autonomous_only, initial_or_owner, replay_only, skip_replay, custom, dynamic, and never.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_configure_replicated_property(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

net_add_repnotify_variableC

Add a Blueprint member variable and configure it for RepNotify.

Supported variable_type values: Boolean, Integer, Integer64, Float, Double, String, Name, Text, Vector, Rotator, and Transform.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_add_repnotify_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

net_create_rpc_eventB

Create or update a Custom Event as a Blueprint RPC.

Supported rpc_type values: server, client, net_multicast, and none. Optional inputs are simple typed event parameters, for example [{"name": "Damage", "type": "Float"}].

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_create_rpc_event(blueprint_name="/Game/MCP_Test/BP_Example", event_name="ExampleName")

net_configure_rpcC

Configure network flags on an existing Blueprint Custom Event RPC.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_configure_rpc(blueprint_name="/Game/MCP_Test/BP_Example", event_name="ExampleName")

net_add_authority_gateB

Add a HasAuthority function node wired into a Branch node. The Branch Then pin represents authority/server flow; Else is remote/client flow.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_add_authority_gate(blueprint_name="/Game/MCP_Test/BP_Example")

net_add_role_switchB

Add an ENetRole switch node for role-specific Blueprint flow.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_add_role_switch(blueprint_name="/Game/MCP_Test/BP_Example")

net_set_owner_referenceB

Add an AActor.SetOwner call node for server-side ownership setup.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_set_owner_reference(blueprint_name="/Game/MCP_Test/BP_Example")

session_create_blueprint_flowC

Add a Create Session async Blueprint node and wire GetPlayerController(0).

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: session_create_blueprint_flow(blueprint_name="/Game/MCP_Test/BP_Example")

session_find_blueprint_flowC

Add a Find Sessions async Blueprint node and wire GetPlayerController(0).

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: session_find_blueprint_flow(blueprint_name="/Game/MCP_Test/BP_Example")

network_debug_replicationA

Capture a runtime/editor replication snapshot: net mode, net driver, connections, network object counts, and replicated actor samples.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: network_debug_replication()

net_validate_common_mistakesA

Validate common Blueprint networking mistakes such as replicated state on non-replicating Actors, missing RepNotify handlers, and risky RPCs.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: net_validate_common_mistakes()

create_character_blueprintA

Create a Character Blueprint with optional camera setup.

Characters include: CapsuleComponent, CharacterMovement, SkeletalMesh.

Args: name: Blueprint name add_camera: Add a CameraComponent add_spring_arm: Add a SpringArmComponent for the camera camera_location: Camera relative location camera_rotation: Camera relative rotation spring_arm_length: SpringArm target arm length

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_character_blueprint(name="ExampleName")

create_fps_characterA

Create a First-Person Shooter character Blueprint. Adds a first-person camera and arms mesh components.

Args: name: Blueprint name (e.g., "BP_FPSCharacter")

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_fps_character(name="ExampleName")

add_overlap_eventA

Add an OnComponentBeginOverlap event node bound to a SPECIFIC SCS component.

Creates a K2Node_ComponentBoundEvent — equivalent to clicking the [+] button next to the event in the component's Details panel. Multiple components in the same Blueprint each get their own event node (per component variable GUID).

Use get_scs_nodes to list available component names and their GUIDs.

Args: blueprint_name: Blueprint asset name (e.g. "BP_MyActor") component_name: SCS component variable name (e.g. "InteractionSphere") event_name: Delegate event name. Default "OnComponentBeginOverlap". Other options: "OnComponentEndOverlap", "OnComponentHit". node_position: Optional [X, Y] canvas position.

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: add_overlap_event(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_hit_eventC

Add an OnActorHit event node (fires when actor is hit by collision).

Args: blueprint_name: Blueprint name node_position: Optional graph position

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: add_hit_event(blueprint_name="/Game/MCP_Test/BP_Example")

create_projectile_blueprintB

Create a Projectile Blueprint with movement component.

Args: name: Blueprint name (e.g., "BP_Projectile") speed: Projectile speed in cm/s gravity_scale: Gravity influence (0 = no gravity) damage: Damage amount on hit

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_projectile_blueprint(name="ExampleName")

create_pickup_blueprintA

Create a pickup actor Blueprint (health, ammo, powerup, etc.).

Args: name: Blueprint name pickup_type: Type label ("Health", "Ammo", "Key", etc.) value: Pickup value amount rotate_speed: Degrees per second rotation (0 = no rotation)

KB: see knowledge_base/03_GAMEPLAY_FRAMEWORK.md#overview Example: create_pickup_blueprint(name="ExampleName")

create_animation_blueprintB

Create an Animation Blueprint (AnimBP).

Animation Blueprints control skeletal mesh animations using an EventGraph (for logic) and AnimGraph (for pose blending).

Args: name: AnimBP name (e.g., "ABP_Character") skeleton: Skeleton asset path (e.g., "/Game/Characters/SK_Character") parent_class: Parent class (default: "AnimInstance") path: Content browser path

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: create_animation_blueprint(name="ExampleName")

add_state_machineB

Add a State Machine to an Animation Blueprint's AnimGraph.

State Machines define animation states (Idle, Walk, Run, Jump) and transitions between them.

Args: anim_blueprint_name: Animation Blueprint name state_machine_name: Name for the state machine node

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_state_machine(anim_blueprint_name="/Game/MCP_Test/BP_Example")

add_animation_stateC

Add an animation state to a State Machine.

Args: anim_blueprint_name: Animation Blueprint name state_machine_name: State machine name state_name: State name (e.g., "Idle", "Walk", "Run", "Jump", "Death") animation_asset: Optional animation sequence asset path

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_animation_state(anim_blueprint_name="/Game/MCP_Test/BP_Example", state_machine_name="ExampleName", state_name="ExampleName")

add_state_transitionB

Add a transition between two animation states.

Args: anim_blueprint_name: Animation Blueprint name state_machine_name: State machine name from_state: Source state name to_state: Destination state name condition_variable: Bool variable to use as transition condition condition_value: Expected value to trigger transition (True/False)

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_state_transition(anim_blueprint_name="/Game/MCP_Test/BP_Example", state_machine_name="ExampleName", from_state="ExampleName", to_state="ExampleName")

set_animation_for_stateC

Assign an animation sequence to a State Machine state.

Args: anim_blueprint_name: Animation Blueprint name state_machine_name: State machine name state_name: State to assign animation to animation_asset: Animation Sequence asset path loop: Loop the animation

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: set_animation_for_state(anim_blueprint_name="/Game/MCP_Test/BP_Example", state_machine_name="ExampleName", state_name="ExampleName", animation_asset="/Game/MCP_Test/Example")

add_anim_blueprint_variableB

Add a variable to an Animation Blueprint (for use in transitions/logic).

Args: anim_blueprint_name: Animation Blueprint name variable_name: Variable name (e.g., "Speed", "bIsJumping", "Direction") variable_type: Type (Boolean, Float, Integer, Vector) default_value: Optional default value

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_anim_blueprint_variable(anim_blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", variable_type="ExampleName")

add_blend_space_nodeA

Add a Blend Space node to an Animation Blueprint's AnimGraph.

Blend Spaces blend animations based on one or two float parameters (e.g., Speed and Direction for a locomotion blend space).

Args: anim_blueprint_name: Animation Blueprint name blend_space_asset: Blend Space asset path node_position: Optional graph position

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_blend_space_node(anim_blueprint_name="/Game/MCP_Test/BP_Example", blend_space_asset="/Game/MCP_Test/Example")

add_sequence_player_nodeA

Add a Sequence Player node to an Animation Blueprint AnimGraph.

Use this for direct animation-sequence playback in generated AnimBP graphs, then inspect the graph and compile the AnimBP before relying on the node at runtime.

Args: anim_blueprint_name: Animation Blueprint asset path or name. sequence_asset: Animation sequence asset path. graph_name: Optional graph name; defaults to the AnimGraph. node_position: Optional [X, Y] graph position. wire_to_root: Whether to wire the pose output directly to Root. loop: Whether the sequence player should loop.

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#animgraph-native-authoring Example: add_sequence_player_node(anim_blueprint_name="/Game/ABP_Enemy", sequence_asset="/Game/Anims/A_Idle")

connect_anim_graph_nodesA

Connect compatible pose pins between two AnimGraph nodes.

Use this after inspecting AnimGraph node IDs. Follow with AnimBP compile diagnostics and readback before treating the animation layer as proven.

Args: anim_blueprint_name: Animation Blueprint asset path or name. source_node_id: Source AnimGraph node GUID. target_node_id: Target AnimGraph node GUID. graph_name: Optional graph name; defaults to the AnimGraph.

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#animgraph-native-authoring Example: connect_anim_graph_nodes(anim_blueprint_name="/Game/ABP_Enemy", source_node_id="...", target_node_id="...")

insert_anim_graph_slotA

Insert a Slot node on the main AnimGraph between the current pose chain and Root.

Use this so PlaySlotAnimationAsDynamicMontage / montages targeting the same slot name layer aim and fire animations over locomotion from the state machine.

Args: anim_blueprint_name: AnimBP asset path or name (e.g. ABP_SithSoldier or full /Game/... path) slot_name: Anim slot name (default DefaultSlot — must match montage slot / blueprint calls) graph_name: Optional graph name; defaults to AnimGraph

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: insert_anim_graph_slot(anim_blueprint_name="/Game/MCP_Test/BP_Example")

add_anim_notifyA

Add an Anim Notify or Notify State to an Animation Sequence or Montage.

Args: animation_path: Full asset path (e.g. /Game/Characters/Run.Run) notify_name: Event name to trigger from the AnimBP time: Time in seconds notify_type: "notify" or "notify_state" notify_state_duration: Duration for notify_state entries

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_anim_notify(animation_path="/Game/MCP_Test/Example", notify_name="ExampleName")

anim_create_montageA

Create an Animation Montage asset from a source AnimSequence or Skeleton.

Args: montage_name: New montage asset name folder_path: Content Browser destination folder source_animation_path: Optional AnimSequence used to seed the first slot skeleton_path: Optional Skeleton; required when source_animation_path is empty slot_name: Initial montage slot section_name: Initial section name overwrite: Replace an existing asset with the same name save: Save the asset after creation play_rate: Playback rate for the seeded segment loop_count: Loop count for the seeded segment

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: anim_create_montage(montage_name="ExampleName")

anim_describe_montageA

Inspect a Montage's slots, segments, sections, and notifies.

Args: montage_path: Full montage asset path

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: anim_describe_montage(montage_path="/Game/MCP_Test/Example")

anim_add_montage_slotA

Add or update a slot on an Animation Montage, optionally adding a segment.

Args: montage_path: Full montage asset path slot_name: Slot name to create or update source_animation_path: Optional AnimSequence/AnimSequenceBase to add as a segment start_time: Segment start time in montage seconds play_rate: Segment playback rate loop_count: Segment loop count replace_existing: Clear existing segments on the slot before adding save: Save the montage after editing

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: anim_add_montage_slot(montage_path="/Game/MCP_Test/Example", slot_name="ExampleName")

anim_set_montage_sectionA

Create or reposition a Montage section and optionally set its next section.

Args: montage_path: Full montage asset path section_name: Section name start_time: Section start time in seconds next_section_name: Optional next section for looping/chaining save: Save the montage after editing

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: anim_set_montage_section(montage_path="/Game/MCP_Test/Example", section_name="ExampleName")

anim_add_branching_pointB

Add a Montage Branching Point backed by a branching AnimNotify event.

Args: montage_path: Full montage asset path branching_point_name: Branching event name time: Time in seconds notify_type: "notify" or "notify_state" notify_state_duration: Duration for notify_state entries save: Save the montage after editing

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: anim_add_branching_point(montage_path="/Game/MCP_Test/Example", branching_point_name="ExampleName")

insert_blend_bool_fire_before_slotA

Insert Blend List By Bool + Sequence Player between locomotion and the AnimGraph Slot (requires insert_anim_graph_slot first: Root ← Slot ← …).

Locomotion feeds the false branch; sequence_asset (e.g. fire rifle) feeds the true branch. bind_bool_variable (default bIsShooting) auto-binds Active Value when the editor plugin supports it. force_insert=True layers a NEW BlendListByBool above an existing one (chain multiple gates, e.g. bIsInAir → jump on top of bIsShooting → fire). Default rebinds the existing node instead.

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: insert_blend_bool_fire_before_slot(anim_blueprint_name="/Game/MCP_Test/BP_Example", sequence_asset="/Game/MCP_Test/Example")

create_character_animation_setupB

Create a complete character Animation Blueprint with:

  • Speed and IsJumping variables

  • Idle, Walk, Run, and Jump states

  • Transitions based on Speed and jump state

Args: anim_blueprint_name: Animation Blueprint name skeleton: Skeleton asset path

Returns: Dict with creation results

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: create_character_animation_setup(anim_blueprint_name="/Game/MCP_Test/BP_Example")

control_rig_createA

Create a Control Rig Blueprint asset, optionally seeded from a Skeletal Mesh.

Args: rig_name: New Control Rig asset name folder_path: Content Browser destination folder skeletal_mesh_path: Optional Skeletal Mesh used as preview mesh and bone source modular_rig: Create as a modular rig when supported by the engine version import_bones: Import bones from the Skeletal Mesh into the rig hierarchy overwrite: Delete and replace an existing Control Rig asset save: Save the asset after creation

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: control_rig_create(rig_name="ExampleName")

control_rig_describeA

Inspect a Control Rig hierarchy, preview mesh, controls, bones, and nulls.

Args: rig_path: Full Control Rig asset path include_names: Include element name lists in the result

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: control_rig_describe(rig_path="/Game/MCP_Test/Example")

control_rig_add_controlA

Add an animation control to a Control Rig hierarchy.

Args: rig_path: Full Control Rig asset path control_name: New control element name parent_name: Optional parent element name parent_type: BONE, NULL, or CONTROL control_type: EULER_TRANSFORM, POSITION, ROTATOR, FLOAT, BOOL, SCALE, or VECTOR2D shape_name: Control shape name from the Control Rig shape library shape_color: Optional RGBA list, 0-1 floats location: Optional XYZ default location rotation: Optional Pitch/Yaw/Roll default rotation scale: Optional XYZ default scale default_float: Default value for FLOAT/SCALE_FLOAT controls default_bool: Default value for BOOL controls save: Save the asset after editing

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: control_rig_add_control(rig_path="/Game/MCP_Test/Example", control_name="ExampleName")

control_rig_add_constraintA

Add a Control Rig hierarchy parent or available-space constraint.

Args: rig_path: Full Control Rig asset path child_name: Child element name parent_name: Parent/space element name child_type: CONTROL, BONE, or NULL parent_type: BONE, NULL, or CONTROL constraint_type: "parent" for weighted hierarchy parent, "space" for available space weight: Parent weight for parent constraints maintain_global_transform: Preserve child global transform when adding parent display_label: Optional label shown for a space/parent relationship save: Save the asset after editing

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: control_rig_add_constraint(rig_path="/Game/MCP_Test/Example", child_name="ExampleName", parent_name="ExampleName")

control_rig_bake_to_sequenceA

Bake a Sequencer skeletal binding to a Control Rig track when binding context exists.

This is a guarded adapter over Unreal's ControlRigSequencerLibrary. It validates the Level Sequence, Control Rig, and binding name before invoking the bake call.

Args: level_sequence_path: LevelSequence asset containing the skeletal binding control_rig_path: Control Rig Blueprint asset to bake onto binding_display_name: Display name of the Sequencer binding to bake reduce_keys: Run key reduction during bake tolerance: Key reduction tolerance reset_controls: Reset controls to their initial value on each baked frame

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: control_rig_bake_to_sequence()

create_ik_rigA

Create an IK Rig asset for a Skeletal Mesh.

IK Rigs define retarget chains (bone chains like Spine, LeftArm, RightLeg) and are required by the IK Retargeter. This tool uses the UE5 Python API (unreal.IKRigController) via exec_python.

Typical workflow:

  1. create_ik_rig for source skeleton (e.g. Mannequin)

  2. create_ik_rig for target skeleton (e.g. your custom character)

  3. create_ik_retargeter linking source → target

  4. batch_retarget_animations to export retargeted animations

Args: ik_rig_name: Asset name, e.g. "IKR_Mannequin" skeletal_mesh_path: Full content path, e.g. "/Game/Characters/Mannequin/SK_Mannequin" path: Destination content-browser folder auto_generate_chains: If True, calls apply_auto_generated_retarget_definition to auto-detect spine / limb chains (recommended for humanoid skeletons). Set False for custom chain setup.

Returns: dict with keys: success, asset_path, message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: create_ik_rig(ik_rig_name="ExampleName", skeletal_mesh_path="/Game/MCP_Test/Example")

add_ik_rig_retarget_chainA

Add a named retarget chain to an existing IK Rig asset.

Retarget chains map a contiguous range of bones (e.g. "Spine" from pelvis → chest, or "LeftArm" from shoulder → hand) so the IK Retargeter knows how to transfer motion from source to target.

Call this after create_ik_rig when auto_generate_chains=False, or to add extra chains the auto-generator missed.

Args: ik_rig_name: Asset name (e.g. "IKR_MyCharacter") ik_rig_path: Content folder (e.g. "/Game/Animation/IKRigs") chain_name: Logical name for the chain (e.g. "Spine", "LeftArm") start_bone: Root bone of the chain (e.g. "spine_01") end_bone: Leaf bone of the chain (e.g. "spine_05") ik_goal_name: Optional IK goal name to attach to the chain end bone

Returns: dict with keys: success, chain_name, message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: add_ik_rig_retarget_chain(ik_rig_name="ExampleName", ik_rig_path="/Game/MCP_Test/Example", chain_name="ExampleName", start_bone="Example", end_bone="Example")

set_ik_rig_retarget_rootA

Set the retarget root bone on an IK Rig.

The retarget root is typically the pelvis/hips bone. It is used by the IK Retargeter to align the global position of source and target characters.

Args: ik_rig_name: Asset name (e.g. "IKR_MyCharacter") ik_rig_path: Content folder (e.g. "/Game/Animation/IKRigs") root_bone: Bone name to use as retarget root (e.g. "pelvis")

Returns: dict with keys: success, message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: set_ik_rig_retarget_root(ik_rig_name="ExampleName", ik_rig_path="/Game/MCP_Test/Example", root_bone="Example")

create_ik_retargeterA

Create an IK Retargeter asset that maps animations from a source skeleton to a target skeleton.

Requires that both source and target IK Rig assets already exist (use create_ik_rig first). This is the equivalent of the UE5 editor "Create IK Retargeter" workflow.

Typical workflow:

  1. create_ik_rig (source)

  2. create_ik_rig (target)

  3. create_ik_retargeter ← this tool

  4. batch_retarget_animations

Args: retargeter_name: Asset name (e.g. "RTG_Mannequin_To_MyChar") source_ik_rig_path: Full content path to source IK Rig (e.g. "/Game/Animation/IKRigs/IKR_Mannequin") target_ik_rig_path: Full content path to target IK Rig (e.g. "/Game/Animation/IKRigs/IKR_MyCharacter") path: Destination content-browser folder auto_map_chains: Automatically map chain pairs by name similarity auto_align_bones: Automatically align A-pose / T-pose between skeletons

Returns: dict with keys: success, asset_path, message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: create_ik_retargeter(retargeter_name="ExampleName", source_ik_rig_path="/Game/MCP_Test/Example", target_ik_rig_path="/Game/MCP_Test/Example")

batch_retarget_animationsA

Retarget a list of animation sequences using an existing IK Retargeter.

This is the programmatic equivalent of the UE5 editor "Retarget Animations → Export Animations" workflow (Method 1 / quick path).

After setting up the IK Retargeter once (create_ik_retargeter), call this tool to batch-export retargeted copies of all your animations.

Args: retargeter_path: Full content path to the IKRetargeter asset (e.g. "/Game/Animation/Retargeters/RTG_Mannequin_To_MyChar") source_animation_paths: List of animation sequence content paths to retarget (e.g. ["/Game/Animations/Walk", "/Game/Animations/Run"]) output_path: Destination folder for retargeted animations (e.g. "/Game/Characters/MyChar/Animations") output_suffix: Suffix appended to each output asset name (default "_Retargeted") use_existing_if_found: Skip retargeting if the output asset already exists

Returns: dict with keys: success, retargeted (count), skipped (count), failed (count), output (raw UE5 log)

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: batch_retarget_animations(retargeter_path="/Game/MCP_Test/Example", source_animation_paths="/Game/MCP_Test/Example", output_path="/Game/MCP_Test/Example")

setup_full_retargeting_pipelineA

One-shot pipeline: create IK Rigs for source + target, create IK Retargeter, and optionally batch-retarget a list of animations.

This matches Method 2 (Manual IK Retargeting) described in the UE5 docs:

  1. Create IK Rig for source skeleton (auto-generate chains)

  2. Create IK Rig for target skeleton (auto-generate chains)

  3. Create IK Retargeter (source → target, auto-map chains + auto-align)

  4. Export retargeted animations

If all your characters share an identical skeleton (same bone names and hierarchy) you can skip this and use the quick-retarget workflow in the editor; but this pipeline handles mis-matched bone structures.

Args: source_skeletal_mesh: Content path to source Skeletal Mesh (e.g. "/Game/Characters/Mannequin/SK_Mannequin") target_skeletal_mesh: Content path to target Skeletal Mesh (e.g. "/Game/Dantooine/Art/Characters/Player/SK_Player") source_ik_rig_name: Name for source IK Rig asset (e.g. "IKR_Mannequin") target_ik_rig_name: Name for target IK Rig asset (e.g. "IKR_Player") retargeter_name: Name for IK Retargeter asset (e.g. "RTG_Mannequin_To_Player") ik_rig_path: Folder for IK Rig assets retargeter_path: Folder for IK Retargeter asset animations_to_retarget: Optional list of animation content paths to retarget immediately after setup output_animation_path: Output folder for retargeted animations

Returns: dict with keys: success, steps (dict of per-step results), message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: setup_full_retargeting_pipeline(source_skeletal_mesh="Example", target_skeletal_mesh="Example", source_ik_rig_name="ExampleName", target_ik_rig_name="ExampleName", retargeter_name="ExampleName")

get_skeleton_bone_namesA

List all bone names in a Skeletal Mesh's skeleton.

Use this before setting up an IK Rig to discover the exact bone names required for retarget chains (start_bone / end_bone parameters).

Args: skeletal_mesh_path: Content path to the Skeletal Mesh (e.g. "/Game/Characters/Player/SK_Player")

Returns: dict with keys: success, bone_count, bone_names (list of strings), message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: get_skeleton_bone_names(skeletal_mesh_path="/Game/MCP_Test/Example")

retarget_single_animationA

Retarget a single animation sequence using an existing IK Retargeter.

Convenience wrapper around batch_retarget_animations for single assets. Useful for quick tests before running the full batch.

Args: retargeter_path: Full content path to the IKRetargeter asset source_animation_path: Content path of the source animation output_path: Destination folder for the retargeted animation output_name: Output asset name (default: source name + "_Retargeted") overwrite: If True, overwrite an existing output asset

Returns: dict with keys: success, output_asset_path, message

KB: see knowledge_base/05_ANIMATION_SYSTEM.md#overview Example: retarget_single_animation(retargeter_path="/Game/MCP_Test/Example", source_animation_path="/Game/MCP_Test/Example", output_path="/Game/MCP_Test/Example")

motion_create_pose_search_schemaA

Create a Pose Search schema asset for Motion Matching databases.

Args: name: Asset name to create. path: Content Browser folder under /Game. skeleton: Optional Skeleton or Skeletal Mesh asset used to seed the schema. sample_rate: Pose sampling rate in Hz. add_default_channels: Add UE's default Pose Search feature channels. overwrite: Delete an existing schema asset before creation. save: Save the asset package after creation.

Returns: Structured JSON with schema asset path, skeletons, sample rate, and channel count.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: motion_create_pose_search_schema(name="PSS_Locomotion", skeleton="/Game/Characters/Hero/SK_Hero")

motion_create_pose_search_databaseA

Create a Pose Search database asset and optionally seed animation sequences.

Args: name: Asset name to create. schema: Pose Search schema asset path. path: Content Browser folder under /Game. sequences: Optional AnimSequence asset paths to add to the database. search_mode: Search mode, such as pca_kd_tree, brute_force, vp_tree, or event_only. overwrite: Delete an existing database asset before creation. save: Save the asset package after creation.

Returns: Structured JSON with database path, schema, search mode, tags, and animation assets.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: motion_create_pose_search_database(name="PSD_Locomotion", schema="/Game/Animation/MotionMatching/PSS_Locomotion")

motion_add_database_sequenceA

Add an AnimSequence entry to a Pose Search database.

Args: database: Pose Search database asset path. sequence: AnimSequence asset path to add. enabled: Whether the database entry participates in search. disable_reselection: Prevent immediate reselection of the same source asset. mirror_option: unmirrored, mirrored_only, or both. sampling_range: Optional [start_seconds, end_seconds] trim range; [0, 0] means full asset. save: Save the database asset after mutation.

Returns: Structured JSON with the added sequence and updated database summary.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: motion_add_database_sequence(database="/Game/Animation/MotionMatching/PSD_Locomotion", sequence="/Game/Characters/Hero/Animations/A_Run")

motion_inspect_pose_search_assetA

Inspect a Pose Search schema or database asset.

Args: asset: Pose Search schema or database asset path.

Returns: Structured JSON with schema channels or database animation assets.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: motion_inspect_pose_search_asset(asset="/Game/Animation/MotionMatching/PSD_Locomotion")

chooser_create_tableA

Create a Chooser table configured for object asset results.

Args: name: Asset name to create. path: Content Browser folder under /Game. result_class: Output object class path or class name. overwrite: Delete an existing Chooser table before creation. save: Save the asset package after creation.

Returns: Structured JSON with Chooser path, result class, rows, and columns.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: chooser_create_table(name="CH_Locomotion", result_class="/Script/Engine.AnimationAsset")

chooser_add_asset_rowA

Add a hard asset result row to a Chooser table.

Args: chooser: Chooser table asset path. asset: Asset path to use as the row result. enabled: Whether the row is enabled. save: Save the Chooser table after mutation.

Returns: Structured JSON with the added asset, row index, and updated row list.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: chooser_add_asset_row(chooser="/Game/Animation/Choosers/CH_Locomotion", asset="/Game/Characters/Hero/Animations/A_Run")

chooser_inspect_tableA

Inspect a Chooser table's rows, columns, and result settings.

Args: chooser: Chooser table asset path.

Returns: Structured JSON with result type, output class, rows, and columns.

KB: see knowledge_base/24_MOTION_MATCHING_AND_CHOOSERS.md#mcp-motion-matching-and-chooser-tools Example: chooser_inspect_table(chooser="/Game/Animation/Choosers/CH_Locomotion")

metahuman_importC

Register an assembled MetaHuman package and scan its imported asset tree.

KB: see knowledge_base/27_METAHUMAN_PIPELINE.md#mcp-metahuman-tools Example: metahuman_import(character_name="Ada", metahuman_root="/Game/MetaHumans/Ada")

metahuman_inspect_packageB

Inspect a registered MetaHuman manifest and scan its package assets.

KB: see knowledge_base/27_METAHUMAN_PIPELINE.md#mcp-metahuman-tools Example: metahuman_inspect_package(character_name="Ada", metahuman_root="/Game/MetaHumans/Ada")

metahuman_link_to_skeletonC

Link a MetaHuman package to body skeleton, IK, retargeting, and animation assets.

KB: see knowledge_base/27_METAHUMAN_PIPELINE.md#mcp-metahuman-tools Example: metahuman_link_to_skeleton(character_name="Ada", body_skeletal_mesh="/Game/MetaHumans/Ada/Body/SK_Ada_Body")

metahuman_assign_dnaC

Assign DNA, face mesh, and rig logic metadata for a MetaHuman package.

KB: see knowledge_base/27_METAHUMAN_PIPELINE.md#mcp-metahuman-tools Example: metahuman_assign_dna(character_name="Ada", dna_asset="/Game/MetaHumans/Ada/Face/Ada_DNA")

metahuman_configure_wrapperB

Configure wrapper Blueprint metadata for a MetaHuman gameplay character.

KB: see knowledge_base/27_METAHUMAN_PIPELINE.md#mcp-metahuman-tools Example: metahuman_configure_wrapper(character_name="Ada", wrapper_blueprint="/Game/Characters/BP_AdaWrapper")

create_behavior_treeB

Create a Behavior Tree asset.

Behavior Trees define AI decision-making using a tree of Tasks, Composites (Sequence/Selector), Decorators, and Services.

Args: name: Behavior Tree asset name (e.g., "BT_EnemyAI") path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_behavior_tree(name="ExampleName")

create_blackboardB

Create a Blackboard asset.

The Blackboard is the AI's shared memory - it stores data that the Behavior Tree reads and writes during execution.

Args: name: Blackboard asset name (e.g., "BB_EnemyAI") keys: List of key dicts: [{"name": "TargetActor", "type": "Object"}, {"name": "PatrolLocation", "type": "Vector"}, {"name": "bIsAlerted", "type": "Boolean"}, {"name": "Health", "type": "Float"}] path: Content browser path

Key types: Object, Actor, Class, Enum, Float, Int, Bool (Boolean), String, Name, Vector, Rotator

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_blackboard(name="ExampleName")

set_behavior_tree_blackboardA

Assign a Blackboard asset to a Behavior Tree.

Behavior Trees should have one explicit Blackboard source of truth for target, patrol, perception, and combat state. Use this after creating or repairing BT/Blackboard assets, then inspect the tree before adding decorators, services, or EQS tasks that depend on keys.

Args: behavior_tree_name: Behavior Tree asset name, e.g. BT_EnemyAI blackboard_name: Blackboard asset name, e.g. BB_EnemyAI

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: set_behavior_tree_blackboard(behavior_tree_name="BT_EnemyAI", blackboard_name="BB_EnemyAI")

create_ai_controllerB

Create an AIController Blueprint.

The AIController possesses an AI Pawn and runs its Behavior Tree.

Args: name: Blueprint name (e.g., "BP_EnemyAIController") behavior_tree: Behavior Tree asset name to run automatically auto_run_bt: Automatically run the behavior tree on possession

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_ai_controller(name="ExampleName")

create_bt_taskB

Create a Behavior Tree Task Blueprint.

BT Tasks are the leaf nodes of the Behavior Tree - they perform actual actions (move to location, attack, play animation, etc.). Override ExecuteTask and FinishExecute.

Args: name: Task Blueprint name (e.g., "BTT_AttackPlayer") task_description: Description for the task node path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_bt_task(name="ExampleName")

create_bt_decoratorA

Create a Behavior Tree Decorator Blueprint.

Decorators are conditions attached to BT nodes - they control whether a branch can execute or abort. Override PerformConditionCheck.

Args: name: Decorator Blueprint name (e.g., "BTD_CanSeePlayer") path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_bt_decorator(name="ExampleName")

create_bt_serviceA

Create a Behavior Tree Service Blueprint.

Services run on a tick while their parent node is active - used to update Blackboard values (perception, distance checks, etc.). Override ReceiveTick.

Args: name: Service Blueprint name (e.g., "BTS_UpdateTarget") tick_interval: How often the service ticks in seconds path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_bt_service(name="ExampleName")

eqs_create_queryA

Create an Environment Query System (EQS) query asset.

Use follow-up eqs_add_generator and eqs_add_test calls to define what locations or actors the query considers and how it scores them.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: eqs_create_query(query_name="ExampleName")

eqs_describe_queryA

Describe an EQS query's options, generator classes, and tests.

query_path may be a content path such as /Game/AI/EQS_FindCover or a query asset name when it is unique in the project.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: eqs_describe_query(query_path="/Game/MCP_Test/Example")

eqs_add_generatorA

Add or replace an EQS option generator.

Supported generator_type values: simple_grid, circle, donut, current_location, and actors_of_class. Passing option_index=-1 creates a new option.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: eqs_add_generator(query_path="/Game/MCP_Test/Example")

eqs_add_testA

Add an EQS test to an existing option.

Supported test_type values: distance, pathfinding, dot, and trace. Create or choose an option with eqs_add_generator first.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: eqs_add_test(query_path="/Game/MCP_Test/Example")

bt_add_run_eqs_serviceA

Attach or update a built-in Run EQS service on a Behavior Tree node.

The service runs an EQS query while its parent branch is active and writes the selected result into a Blackboard key.

Args: behavior_tree_name: Existing Behavior Tree asset name query_path: EQS query path or unique asset name result_key: Blackboard key that receives the query result parent_node_index: 0-based non-root BT node index; -1 targets first non-root node run_mode: single_result, random_best_5_pct, random_best_25_pct, or all_matching update_bb_on_fail: Whether failed queries also update the Blackboard interval: Service tick interval in seconds update_existing: Update an existing Run EQS service on the parent if present

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: bt_add_run_eqs_service(behavior_tree_name="ExampleName", query_path="/Game/MCP_Test/Example", result_key="ExampleName")

perception_add_componentB

Add or find an AIPerceptionComponent on a Blueprint.

This is usually placed on an AIController Blueprint so the controller can sense actors and feed Blackboard/Behavior Tree state.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_add_component(blueprint_name="/Game/MCP_Test/BP_Example")

perception_configure_sightC

Add or update the Sight sense config on an AIPerceptionComponent.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_configure_sight(blueprint_name="/Game/MCP_Test/BP_Example")

perception_configure_hearingC

Add or update the Hearing sense config on an AIPerceptionComponent.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_configure_hearing(blueprint_name="/Game/MCP_Test/BP_Example")

perception_create_stimulus_sourceC

Add or configure an AIPerceptionStimuliSourceComponent on a Blueprint.

Typical senses are sight and hearing.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_create_stimulus_source(blueprint_name="/Game/MCP_Test/BP_Example")

perception_bind_updated_eventC

Add a component-bound AI Perception update event node to a Blueprint.

Common event_name values are OnTargetPerceptionUpdated, OnPerceptionUpdated, and OnTargetPerceptionForgotten.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_bind_updated_event(blueprint_name="/Game/MCP_Test/BP_Example")

perception_describe_blueprintB

Describe AI Perception and stimuli source components on a Blueprint.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: perception_describe_blueprint(blueprint_name="/Game/MCP_Test/BP_Example")

nav_create_link_proxyA

Spawn a NavLinkProxy and configure its point link endpoints.

Args: actor_name: Actor label/name for the proxy left: Local or world-space left endpoint right: Local or world-space right endpoint location: Actor location when endpoints are local endpoints_are_world: Treat left/right as world positions and center the actor between them direction: both, left_to_right, or right_to_left area_class: Nav area class name/path, e.g. default, NavArea_Null, NavArea_Obstacle smart_link_enabled: Enable the proxy smart link component rebuild: Rebuild navigation after spawning

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: nav_create_link_proxy()

nav_add_modifier_volumeB

Spawn a NavModifierVolume with the requested nav area class.

Use NavArea_Null to block navigation, NavArea_Obstacle for high traversal cost, or a custom UNavArea path/name from the project.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: nav_add_modifier_volume()

nav_describe_agent_settingsA

Describe supported navigation agents, nav data actors, and nav helper counts.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: nav_describe_agent_settings()

crowd_configure_rvoC

Configure CharacterMovement RVO avoidance defaults on a Character Blueprint.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: crowd_configure_rvo(blueprint_name="/Game/MCP_Test/BP_Example")

crowd_configure_detourB

Configure Detour crowd options when an AIController already uses UCrowdFollowingComponent.

If the Blueprint still uses the default PathFollowingComponent, the native command returns structured guidance because that inherited subobject must be selected in a native AIController constructor.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: crowd_configure_detour()

gameplay_debugger_capture_aiB

Capture an AI/navigation debug snapshot from the current editor world.

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: gameplay_debugger_capture_ai()

add_move_to_nodeB

Add a 'AI Move To' function call node.

Args: blueprint_name: Blueprint (usually AIController or BTTask) acceptance_radius: How close AI needs to get to destination node_position: Optional graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_move_to_node(blueprint_name="/Game/MCP_Test/BP_Example")

set_blackboard_valueB

Add a 'Set Blackboard Value as [Type]' node.

Args: blueprint_name: Blueprint name (usually AIController or BTTask) key_name: Blackboard key name value_type: Value type ("Object", "Vector", "Bool", "Float", "Int", "String") node_position: Optional graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: set_blackboard_value(blueprint_name="/Game/MCP_Test/BP_Example", key_name="ExampleName", value_type=0.0)

create_full_enemy_aiA

Create a complete enemy AI setup including:

  • Enemy Character Blueprint

  • AIController Blueprint

  • Blackboard with appropriate keys

  • Behavior Tree with patrol/chase/attack logic

  • BT Tasks for each behavior

Args: enemy_name: Base name (e.g., "Enemy" creates BP_Enemy, BT_Enemy, etc.) has_patrol: Include patrol behavior has_chase: Include chase player behavior has_attack: Include attack behavior

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_full_enemy_ai(enemy_name="ExampleName")

create_bt_attack_taskA

Create a Behavior Tree Attack Task Blueprint.

Ch.10: BTTask_DoAttack that deals damage to the player.

  • TargetActorKey (BlackboardKeySelector) - instance editable

  • Damage (Float, instance editable, default 0.25 = 25% of player health)

  • Overrides ReceiveExecute: checks IsValid on target, calls Apply Damage, then calls FinishExecute(Success=true)

Args: name: Task Blueprint name (e.g., "BTTask_DoAttack") damage_variable: Name of the damage float variable default_damage: Default damage amount (0.0-1.0 normalized or raw) target_key_variable: Name of the BlackboardKeySelector variable path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_bt_attack_task()

add_pawn_sensing_componentA

Add a PawnSensing component to a Blueprint for AI perception.

Ch.10: PawnSensing enables enemies to both see and hear the player.

  • OnSeePawn and OnHearNoise events fire when player is detected.

  • HearingThreshold: detection radius for sound (default 1600 units)

  • SightRadius: max sight distance

  • PeripheralVisionAngle: field of view half-angle in degrees

Args: blueprint_name: Enemy character Blueprint hearing_threshold: Sound detection radius in cm see_pawns_in_dark: Whether to detect pawns in dark areas sight_radius: Max sight detection radius peripheral_vision_angle: Half-angle of sight cone in degrees

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_pawn_sensing_component(blueprint_name="/Game/MCP_Test/BP_Example")

add_on_see_pawn_eventA

Bind the 'On See Pawn' event from a PawnSensing component.

Ch.10: OnSeePawn fires when the AI spots the player in its sight cone. Wire this to set the PlayerCharacter blackboard key and update chase state.

Args: blueprint_name: Enemy Blueprint name pawn_sensing_component: Name of PawnSensing component node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_on_see_pawn_event(blueprint_name="/Game/MCP_Test/BP_Example")

add_on_hear_noise_eventA

Bind the 'On Hear Noise' event from a PawnSensing component.

Ch.10: OnHearNoise fires when the AI detects a sound within HearingThreshold. Event provides: PawnInstigator (who made the sound), Location (where), Loudness. Wire to UpdateSoundBB macro to store HasHeardSound=true and LocationOfSound.

Args: blueprint_name: Enemy AI Controller Blueprint pawn_sensing_component: Name of PawnSensing component node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_on_hear_noise_event(blueprint_name="/Game/MCP_Test/BP_Example")

add_report_noise_event_nodeA

Add a 'Report Noise Event' node (UAISense_Hearing).

Ch.10: Reports a noise to the AI perception system so PawnSensing can detect it. Used to make the player's actions (shooting, footsteps) audible to AI.

Args: blueprint_name: Blueprint name (usually player Character) loudness: How loud the noise is (0.0-1.0) max_range: Max range the noise can be heard (0 = use PawnSensing threshold) node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_report_noise_event_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_enemy_spawner_blueprintA

Create an Enemy Spawner Blueprint.

Ch.10: BP_EnemySpawner periodically spawns enemies in the level.

  • EnemyClass variable (class reference, instance editable)

  • MaxEnemies variable (int) - cap on simultaneous enemies

  • SpawnInterval variable (float) - seconds between spawns

  • SpawnRadius variable (float) - radius around spawner to place enemies

  • Timer-based spawning using Set Timer by Function Name

Args: name: Spawner Blueprint name enemy_class: Enemy Blueprint class to spawn max_enemies: Maximum simultaneous enemy count spawn_interval: Seconds between each spawn spawn_radius: Random placement radius around spawner path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_enemy_spawner_blueprint()

create_bt_wander_taskA

Create a Behavior Tree Task for random wandering.

Ch.10: BTTask_FindWanderPoint uses the Navigation system to find a random reachable location within a radius for enemy wandering behavior.

  • Uses GetRandomReachablePointInRadius

  • Sets the resulting Vector to a Blackboard key (e.g., WanderTarget)

  • Returns Success if a point is found, Failure otherwise

Args: name: Task Blueprint name wander_radius: Radius to search for random wander points path: Content browser path

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_bt_wander_task()

add_get_random_reachable_point_nodeA

Add a 'Get Random Reachable Point In Radius' node.

Ch.10: Used in wandering BT task to find a valid NavMesh location. Returns bReachable (bool) and RandomLocation (Vector). Wire to SetValueAsVector on blackboard to store the wander destination.

Args: blueprint_name: Blueprint name (usually BTTask Blueprint) radius: Search radius for random point node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_get_random_reachable_point_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_finish_execute_nodeA

Add a 'Finish Execute' node to a Behavior Tree Task Blueprint.

Ch.10: BTTask Blueprints must call FinishExecute to report success or failure back to the Behavior Tree. Call this at the end of ReceiveExecute.

Args: blueprint_name: BT Task Blueprint name success: True = task succeeded, False = task failed node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_finish_execute_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_blackboard_value_nodeA

Add a 'Get Blackboard Value as [Type]' node.

Ch.10: Used in BT Tasks to read data from the Blackboard. e.g., Get Blackboard Value as Actor to get the Target Actor reference.

Args: blueprint_name: Blueprint name (BT Task or AI Controller) key_name: Blackboard key name to read value_type: "Object", "Actor", "Vector", "Bool", "Float", "Int", "String" node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_get_blackboard_value_node(blueprint_name="/Game/MCP_Test/BP_Example", key_name="ExampleName")

add_clear_blackboard_value_nodeA

Add a 'Clear Blackboard Value' node (BTTask_ClearBBValue).

Ch.10: Used to reset blackboard keys like HasHeardSound after investigation is complete. Resets the value to its default (false/null/zero).

Args: blueprint_name: Blueprint or BT Task name key_name: Blackboard key to clear node_position: Optional [X, Y] graph position

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_clear_blackboard_value_node(blueprint_name="/Game/MCP_Test/BP_Example", key_name="ExampleName")

add_bt_blackboard_decoratorA

Add a Blackboard Decorator to a Behavior Tree sequence/task node.

Ch.10: Decorators are conditions that control whether a BT branch can execute. A Blackboard Decorator checks a key's value to allow or abort execution.

Args: behavior_tree_name: Behavior Tree asset name sequence_name: Name of the Sequence/Task node to decorate blackboard_key: Blackboard key to monitor (e.g., "HasHeardSound", "bCanSeePlayer") observer_aborts: "None", "Self", "LowerPriority", "Both" node_name: Display name for the decorator node

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_bt_blackboard_decorator(behavior_tree_name="ExampleName", sequence_name="ExampleName", blackboard_key="ExampleName")

create_full_upgraded_enemy_aiA

Create a complete upgraded enemy AI setup from Ch.9-10.

Builds:

  • Enemy Character Blueprint (with PawnSensing, health variables)

  • AI Controller Blueprint (runs BT, handles OnSeePawn/OnHearNoise)

  • Blackboard with all keys (PlayerCharacter, HasHeardSound, LocationOfSound, CurrentPatrolPoint, bCanSeePlayer)

  • Behavior Tree with Patrol/Chase/Attack/Investigate/Wander sequences

  • BTTask_DoAttack with configurable damage

  • BTTask_FindWanderPoint for random wandering

  • Enemy Spawner Blueprint for wave-based spawning

Args: enemy_name: Base name (creates BP_Enemy, BT_Enemy, BB_Enemy, etc.) has_patrol: Include patrol behavior with patrol points has_chase: Include player-chasing behavior has_attack: Include melee attack behavior has_hearing: Include sound-detection behavior has_wandering: Include random wandering behavior attack_damage: Damage dealt per attack (0.25 = 25% of health) hearing_distance: PawnSensing hearing radius in cm

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: create_full_upgraded_enemy_ai(enemy_name="ExampleName")

repair_behavior_treeA

Repair a corrupted Behavior Tree asset so it can be opened in the UE5 BT editor.

Two modes:

• fix_guids_only=True — non-destructive GUID rescue (try this FIRST). Walks every graph node and sub-node, assigning a fresh NodeGuid to any with an invalid (all-zero) one. Tree structure, classes, pins, decorators, services, and runtime properties are all preserved. This is the right choice for BT assets written by pre-BUG-043 plugin builds (their graph nodes have all-zero NodeGuids, which cause the BT editor to crash at 0x68 on open because its internal widget lookups key on NodeGuid).

• fix_guids_only=False (default) — destructive rebuild. Wipes all non-Root graph nodes and saves an empty Root-only BT. Use this ONLY if fix_guids_only=True did not resolve the crash — you will then need build_behavior_tree to repopulate the tree.

Args: behavior_tree_name: Name of the BT asset to repair (e.g. "BT_Enemy_Infantry") fix_guids_only: If True, only fill in missing NodeGuids (non-destructive). Default False (destructive).

Returns: Dict with 'success', 'behavior_tree', 'mode', plus • fix_guids_only: 'guids_fixed', 'guids_already_valid', 'node_count' • destructive: 'node_count_after_repair'

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: repair_behavior_tree(behavior_tree_name="ExampleName")

build_behavior_treeA

Build an entire Behavior Tree graph from a JSON description in one call.

This is the primary tool for creating BT logic. Pass the full tree as a nested JSON object and the C++ plugin will build every node, link pins, attach decorators/services, and save the asset.

Node type strings (case-insensitive): Composites : "Selector", "Sequence" Tasks : "Wait", "MoveTo" Custom : full class name e.g. "BTTask_MyCustomTask" or Blueprint path

Tree format: { "type": "Selector", "children": [ { "type": "Sequence", "decorators": [{"type": "BTDecorator_Blackboard", "properties": {...}}], "services": [{"type": "BTService_DefaultFocus"}], "children": [ {"type": "MoveTo", "properties": {"AcceptableRadius": "50.0"}}, {"type": "Wait", "properties": {"WaitTime": "2.0"}} ] } ] }

Args: behavior_tree_name: Name of an EXISTING BT asset (create_behavior_tree first) tree: Root node JSON object (see format above) clear_existing: If True (default), remove all non-root nodes first

Returns: Dict with 'success', 'behavior_tree', 'nodes_created', 'nodes' list

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: build_behavior_tree(behavior_tree_name="ExampleName", tree=[])

add_bt_nodeA

Add a single node to an existing Behavior Tree graph.

Use this for incremental edits — add one node at a time after the initial tree is built with build_behavior_tree.

Node type strings (case-insensitive): "Selector", "Sequence", "Wait", "MoveTo" or a full Blueprint class name/path for custom tasks.

Args: behavior_tree_name: Name of the existing BT asset node_type: Node type string (see above) parent_node_index: 0-based index in the graph Nodes array (skip root). -1 = attach directly to root. x: Graph X position (0 = auto) y: Graph Y position (0 = auto) properties: Dict of property name → string value for the node instance e.g. {"WaitTime": "3.0", "AcceptableRadius": "100.0"} decorators: List of {"type": "..."} objects for decorator sub-nodes services: List of {"type": "..."} objects for service sub-nodes

Returns: Dict with 'success', 'node_type', 'node_index'

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: add_bt_node(behavior_tree_name="ExampleName", node_type="Example")

get_bt_graph_infoA

Inspect the current state of a Behavior Tree graph.

Returns every node in the BT graph with its type, position, instance class, pin connections, and sub-nodes (decorators/services). Use this to verify build_behavior_tree or add_bt_node worked correctly.

Args: behavior_tree_name: Name of the BT asset to inspect

Returns: Dict with 'success', 'node_count', 'nodes' array where each node has: - 'class': graph node class name - 'instance': runtime BTNode class name - 'x', 'y': graph position - 'pins': pin names and connections - 'subnodes': decorator/service sub-nodes

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: get_bt_graph_info(behavior_tree_name="ExampleName")

bt_get_infoA

Inspect a Behavior Tree graph using the native bridge alias.

This read-only wrapper is useful for discovery-before-mutation flows: call it before and after changing BT structure or Blackboard assignment so the IDE companion can prove what changed and keep AI state readable.

Args: behavior_tree_name: Name of the BT asset to inspect

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: bt_get_info(behavior_tree_name="BT_EnemyAI")

bt_add_selector_waitA

Quick-build: add a root Selector with a single Wait task.

This is a shortcut for the most basic "idle" behavior tree structure: Root → Selector → Wait(wait_time)

Use build_behavior_tree for full tree construction. This is a convenience tool for testing or placeholder BTs.

Args: behavior_tree_name: Name of the existing BT asset wait_time: Wait duration in seconds (default 1.0)

Returns: Dict with 'success', 'behavior_tree'

KB: see knowledge_base/04_AI_SYSTEMS.md#overview Example: bt_add_selector_wait(behavior_tree_name="ExampleName")

create_structA

Create a custom Struct asset.

Structs group related variables together into a single data type, making it easy to pass multiple values as one parameter.

Args: struct_name: Struct name (e.g., "S_PlayerData") fields: List of field dicts: [{"name": "Health", "type": "Float"}, {"name": "PlayerName", "type": "String"}, {"name": "Score", "type": "Integer"}] path: Content browser path

Field types: Boolean, Integer, Float, Double, String, Name, Text, Vector, Rotator, Transform, Color, LinearColor

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: create_struct(struct_name="ExampleName", fields=[])

create_enumA

Create a custom Enumeration (Enum) asset.

Enums represent a named set of options, perfect for states, types, and categories. Use with Switch on Enum nodes.

Args: enum_name: Enum name (e.g., "EWeaponType", "EGameState") values: List of enum value names: ["Pistol", "Rifle", "Shotgun", "Sniper"] path: Content browser path

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: create_enum(enum_name="ExampleName", values=0.0)

create_data_tableB

Create a DataTable asset.

DataTables are spreadsheet-like assets that store rows of structured data defined by a Struct. Ideal for item databases, enemy stats, level config.

Args: table_name: DataTable asset name (e.g., "DT_WeaponStats") row_struct: Struct asset name defining row structure path: Content browser path

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: create_data_table(table_name="ExampleName", row_struct="Example")

add_array_variableB

Add an Array variable to a Blueprint.

Arrays are ordered, indexed lists of elements of the same type.

Args: blueprint_name: Blueprint name variable_name: Variable name element_type: Element type (Boolean, Integer, Float, String, Vector, etc.) is_exposed: Expose to editor Details panel

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_array_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", element_type="Example")

add_map_variableB

Add a Map (dictionary) variable to a Blueprint.

Maps store key-value pairs with O(1) lookup by key.

Args: blueprint_name: Blueprint name variable_name: Variable name key_type: Key type (String, Name, Integer, etc.) value_type: Value type (Integer, Float, String, Vector, etc.) is_exposed: Expose to editor Details panel

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_map_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", key_type="ExampleName", value_type=0.0)

add_set_variableA

Add a Set variable to a Blueprint.

Sets store unique, unordered elements - useful when you need to track membership without duplicates.

Args: blueprint_name: Blueprint name variable_name: Variable name element_type: Element type (Integer, String, Name, etc.) is_exposed: Expose to editor Details panel

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", element_type="Example")

add_switch_on_int_nodeA

Add a 'Switch on Int' flow control node.

Routes execution to different paths based on an integer value.

Args: blueprint_name: Blueprint name cases: List of integer case values [0, 1, 2, 3] node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; output pins named by case value + 'Default'

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_switch_on_int_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_switch_on_string_nodeA

Add a 'Switch on String' flow control node.

Routes execution based on a string value comparison.

Args: blueprint_name: Blueprint name cases: List of string case values ["Walking", "Running", "Dead"] node_position: Optional [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_switch_on_string_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_switch_on_enum_nodeA

Add a 'Switch on [EnumType]' flow control node.

Routes execution based on an enum value - creates one output pin per enum value.

Args: blueprint_name: Blueprint name enum_type: Enum class name (e.g., "EWeaponType", "EMovementState") node_position: Optional [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_switch_on_enum_node(blueprint_name="/Game/MCP_Test/BP_Example", enum_type=1)

add_multigate_nodeA

Add a MultiGate flow control node.

MultiGate sends execution through multiple output pins in sequence (or randomly), optionally looping back to the start.

Args: blueprint_name: Blueprint name num_outputs: Number of output pins is_random: Randomize execution order loop: Loop after reaching the last output node_position: Optional [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_multigate_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_for_each_loop_nodeB

Add a 'For Each Loop' node (iterates over an Array).

Args: blueprint_name: Blueprint name with_break: Include a Break input to exit early node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; pins: 'Array' input, 'Loop Body'/'Completed' outputs, 'Array Element' and 'Array Index' loop body outputs

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_for_each_loop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_contains_nodeA

Add a Set CONTAINS node to check if an element exists in a Set.

From Ch. 13: Returns True if the set contains the specified element.

Args: blueprint_name: Blueprint to add the node to set_variable: Set variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_contains_node(blueprint_name="/Game/MCP_Test/BP_Example", set_variable="ExampleName")

add_set_union_nodeA

Add a Set UNION node - combine two sets (removes duplicates).

From Ch. 13: Returns a new set containing all elements from both sets.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_union_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_intersection_nodeA

Add a Set INTERSECTION node - elements common to both sets.

From Ch. 13: Returns elements that exist in BOTH input sets.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_intersection_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_difference_nodeA

Add a Set DIFFERENCE node - elements in first set but not in second.

From Ch. 13: Returns elements from set A that are NOT in set B.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_difference_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_to_array_nodeA

Add a Set TO ARRAY node - convert a Set to an Array for iteration.

From Ch. 13: Sets don't have a GET element node, so convert to array first if you need to iterate over elements. Note: copying large object sets can be expensive.

Args: blueprint_name: Blueprint to add the node to set_variable: Set variable name to convert node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_set_to_array_node(blueprint_name="/Game/MCP_Test/BP_Example", set_variable="ExampleName")

add_make_set_nodeA

Add a Make Set node to create a Set from individual variables.

From Ch. 13: Similar to Make Array but creates a Set (no duplicates).

Args: blueprint_name: Blueprint to add the node to element_type: Element type for the Set num_pins: Number of input element pins node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_make_set_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_map_find_nodeA

Add a Map FIND node - get a value by key (also checks key existence).

From Ch. 13: The FIND node is like CONTAINS but also returns the value. Returns the Value associated with the key, and a bool indicating if the key was found.

Args: blueprint_name: Blueprint to add the node to map_variable: Map variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_map_find_node(blueprint_name="/Game/MCP_Test/BP_Example", map_variable="ExampleName")

add_map_contains_nodeA

Add a Map CONTAINS node - check if a key exists in a Map.

From Ch. 13: Returns True if the Map contains an element with the given key. Does NOT return the value (use FIND for that).

Args: blueprint_name: Blueprint to add the node to map_variable: Map variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_map_contains_node(blueprint_name="/Game/MCP_Test/BP_Example", map_variable="ExampleName")

add_map_keys_nodeA

Add a Map KEYS node - copy all Map keys to an Array.

From Ch. 13: Returns an array of all keys in the map. Used to iterate over all entries in the map.

Args: blueprint_name: Blueprint to add the node to map_variable: Map variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_map_keys_node(blueprint_name="/Game/MCP_Test/BP_Example", map_variable="ExampleName")

add_map_values_nodeA

Add a Map VALUES node - copy all Map values to an Array.

From Ch. 13: Returns an array of all values in the map.

Args: blueprint_name: Blueprint to add the node to map_variable: Map variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_map_values_node(blueprint_name="/Game/MCP_Test/BP_Example", map_variable="ExampleName")

add_make_map_nodeA

Add a Make Map node to create a Map from key-value pairs.

From Ch. 13: Creates a Map literal from individual key-value pin inputs.

Args: blueprint_name: Blueprint to add the node to key_type: Key type value_type: Value type num_pairs: Number of key-value pair input pins node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_make_map_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_make_array_nodeB

Add a Make Array node to create an Array from individual variables.

From Ch. 13: Used to create point light arrays in Level Blueprints, spawn point lists, or any array built from known variables.

Args: blueprint_name: Blueprint to add the node to element_type: Array element type num_pins: Number of input element pins node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_make_array_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_object_type_make_array_nodeA

Add a real K2Node_MakeArray node typed as EObjectTypeQuery (byte enum). This is used to provide a valid 'Object Types' array input to SphereOverlapActors / SphereOverlapComponents nodes. Defaults to ObjectTypeQuery3 (WorldDynamic) on the first pin.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_object_type_make_array_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_random_array_item_nodeA

Add a Random Array Item node to get a random element from an Array.

From Ch. 13 (BP_RandomSpawner): Returns a random element from the array. Used to randomly select a spawn point from an array of Target Points.

Args: blueprint_name: Blueprint to add the node to array_variable: Array variable name node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_random_array_item_node(blueprint_name="/Game/MCP_Test/BP_Example", array_variable="ExampleName")

create_random_spawner_blueprintA

Create the BP_RandomSpawner Blueprint from Ch. 13.

Creates a Blueprint that:

  • Has a TargetPoints array (Actor Object Reference, Instance Editable)

  • Has a SpawnClass variable (Actor Class Reference, Instance Editable)

  • On BeginPlay: validates both, picks a random TargetPoint from the array, gets its transform, and spawns an actor of the SpawnClass at that location

Args: name: Blueprint name folder_path: Content browser folder

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: create_random_spawner_blueprint()

add_break_struct_nodeA

Add a Break [StructType] node to extract individual member values.

From Ch. 13: Break Struct takes a struct as input and exposes all member variables as output pins. Used to read individual fields.

Also see Split Struct Pin (right-click a struct pin in the graph).

Args: blueprint_name: Blueprint to add the node to struct_type: Struct type name (e.g., "FVector", "FEnemyData", "FHitResult") node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_break_struct_node(blueprint_name="/Game/MCP_Test/BP_Example", struct_type="Example")

add_make_struct_nodeA

Add a Make [StructType] node to construct a struct from member values.

From Ch. 13: Make Struct takes all member variables as input pins and outputs the assembled struct. Used to construct FTransform, FVector, custom structs, etc.

Args: blueprint_name: Blueprint to add the node to struct_type: Struct type name (e.g., "FVector", "FTransform", "FEnemyData") node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_make_struct_node(blueprint_name="/Game/MCP_Test/BP_Example", struct_type="Example")

add_get_data_table_row_nodeA

Add a GetDataTableRow node to look up a row in a Data Table.

From Ch. 13: Retrieves a struct of data by row name from a Data Table. Returns the row struct and a bool indicating if the row was found.

Args: blueprint_name: Blueprint to add the node to data_table_variable: Data Table asset variable name or path row_name: Default row name to look up node_position: [X, Y] graph position

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: add_get_data_table_row_node(blueprint_name="/Game/MCP_Test/BP_Example")

import_sound_asset_from_sandboxA

Import an audio file that lives on the sandbox (Linux side) into the UE5 Content Browser as a SoundWave asset.

The file at local_file_path is read, base64-encoded, embedded in a Python script that runs inside UE5, decoded back to bytes, written to the Windows temp folder on the UE machine, and then imported with AssetTools.

For audio files that already exist on the UE5 Windows machine (e.g. downloaded via a browser or placed manually), use import_sound_asset instead — it is simpler and does not require base64 transfer.

Typical workflow: 1. Use audio_generation to create a sound → get a Genspark file URL 2. Use DownloadFileWrapper to save the file to /home/user/webapp/.mp3 3. Call import_sound_asset_from_sandbox( local_file_path="/home/user/webapp/.mp3", ...)

Args: local_file_path: Absolute path to the audio file on the sandbox (e.g. "/home/user/webapp/SFX_TurretFire.mp3") asset_name: Name for the new UE SoundWave asset (no spaces, e.g. "SFX_TurretFire") destination_path: UE content-browser folder (default "/Game/Audio") loop: If True, sets the SoundWave looping flag

Returns: Dict with 'asset_path' (e.g. "/Game/Audio/SFX_TurretFire.SFX_TurretFire") on success, or 'error' on failure.

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: import_sound_asset_from_sandbox(local_file_path="/Game/MCP_Test/Example", asset_name="/Game/MCP_Test/Example")

wire_play_sound_to_blueprintA

Add a PlaySound2D (or PlaySoundAtLocation) node to a Blueprint wired after a specific node. Used to attach imported sound assets to Blueprint events.

Args: blueprint_name: Blueprint to modify (e.g. "BP_LaserTurret") sound_asset_path: UE content-browser path of the SoundWave (e.g. "/Game/Audio/SFX_TurretFire.SFX_TurretFire") after_node_id: Full node GUID — the 'then' pin of this node will connect to the new PlaySound node's 'execute' pin node_position: [X, Y] graph position for the new node use_play_at_location: If True, use PlaySoundAtLocation (3D); otherwise PlaySound2D (2D/UI)

KB: see knowledge_base/07_DATA_STRUCTURES.md#overview Example: wire_play_sound_to_blueprint(blueprint_name="/Game/MCP_Test/BP_Example", sound_asset_path="/Game/MCP_Test/Example", after_node_id="Example")

add_event_dispatcherB

Add an Event Dispatcher to a Blueprint.

Event Dispatchers allow Blueprints to broadcast events that other Blueprints can listen to and respond to.

Args: blueprint_name: Blueprint name dispatcher_name: Name of the event dispatcher params: List of parameter dicts with 'name' and 'type' keys e.g., [{"name": "DamageAmount", "type": "Float"}]

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_event_dispatcher(blueprint_name="/Game/MCP_Test/BP_Example", dispatcher_name="ExampleName")

call_event_dispatcherA

Add a 'Call [EventDispatcher]' node to the Blueprint's Event Graph.

Args: blueprint_name: Blueprint containing the dispatcher dispatcher_name: Name of the event dispatcher node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: call_event_dispatcher(blueprint_name="/Game/MCP_Test/BP_Example", dispatcher_name="ExampleName")

bind_event_to_dispatcherB

Bind an event to another Blueprint's Event Dispatcher. Adds a 'Bind Event to [Dispatcher]' node.

Args: blueprint_name: Blueprint that is binding to the dispatcher dispatcher_blueprint: Blueprint that owns the dispatcher dispatcher_name: Name of the event dispatcher target_variable_name: Variable holding a reference to the dispatcher owner node_position: Optional [X, Y] graph position

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: bind_event_to_dispatcher(blueprint_name="/Game/MCP_Test/BP_Example", dispatcher_blueprint="/Game/MCP_Test/BP_Example", dispatcher_name="ExampleName")

unbind_event_from_dispatcherB

Add an 'Unbind Event from [Dispatcher]' node.

Args: blueprint_name: Blueprint name dispatcher_name: Dispatcher to unbind from node_position: Optional graph position

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: unbind_event_from_dispatcher(blueprint_name="/Game/MCP_Test/BP_Example", dispatcher_name="ExampleName")

add_direct_blueprint_referenceA

Add a variable to hold a direct reference to another Blueprint.

This is the Direct Blueprint Communication pattern - you store a reference to another actor and call its functions directly.

Args: blueprint_name: Blueprint that will hold the reference target_blueprint: Blueprint class to reference variable_name: Variable name for the reference is_exposed: Make editable in editor (required to assign via editor)

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_direct_blueprint_reference(blueprint_name="/Game/MCP_Test/BP_Example", target_blueprint="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

add_cast_nodeA

Add a Cast To [ClassName] node.

Casting is used to convert a generic object/actor reference to a specific type, allowing access to that Blueprint's unique variables and functions.

Args: blueprint_name: Blueprint name target_class: Class to cast to (e.g., "BP_MyCharacter", "ACharacter") node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; pins: 'Object' input, 'then'/'Cast Failed' outputs, 'As [ClassName]' output for the cast result

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_cast_node(blueprint_name="/Game/MCP_Test/BP_Example", target_class="Actor")

create_blueprint_interfaceA

Create a Blueprint Interface asset.

Blueprint Interfaces define a contract that multiple Blueprints can implement - useful for calling functions on actors without knowing their type.

Args: interface_name: Interface asset name (e.g., "BPI_Interactable") functions: List of function dicts: [{"name": "Interact", "params": [{"name": "Caller", "type": "Actor"}]}] path: Content browser path

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: create_blueprint_interface(interface_name="ExampleName")

implement_blueprint_interfaceB

Make a Blueprint implement a Blueprint Interface.

Args: blueprint_name: Blueprint that will implement the interface interface_name: Interface asset name

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: implement_blueprint_interface(blueprint_name="/Game/MCP_Test/BP_Example", interface_name="ExampleName")

add_interface_function_nodeB

Add a 'Message [FunctionName]' interface call node.

Interface messages can be sent to any actor implementing the interface without knowing its exact class.

Args: blueprint_name: Calling Blueprint interface_name: Interface name function_name: Interface function to call node_position: Optional graph position

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_interface_function_node(blueprint_name="/Game/MCP_Test/BP_Example", interface_name="ExampleName", function_name="ExampleName")

add_custom_functionA

Add a custom function to a Blueprint.

Functions have their own local variable scope, can return values, and are reusable across the Blueprint.

Args: blueprint_name: Blueprint name function_name: Function name inputs: List of input params [{"name": "DamageIn", "type": "Float"}] outputs: List of output params [{"name": "HealthOut", "type": "Float"}] is_pure: Pure functions have no exec pin (like math functions)

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_custom_function(blueprint_name="/Game/MCP_Test/BP_Example", function_name="ExampleName")

add_custom_macroB

Add a custom Macro to a Blueprint.

Macros are like functions but they exist within a single Blueprint, support latent nodes (Delay, etc.), and can have multiple exec outputs.

Args: blueprint_name: Blueprint name macro_name: Macro name inputs: Input tunnel parameters outputs: Output tunnel parameters

KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: add_custom_macro(blueprint_name="/Game/MCP_Test/BP_Example", macro_name="ExampleName")

add_branch_nodeA

Add a Branch (if/else) node to a Blueprint.

The Branch node takes a boolean condition and routes execution to either the 'True' or 'False' output pin.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; pins: 'Condition' input, 'True'/'False' outputs

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_branch_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_sequence_nodeA

Add a Sequence node that executes outputs in order.

Sequence nodes execute 'Then 0', 'Then 1', 'Then 2', etc. in sequence. Useful for organizing multiple sequential actions.

Args: blueprint_name: Blueprint name num_outputs: Number of output execution pins (2-10) node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_sequence_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_flipflop_nodeA

Add a Flip Flop node that alternates between A and B outputs.

On the first call it executes 'A', on the second call 'B', then back to 'A', etc. Also provides 'IsA' boolean output.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_flipflop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_do_once_nodeA

Add a Do Once node that executes exactly one time.

After the first execution, subsequent calls are ignored until the 'Reset' input is triggered.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_do_once_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_do_n_nodeA

Add a Do N node that executes a specified number of times.

After N executions, subsequent calls are blocked until Reset.

Args: blueprint_name: Blueprint name n: Maximum number of executions (default: 3) node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_do_n_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_gate_nodeA

Add a Gate node that controls execution flow.

When open, the 'Exit' pin fires on each 'Enter'. Use 'Open', 'Close', and 'Toggle' inputs to control state.

Args: blueprint_name: Blueprint name start_closed: Whether the gate starts closed node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_gate_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_while_loop_nodeB

Add a While Loop node.

Executes 'Loop Body' while condition is true, then fires 'Completed'.

Args: blueprint_name: Blueprint name node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_while_loop_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_variable_nodeB

Add a 'Get [VariableName]' node to read a variable's value.

Args: blueprint_name: Blueprint name variable_name: Variable to get (must exist in the Blueprint) node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; output pin named same as variable

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_variable_node(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

add_set_variable_nodeA

Add a 'Set [VariableName]' node to write to a variable.

Args: blueprint_name: Blueprint name variable_name: Variable to set (must exist in the Blueprint) node_position: Optional [X, Y] graph position

Returns: Dict with 'node_id'; has exec pins + value input pin

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_set_variable_node(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

add_print_string_nodeA

Add a Print String node (shows debug message on screen).

Args: blueprint_name: Blueprint name message: Default string to print (can be overridden by connection) duration: How long message stays on screen color: [R, G, B] text color node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_print_string_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_delay_nodeA

Add a Delay node (latent - waits before continuing).

Delay is a latent node - it allows the Blueprint to pause execution for a specified duration without blocking the game thread.

Args: blueprint_name: Blueprint name duration: Delay in seconds node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_delay_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_timeline_nodeA

Add a Timeline node for smooth interpolation animations.

Timelines play float/vector curves over time - great for doors opening, lights fading, etc.

Args: blueprint_name: Blueprint name timeline_name: Name for the timeline tracks: List of track dicts: [{"name": "Alpha", "type": "Float", "keys": [[0,0],[1,1]]}] length: Total timeline duration in seconds node_position: Optional graph position

Returns: Dict with 'node_id'; pins: 'Play', 'Reverse', 'Stop', 'Update', 'Finished'

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_timeline_node(blueprint_name="/Game/MCP_Test/BP_Example", timeline_name="ExampleName")

add_custom_eventA

Add a Custom Event node to a Blueprint event graph.

Use this for explicit gameplay entry points that will be wired by later graph operations. Inspect existing events first to avoid duplicate event names, then compile and read back after wiring.

Args: blueprint_name: Blueprint asset name or path. event_name: Custom event/function name to create. node_position: Optional [X, Y] graph position.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#events-and-dispatch Example: add_custom_event(blueprint_name="/Game/MCP_Test/BP_Example", event_name="OnInteract")

call_custom_eventA

Add a call node for a Custom Event defined on another Blueprint.

Use this after creating or verifying the target custom event. The native route resolves the target Blueprint generated class and returns visible pins for follow-up wiring.

Args: blueprint_name: Blueprint that receives the call node. target_blueprint: Blueprint that owns the custom event. event_name: Custom event name to call. node_position: Optional [X, Y] graph position.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#events-and-dispatch Example: call_custom_event(blueprint_name="/Game/BP_Button", target_blueprint="/Game/BP_Door", event_name="OpenDoor")

add_interface_event_nodeA

Add an event override node for a Blueprint Interface function.

Interface events are useful for interactables, pickups, objectives, and other vertical-slice workflows where actors share behavior contracts. Verify the Blueprint implements the interface before relying on runtime dispatch, then compile and read back the graph.

Args: blueprint_name: Blueprint that receives the interface event node. interface_name: Blueprint Interface asset name or path. function_name: Interface function to implement as an event. node_position: Optional [X, Y] graph position.

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#events-and-dispatch Example: add_interface_event_node(blueprint_name="/Game/BP_Door", interface_name="/Game/BPI_Interactable", function_name="Interact")

add_math_nodeB

Add a math operation node.

Args: blueprint_name: Blueprint name operation: Math operation: "Add_FloatFloat", "Subtract_FloatFloat", "Multiply_FloatFloat", "Divide_FloatFloat", "Add_IntInt", "Subtract_IntInt", "Multiply_IntInt", "Divide_IntInt", "VSize" (vector length), "Normalize" (vector normalize), "Clamp", "Lerp", "FInterpTo", "VInterpTo", "RandomFloat", "RandomFloatInRange", "RandomInt", "RandomIntInRange", "Max_Float", "Min_Float", "Abs_Float", "Sin", "Cos", "Sqrt", "Power" node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_math_node(blueprint_name="/Game/MCP_Test/BP_Example", operation="Example")

add_line_trace_nodeB

Add a Line Trace node (raycast from point A to point B).

Line traces check for physics collision along a line. Useful for hit detection, visibility checks, etc.

Args: blueprint_name: Blueprint name trace_type: Trace function: "LineTraceSingleByChannel" - single hit by collision channel "LineTraceSingleByObjectType" - single hit by object type "SphereTraceSingleByChannel" - sphere sweep "BoxTraceSingleByChannel" - box sweep "MultiLineTraceSingleByChannel" - all hits node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_line_trace_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_macro_nodeA

Add a macro call node to a Blueprint.

Args: blueprint_name: Blueprint containing the macro macro_name: Name of the macro to call node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_macro_node(blueprint_name="/Game/MCP_Test/BP_Example", macro_name="ExampleName")

add_comment_boxB

Add a comment box to a Blueprint graph (for documentation).

Args: blueprint_name: Blueprint name comment_text: Comment text position: [X, Y] graph position size: [Width, Height] of the comment box color: [R, G, B, A] box color

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_comment_box(blueprint_name="/Game/MCP_Test/BP_Example", comment_text="Example")

add_construct_object_nodeB

Add a 'Construct Object from Class' node.

Used to create UObject instances at runtime (non-Actor objects).

Args: blueprint_name: Blueprint name object_class: Class to construct node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_construct_object_node(blueprint_name="/Game/MCP_Test/BP_Example", object_class="Actor")

add_spawn_actor_nodeC

Add a 'Spawn Actor from Class' node (SpawnActor).

Creates a new actor in the world at runtime.

Args: blueprint_name: Blueprint name actor_class: Actor class to spawn (e.g., "BP_Projectile") node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_spawn_actor_node(blueprint_name="/Game/MCP_Test/BP_Example", actor_class="Actor")

add_destroy_actor_nodeC

Add a 'Destroy Actor' node.

Args: blueprint_name: Blueprint name node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_destroy_actor_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_player_character_nodeC

Add a 'Get Player Character' node.

Args: blueprint_name: Blueprint name player_index: Player index (usually 0) node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_player_character_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_player_controller_nodeB

Add a 'Get Player Controller' node.

Args: blueprint_name: Blueprint name player_index: Player index (usually 0) node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_player_controller_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_open_level_nodeA

Add an 'Open Level (by Name)' node for level loading/switching.

Args: blueprint_name: Blueprint name level_name: Default level to open (can be connected via pin) node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_open_level_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_apply_damage_nodeC

Add an 'Apply Damage' node.

Args: blueprint_name: Blueprint name node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_apply_damage_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_play_sound_nodeC

Add a 'Play Sound at Location' node.

Args: blueprint_name: Blueprint name sound_asset: Sound asset path node_position: Optional graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_play_sound_node(blueprint_name="/Game/MCP_Test/BP_Example")

build_complete_blueprint_graphA

Build an entire Blueprint graph from a definition dict.

This is a high-level helper that creates nodes and connects them based on a declarative definition.

Args: blueprint_name: Blueprint name graph_definition: Dict describing the graph: { "nodes": [ {"id": "begin_play", "type": "event", "event": "ReceiveBeginPlay", "pos": [0, 0]}, {"id": "print", "type": "function", "target": "UKismetSystemLibrary", "function": "PrintString", "params": {"InString": "Hello!"}, "pos": [300, 0]} ], "connections": [ {"from": "begin_play", "from_pin": "then", "to": "print", "to_pin": "execute"} ] }

Returns: Dict with results for each node and connection

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: build_complete_blueprint_graph(blueprint_name="/Game/MCP_Test/BP_Example", graph_definition="EventGraph")

add_select_nodeA

Add a Select node to choose a value based on an index.

From Ch. 15: The Select node returns the value matching the index input. It's a cleaner alternative to chains of Branch nodes for multi-way selection.

Index type can be: Integer, Enum, Boolean, or Byte. Option type can be any type (Actor Class Reference, String, Float, etc.)

Example from the book: Based on DifficultyLevel enum (Easy/Normal/Hard), select which Boss Blueprint class to spawn.

Args: blueprint_name: Blueprint to add the node to index_type: Type for the Index input ("Integer", "Enum", "Boolean", "Byte") option_type: Type for the Option inputs and Return Value num_options: Number of option pins to create node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_select_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_teleport_nodeA

Add a Teleport node to safely move an actor to a new location.

From Ch. 15: The Teleport node moves an actor to a specified location, but unlike SetActorLocation, if there's an obstacle at the destination, the actor is moved to a nearby valid location to avoid overlap.

Example from the book: BP_TeleportPlatform - when the player overlaps the platform, they teleport to the Next Teleport Platform location.

Args: blueprint_name: Blueprint to add the node to use_self: If True, teleport self; if False, pass an Actor input node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_teleport_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_format_text_nodeA

Add a Format Text node to build text from a template with parameters.

From Ch. 15: Format Text uses {ParameterName} delimiters in the format string to create input pins dynamically. Each {Name} becomes an input pin.

Example: format="{Name} wins the round with {Score} points" Creates input pins for Name and Score; output is the formatted text.

Args: blueprint_name: Blueprint to add the node to format_string: Template with {parameter_name} placeholders node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_format_text_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_math_expression_nodeA

Add a Math Expression node (collapsed graph from a math formula string).

From Ch. 15: The Math Expression node creates a collapsed graph based on a typed expression. Variable names in the expression become input pins, and the result is the Return Value output pin.

Example from the book: (PlayerLuck/5) * (EnemyHP/30) Creates input pins PlayerLuck and EnemyHP.

Args: blueprint_name: Blueprint to add the node to expression: Mathematical expression string (variables become input pins) node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_math_expression_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_view_target_with_blend_nodeA

Add a SetViewTargetWithBlend node to switch cameras smoothly.

From Ch. 15: Used to switch the player's view between different cameras (e.g., entering a treasure room activates a security camera, or switching to a cinematic camera during a cutscene). The New View Target input is usually a Camera Actor reference.

Args: blueprint_name: Blueprint to add the node to (PlayerController) blend_time: Duration of the camera transition in seconds blend_func: Blend function ("VTBlend_Linear", "VTBlend_Cubic", "VTBlend_EaseIn", "VTBlend_EaseOut", "VTBlend_EaseInOut") blend_exp: Exponent for cubic/ease blend functions node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_set_view_target_with_blend_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_attach_actor_to_component_nodeA

Add an AttachActorToComponent node.

From Ch. 15: Attaches an actor to a component at runtime. Used for dynamic attachment (e.g., weapon pickup, mounting to vehicles).

Attachment rules:

  • "KeepRelative": Maintain current relative transform

  • "KeepWorld": Maintain current world transform (recalculate relative)

  • "SnapToTarget": Reset to component's origin

Args: blueprint_name: Blueprint to add the node to location_rule: Location attachment rule rotation_rule: Rotation attachment rule scale_rule: Scale attachment rule weld_simulated_bodies: Weld physics bodies together node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_attach_actor_to_component_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_enable_disable_input_nodeA

Add an Enable Input or Disable Input node to control actor input reception.

From Ch. 15: Enable Input allows an actor to receive player input events. Disable Input removes input handling. Requires passing a PlayerController reference.

Use cases:

  • Disable input during cutscenes

  • Enable input only when player is in range of an interactive object

  • Menu screens disable game input

Args: blueprint_name: Blueprint to add the node to enable: True = EnableInput, False = DisableInput node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_enable_disable_input_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_input_mode_nodeA

Add a Set Input Mode node to control where player input goes.

From Ch. 15: Controls whether input goes to the game, UI, or both. Essential for pause menus and interactive UI screens.

Input modes:

  • "GameOnly": Input handled only by game (no UI interaction)

  • "UIOnly": Input handled only by UI (game inputs blocked)

  • "GameAndUI": Both game and UI handle input (most flexible)

Example from the book: Show Win/Pause menu -> SetInputModeUIOnly, Resume game -> SetInputModeGameOnly

Args: blueprint_name: Blueprint to add the node to input_mode: "GameOnly", "UIOnly", or "GameAndUI" mouse_lock_mode: "DoNotLock", "LockOnCapture", "LockAlways", "LockInFullscreen" flush_input: Clear all pending input when mode changes node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_set_input_mode_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_nearly_equal_float_nodeA

Add a NearlyEqual (float) node to compare floats with tolerance.

From Ch. 11: Used to check if PlayerHealth is approximately 0 (player dies). Float comparison with == can fail due to floating-point precision, so NearlyEqual checks if |A - B| < Tolerance instead.

Args: blueprint_name: Blueprint to add the node to tolerance: Maximum allowed difference for equality check node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_nearly_equal_float_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_print_text_nodeA

Add a Print Text node (used in Ch. 18 with Format Text output).

Like Print String but works with Text type values (localizable text). Used with the Format Text node output in the dice roll library example.

Args: blueprint_name: Blueprint to add the node to duration: Display duration on screen node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_print_text_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_append_string_nodeA

Add an Append (string concatenation) node.

From Ch. 18 (Actor Component test): Combines two strings into one. Used to build "Levelled up to " + CurrentLevel display string.

Args: blueprint_name: Blueprint to add the node to string_a: First string (A pin default value) string_b: Second string (B pin default value) node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_append_string_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_spawn_actor_from_class_nodeA

Add a SpawnActorFromClass node to instantiate an Actor at runtime.

From Ch. 3 and Ch. 10: Core node for spawning Blueprints at runtime. Used to spawn enemies, projectiles, pickups, particles, effects.

Takes a Class input and a SpawnTransform (Location, Rotation, Scale), returns a reference to the spawned Actor.

Args: blueprint_name: Blueprint to add the node to actor_class: Default Actor class to spawn (can be set via pin) node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_spawn_actor_from_class_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_is_valid_nodeA

Add an IsValid macro node to check if an object reference is valid (non-null).

From Ch. 3, 4, 11, 13: Used before accessing object references to prevent crashes from accessing null/destroyed actors. Returns Is Valid and Is Not Valid execution pins.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_is_valid_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_is_valid_class_nodeA

Add an IsValidClass node to check if a class reference is valid.

From Ch. 13 (BP_RandomSpawner): Used to validate a Class Reference variable before passing it to SpawnActorFromClass. Returns True if the class is valid.

Args: blueprint_name: Blueprint to add the node to node_position: [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_is_valid_class_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_arithmetic_operator_nodeB

Add an arithmetic operator node (Add, Subtract, Multiply, Divide, Modulo).

Ch.2: Arithmetic operators create expressions in Blueprints:

  • Add (+): Sum two values

  • Subtract (-): Difference between values

  • Multiply (*): Product of two values

  • Divide (/): Quotient of two values

  • Modulo (%): Remainder after division (integers only)

Args: blueprint_name: Blueprint name operator: "Add", "Subtract", "Multiply", "Divide", "Modulo", "Power" operand_type: "Float", "Integer", "Vector", "Int64" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_arithmetic_operator_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_relational_operator_nodeA

Add a relational (comparison) operator node returning a Boolean.

Ch.2: Relational operators compare two values and return True/False:

  • Equal (==): Both values are the same

  • NotEqual (!=): Values differ

  • Greater (>): Left > Right

  • GreaterEqual (>=): Left >= Right

  • Less (<): Left < Right

  • LessEqual (<=): Left <= Right

Args: blueprint_name: Blueprint name operator: "Equal", "NotEqual", "Greater", "GreaterEqual", "Less", "LessEqual" operand_type: "Float", "Integer", "String", "Name", "Vector", "Object" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_relational_operator_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_logical_operator_nodeA

Add a logical (boolean) operator node.

Ch.2: Logical operators combine boolean conditions:

  • AND: True only if BOTH inputs are true

  • OR: True if EITHER input is true

  • NOT: Inverts a boolean (True→False, False→True)

  • XOR: True only if inputs are DIFFERENT (exclusive OR)

Args: blueprint_name: Blueprint name operator: "AND", "OR", "NOT", "XOR" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_logical_operator_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_construction_script_nodeA

Add a Construction Script event node to a Blueprint.

Ch.3: The Construction Script runs both in-editor and at runtime before BeginPlay. Used for procedural setup based on exposed variables, like setting mesh, materials, or modifying component transforms.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_construction_script_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_all_actors_of_class_nodeA

Add a 'Get All Actors Of Class' node.

Ch.3: Returns an array of all actors of the specified class in the level. Used to find patrol points (TargetPoint actors) or iterate over enemies. Note: Expensive operation - avoid calling every tick.

Args: blueprint_name: Blueprint name actor_class: Class to search for (e.g., "TargetPoint", "BP_Enemy") node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_all_actors_of_class_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_actor_of_class_nodeA

Add a 'Get Actor Of Class' node - returns the first actor found.

Ch.3/4: Finds the first actor of the specified class in the level. Useful for getting a reference to a unique actor like GameMode or PlayerController.

Args: blueprint_name: Blueprint name actor_class: Class to search for node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_actor_of_class_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_game_mode_nodeA

Add a 'Get Game Mode' node.

Ch.3: Returns the current GameMode. Cast the result to your custom GameMode class (e.g., BP_FPSGameMode) to access its properties/functions.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_game_mode_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_game_instance_nodeB

Add a 'Get Game Instance' node.

Ch.3: Returns the Game Instance, which persists across level loads. Cast to your custom GameInstance class to access persistent data.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_game_instance_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_reroute_nodeB

Add a Reroute node to organize wire routing in the graph.

Ch.4: Reroute nodes are dot-shaped nodes used to bend wires and improve readability of complex Blueprint graphs without changing logic.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_reroute_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_clamp_nodeA

Add a 'Clamp' node to constrain a value within a range.

Used throughout the book (Ch.6, 8): Clamps health, stamina, ammo values between min and max so they never exceed valid ranges.

Args: blueprint_name: Blueprint name operand_type: "Float" or "Integer" min_value: Minimum allowed value max_value: Maximum allowed value node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_clamp_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_lerp_nodeB

Add a 'Lerp' (Linear Interpolation) node.

Ch.6: Used for smooth transitions like FOV zoom and stamina drain. Lerp(A, B, Alpha) = A + Alpha * (B - A). Alpha ranges 0.0-1.0.

Args: blueprint_name: Blueprint name operand_type: "Float", "Vector", "Rotator", "LinearColor" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_lerp_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_random_float_in_range_nodeA

Add a 'Random Float In Range' node.

Ch.13: Used in BP_RandomSpawner and procedural generation to get random values. Returns a random float between Min and Max (inclusive).

Args: blueprint_name: Blueprint name min_value: Minimum float value max_value: Maximum float value node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_random_float_in_range_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_random_integer_in_range_nodeA

Add a 'Random Integer In Range' node.

Ch.13, Ch.18: Used for dice roll library and random spawning. Returns a random integer between Min and Max (inclusive).

Args: blueprint_name: Blueprint name min_value: Minimum integer value max_value: Maximum integer value node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_random_integer_in_range_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_abs_nodeA

Add an 'Abs' (Absolute Value) node.

Returns the absolute (always-positive) value of a number. Useful for computing distances and speeds without sign.

Args: blueprint_name: Blueprint name operand_type: "Float" or "Integer" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_abs_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_min_max_nodeA

Add a 'Min' or 'Max' node returning the smaller/larger of two values.

Used in health/stamina clamping and scoring systems throughout the book.

Args: blueprint_name: Blueprint name operation: "Min" or "Max" operand_type: "Float" or "Integer" node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_min_max_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_timer_by_function_name_nodeA

Add a 'Set Timer By Function Name' node for recurring callbacks.

Ch.10: Used in enemy spawner to periodically call SpawnEnemy. Ch.8: Used for stamina regeneration over time. Starts a timer that calls the named function after the specified delay.

Args: blueprint_name: Blueprint name function_name: Name of the function to call on timer tick timer_rate: Time in seconds between calls looping: If True, repeats indefinitely node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_set_timer_by_function_name_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_clear_timer_nodeA

Add a 'Clear Timer By Handle' or 'Clear and Invalidate Timer By Handle' node.

Used to stop a running timer (e.g., stop stamina drain when sprinting ends).

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_clear_timer_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_delta_seconds_nodeA

Add a 'Get World Delta Seconds' node.

Ch.5: Delta time is the time elapsed since the last frame. Used to make movement frame-rate independent: Speed = Distance * DeltaSeconds. Always multiply movement values by DeltaSeconds for consistent behavior.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: add_get_delta_seconds_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_materialA

Create a simple Material asset in the Unreal Content Browser.

As described in Ch. 5, Materials use VectorParameter nodes for color and ScalarParameter nodes for Metallic/Roughness. This tool automates the creation of a simple solid-color material.

Args: name: Material asset name (e.g., "M_TargetRed") base_color: RGBA color array [R, G, B, A] 0.0-1.0 (e.g., [1,0,0,1] for red) metallic: Metallic value 0.0-1.0 roughness: Roughness value 0.0-1.0 emissive_color: RGBA emissive color for glow effects opacity: Opacity 0.0-1.0 (1.0 = fully opaque) folder_path: Content browser path where material is created

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: create_material(name="ExampleName")

material_create_masterA

Create a reusable master Material with standard technical-art parameters.

The generated graph includes BaseColor, Metallic, Roughness, EmissiveColor, and Opacity parameters, plus optional texture parameters for BaseColor, Normal, ORM, and Emissive maps. Use material_wire_texture_set to wire actual texture assets into the graph after creation.

Args: material_name: Material asset name, e.g. "M_Master_Prop" folder_path: Content Browser folder for the asset base_color: RGBA default BaseColor parameter metallic: Default Metallic scalar roughness: Default Roughness scalar emissive_color: RGBA default EmissiveColor parameter opacity: Default Opacity scalar blend_mode: "opaque" or "translucent" use_texture_parameters: Add standard texture parameter nodes overwrite: Delete/recreate an existing asset at the same path compile: Force a material shader compile before returning save: Save the asset package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: material_create_master(material_name="/Game/MCP_Test/M_Example")

material_create_functionA

Create a Material Function asset and expose it to the material function library.

Args: function_name: Function asset name, e.g. "MF_TriplanarTint" folder_path: Content Browser folder for the function description: Tooltip/description shown in the Material Editor overwrite: Delete/recreate an existing asset at the same path save: Save the asset package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: material_create_function(function_name="ExampleName")

material_wire_texture_setA

Wire a standard texture set into a Material graph.

ORM textures are assumed to pack Occlusion in R, Roughness in G, and Metallic in B. Empty texture paths are ignored.

Args: material_path: Material asset path base_color_texture: Texture path wired to BaseColor normal_texture: Texture path wired to Normal orm_texture: Packed ORM texture path wired to AO/Roughness/Metallic emissive_texture: Texture path wired to EmissiveColor compile: Force a material shader compile before returning save: Save the material package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: material_wire_texture_set(material_path="/Game/MCP_Test/M_Example")

material_create_instance_from_masterA

Create a Material Instance Constant from a master Material.

Args: instance_name: Material instance asset name, e.g. "MI_Prop_Red" parent_material_path: Parent material or material instance path folder_path: Content Browser folder for the instance overwrite: Delete/recreate an existing asset at the same path save: Save the asset package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: material_create_instance_from_master(instance_name="ExampleName", parent_material_path="/Game/MCP_Test/M_Example")

material_set_instance_parameters_bulkA

Set many Material Instance parameters in one bridge call.

Args: material_instance_path: Material Instance Constant asset path scalar_parameters: Mapping of scalar parameter names to floats vector_parameters: Mapping of vector parameter names to RGBA arrays texture_parameters: Mapping of texture parameter names to texture paths save: Save the material instance package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: material_set_instance_parameters_bulk(material_instance_path="/Game/MCP_Test/M_Example")

texture_generate_ormA

Generate a packed ORM Texture2D asset for technical-art material pipelines.

The output packs Occlusion into R, Roughness into G, Metallic into B, and alpha to 255. If a source texture path is omitted or cannot be sampled, the matching flat default value is used.

Args: output_name: Texture asset name, e.g. "T_Prop_ORM" folder_path: Content Browser folder for the generated texture occlusion_texture_path: Optional grayscale/source texture for R roughness_texture_path: Optional grayscale/source texture for G metallic_texture_path: Optional grayscale/source texture for B occlusion_channel: Source channel to sample, one of r/g/b/a roughness_channel: Source channel to sample, one of r/g/b/a metallic_channel: Source channel to sample, one of r/g/b/a occlusion: Flat fallback value 0.0-1.0 roughness: Flat fallback value 0.0-1.0 metallic: Flat fallback value 0.0-1.0 width: Generated texture width when flat/default data is used height: Generated texture height when flat/default data is used overwrite: Delete/recreate an existing asset at the same path save: Save the generated texture package immediately

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: texture_generate_orm(output_name="ExampleName")

texture_audit_memoryA

Inspect Texture2D size, compression, streaming flags, mips, and memory estimate.

Args: texture_path: Texture2D asset path to audit

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: texture_audit_memory(texture_path="/Game/MCP_Test/T_Example")

vertex_paint_actorA

Apply component override vertex colors to a placed StaticMeshActor/component.

Args: actor_name: Actor name or editor label component_name: Optional StaticMeshComponent name color: RGBA color array used for all vertices lod_index: LOD to paint apply_to_all_vertices: Must be true for this initial implementation save: Save the actor package/level if supported

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: vertex_paint_actor(actor_name="ExampleName")

mesh_audit_uv_channelsA

Audit StaticMesh LODs for UV channel counts, vertex counts, and triangles.

Args: static_mesh_path: StaticMesh asset path to inspect

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: mesh_audit_uv_channels(static_mesh_path="/Game/MCP_Test/Example")

shader_analyze_complexityA

Estimate Material shader complexity from graph structure and risk flags.

This is a fast technical-art audit, not a compiled instruction count. Pair it with renderer_capture_viewmode or shader_visualize_overdraw for scene-level visual validation.

Args: material_path: Material or Material Instance asset path to inspect include_recommendations: Include optimization suggestions

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: shader_analyze_complexity(material_path="/Game/MCP_Test/M_Example")

renderer_capture_viewmodeA

Switch the active level viewport to a diagnostic viewmode and save a PNG.

Supported viewmodes include lit, unlit, wireframe, shader_complexity, quad_overdraw, shader_complexity_with_quad_overdraw, material_texture_scale_accuracy, and required_texture_resolution.

Args: viewmode: Diagnostic viewmode to capture filepath: Optional output .png path; defaults to Saved/MCP/Viewmodes restore_viewmode: Restore the previous viewport mode after capture

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: renderer_capture_viewmode(viewmode="Example")

shader_visualize_overdrawB

Capture an overdraw-focused viewport visualization for material review.

Args: viewmode: shader_complexity_with_quad_overdraw or quad_overdraw filepath: Optional output .png path; defaults to Saved/MCP/Viewmodes restore_viewmode: Restore the previous viewport mode after capture

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: shader_visualize_overdraw()

performance_audit_gpuA

Capture a lightweight editor GPU/performance audit snapshot.

Returns RHI adapter details, memory stats, active viewport state, and scene/component counts. Use Unreal's ProfileGPU for pass timings.

Args: include_memory: Include process/platform memory stats include_viewport: Include active viewport dimensions and viewmode

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: performance_audit_gpu()

set_material_on_actorA

Set a Material on a static mesh actor in the level.

This corresponds to the "Set Material" node used in Ch. 5 of the book, where the CylinderTarget changes its Material when hit.

Args: actor_name: Name of the actor in the level (e.g., "CylinderTarget") material_path: Asset path to the Material (e.g., "/Game/Materials/M_TargetRed") element_index: Material slot index (0 = first material slot)

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: set_material_on_actor(actor_name="ExampleName", material_path="/Game/MCP_Test/M_Example")

add_set_material_nodeA

Add a "Set Material" node to a Blueprint event graph triggered by an event.

This creates the core gameplay interaction from Ch. 5: detecting a hit on an actor and swapping its material (e.g., cylinder turns red when shot).

Args: blueprint_name: Target Blueprint (e.g., "BP_CylinderTarget") component_name: Mesh component name (e.g., "StaticMeshComponent") material_path: Material asset path (e.g., "/Game/Materials/M_TargetRed") event_name: Event that triggers the material change ("ReceiveHit", "ReceiveBeginPlay") node_position: [X, Y] position in graph

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_set_material_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent", material_path="/Game/MCP_Test/M_Example")

create_dynamic_material_instanceA

Create a Dynamic Material Instance from a source Material in a Blueprint.

Dynamic Material Instances allow runtime modification of material parameters (color, opacity, scalar values) without creating separate material assets. Used extensively in game HUDs, pickups, and interactive props.

Args: blueprint_name: Blueprint to add the node to component_name: Mesh component to create the dynamic instance on source_material_path: Base material asset path variable_name: Variable name to store the dynamic instance reference node_position: [X, Y] graph position

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: create_dynamic_material_instance(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent", source_material_path="/Game/MCP_Test/M_Example")

add_set_vector_parameter_value_nodeA

Add a SetVectorParameterValue node to change a material color at runtime.

This is the runtime equivalent of double-clicking the VectorParameter node in the Material Editor (Ch. 5). Use this to dynamically change an actor's color.

Args: blueprint_name: Blueprint containing the dynamic material reference dynamic_material_variable: Variable name holding the Dynamic Material Instance parameter_name: Material parameter name (e.g., "Color") color_value: RGBA values [R, G, B, A] node_position: [X, Y] graph position

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_set_vector_parameter_value_node(blueprint_name="/Game/MCP_Test/BP_Example", dynamic_material_variable="/Game/MCP_Test/M_Example", parameter_name="ExampleName")

add_set_scalar_parameter_value_nodeA

Add a SetScalarParameterValue node to change a material float parameter at runtime.

Useful for animating material effects like opacity fade-in, glow intensity, dissolve transitions, etc.

Args: blueprint_name: Blueprint containing the dynamic material reference dynamic_material_variable: Variable name holding the Dynamic Material Instance parameter_name: Material scalar parameter name (e.g., "Opacity", "Metallic") scalar_value: Float value to set node_position: [X, Y] graph position

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_set_scalar_parameter_value_node(blueprint_name="/Game/MCP_Test/BP_Example", dynamic_material_variable="/Game/MCP_Test/M_Example", parameter_name="ExampleName")

setup_hit_material_swapA

Set up a full hit-detection + material swap interaction as in Ch. 5.

Creates the complete "cylinder target" interaction:

  1. Event Hit -> track hit count

  2. First hit: swap to hit material

  3. Second+ hit: spawn explosion effect + sound + destroy actor

Args: blueprint_name: Blueprint to modify (e.g., "BP_CylinderTarget") mesh_component: Static mesh component name default_material_path: Original material path hit_material_path: Material to apply on first hit (e.g., M_TargetRed) hit_count_to_destroy: Number of hits before destruction (default 2)

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: setup_hit_material_swap(blueprint_name="/Game/MCP_Test/BP_Example")

add_spawn_emitter_at_location_nodeA

Add a SpawnEmitterAtLocation node to trigger particle effects in a Blueprint.

From Ch. 6 (sound and particle effects). Used to spawn explosion effects, dust, sparks, etc. when actors are hit or destroyed.

Args: blueprint_name: Target Blueprint particle_system_path: Particle System or Niagara System asset path trigger_event: Event that triggers the emitter spawn node_position: [X, Y] graph position

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_spawn_emitter_at_location_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_play_sound_at_location_nodeB

Add a PlaySoundAtLocation node to a Blueprint for audio feedback.

From Ch. 6 (Adding sound and particle effects). Plays a sound cue at the actor's world location when called.

Args: blueprint_name: Target Blueprint sound_asset_path: Sound asset path (e.g., "/Game/FPWeapon/Audio/FirstPersonTemplateWeaponFire02") volume_multiplier: Volume scale (1.0 = normal) pitch_multiplier: Pitch scale (1.0 = normal) node_position: [X, Y] graph position

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_play_sound_at_location_node(blueprint_name="/Game/MCP_Test/BP_Example")

set_collision_settingsA

Set collision and visibility settings on a Blueprint component.

From Ch. 9 (AI setup) - used to configure CapsuleComponent collision and to hide components in-game.

Collision presets: NoCollision, OverlapAll, BlockAll, BlockAllDynamic, OverlapAllDynamic, Pawn, PhysicsActor, Trigger, InvisibleWall

Args: blueprint_name: Target Blueprint component_name: Component to configure collision_preset: Collision preset name generate_overlap_events: Whether to fire overlap events hidden_in_game: Hide this component during gameplay

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: set_collision_settings(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_spawn_niagara_at_location_nodeA

Add a 'Spawn System At Location' node for a Niagara particle system.

Use this to fire a one-shot Niagara VFX effect at a world location from within a Blueprint graph (e.g., spawn explosion on hit, footstep dust).

Args: blueprint_name: Blueprint to add the node to graph_name: Graph to add the node in (default: "EventGraph") niagara_system_path: Asset path to the NS_ asset (e.g., "/Game/VFX/NS_Explosion") node_position: Optional [X, Y] graph position

Returns: Dict with node_id and success flag

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: add_spawn_niagara_at_location_node(blueprint_name="/Game/MCP_Test/BP_Example")

set_sequencer_trackA

Add or update a track on a Level Sequence (Sequencer) asset.

Use this to animate actors in a cutscene/cinematic: set transform keys, visibility, material parameter, or audio tracks for a specific actor.

Args: sequence_path: Asset path to the LS_ asset (e.g., "/Game/Cinematics/LS_Intro") actor_name: Name of the actor to track track_type: Track type string, e.g.: "Transform", "Visibility", "MaterialParameter", "Audio" keyframes: Optional list of keyframe dicts, e.g.: [{"time": 0.0, "value": [0,0,0]}, {"time": 1.0, "value": [0,0,100]}]

Returns: Dict with success flag and track info

KB: see knowledge_base/08_MATERIALS_AND_RENDERING.md#overview Example: set_sequencer_track(sequence_path="/Game/MCP_Test/Example", actor_name="ExampleName", track_type="Example")

create_savegame_blueprintA

Create a SaveGame Blueprint class to store persistent game data.

From Ch. 11 of the book: create BP_SaveInfo as a child of SaveGame. SaveGame Blueprints hold variables like current Round, high score, player settings, etc. that persist between play sessions.

Args: name: Blueprint name (e.g., "BP_SaveInfo") variables: List of variable definitions, each a dict with: {"name": str, "type": str, "default_value": any} Types: "Integer", "Float", "Boolean", "String", "Vector" folder_path: Content browser folder path

Example variables: [{"name": "Round", "type": "Integer", "default_value": 1}, {"name": "HighScore", "type": "Integer", "default_value": 0}]

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: create_savegame_blueprint(name="ExampleName")

add_save_game_to_slot_nodeA

Add a SaveGameToSlot node to a Blueprint.

From Ch. 11: saves the SaveGame object to a named slot on disk. This corresponds to the "Save Game to Slot" node in the Blueprint graph.

Args: blueprint_name: Blueprint to add the node to save_game_variable: Variable holding the SaveGame instance reference slot_name_variable: Variable holding the save slot filename string user_index: Player index (use 0 for single player) node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_save_game_to_slot_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_load_game_from_slot_nodeA

Add LoadGameFromSlot + DoesSaveGameExist + Cast nodes to a Blueprint.

From Ch. 11: the complete LoadRound macro pattern. Checks if a save file exists, loads it, casts to the SaveGame class, and stores the reference. Uses Branch node to handle both existing and new save files.

Args: blueprint_name: Blueprint to add nodes to slot_name_variable: Variable holding the save slot filename save_game_class: SaveGame Blueprint class name (e.g., "BP_SaveInfo") save_game_variable: Variable to store the loaded SaveGame reference user_index: Player index node_position: [X, Y] graph position for the first node

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_load_game_from_slot_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_does_save_game_exist_nodeA

Add a DoesSaveGameExist node to check if a save file is present.

From Ch. 11: used before loading to branch logic - if save exists, load it; if not, use defaults (Round 1).

Args: blueprint_name: Blueprint to add the node to slot_name: Save slot name string to check user_index: Player index node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_does_save_game_exist_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_create_save_game_object_nodeA

Add a CreateSaveGameObject node to instantiate a new SaveGame object.

From Ch. 11: used when no save file exists yet, to create a fresh SaveGame instance before calling SaveGameToSlot.

Args: blueprint_name: Blueprint to add the node to save_game_class: SaveGame Blueprint class name output_variable: Variable name to store the new instance node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_create_save_game_object_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_delete_save_game_in_slot_nodeA

Add a DeleteGameInSlot node to reset/clear the save file.

From Ch. 11 (Resetting the save file from the pause menu). Use this to implement a "New Game" or "Reset Progress" button.

Args: blueprint_name: Blueprint to add the node to slot_name_variable: Variable holding the save slot name user_index: Player index node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_delete_save_game_in_slot_node(blueprint_name="/Game/MCP_Test/BP_Example")

setup_full_save_load_systemA

Set up the complete save/load system as described in Ch. 11.

Creates:

  1. BP_SaveInfo SaveGame Blueprint with Round variable

  2. Variables in character BP: CurrentRound, SaveInfoRef, SaveSlotName

  3. SaveRound macro (check validity, create if new, set round, save to slot)

  4. LoadRound macro (check if exists, load, cast, store reference)

This mirrors the complete round-persistence system from the book.

Args: character_blueprint: Player character Blueprint name save_blueprint_name: SaveGame Blueprint to create save_variables: Variables for the save game (default: [{Round: Integer}]) slot_name: Save file slot name string

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: setup_full_save_load_system()

add_set_game_paused_nodeA

Add SetGamePaused + ShowMouseCursor nodes to pause/unpause the game.

From Ch. 11 (Creating a pause menu) and Ch. 8 (Win screen). Pauses the game tick and optionally shows the mouse cursor for UI interaction.

Args: blueprint_name: Blueprint to add the node to paused: True to pause, False to unpause show_mouse_cursor: Whether to show the cursor when paused node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_set_game_paused_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_quit_game_nodeA

Add a QuitGame node to exit the application.

From Ch. 8 (Win/Lose menu Quit button) and Ch. 11 (Pause menu).

Args: blueprint_name: Blueprint to add the node to quit_preference: "Quit" or "Background" node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_quit_game_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_round_based_game_systemA

Create a complete round-based game progression system from Ch. 11.

Sets up the full arcade-style round system:

  1. SaveGame blueprint for persistent round data

  2. LoadRound / SaveRound macros in the character Blueprint

  3. SetRoundTargetGoal macro to scale difficulty per round

  4. Win condition check that advances rounds

  5. Integration with the save/load system

Args: character_blueprint: Player character Blueprint name game_mode_blueprint: GameMode Blueprint name save_blueprint_name: SaveGame Blueprint name round_scale_multiplier: How much target goal multiplies per round initial_target_goal: Starting number of targets to eliminate

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: create_round_based_game_system()

create_lose_screen_widgetA

Create a Lose/Death screen Widget Blueprint as described in Ch. 11.

Mirrors the Win screen duplication approach from the book. Creates a UMG Widget Blueprint with a loss message, restart, and quit buttons.

Args: widget_name: Widget Blueprint name (e.g., "WBP_LoseMenu") message_text: The main message (e.g., "You Lose!") message_color: RGBA color for the message [R, G, B, A] show_restart_button: Add a Restart (reload level) button show_quit_button: Add a Quit Game button

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: create_lose_screen_widget()

create_pause_menu_widgetA

Create a Pause Menu Widget Blueprint as described in Ch. 11.

Creates the pause menu with Resume, Restart, Reset Save, and Quit buttons. Also sets up the pause menu toggle (input action -> SetGamePaused + widget).

Args: widget_name: Widget Blueprint name (e.g., "WBP_PauseMenu") resume_button: Include a Resume (unpause) button restart_button: Include a Restart level button reset_save_button: Include a Reset Save File button quit_button: Include a Quit Game button

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: create_pause_menu_widget()

add_player_death_eventA

Add a custom LostGame event to handle player death as described in Ch. 11.

Creates:

  1. Custom Event "LostGame"

  2. SetGamePaused(true)

  3. ShowMouseCursor(true)

  4. CreateWidget(LoseMenu) + AddToViewport

  5. Modify EventAnyDamage to call LostGame when health reaches 0

Args: blueprint_name: Player character Blueprint name lose_widget_name: Widget to display on player death health_variable: Variable holding player health float node_position: [X, Y] graph position for the custom event node

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_player_death_event(blueprint_name="/Game/MCP_Test/BP_Example")

create_blueprint_function_libraryA

Create a Blueprint Function Library with shared utility functions.

From Ch. 18: Create a Function Library (e.g., BP_DiceLibrary) whose functions are available globally in every Blueprint of the project. No instantiation needed.

Functions are defined as a list of dicts with:

  • name: function name

  • inputs: [{"name": str, "type": str, "default_value": any}]

  • outputs: [{"name": str, "type": str}]

  • description: optional description

Args: name: Library Blueprint name (e.g., "BP_DiceLibrary", "BP_MathUtils") functions: List of function definitions folder_path: Content browser folder

Example - dice roll library from the book: functions=[ {"name": "RollOneDie", "inputs": [{"name": "NumberOfFaces", "type": "Integer", "default_value": 6}], "outputs": [{"name": "Result", "type": "Integer"}]}, ]

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_blueprint_function_library(name="ExampleName")

create_blueprint_macro_libraryA

Create a Blueprint Macro Library for shared macros across Blueprints.

From Ch. 18: Macro Libraries gather macros that can be shared between all Blueprints of the parent class. Unlike Function Libraries, Macro Libraries require a parent class and can only be used in subclasses of that parent.

Args: name: Macro Library Blueprint name (e.g., "BP_MacroLibrary") parent_class: Parent class restriction ("Actor" works for most cases) folder_path: Content browser folder

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_blueprint_macro_library(name="ExampleName")

create_actor_componentB

Create an Actor Component Blueprint for encapsulated gameplay behaviour.

From Ch. 18: Actor Components are reusable behaviour modules that can be added to any Actor. The book example creates BP_ExpLevelComp for experience/leveling.

An Actor Component has no Transform (unlike Scene Component). It can access its owning Actor via the "Get Owner" node.

Example use cases:

  • Experience/leveling system (BP_ExpLevelComp from the book)

  • Health regeneration component

  • Inventory component

  • Status effect manager

Args: name: Component Blueprint name (e.g., "BP_ExpLevelComp") variables: List of variable definitions [{"name", "type", "default_value", "is_array"}] functions: List of function definitions [{"name", "inputs", "outputs"}] folder_path: Content browser folder

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_actor_component(name="ExampleName")

create_experience_level_componentA

Create the complete experience/level-up Actor Component from Ch. 18.

Creates BP_ExpLevelComp with:

  • CurrentLevel (Integer)

  • CurrentXP (Integer)

  • ExpLevel array (Integer array for XP thresholds per level)

  • CanLevelUp macro

  • XpReachesNewLevel macro

  • IncreaseExperience function (returns bool LeveledUp)

Args: name: Component Blueprint name max_level: Maximum number of levels xp_per_level: XP required for each level up. Defaults to [10,20,40,80,...] folder_path: Content browser folder

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_experience_level_component()

create_scene_componentA

Create a Scene Component Blueprint (has Transform - location/rotation/scale).

From Ch. 18: Scene Components can be attached to other Scene Components, creating a hierarchy. The book creates BP_CircularMovComp that orbits around the Actor and can have other components (like a Static Mesh shield) attached to it.

Use cases:

  • Orbiting/rotating attachments (the book's rotating shield)

  • Floating damage numbers

  • Aura/effect that follows an actor

  • Socket attachment points

Args: name: Component Blueprint name (e.g., "BP_CircularMovComp") variables: Variable definitions [{"name", "type", "default_value"}] folder_path: Content browser folder

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_scene_component(name="ExampleName")

create_circular_movement_componentA

Create the orbiting Scene Component from Ch. 18 of the book.

Creates BP_CircularMovComp that:

  • Uses Event Tick + Delta Seconds to calculate per-frame delta angle

  • Applies SetRelativeLocation + AddLocalRotation to orbit around owner

  • Default speed: 180 deg/sec (completes full orbit in 2 seconds)

This is perfect for rotating shields, orbiting particles, or any attachment that needs to circle around an actor.

Args: name: Component Blueprint name rotation_per_second: Orbit speed in degrees per second orbit_radius: Radius of the circular orbit in Unreal units folder_path: Content browser folder

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: create_circular_movement_component()

add_component_to_blueprint_actorA

Add a custom Blueprint Component to an existing Blueprint Actor.

From Ch. 18: Adding BP_ExpLevelComp or BP_CircularMovComp to ThirdPersonCharacter. The component's events and functions become available in the Actor's Blueprint graph.

Args: blueprint_name: Target Actor Blueprint to modify component_blueprint_name: Component Blueprint to add attach_to_component: Parent component name to attach to (empty = root) component_location: Relative location for the component

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: add_component_to_blueprint_actor(blueprint_name="/Game/MCP_Test/BP_Example", component_blueprint_name="/Game/MCP_Test/BP_Example")

add_set_timer_by_event_nodeA

Add a SetTimerByEvent node with a connected Custom Event.

From Ch. 18 (Actor Component testing): Set Timer by Event calls a custom event on a regular interval. Used in the book to trigger GainXP every second.

Args: blueprint_name: Blueprint to add the node to time_seconds: Timer interval in seconds looping: True for repeating timer custom_event_name: Name of the custom event that gets called trigger_event: Event that starts the timer (e.g., "ReceiveBeginPlay") node_position: [X, Y] graph position

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: add_set_timer_by_event_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_owner_nodeA

Add a GetOwner node to retrieve the Actor that owns this component.

From Ch. 18: When scripting inside a component Blueprint, GetOwner returns a reference to the Actor that has this component added to it. Optionally cast to a specific class to access class-specific functionality.

Args: blueprint_name: Component Blueprint to add the node to cast_to_class: Class to cast the owner to (e.g., "BP_Character"). Empty = no cast. node_position: [X, Y] graph position

KB: see knowledge_base/11_BLUEPRINT_LIBRARIES_AND_COMPONENTS.md#overview Example: add_get_owner_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_procedural_mesh_blueprintA

Create a procedural mesh placement Blueprint using Construction Script.

From Ch. 19: Creates BP_ProceduralMeshes that uses an Instanced Static Mesh component and nested For Loops in the Construction Script to place rows of static mesh instances. All parameters are Instance Editable so level designers can configure them per instance.

The result is a Blueprint that, when placed in a level, automatically generates a grid of mesh instances (e.g., rows of chairs, plants, lights).

Args: name: Blueprint name (e.g., "BP_ProceduralMeshes") static_mesh_path: Default Static Mesh asset path default_instances_per_row: Number of instances per row default_number_of_rows: Number of rows default_space_between_instances: Spacing between instances in a row (UE units) default_space_between_rows: Spacing between rows (UE units) folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_procedural_mesh_blueprint()

create_spline_placement_blueprintA

Create a Blueprint that places Static Mesh instances along a Spline component.

From Ch. 19: Creates BP_SplinePlacement with:

  • Spline component (editable in Level Editor by dragging spline points)

  • Instanced Static Mesh component

  • CalculateNumberOfInstances macro (GetSplineLength / SpaceBetweenInstances)

  • Construction Script that iterates along the spline, placing instances at each distance interval using GetLocationAtDistanceAlongSpline + GetRotationAtDistanceAlongSpline

Args: name: Blueprint name static_mesh_path: Default Static Mesh asset path for instances default_space_between_instances: Distance between instances along the spline folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_spline_placement_blueprint()

add_instanced_static_mesh_componentA

Add an Instanced Static Mesh component to a Blueprint.

From Ch. 19: The Instanced Static Mesh (ISM) component is optimized to render many copies of the same mesh efficiently. It's the core tool for procedural generation and environment population.

Note: There is also HISM (Hierarchical ISM) for meshes with LOD.

Args: blueprint_name: Blueprint to add the component to component_name: Component name in the Components panel static_mesh_path: Static Mesh asset to assign (can be set later) attach_to_root: Attach to root component (True) or as child

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_instanced_static_mesh_component(blueprint_name="/Game/MCP_Test/BP_Example")

add_spline_componentA

Add a Spline component to a Blueprint.

From Ch. 19: The Spline component defines a curved path in 3D space. Its points can be edited in the Level Editor (Add Spline Point Here, translate and rotate points). Used with GetLocationAtDistanceAlongSpline and GetRotationAtDistanceAlongSpline for instance placement.

Args: blueprint_name: Blueprint to add the Spline component to component_name: Component name num_points: Initial number of spline points (minimum 2)

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_spline_component(blueprint_name="/Game/MCP_Test/BP_Example")

add_spline_mesh_componentB

Add a Spline Mesh component to deform a Static Mesh along a two-point spline.

From Ch. 19: The Spline Mesh component deforms a Static Mesh between two control points. Use SetStartAndEnd in the Construction Script to define the shape. Perfect for creating curved pipes, rails, fences, etc.

Args: blueprint_name: Blueprint to add the component to component_name: Component name static_mesh_path: Static Mesh asset to deform start_pos: Start point world position end_pos: End point world position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_spline_mesh_component(blueprint_name="/Game/MCP_Test/BP_Example")

create_editor_utility_blueprintA

Create an Editor Utility Blueprint that runs in the Unreal Editor.

From Ch. 19: Editor Utility Blueprints can manipulate Assets and Actors in Edit Mode (not during Play). They appear as right-click context menu options in the Level Editor or Content Browser.

Types:

  • "ActorActionUtility": manipulate selected Actors in the Level Editor. Functions appear under Right-click > Scripted Actor Actions.

  • "AssetActionUtility": manipulate Assets in the Content Browser. Functions appear under Right-click > Scripted Asset Actions.

  • "EditorUtilityBlueprint": general editor scripting.

Available editor scripting nodes include:

  • GetSelectionSet: get selected Actors

  • GetActorLocation/SetActorLocation

  • EditorScripting category functions

Args: name: Blueprint name (e.g., "BPU_ActorAction") utility_type: "ActorActionUtility", "AssetActionUtility", or "EditorUtilityBlueprint" functions: Function definitions [{"name", "inputs", "outputs"}] folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_editor_utility_blueprint(name="ExampleName")

create_align_actors_utilityA

Create the AlignOnXAxis Editor Utility Blueprint from Ch. 19.

Creates BPU_AlignActors (ActorActionUtility) with an AlignOnXAxis function:

  1. GetSelectionSet -> get array of selected actors

  2. Get Location X of first actor (index 0)

  3. ForEachLoop -> SetActorLocation X on each selected actor

Right-click multiple actors in the level -> Scripted Actor Actions -> AlignOnXAxis.

Args: name: Blueprint name folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_align_actors_utility()

add_get_spline_length_nodeA

Add a GetSplineLength node to get the total length of a Spline.

From Ch. 19: Used in the CalculateNumberOfInstances macro to determine how many instances fit along the spline at a given spacing.

Args: blueprint_name: Blueprint containing the Spline component spline_component_variable: Spline component reference name node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_get_spline_length_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_location_at_distance_along_spline_nodeA

Add a GetLocationAtDistanceAlongSpline node.

From Ch. 19: Returns the world or local location at a specified distance along the spline. Used in Construction Script to position instances at regular intervals along the spline path.

Args: blueprint_name: Blueprint to add the node to spline_component_variable: Spline component reference name coordinate_space: "Local" or "World" node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_get_location_at_distance_along_spline_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_rotation_at_distance_along_spline_nodeA

Add a GetRotationAtDistanceAlongSpline node.

From Ch. 19: Returns the rotation at a specified distance along the spline. Paired with GetLocationAtDistanceAlongSpline to orient instances so they face along the spline direction.

Args: blueprint_name: Blueprint to add the node to spline_component_variable: Spline component reference name coordinate_space: "Local" or "World" node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_get_rotation_at_distance_along_spline_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_instanced_mesh_add_instance_nodeA

Add an AddInstance node for an Instanced Static Mesh component.

From Ch. 19: The core of procedural generation. AddInstance takes an Instance Transform (Location, Rotation, Scale) and adds a new mesh instance at that transform. Called in loops to batch-create many instances.

Args: blueprint_name: Blueprint to add the node to instanced_mesh_variable: Instanced Static Mesh component variable name node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_instanced_mesh_add_instance_node(blueprint_name="/Game/MCP_Test/BP_Example")

place_navmesh_bounds_volumeA

Place a NavMesh Bounds Volume in the current level.

From Ch. 9: The NavMesh Bounds Volume defines the navigable area for AI. The editor automatically generates the navigation mesh within this volume. Press P in the viewport to toggle NavMesh visibility (green overlay).

Scale the volume to cover all walkable surfaces. AI agents can only navigate within the bounds of this volume.

Args: location: [X, Y, Z] world location for the volume center scale: [X, Y, Z] scale to cover the navigable area

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: place_navmesh_bounds_volume()

add_construction_script_for_loopA

Add a For Loop node in a Blueprint's Construction Script.

From Ch. 19: Used in BP_ProceduralMeshes Construction Script to iterate over rows and instances. Nested For Loops create 2D grids of instances.

The Construction Script runs in the Editor when an instance is placed or its properties are changed, making it perfect for procedural generation.

Args: blueprint_name: Blueprint to add the node to first_index: Starting index (usually 1 for 1-based counting) last_index_variable: Variable providing the max loop count nested: Whether this is a nested (inner) loop node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_construction_script_for_loop(blueprint_name="/Game/MCP_Test/BP_Example")

pcg_check_supportA

Report whether Unreal Python exposes the PCG classes needed by Ghost.

KB: see knowledge_base/10_WORLD_BUILDING.md#4-procedural-content-generation-pcg Example: pcg_check_support()

pcg_create_graph_assetA

Create or reuse a PCG graph asset through Unreal Python when available.

Args: graph_path: Content Browser path such as /Game/PCG/PCG_CityDistrict. overwrite: Delete an existing graph before creation. save: Save the graph package after creation.

KB: see knowledge_base/10_WORLD_BUILDING.md#4-procedural-content-generation-pcg Example: pcg_create_graph_asset(graph_path="/Game/PCG/PCG_CityDistrict")

pcg_create_volumeA

Spawn a PCG volume and optionally assign a PCG graph.

Args: actor_label: Editor label for the new PCG volume actor. graph_path: Optional /Game path to an existing PCG graph asset. location: World location [x, y, z]. rotation: World rotation [pitch, yaw, roll]. scale: Actor scale [x, y, z]. generate: Try known PCG generation methods after graph assignment.

KB: see knowledge_base/10_WORLD_BUILDING.md#4-procedural-content-generation-pcg Example: pcg_create_volume(actor_label="PCG_Downtown", graph_path="/Game/PCG/PCG_CityDistrict")

pcg_refresh_volumeA

Refresh an existing PCG volume by label or actor name.

Args: actor_label: Existing PCG volume actor label or object name. cleanup: Try known cleanup methods before regeneration. generate: Try known generation/refresh methods.

KB: see knowledge_base/10_WORLD_BUILDING.md#4-procedural-content-generation-pcg Example: pcg_refresh_volume(actor_label="PCG_Downtown", cleanup=True)

spatial_scene_overviewA

Summarize live level actors and resolve explicit local content bounds.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

The optional local_actor_query establishes a read-only local scope over observed physical-content actor labels, names, classes, paths, tags, or asset paths. Selection takes precedence. Without selection, a matching explicit query, or exactly one authored Ghost.RoomBounds actor, local bounds fail closed as ambiguous.

Example: spatial_scene_overview(local_actor_query="Enclave", limit=50)

spatial_analyze_roomB

Infer room dimensions, surfaces, zones, and clearance risks from live actors.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This read-only analysis turns selected or filtered level actors into a planner-ready room model for interior composition, surface probing, and validation. It uses bounds/name/tag heuristics and does not mutate the Unreal Editor scene.

Example: spatial_analyze_room(room_type="apartment", actor_query="Apartment")

spatial_plan_room_bounds_designationA

Plan the editor tags/volumes that make room bounds authoritative.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner returns the Ghost room-bounds designation contract: a RoomBounds volume, optional Zone/Openings/Path/Surface markers, shared room id tags, and handoffs back into live room analysis. It does not mutate Unreal Editor state.

Example: spatial_plan_room_bounds_designation(room_id="apartment_01", zone_names=["entry", "kitchen", "living", "bedroom"])

spatial_infer_functional_zonesA

Infer usable functional zones for an interior worldbuilding plan.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner consumes room analysis, screenshot detections, and/or an existing composition to infer kitchen, living, bedroom, entry, hallway, bathroom, and utility regions before prop generation or placement. It does not mutate Unreal Editor state.

Example: spatial_infer_functional_zones(room_analysis_json="", requested_zones=["kitchen", "living"])

spatial_plan_interior_prop_programA

Plan a zone-aware interior prop program before composition.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner turns room analysis, functional zones, screenshot detections, user-required props, and known assets into a per-zone fixture/furniture/clutter/fill program. It does not mutate Unreal or submit Tripo jobs.

Example: spatial_plan_interior_prop_program(functional_zone_plan_json="", required_props=["fridge", "stove"])

spatial_query_actorsC

Find actors by name, class, tag, radius, and/or bounding box.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Example: spatial_query_actors(query="door", center=[0, 0, 0], radius=2000)

spatial_describe_actorC

Describe one actor's transform, bounds, tags, components, and neighbors.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Example: spatial_describe_actor(actor="BP_PlayerStart")

spatial_proximity_mapC

Map actors near an actor, the selected actor, or a world-space point.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Example: spatial_proximity_map(actor="SM_CityBlock_A", radius=3000)

spatial_view_contextC

Read viewport camera context, selected actors, and nearby actors.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Example: spatial_view_context(nearby_radius=5000)

spatial_surface_probeA

Probe surfaces with downward traces and return placement locations.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This read-only tool adds surface awareness to Ghost's dry-run-first placement workflow. It uses public Unreal Python trace APIs and returns surface normals, hit actors, and placement handoff templates.

Example: spatial_surface_probe(center=[0, 0, 0], grid_count=9, grid_spacing=500)

spatial_validate_placementA

Validate placed actors against nearby surfaces and bounds overlap.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This is a read-only post-placement bridge. It reports whether actor bounds appear on-surface, floating, below/intersecting, missing a trace hit, or potentially overlapping nearby actor bounds.

Example: spatial_validate_placement(tag_filter="Gameplay_POI", surface_tolerance=15)

spatial_infer_placement_policyA

Infer a clean-room placement policy and dry-run handoff arguments.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This planner is intentionally local and read-only. It prepares arguments for Ghost's spatial placement tools without mutating Unreal Editor.

Example: spatial_infer_placement_policy(asset_paths=["/Game/City/SM_Block.SM_Block"], intent="city blockout")

spatial_plan_interior_compositionB

Plan a spatially coherent interior composition with Tripo handoffs.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner turns room dimensions, optional screenshot-derived prop observations, existing assets, and style intent into zone-aware placements plus guarded Tripo text/image generation and import steps.

Example: spatial_plan_interior_composition(room_type="apartment", style="lived-in modern")

spatial_prepare_screenshot_decomposition_requestA

Prepare a vision-agent request for screenshot decomposition.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner does not run computer vision. It turns a reference screenshot, optional room bounds, and optional live room analysis into a strict detected_items_json contract, vision prompt, and handoffs into Ghost's screenshot preflight, scene graph, crop, Tripo, binding, placement, and validation workflow.

Example: spatial_prepare_screenshot_decomposition_request(reference_image="C:/refs/apartment.png", image_size=[1280, 720])

spatial_preflight_screenshot_detectionsA

QA screenshot detections before reconstruction and Tripo generation.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner does not perform computer vision. It validates and normalizes agent/vision-supplied detected_items_json, checks crop box coverage, confidence, and overlap quality, then emits a normalized handoff for screenshot reconstruction.

Example: spatial_preflight_screenshot_detections(reference_image="C:/refs/apartment.png", detected_items_json="")

spatial_infer_screenshot_scene_graphB

Infer a clean-room spatial scene graph from screenshot detections.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner does not perform image segmentation. It consumes agent/vision-supplied detected_items_json, uses crop positions and prop metadata to infer relationships such as left/right, foreground, support contact, wall anchors, and zone clusters, then emits richer reconstruction handoffs.

Example: spatial_infer_screenshot_scene_graph(reference_image="C:/refs/apartment.png", detected_items_json="", image_size=[1280, 720])

spatial_prepare_screenshot_crop_manifestA

Write local prop crops for screenshot-driven Tripo image generation.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local tool accepts either detected_items_json plus a local reference image, or a screenshot reconstruction result with crop_tasks. It writes one PNG per crop box, updates image-to-model handoffs to real file paths, and returns an updated reconstruction JSON payload for the Tripo generation batch planner.

Example: spatial_prepare_screenshot_crop_manifest(reconstruction_plan_json="")

spatial_plan_screenshot_reconstructionB

Plan screenshot-driven interior reconstruction with Tripo crop handoffs.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner does not perform computer vision by itself. When no detections are supplied, it returns the expected detected_items_json schema for the agent's vision step. When detections are supplied, it maps each prop to an existing asset or guarded Tripo image/text handoff and reuses the spatial interior planner for dry-run placement. If a screenshot scene graph is supplied, support and wall-anchor relations are folded into the placement hints before planning.

Example: spatial_plan_screenshot_reconstruction(reference_image="C:/refs/apartment.png")

spatial_catalog_project_assetsB

Catalog existing project assets for spatial composition matching.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This read-only bridge queries project asset metadata from /Game folders and returns resolver-ready asset_catalog_json for spatial_resolve_project_assets. StaticMesh and Blueprint candidates are included by default so Ghost can prefer existing project content before guarded Tripo generation.

Example: spatial_catalog_project_assets(folders=["/Game/Props"], query="kitchen", class_names=["StaticMesh", "Blueprint"])

spatial_resolve_project_assetsA

Resolve planned spatial props against existing project assets first.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner accepts an interior composition or screenshot reconstruction plus a project asset catalog. It scores candidate /Game assets against planned props, emits asset_overrides_json for resolved matches, and hands unresolved props to the guarded Tripo batch planner.

Example: spatial_resolve_project_assets(composition_plan_json="", candidate_asset_paths=["/Game/Props/SM_Books.SM_Books"])

spatial_prepare_tripo_generation_batchB

Prepare a guarded Tripo generation batch for spatial compositions.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner accepts an interior composition, screenshot reconstruction output, or generated-asset binding output. It reconciles text and crop-based Tripo handoffs, keeps spend confirmation explicit, and returns the import, binding, placement, validation, and iteration follow-ups needed to finish the worldbuilding loop.

Example: spatial_prepare_tripo_generation_batch(composition_plan_json="")

spatial_bind_generated_assets_to_compositionA

Bind imported/generated assets back into a spatial composition plan.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner consumes a spatial interior composition plan plus completed Tripo import results or manual asset overrides. It replaces placeholder asset paths with real /Game assets and returns dry-run placement, validation, and iteration handoffs without mutating the Unreal Editor scene.

Example: spatial_bind_generated_assets_to_composition(composition_plan_json="", import_results_json="")

spatial_plan_asset_scale_correctionsA

Plan scale corrections for generated or bound spatial assets.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner consumes a generated-asset binding output, interior composition, or screenshot reconstruction. It compares planned prop dimensions to imported mesh bounds, recommends reviewed scale updates, and returns a scale-corrected dry-run composition plan without mutating the Unreal Editor scene.

Example: spatial_plan_asset_scale_corrections(composition_plan_json="")

spatial_plan_support_surface_anchorsB

Plan floor, support-surface, and wall anchors for a composition.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner consumes an interior composition, screenshot reconstruction, generated-asset binding, or scale-corrected plan plus optional spatial_analyze_room output. It updates dry-run placement steps so props intended for counters, tables, shelves, walls, or floors align to classified room surfaces before mutation.

Example: spatial_plan_support_surface_anchors(composition_plan_json="", room_analysis_json="")

spatial_apply_composition_planA

Apply or review a whole spatial composition placement queue.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This bridge accepts an interior composition, screenshot reconstruction, or generated-asset binding output. It normalizes placement steps into a batch queue, blocks unresolved generated assets by default, and executes editor placement only when dry_run=false and allow_mutation=true.

Example: spatial_apply_composition_plan(composition_plan_json="", dry_run=True)

spatial_preflight_interior_layoutA

Preflight an interior composition before editor placement.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner checks approximate room bounds, prop footprints, pairwise spacing, zone fit, support-surface hints, and circulation risks before the composition is placed or validated in live Unreal.

Example: spatial_preflight_interior_layout(composition_plan_json="")

spatial_plan_layout_preflight_correctionsA

Plan dry-run corrections from an interior layout preflight.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner consumes a composition plus spatial_preflight_interior_layout output. It deterministically repairs fixable bounds, overlap, and circulation findings in the dry-run plan, and routes support/semantic issues to the right follow-up tools.

Example: spatial_plan_layout_preflight_corrections(composition_plan_json="", layout_preflight_json="")

spatial_preflight_candidate_clearanceA

Check planned placement candidates against live actor bounds.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This read-only preflight builds conservative candidate bounds from a composition plan, then compares them to existing live Unreal actor bounds before any spawn/mutation step. It is a planning gate, not a physics simulation.

Example: spatial_preflight_candidate_clearance(composition_plan_json="", actor_query="Apartment")

spatial_plan_composition_iterationA

Plan dry-run corrections from placement validation and viewport notes.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local planner consumes a spatial interior composition plan plus a spatial_validate_placement result, then returns reviewed transform candidates, surface-probe handoffs, revalidation, and screenshot evidence steps. It does not mutate the Unreal Editor scene.

Example: spatial_plan_composition_iteration(validation_result_json="")

spatial_assess_environment_coherenceA

Assess whether an environment is spatially and compositionally coherent.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Example: spatial_assess_environment_coherence(composition_plan_json="", validation_result_json="")

The read-only assessment combines revision-bound scene facts with an explicit design intent. It checks stable identity/evidence status, support, circulation, clearances, landmarks/sightlines, functional zones, material families, ecological rules, and physical scale cues. Hard failures are never averaged away and inferred facts never become observed scene truth.

spatial_compile_worldbuilding_readinessA

Compile end-to-end readiness for spatial worldbuilding.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only compiler consumes any subset of Ghost spatial workflow outputs and reports gates, blockers, next actions, and viewport evidence handoffs for the room/screenshot reconstruction pipeline. It does not mutate Unreal, run vision, or submit paid Tripo jobs.

Example: spatial_compile_worldbuilding_readiness(reference_image="C:/refs/apartment.png")

spatial_plan_worldbuilding_work_orderA

Plan an executable interior worldbuilding work order.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This local/read-only planner turns a design brief, optional screenshot evidence, optional room analysis, and optional project asset catalog into a staged Ghost workflow: measure, decompose, plan, resolve assets, prepare guarded Tripo generation, bind/apply, validate, and capture evidence. It does not run vision, mutate Unreal, or submit paid Tripo jobs.

Example: spatial_plan_worldbuilding_work_order(reference_image="C:/refs/apartment.png", design_brief="Rebuild this compact apartment kitchen")

spatial_content_selection_contextA

Read selected Content Browser assets and prepare placement handoffs.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This is a read-only bridge from editor asset selection to Ghost's dry-run-first spatial placement workflow.

Example: spatial_content_selection_context(placement_layout="grid", tags=["Gameplay_POI"])

spatial_place_selected_assetsB

Plan or place selected Content Browser assets as a batch.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

If asset_paths is empty, the tool reads the current Content Browser selection. Real placement is transactional and requires allow_mutation.

Example: spatial_place_selected_assets(placement_layout="grid", dry_run=True)

spatial_select_actorsB

Resolve actors by spatial filters and optionally select/focus them.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

Dry-run mode executes a read-only actor resolution pass. Editor selection and viewport focus require dry_run=false and allow_mutation=true.

Example: spatial_select_actors(query="Market", tag_filter="Gameplay_POI", dry_run=True)

spatial_add_asset_to_sceneB

Plan or place one asset into the current level using Unreal Python.

KB: see knowledge_base/10_WORLD_BUILDING.md#9-world-building-best-practices

This is a clean-room scene-placement bridge inspired by Ghost's spatial awareness gap. It is dry-run by default and requires allow_mutation=true before changing the editor scene.

Example: spatial_add_asset_to_scene( asset_path="/Game/Props/SM_Table.SM_Table", tags=["Gameplay_POI"], data_layer_names=["Gameplay_POIs"], dry_run=True, )

server_lifecycle_statusB

Report Ghost server lifecycle, transport, bridge, and catalog state.

server_transport_diagnosticsA

Describe active MCP transport behavior, compatibility, security posture, and native gaps.

server_protocol_contractA

Describe Ghost's client-visible MCP protocol contract and native parity boundaries.

server_refresh_metadataC

Refresh runtime metadata that can safely update without re-registering Python tools.

server_list_operationsC

List tracked indirect tool operations and their latest progress event.

server_operation_statusA

Return detailed progress and cancellation state for one operation.

server_cancel_operationC

Request cooperative cancellation for a tracked operation.

create_vr_pawn_blueprintA

Create a VRPawn Blueprint with motion controller support.

From Ch. 16: Replicates the VR template VRPawn structure with:

  • Camera component (player view / HMD position)

  • MotionControllerRight + MotionControllerLeft components

  • MotionControllerRightAim + MotionControllerLeftAim (aim locations)

  • HMD Static Mesh (visual representation in spectator view)

  • TeleportTraceNiagaraSystem component (teleport arc particle system)

  • WidgetInteraction component (interact with VR menus)

  • Input events for thumbstick teleportation, grip grab, trigger fire, menu toggle

Args: name: Pawn Blueprint name enable_teleportation: Add teleportation input events and functions enable_object_grabbing: Add grab input events and GrabComponent logic enable_snap_turn: Add snap turn input event (rotate by fixed angle) enable_widget_interaction: Add WidgetInteraction component for menus folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_vr_pawn_blueprint()

add_motion_controller_componentA

Add a Motion Controller component to a Blueprint.

From Ch. 16: Motion Controller components track the physical VR controller position and rotation in real-time. The VR template uses pairs of controllers:

  • Grip controllers (MotionControllerRight/Left) - default grip location

  • Aim controllers (MotionControllerRightAim/LeftAim) - pointer/aim location

MotionSource values: "Right", "Left", "RightAim", "LeftAim", "Head", "Special1" through "Special8"

Args: blueprint_name: Blueprint to add the component to component_name: Component name in the Components panel motion_source: Controller source ("Right", "Left", "RightAim", "LeftAim") display_device_model: Whether to render the controller mesh in game is_aim_controller: If True, hide device model (for aim-only controllers)

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_motion_controller_component(blueprint_name="/Game/MCP_Test/BP_Example")

add_widget_interaction_componentA

Add a Widget Interaction component for VR UI interaction.

From Ch. 16: The Widget Interaction component works like a laser pointer, allowing the user to interact with UMG Widget Blueprints placed in the world. Used in the VR menu system activated by the Menu button.

Args: blueprint_name: Blueprint to add the component to component_name: Component name interaction_distance: Max distance for widget interaction (UE units) show_debug: Show debug visualization beam

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_widget_interaction_component(blueprint_name="/Game/MCP_Test/BP_Example")

add_call_interface_function_nodeB

Add a node to call a Blueprint Interface function on a target object.

From Ch. 16: The VRPawn calls TriggerPressed on whatever Grabbable Actor the controller is holding - if the Actor implements VRInteractionBPI, the function executes; if not, nothing happens (safe call, no crash).

This is the key advantage of interfaces over direct casting: you can call functions on unknown object types safely.

Args: blueprint_name: Blueprint making the call interface_name: Interface containing the function function_name: Interface function name to call target_variable: Variable or node providing the target Actor reference node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_call_interface_function_node(blueprint_name="/Game/MCP_Test/BP_Example", interface_name="ExampleName", function_name="ExampleName")

create_grab_componentA

Create a GrabComponent Scene Component for VR object grabbing.

From Ch. 16: The GrabComponent is added to any Actor you want to be grabbable in VR. It handles attachment to the motion controller and supports multiple grab types.

Grab Types (from the book):

  • "None": Grabbing disabled (without removing component)

  • "Free": Object attaches at current relative position (cubes, balls)

  • "Snap": Object snaps to predefined grip location/rotation (weapons)

  • "Custom": Use OnGrabbed/OnDropped event dispatchers for custom logic

The Actor must have Mobility set to Movable.

Args: name: Component Blueprint name default_grab_type: Default grab type ("Free", "Snap", "None", "Custom") folder_path: Content browser folder

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: create_grab_component()

make_actor_vr_grabbableB

Make a Blueprint Actor grabbable in VR by adding a GrabComponent.

From Ch. 16: To make any Actor grabbable, add GrabComponent and set Mobility to Movable on the root mesh. The VRPawn's InputAction GrabLeft/Right uses a sphere trace near the motion controller to find GrabComponents.

Args: blueprint_name: Blueprint to make grabbable grab_type: Grab type ("Free", "Snap", "None", "Custom") grab_component_name: Name for the GrabComponent simulate_physics: Enable physics simulation for realistic grabbing

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: make_actor_vr_grabbable(blueprint_name="/Game/MCP_Test/BP_Example")

add_teleport_system_to_pawnA

Add the complete teleportation system to a VR Pawn Blueprint.

From Ch. 16: Implements the full teleport system:

  1. InputAxis MovementAxisRight_Y (thumbstick up detection + deadzone check)

  2. DoOnce -> StartTeleportTrace function

  3. TeleportTrace function (PredictProjectilePathByObjectType for arc)

  4. On release: EndTeleportTrace + TryTeleport

  5. Visual feedback via TeleportTrace Niagara System + TeleportVisualizer

The StartTeleportTrace, TeleportTrace, EndTeleportTrace, TryTeleport functions are all created in the pawn Blueprint.

Args: blueprint_name: VR Pawn Blueprint to modify teleport_visualizer_blueprint: Blueprint to use as teleport destination marker deadzone_threshold: Minimum axis value to start teleport (prevents accidental triggers) use_projectile_path: Use projectile arc (True) or straight line (False)

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_teleport_system_to_pawn(blueprint_name="/Game/MCP_Test/BP_Example")

add_vr_input_action_nodeA

Add a VR input action event node to a Blueprint.

From Ch. 16: VR input actions from the VR template include:

  • "GrabLeft" / "GrabRight" (grip button)

  • "TriggerLeft" / "TriggerRight" (trigger button)

  • "MenuToggleLeft" / "MenuToggleRight" (menu button)

  • "TeleportLeft" / "TeleportRight" (thumbstick)

VR axis inputs (use add_blueprint_input_action_node for these):

  • "MovementAxisRight_Y" / "MovementAxisRight_X" (right thumbstick)

  • "MovementAxisLeft_Y" / "MovementAxisLeft_X" (left thumbstick)

Args: blueprint_name: Blueprint to add the input node to input_action: VR input action name node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_vr_input_action_node(blueprint_name="/Game/MCP_Test/BP_Example", input_action="Example")

add_predict_projectile_path_nodeA

Add a PredictProjectilePathByObjectType node for VR teleport arc.

From Ch. 16: The TeleportTrace function uses this node to calculate the arc trajectory of the teleport. Returns the predicted path positions array and the landing location for the teleport visualizer.

Args: blueprint_name: Blueprint to add the node to simulation_frequency: Path simulation frequency max_sim_time: Maximum simulation time for the arc (seconds) node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_predict_projectile_path_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_validated_get_nodeA

Add a Validated Get node for safe object reference access.

From Ch. 16: A Validated Get node (right-click -> Convert to Validated Get) adds execution pins to check if an object reference is valid before using it. This prevents crashes from accessing destroyed or null references.

The node has:

  • Is Valid execution pin (proceed normally)

  • Is Not Valid execution pin (handle null case)

Args: blueprint_name: Blueprint to add the node to variable_name: Variable to access with validation cast_to_class: Optional class to cast to after validation node_position: [X, Y] graph position

KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: add_validated_get_node(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName")

create_level_variant_setsA

Create a Level Variant Sets asset for product configurator / variant switching.

From Ch. 20: Level Variant Sets is an asset containing multiple Variant Sets, each containing Variants. Each Variant captures specific property changes on actors in the level (materials, meshes, visibility, transforms).

Structure: LevelVariantSets (asset) └── VariantSet (e.g., "Color", "Wheels", "Interior") ├── Variant (e.g., "Red", "Blue", "Green") │ └── Captured Properties (actor -> property -> value) └── Variant (e.g., "Black")

Args: name: Level Variant Sets asset name variant_sets: List of variant set definitions: [{"name": str, "variants": [{"name": str, "captures": [...]}]}] folder_path: Content browser folder

Example: create_level_variant_sets()

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview

add_variant_to_level_variant_setsA

Add a Variant to an existing Variant Set in a Level Variant Sets asset.

Each Variant stores property captures - snapshots of property values on level actors that are applied when the variant is activated.

Args: lvs_name: Level Variant Sets asset name variant_set_name: Target Variant Set name within the LVS variant_name: New Variant name to create captured_properties: List of property captures: [{"actor_name": str, "property_type": str, "property_value": any}] property_type: "Material", "Visibility", "Transform", "Mesh"

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_variant_to_level_variant_sets(lvs_name="ExampleName", variant_set_name="ExampleName", variant_name="ExampleName")

add_activate_variant_nodeA

Add an ActivateVariant node to switch variants via Blueprint.

From Ch. 20: The BP_Configurator Blueprint calls ActivateVariant to switch between product variants when buttons are pressed.

Args: blueprint_name: Blueprint to add the node to lvs_variable: Variable holding the Level Variant Sets reference variant_set_name: Name of the Variant Set to switch in variant_name: Name of the Variant to activate node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_activate_variant_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_activate_variant_set_nodeB

Add an ActivateVariantSet node to activate all variants in a set.

From Ch. 20: Activates all variants within a Variant Set. Useful for resetting or applying a full configuration.

Args: blueprint_name: Blueprint to add the node to lvs_variable: Variable holding the Level Variant Sets reference variant_set_name: Variant Set name to fully activate node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_activate_variant_set_node(blueprint_name="/Game/MCP_Test/BP_Example")

create_product_configurator_blueprintA

Create the BP_Configurator Blueprint from Ch. 20.

Creates a Blueprint that:

  1. Holds a reference to the Level Variant Sets asset

  2. On BeginPlay: iterates variant sets + variants to dynamically build a UMG widget with buttons for each variant

  3. Each button is bound to call ActivateVariant on click

This mirrors the product configurator pattern from the book where the UI is generated dynamically from the Variant Sets data.

Args: name: Configurator Blueprint name lvs_asset_name: Level Variant Sets asset to reference widget_blueprint_name: Widget Blueprint to create for the UI folder_path: Content browser folder

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: create_product_configurator_blueprint()

add_get_all_variants_nodeA

Add a GetVariants node to get all variants in a Variant Set.

From Ch. 20: Used in BP_Configurator to iterate over all variants and generate UI buttons dynamically.

Returns an array of Variant objects from the specified Variant Set.

Args: blueprint_name: Blueprint to add the node to lvs_variable: Level Variant Sets variable name variant_set_name: Variant Set to get variants from node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_get_all_variants_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_variant_sets_nodeA

Add a GetVariantSets node to get all Variant Sets in a Level Variant Sets asset.

From Ch. 20: Used in BP_Configurator to iterate over all Variant Sets and generate tab-style category buttons for each set.

Args: blueprint_name: Blueprint to add the node to lvs_variable: Level Variant Sets variable name node_position: [X, Y] graph position

KB: see knowledge_base/17_GAME_SYSTEMS_COOKBOOK.md#overview Example: add_get_variant_sets_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_actor_location_nodeA

Add a 'Get Actor Location' node returning a Vector (world location).

Ch.14: The Location variable of Transform is type Vector (X,Y,Z in cm). Use this to read where an actor is in world space.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_actor_location_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_actor_location_nodeA

Add a 'Set Actor Location' node to teleport an actor to a new Vector.

Ch.14: Sets New Location directly; use AddActorWorldOffset for relative moves.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_actor_location_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_actor_world_offset_nodeA

Add an 'Add Actor World Offset' node - moves actor by DeltaLocation Vector.

Ch.14: AddActorWorldOffset uses Delta Location to modify the current location. More appropriate than SetActorLocation for incremental movement each tick.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_actor_world_offset_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_actor_rotation_nodeA

Add a 'Get Actor Rotation' node returning a Rotator (Pitch, Yaw, Roll in degrees).

Ch.14: The Rotation variable of Transform is type Rotator.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_actor_rotation_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_actor_rotation_nodeA

Add a 'Set Actor Rotation' node to assign a new Rotator.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_actor_rotation_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_actor_world_rotation_nodeA

Add an 'Add Actor World Rotation' node - rotates actor by DeltaRotation.

Ch.14: AddActorWorldRotation adds the Delta Rotation to the current rotation.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_actor_world_rotation_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_actor_scale_nodeC

Add a 'Get Actor Scale 3D' node returning the actor's scale as a Vector.

Ch.14: Scale variable has X, Y, Z values. Use SetActorScale3D to modify.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_actor_scale_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_actor_scale_nodeB

Add a 'Set Actor Scale 3D' node to set the actor's 3D scale.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_actor_scale_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_relative_location_nodeB

Add a 'Get Relative Location' node for a specific component.

Ch.14: Component transforms are relative to their parent component. DefaultSceneRoot is the actor root; all sub-components have relative transforms.

Args: blueprint_name: Blueprint name component_name: Component to get relative location from node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_relative_location_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_set_relative_location_nodeA

Add a 'Set Relative Location' node to move a component relative to its parent.

Ch.14: Relative location is local to the component's parent transform.

Args: blueprint_name: Blueprint name component_name: Component to move node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_relative_location_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_vector_add_nodeA

Add a Vector + Vector addition node.

Ch.14: couch_location = character_location + movement_vector Adds each element: (X1+X2, Y1+Y2, Z1+Z2).

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_vector_add_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_vector_subtract_nodeA

Add a Vector - Vector subtraction node.

Ch.14: movement = destination - start_point. Subtracts element-wise.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_vector_subtract_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_vector_multiply_nodeA

Add a Vector * Float multiplication node.

Ch.14: To find the opposite vector, multiply by -1 (e.g., backward = forward * -1).

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_vector_multiply_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_normalize_vector_nodeA

Add a 'Normalize' vector node - returns a unit vector (length = 1).

Ch.14: Normalization gives direction without magnitude. Used before multiplying by speed to get direction-based movement.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_normalize_vector_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_vector_length_nodeB

Add a 'Vector Length' node - returns the magnitude/distance of a vector.

Ch.14: Length = sqrt(XX + YY + Z*Z). Use to measure distances.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_vector_length_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_dot_product_nodeB

Add a 'Dot Product' node between two vectors.

Ch.14: Dot product = X1X2 + Y1Y2 + Z1*Z2. Returns 1 if parallel, 0 if perpendicular, -1 if opposite. Useful for checking if something is in front of/behind actor.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_dot_product_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_cross_product_nodeA

Add a 'Cross Product' node between two vectors.

Ch.14: Returns a vector perpendicular to both inputs. Useful for computing normals and right-angle vectors.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_cross_product_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_forward_vector_nodeA

Add a 'Get Actor Forward Vector' node.

Ch.14: Returns normalized forward direction vector of the actor. Multiply by speed to move in the actor's forward direction.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_forward_vector_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_right_vector_nodeA

Add a 'Get Actor Right Vector' node.

Ch.14: Returns normalized right direction vector of the actor. Multiply by -1 to get the left vector.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_right_vector_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_up_vector_nodeB

Add a 'Get Actor Up Vector' node.

Ch.14: Returns normalized up direction vector of the actor. Multiply by -1 to get the down vector.

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_up_vector_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_get_unit_direction_vector_nodeA

Add a 'Get Unit Direction Vector' node - normalized direction from A to B.

Ch.14: Normalized (unit length) vector pointing from From to To. Equivalent to normalize(To - From).

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_get_unit_direction_vector_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_line_trace_by_channel_nodeA

Add a 'Line Trace By Channel' node.

Ch.14: Tests for collisions along a line using Visibility or Camera channel. Returns a single Hit Result (first actor hit). Use break_hit_result_node to access hit data (Location, Hit Actor, Impact Normal, etc.)

Args: blueprint_name: Blueprint name trace_channel: "Visibility" or "Camera" draw_debug: "None", "ForOneFrame", "ForDuration", "Persistent" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_line_trace_by_channel_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_multi_line_trace_by_channel_nodeA

Add a 'Multi Line Trace By Channel' node - returns ALL actors hit as array.

Ch.14: MultiLineTraceByChannel is more expensive but returns every hit along the trace line as an array of Hit Result structures.

Args: blueprint_name: Blueprint name trace_channel: "Visibility" or "Camera" draw_debug: "None", "ForOneFrame", "ForDuration", "Persistent" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_multi_line_trace_by_channel_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_line_trace_for_objects_nodeA

Add a 'Line Trace For Objects' node - traces for specific object types.

Ch.14: LineTraceForObjects filters by Object Type instead of channel. Object types: WorldStatic, WorldDynamic, Pawn, PhysicsBody, Vehicle, Destructible, Projectile. Returns first hit matching an object type.

Args: blueprint_name: Blueprint name object_types: List of object types to trace against draw_debug: "None", "ForOneFrame", "ForDuration", "Persistent" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_line_trace_for_objects_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_multi_line_trace_for_objects_nodeB

Add a 'Multi Line Trace For Objects' node - returns all hits for object types.

Ch.14: Returns array of Hit Results for all matching objects along the trace line.

Args: blueprint_name: Blueprint name object_types: List of object types to trace against draw_debug: "None", "ForOneFrame", "ForDuration", "Persistent" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_multi_line_trace_for_objects_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_sphere_trace_for_objects_nodeB

Add a 'Sphere Trace For Objects' node - sphere-shaped collision test.

Ch.14: Shape traces test along a volume instead of a line. More expensive but detects wider areas. SphereTraceForObjects sweeps a sphere.

Args: blueprint_name: Blueprint name radius: Sphere radius in Unreal units (cm) object_types: Object types to detect draw_debug: Debug visualization type node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_sphere_trace_for_objects_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_sphere_trace_by_channel_nodeA

Add a 'Sphere Trace By Channel' node - sphere sweep using trace channel.

Ch.14: SphereTraceByChannel uses Visibility or Camera channel to filter hits.

Args: blueprint_name: Blueprint name radius: Sphere radius in cm trace_channel: "Visibility" or "Camera" draw_debug: Debug visualization type node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_sphere_trace_by_channel_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_capsule_trace_by_channel_nodeA

Add a 'Capsule Trace By Channel' node - capsule-shaped sweep trace.

Ch.14: CapsuleTrace is more expensive than LineTrace but covers a capsule volume, useful for character-sized sweeps (characters use capsules for collision).

Args: blueprint_name: Blueprint name radius: Capsule radius half_height: Half-height of the capsule trace_channel: "Visibility" or "Camera" draw_debug: Debug visualization type node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_capsule_trace_by_channel_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_box_trace_by_channel_nodeA

Add a 'Box Trace By Channel' node - box-shaped sweep trace.

Ch.14: BoxTraceByChannel sweeps a box shape along the trace line.

Args: blueprint_name: Blueprint name half_size: [X, Y, Z] half extents of the box in cm trace_channel: "Visibility" or "Camera" draw_debug: Debug visualization type node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_box_trace_by_channel_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_break_hit_result_nodeA

Add a 'Break Hit Result' node - decomposes Hit Result structure.

Ch.14: Hit Result contains:

  • Blocking Hit (bool): Whether trace hit something

  • Location (Vector): World location of the hit point

  • Impact Normal (Vector): Surface normal at hit point

  • Hit Actor (Actor ref): Reference to the actor that was hit

  • Hit Component (Component ref): Component that was hit

  • Bone Name (Name): Bone hit on a Skeletal Mesh

  • Distance (float): Distance from start to hit

Args: blueprint_name: Blueprint name node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_break_hit_result_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_draw_debug_line_nodeA

Add a 'Draw Debug Line' node - draws a line in the viewport for debugging.

Ch.14: Trace functions have Draw Debug Type option. This node explicitly draws a 3D line for custom debug visualization. Debug lines are useful to find problems when traces aren't acting as expected.

Args: blueprint_name: Blueprint name duration: How long the line persists (0 = one frame) color: [R, G, B, A] 0-255 color of the debug line node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_draw_debug_line_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_draw_debug_sphere_nodeB

Add a 'Draw Debug Sphere' node for 3D debug visualization.

Args: blueprint_name: Blueprint name radius: Sphere radius in cm duration: How long the sphere persists (0 = one frame) color: [R, G, B, A] color of the debug sphere node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_draw_debug_sphere_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_draw_debug_point_nodeA

Add a 'Draw Debug Point' node - draws a dot in world space.

Args: blueprint_name: Blueprint name size: Point size in screen pixels duration: How long the point persists color: [R, G, B, A] color of the debug point node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_draw_debug_point_node(blueprint_name="/Game/MCP_Test/BP_Example")

add_set_collision_profile_nodeB

Add a 'Set Collision Profile Name' node for a component.

Ch.14: Collision Presets define how a component responds to traces/overlaps. Common presets: BlockAll, OverlapAll, OverlapAllDynamic, Pawn, Custom.

Args: blueprint_name: Blueprint name component_name: Component to set collision on profile_name: Collision preset: "BlockAll", "OverlapAll", "OverlapAllDynamic", "Pawn", "BlockAllDynamic", "NoCollision" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_collision_profile_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_set_collision_enabled_nodeB

Add a 'Set Collision Enabled' node to toggle collision on a component.

Args: blueprint_name: Blueprint name component_name: Component to configure collision_enabled: "NoCollision", "QueryOnly", "PhysicsOnly", "QueryAndPhysics", "QueryAndProbe", "ProbeOnly" node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_collision_enabled_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_set_generate_overlap_events_nodeA

Add a 'Set Generate Overlap Events' node.

Ch.5: Required to enable collision overlap callbacks. Without this set to True, OnComponentBeginOverlap won't fire.

Args: blueprint_name: Blueprint name component_name: Component to configure generate_overlap: True to enable overlap events node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_set_generate_overlap_events_node(blueprint_name="/Game/MCP_Test/BP_Example", component_name="ExampleComponent")

add_apply_point_damage_nodeA

Add an 'Apply Point Damage' node - damage at a specific world location/direction.

Similar to Apply Damage but includes hit location and direction, allowing physics reactions (e.g. pushback from projectile impact).

Args: blueprint_name: Blueprint name damage_amount: Default damage amount node_position: Optional [X, Y] graph position

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: add_apply_point_damage_node(blueprint_name="/Game/MCP_Test/BP_Example")

build_trace_interaction_blueprintA

Build a complete trace-based interaction system from Ch.14.

Creates the full example from the book:

  1. Adds a 'Trace Locations' macro (camera position + range ahead)

  2. Adds keyboard input event (default: E key)

  3. Adds LineTraceByChannel connected to the macro outputs

  4. Adds Break Hit Result to access the Hit Actor

  5. Compiles the Blueprint

Args: blueprint_name: Target Blueprint (usually FirstPersonCharacter) trace_range: How far the trace reaches in cm (default 300cm) trace_channel: Trace channel to use input_key: Key to trigger interaction (default "E")

KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#overview Example: build_trace_interaction_blueprint()

Prompts

Interactive templates invoked by user choice

NameDescription
infoComplete guide to Unreal MCP tools covering all Blueprint Visual Scripting features.

Resources

Contextual data attached and managed by the client

NameDescription
00_agent_knowledge_baseMaster reference for any AI agent using this repository.
01_blueprint_fundamentalsSource: Blueprints Visual Scripting for UE5 Marcos Romero, Unreal Engine Blueprint Game Developer Asadullah Alam
02_blueprint_communicationSource: Blueprints Visual Scripting for UE5 Marcos Romero, Unreal Engine Blueprint Game Developer Asadullah Alam
03_gameplay_frameworkSource: Blueprints Visual Scripting for UE5 Marcos Romero
04_ai_systemsSource: Blueprints Visual Scripting for UE5 Marcos Romero
05_animation_systemSource: Blueprints Visual Scripting for UE5 Marcos Romero, Mastering Technical Art in UE Greg Penninck
06_ui_umg_systemsSource: Blueprints Visual Scripting for UE5 Marcos Romero
07_data_structuresSource: Blueprints Visual Scripting for UE5 Marcos Romero
08_materials_and_renderingSource: Mastering Technical Art in UE Greg Penninck, Ch1-15, UE5 Game Dev Vol.1 Tiow Wee Tan, Ch3-5
09_niagara_vfxSource: project notes, Epic UE 5.6 Niagara/Python API docs, licensed VFX references
10_world_buildingSource: Game Development with UE5 Volume 1 Tiow Wee Tan, Mastering Technical Art in UE Greg Penninck
11_blueprint_libraries_and_componentsSource: Blueprints Visual Scripting for UE5 Marcos Romero, Ch.18 + Ch.19
12_mcp_tool_usage_guideThe ONLY authoritative guide for any AI agent using the Unreal-MCP-Ghost plugin.
13_tool_expansion_roadmapLast updated: 2026-09-03
15_input_system_and_umgSource: Blueprints Visual Scripting for UE5 Marcos Romero, Game Development with UE5 Vol.1 Tiow Wee Tan
16_animation_deep_diveSource: Blueprints Visual Scripting for UE5 Marcos Romero, Mastering Technical Art in UE Greg Penninck
17_game_systems_cookbookSource: Blueprints Visual Scripting for UE5 Marcos Romero, Unreal Engine Blueprint Game Developer Asadullah Alam
18_packaging_and_optimizationSource: Blueprints Visual Scripting for UE5 Marcos Romero, Mastering Technical Art in UE Greg Penninck, Game Development with UE5 Vol.1 Tiow Wee Tan
19_gameplay_ability_systemSource: project notes, Epic Gameplay Ability System documentation, Li C++/replication study guide
20_networking_and_replicationSource: project notes, Epic UE networking documentation, Li C++/multiplayer study guide
21_metasounds_and_audio_dspSource: project notes, Epic MetaSounds documentation, Marques editor/audio workflow study guide
22_geometry_script_and_modelingSource: project notes, Epic Geometry Script documentation, technical art workflow notes
23_mass_entity_and_statetreeSource: project notes, Epic Mass/StateTree/Smart Objects documentation, Sapio AI study guide
24_motion_matching_and_choosersSource: project notes, Epic Motion Matching documentation, animation system study guide
25_world_partition_and_hlodSource: project notes, Epic World Partition documentation, world-building guide
26_chaos_physics_and_destructionSource: project notes, Epic Chaos/Physics documentation, technical-art performance notes
27_metahuman_pipelineSource: project notes, Epic MetaHuman documentation, animation/import workflow notes
28_movie_render_queue_and_sequencerSource: project notes, Epic Sequencer/Movie Render Queue documentation, cinematic workflow notes
29_pixel_streaming_and_remoteSource: project notes, Epic Pixel Streaming documentation, deployment workflow notes
30_online_subsystem_and_eosSource: project notes, Epic OSS/EOS documentation, networking study guide
31_generative_content_pipelineSource: project notes, MCP import/tooling roadmap, Unreal asset pipeline practice
32_agent_playable_slice_recipeSource: project notes, Unreal-MCP-Ghost roadmap, execution-journal workflow
ai_developer_onboarding_promptV4 — 2026-04-16 | For a full session-startup prompt with V4 roadmap context, see knowledgebase/v4/NEXTDEVELOPERPROMPTV4.md.
indexUnreal-MCP-Ghost Plugin | UE 5.6
mcp_tooling_overviewUnreal-MCP-Ghost exposes Unreal Editor workflows through a Python MCP server that forwards structured commands to the Unreal editor plugin.
public_agent_guideUse this guide as the safe default context for MCP clients.
readmeThis folder contains reusable MCP and Unreal guidance for agents.
blueprint_organization_standardsCreated: 2026-04-30
iterative_level_design_frameworkSource: BioWare Mass Effect 2 GDC presentation analysis
ue5_ai_and_navigationSources: Sapio, Li, Marques/Sherry/Pereira/Fozi; synthesized for Unreal-MCP-Ghost.
ue5_animation_systemsSources: Li, Marques/Sherry/Pereira/Fozi, Sapio; synthesized for Unreal-MCP-Ghost.
ue5_blueprint_patternsSources: Li, Marques/Sherry/Pereira/Fozi, Sapio; synthesized for Unreal-MCP-Ghost.
ue5_collision_and_physicsSources: Li, Marques/Sherry/Pereira/Fozi; synthesized for Unreal-MCP-Ghost.
ue5_cpp_scripting_referenceSources: Li, Marques/Sherry/Pereira/Fozi, Sapio; synthesized for Unreal-MCP-Ghost.
ue5_gameplay_frameworkSources: Li, Marques/Sherry/Pereira/Fozi, Sapio; synthesized for Unreal-MCP-Ghost.
ue5_input_systemsSources: Li, Marques/Sherry/Pereira/Fozi; synthesized for Unreal-MCP-Ghost.
ue5_multiplayer_patternsSources: Li, Marques/Sherry/Pereira/Fozi; synthesized for Unreal-MCP-Ghost.
ue5_ui_umg_patternsSources: Marques/Sherry/Pereira/Fozi, Li; synthesized for Unreal-MCP-Ghost.
v4-api_reference_cheatsheetQuick reference for all UE5 Python APIs needed for Phases 1-4.
v4-architecture_blueprintKnowledge base reference: Unreal-MCP-Ghost — Architecture Blueprint
v4-deep_research_report_v4Date: 2026-04-16 | Scope: Open-source repos, UE engine systems, competitive landscape, strategic recommendations
v4-engine_source_study_guide_v4Date: 2026-04-16 | Purpose: Guide developer through the most relevant UE source areas for Unreal-MCP-Ghost
v4-ghostrigger_integration_specDeep research findings on both codebases with implementation specs for bridging them.
v4-graph_scripting_spec_v4Date: 2026-04-16 | Phase: Phase 2 of Roadmap V4
v4-native_mode_enhancement_specMaking Claude Desktop / Cursor / Windsurf experience equal to GenSpark AI Developer.
v4-next_developer_prompt_v4Date: 2026-04-16
v4-readmeGenerated: 2026-04-16
v4-repo_prioritization_matrix_v4Date: 2026-04-16 | Purpose: Rank external repos by strategic value to Unreal-MCP-Ghost
v4-roadmap_v4Date: 2026-04-16 | Branch: main
v4-sprint_trackerLast updated: 2026-04-16
v4-validation_test_matrix_v4Date: 2026-04-16 | Purpose: Define comprehensive test scenarios across all phases
v5-changelogAppend-only log for Workstream A knowledge-base changes.
resource_python_best_practicesUnreal Engine Python scripting best practices for AI agents.
resource_import_recipesRecipes for importing textures, meshes, and audio into Unreal.
resource_blueprint_recipesCommon Blueprint scripting patterns for AI agents.
resource_material_recipesMaterial creation recipes using Unreal Python automation.
resource_project_contextReturns a live snapshot of the current UE5 project context.

TDQS

C2.8/5.0

Scored across 729 tools

Disambiguation1/5

Massive redundancy makes tool selection nearly impossible. Identical or near-identical operations exist under multiple names: add_branch_node vs add_blueprint_branch_node vs bp_add_node, compile_blueprint vs bp_compile vs compile_blueprint_and_report, exec_python vs ue_exec_safe vs ue_exec_transact, and net_set_function_rpc vs net_create_rpc_event. An agent cannot reliably distinguish dozens of overlapping groups.

Naming Consistency2/5

Individual sub-families are consistent (spatial_*, gen_*, net_*), but the Blueprint tooling alone alternates between add_blueprint_*_node, add_*_node, and bp_* prefixes for the same operations. Verbs like create/add/build/insert are used interchangeably, and parallel APIs (create_material vs mat_create_material vs material_create_master) break any single predictable pattern.

Tool Count1/5

729 tools is an extreme mismatch for any conceivable server scope, far beyond the 50+ threshold for a 1. Even a comprehensive Unreal Engine integration would be better served by 30-50 consolidated tools; this count makes tool discovery and selection itself the primary obstacle.

Completeness4/5

The surface covers nearly every Unreal domain: Blueprint graphs, AI, animation, materials, VFX, UI, networking, GAS, audio, world building, geometry, and generative pipelines, each with create/read/update plus validation and repair tools. Minor gaps exist (e.g., asset deletion for several asset types), but exec_python and generic bridge tools provide escape hatches.

Maintenance

ActivitySlowing
ResponsivenessNo issues