Unreal-MCP-Ghost
Allows AI agents to control Unreal Engine 5 for editor automation, including Blueprint authoring, level inspection, actor spawning, UMG work, asset setup, and diagnostics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Unreal-MCP-Ghost list the actors in the current Unreal level"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unreal-MCP-Ghost
Unreal-MCP-Ghost is an Unreal Engine 5.6 editor plugin plus a Python FastMCP server that lets AI agents inspect and modify live UE projects through the Model Context Protocol.
The current server registers 713 MCP tools. The plugin exposes a TCP bridge to Unreal Editor on port 55655, and the Python server exposes MCP over stdio, sse, or streamable-http. The plugin also includes an optional dockable MCP Chat editor window with a compact IDE cockpit overview, queued-action preview, evidence timeline and artifact preview, live context chips, typed drag/drop references, and a categorized tool palette that can send messages to Cursor through the server.
main is the stable public branch. Experimental work belongs on wip. Project-specific knowledge, generated reports, and development logs remain local and are excluded from the public repository.
What It Can Do
Inspect levels, actors, Blueprints, components, variables, graphs, nodes, pins, compile diagnostics, references, source control state, and project assets.
Create and edit Blueprints, Blueprint Interfaces, variables, functions, graph nodes, comments, connections, timers, input handlers, UMG widgets, materials, data assets, save-game systems, and gameplay framework classes.
Work with AI systems: Behavior Trees, Blackboards, AI Controllers, BT tasks/decorators/services, navmesh helpers, and higher-level AI setup workflows.
Work with animation systems: Animation Blueprints, state machines, blend spaces, AnimGraph slot insertion, Control Rig asset/control/constraint helpers, IK Rig creation, IK Retargeter creation, skeleton bone inspection, and batch retargeting.
Import assets: textures, static meshes, skeletal meshes, audio, folders, and KotOR/GhostRigger assets.
Add VFX/audio/material logic: Niagara components, spawn Niagara nodes, sound nodes, material instance parameters, collision settings, and Sequencer transform tracks.
Validate and repair Blueprints with diagnostic, repair, execution journal, action risk-evaluation, PIE, log, and viewport evidence tools.
Provide a repo knowledge base for UE5 workflows, Blueprint patterns, MCP usage, first-person systems, retargeting, Sequencer, Control Rig, weapons, melee, force powers, and boss AI.
Provide an editor-side chat panel with a compact IDE cockpit overview, queued-action preview, evidence timeline and artifact preview, live level, actor, dirty-asset, compile, and SSE server context chips, typed asset/actor/file drag-drop references, a categorized tool palette, and an optional Cursor SDK watcher for automatic replies.
Related MCP server: unreal-engine-mcp
Architecture
AI client or Cursor watcher
|
| MCP stdio / SSE / streamable-http
v
Python FastMCP server
- unreal_mcp_server/unreal_mcp_server.py
- 713 registered MCP tools
- optional /chat/* HTTP routes on port 8000
|
| TCP JSON, one command per connection
v
UnrealMCP UE plugin
- localhost:55655
- runs commands on the editor GameThread
- UnrealMCP module: TCP bridge and command handlers
- UnrealMCPEditor module: Window > MCP Chat
|
v
Unreal Engine EditorRepository Layout
Unreal-MCP-Ghost/
|-- unreal_plugin/ # UE5 editor plugin to copy into a project
|-- unreal_mcp_server/ # Python FastMCP server and tool modules
|-- knowledge_base/ # General Unreal/MCP reference docs
|-- docs/knowledge-base/ # Packt study guides used by agents
|-- scripts/ue-chat-agent.mjs # Optional Cursor SDK chat watcher
|-- docs/ue-editor-chat-agent.md # Chat watcher instructions
|-- package.json # Node dependency for chat watcher
`-- pyproject.toml # Python dependency metadataFirst-Time Setup
1. Install Prerequisites
Unreal Engine
5.6Visual Studio 2022 with Game development with C++
Python
3.10+Git
Node.js
20+if you want automatic editor chat repliesuvis recommended for Python dependency/running workflows
Check basics:
python --version
uv --version
node --version
git --version2. Clone the Repo
git clone https://github.com/CrispyW0nton/Unreal-MCP-Ghost.git "C:\Dev\Unreal-MCP-Ghost"
cd "C:\Dev\Unreal-MCP-Ghost"3. Copy the Plugin into Your UE Project
The plugin must live under your project's Plugins folder.
$REPO = "C:\Dev\Unreal-MCP-Ghost"
$PROJECT = "C:\Users\You\Documents\UnrealProjects\MyGame"
New-Item -ItemType Directory -Force -Path "$PROJECT\Plugins\UnrealMCP"
Copy-Item -Recurse -Force "$REPO\unreal_plugin\*" "$PROJECT\Plugins\UnrealMCP\"When updating an existing project plugin, close Unreal Editor first and remove old plugin build artifacts:
Stop-Process -Name UnrealEditor -Force -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$PROJECT\Plugins\UnrealMCP\Binaries" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$PROJECT\Plugins\UnrealMCP\Intermediate" -ErrorAction SilentlyContinue
Copy-Item -Recurse -Force "$REPO\unreal_plugin\*" "$PROJECT\Plugins\UnrealMCP\"4. Generate Project Files
Right-click your .uproject and choose Generate Visual Studio project files, or run:
$UPROJECT = "$PROJECT\MyGame.uproject"
& "C:\Program Files\Epic Games\UE_5.6\Engine\Build\BatchFiles\GenerateProjectFiles.bat" `
-project="$UPROJECT" -game -rocket5. Build the Plugin
Open the generated .sln in Visual Studio 2022:
Configuration:
Development EditorPlatform:
Win64Build:
Ctrl+Shift+B
Or build from PowerShell:
& "C:\Program Files\Epic Games\UE_5.6\Engine\Build\BatchFiles\Build.bat" `
MyGameEditor Win64 Development `
-Project="$UPROJECT" `
-WaitMutex -FromMsBuild -architecture=x64Expected result:
Result: SucceededNotes:
Visual Studio 2022 compiler is not a preferred versionis usually a warning, not a blocker.If build fails with exit code
6, scroll up for the actualerror C...compiler line.If Live Coding is active, close Unreal Editor or press
Ctrl+Alt+F11.
6. Open Unreal and Verify the Plugin
Open the .uproject. In Window > Output Log, confirm:
UnrealMCPBridge: Server started on 127.0.0.1:55655PowerShell port check:
python -c "import socket; s=socket.socket(); s.settimeout(2); r=s.connect_ex(('127.0.0.1',55655)); s.close(); print('PLUGIN RUNNING' if r==0 else 'PLUGIN NOT RUNNING')"Running the MCP Server
Local AI Clients: stdio
Use this when Cursor, Claude Desktop, Windsurf, or another local MCP client launches the server itself:
{
"mcpServers": {
"unrealMCP": {
"command": "uv",
"args": [
"--directory",
"C:\\Dev\\Unreal-MCP-Ghost",
"run",
"python",
"unreal_mcp_server\\unreal_mcp_server.py"
]
}
}
}If you do not use uv:
{
"mcpServers": {
"unrealMCP": {
"command": "python",
"args": ["C:\\Dev\\Unreal-MCP-Ghost\\unreal_mcp_server\\unreal_mcp_server.py"]
}
}
}Restart the AI client after editing MCP config.
HTTP/SSE Server
Use this when remote clients, Cursor SDK processes, or the Unreal editor chat panel need HTTP routes:
cd "C:\Dev\Unreal-MCP-Ghost"
python unreal_mcp_server\unreal_mcp_server.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8000Expected:
[UnrealMCP] SSE server listening on http://127.0.0.1:8000/sse
[UnrealMCP] UE5 plugin target: 127.0.0.1:55655The HTTP chat routes do not provide application-layer authentication, so the server only accepts loopback binds. For remote access, keep this loopback bind and put an authenticated tunnel or reverse proxy in front of it.
Quick HTTP checks:
Invoke-RestMethod "http://127.0.0.1:8000/chat/history?limit=1"Streamable HTTP
For MCP clients supporting the newer streamable HTTP transport:
python unreal_mcp_server\unreal_mcp_server.py --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8000Endpoint: http://127.0.0.1:8000/mcp
Unreal Editor Chat
The plugin registers a dockable tab:
Window > MCP ChatThe tab is implemented in the editor-only UnrealMCPEditor module so the core
UnrealMCP module can stay focused on TCP bridge command handling.
The panel:
Loads previous messages from
/chat/historySends human messages to
/chat/sendPolls agent replies from
/chat/poll?sender=agentUses a resizable conversation/composer split with multiline input, drag/drop reference insertion, and Enter-to-send / Shift+Enter newline behavior
Renders role-tagged user, agent, and tool message bubbles with Copy, Re-run, Open Log, and Reveal Asset actions
Renders structured MCP tool invocations as collapsible cards with args, status, result summaries, full-detail drawer, log tail, and a Repair action for failed tool results
Renders fenced Markdown code blocks as highlighted monospaced blocks and updates streaming
data:deltas in place when availableIncludes editor context such as current level and selected actor
Shows connection status against
http://127.0.0.1:8000
Start the MCP server in SSE mode before opening the chat panel:
python unreal_mcp_server\unreal_mcp_server.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8000Automatic Cursor Replies
The editor chat window is a message bridge. To make Cursor answer automatically, run the watcher in a separate terminal:
cd "C:\Dev\Unreal-MCP-Ghost"
npm install
$env:CURSOR_API_KEY = "cursor_..."
npm run chat:agentUseful options:
$env:UE_CHAT_SERVER_URL = "http://127.0.0.1:8000"
$env:UE_CHAT_POLL_INTERVAL_MS = "2000"
$env:UE_CHAT_CATCH_UP = "1"
$env:UE_CHAT_SESSION = "My Session"
$env:CURSOR_MODEL = "auto"More detail: docs/ue-editor-chat-agent.md.
Knowledge Base
Agents should read repository knowledge before making Unreal changes:
docs/knowledge-base/README.mddocs/knowledge-base/unreal-cpp-li-2023.mddocs/knowledge-base/elevating-game-experiences-ue5-2e.mddocs/knowledge-base/game-ai-unreal-sapio-2019.mdknowledge_base/
Current Tool Surface
The server currently registers 713 MCP tools, including:
Core editor/actor tools
Blueprint creation, graph editing, node connection, variable/function tools
UMG/widget tools
Gameplay framework tools
AI, Behavior Tree, Blackboard, BT task/decorator/service tools
Animation Blueprint, IK Rig, IK Retargeter, skeleton, and batch retargeting tools
Data, struct, enum, DataTable, save-game, input, and Enhanced Input tools
Material, VFX, Niagara, audio, physics, math, trace, procedural, VR, and variant tools
Asset import and folder import tools
GhostRigger bridge tools
Safe execution substrate, execution journals, action risk evaluation, PIE/log/viewport evidence capture, reflection, diagnostics, source control, project intelligence, C++ bridge, and repair tools
Higher-level skills such as IDE companion session orchestration/status receipts/work orders/evidence ledgers/resume packets/dashboards/blocker resolution/placeholder manifests/generated asset lifecycle manifests/editor action queues, gameplay mechanic planning, blueprint health audit, health system creation, vertical slice report packaging, and broken blueprint repair
Chat tools:
chat_poll_messages,chat_send_response,chat_get_context,chat_list_sessions,chat_get_session_resume_context,chat_get_cockpit_overview,chat_get_cockpit_ledger_detailNative-alignment meta-tools for toolset search, clean-room tool contribution contracts, client config generation, bridge descriptors, guarded bridge command calls, server lifecycle status, transport diagnostics, protocol contract/session guidance, operation status/cancel requests, safe metadata refresh, spatial awareness of live UE scenes, spatial room-bounds designation contracts for Ghost.RoomBounds/Ghost.Zone/Ghost.Opening/Ghost.Path/Ghost.Surface markers, live room analysis for dimensions/zones/surfaces/clearances, authored marker recognition, functional zone inference for kitchen/living/bedroom/entry/hallway/utility planning, zone-aware interior prop programming for fixtures/furniture/clutter/architectural fill, analysis-driven and support-surface-informed interior composition planning, semantic composition constraints/preflight for support contact, counter adjacency, kitchen work triangles, living groupings, circulation, hallway linear-clearance review, opening/egress clearance, entry-to-anchor visual sightlines, and per-prop front-facing interaction clearance, screenshot vision-decomposition requests, screenshot scene-graph relationship inference, size-aware live project asset cataloging and candidate resolution before Tripo spend, local screenshot crop manifests for Tripo image inputs, guarded Tripo generation batch manifests with project-asset-filtered unresolved-prop jobs and per-job prompt/spend/import/placement/validation lifecycle metadata, spatial generation briefs, concrete image-crop readiness gates, and binding handoffs that merge reused project assets plus generated imports into one dry-run composition, post-binding spatial pipeline handoffs for scale review, support anchoring, layout/candidate-clearance preflight, dry-run apply, validation, iteration, and viewport evidence, generated-asset binding from Tripo import results with spatial-fit review, generated-asset scale correction before dry-run placement, support-surface anchoring for floor/counter/table/shelf/wall contact, composition-derived support surfaces for screenshot/generated counters and tables, composition-derived room/zone wall anchors for generated wall props, dry-run-first and spatial-fit-gated composition batch application, spatial worldbuilding work orders/readiness gates with screenshot crop-manifest blockers before Tripo image-to-model spend and live candidate-clearance blockers before mutation, local layout preflight for room bounds/footprints/spacing/opening clearance/front-facing interaction clearance/visual sightlines, local layout-preflight correction planning for room-bound/overlap/circulation repair before mutation, live actor-bounds candidate clearance preflight, iterative correction planning from placement validation or live candidate-clearance blockers with corrected composition-plan handoffs, surface-aware placement probes, placement validation/evidence planning, placement policy inference, screenshot detection preflight/normalization, screenshot-driven detected-prop programming, screenshot reconstruction planning with scene-graph-guided placement hints, screenshot-detected opening/window clearance constraints, and guarded Tripo generation/import/crop handoffs, Content Browser selection handoff/batch placement, selection-aware viewport/evidence setup, and dry-run-first spatial asset placement with actor tags/Data Layer-aware planning
Use list_knowledge_base_topics, get_knowledge_base, and search_knowledge_base before implementing systems. Use get_blueprint_nodes, get_blueprint_variables, and get_blueprint_components before modifying any Blueprint.
Canonical offline inventory command:
python scripts\tool_inventory.py --markdownThe inventory uses unreal_mcp_server/tool_inventory_categories.json to map modules to roadmap categories and phases. Keep this in sync when adding new tool modules.
Phase 7 startup/tool-discovery profiler:
python scripts\profile_mcp_startup.py --iterations 3 --markdown-out knowledge_base\Reports\mcp_startup_profile.md --json-out knowledge_base\Reports\mcp_startup_profile.jsonThe generated report files remain local and are ignored by Git.
Phase 7 bridge command metadata audit:
python scripts\bridge_command_audit.pyFor repeatable offline CI smoke commands, see docs/ci-smoke.md.
Safe Blueprint Workflow
Read relevant knowledge docs.
Inspect current state:
get_blueprint_nodesget_blueprint_variablesget_blueprint_componentsget_blueprint_graphs
Report findings and plan.
Make one scoped change.
Compile and save.
Read back and verify.
Keep the project playable after each change.
Never hard-code node IDs. Always query nodes after creation before connecting pins.
Troubleshooting
/chat/history or /chat/poll returns 404
You are running an old MCP server process. Stop the process listening on port 8000 and restart the current server:
Get-NetTCPConnection -LocalPort 8000 -State Listen | Select-Object OwningProcess
Stop-Process -Id <PID> -Force
python unreal_mcp_server\unreal_mcp_server.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8000Editor chat says "MCP Server offline"
Confirm the SSE server is running on port
8000.Confirm
/chat/historyreturns200.Close and reopen
Window > MCP Chat.
AI cannot reach Unreal
Confirm Unreal Editor is open.
Confirm Output Log says the bridge started on
127.0.0.1:55655.Confirm no firewall or tunnel is blocking the port.
Restart the MCP server after restarting Unreal.
Build fails with Live Coding active
Close Unreal Editor or press Ctrl+Alt+F11, then rebuild.
PawnSensing deprecation warnings
The plugin suppresses the known UE 5.6 deprecation warning around legacy UPawnSensingComponent usage. New AI work should prefer AI Perception.
Updating the Plugin in a Project
From a clean repo checkout:
cd "C:\Dev\Unreal-MCP-Ghost"
git fetch origin
git statusReview local changes before updating. Then copy the plugin source into your project:
$REPO = "C:\Dev\Unreal-MCP-Ghost"
$PROJECT = "C:\Users\You\Documents\UnrealProjects\MyGame"
Stop-Process -Name UnrealEditor -Force -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$PROJECT\Plugins\UnrealMCP\Binaries" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$PROJECT\Plugins\UnrealMCP\Intermediate" -ErrorAction SilentlyContinue
Copy-Item -Recurse -Force "$REPO\unreal_plugin\*" "$PROJECT\Plugins\UnrealMCP\"Regenerate project files and rebuild Development Editor | Win64.
License
Unreal-MCP-Ghost is licensed under the GNU Affero General Public License v3.0.
Portions of this project are derived from or inspired by chongdashu/unreal-mcp. See NOTICE.md for attribution and license details.
Security
Report security issues privately using the guidance in SECURITY.md. Do not open public issues for vulnerabilities, secrets, or exploit details.
Available Tools
729 toolsadd_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")
Inputs: blueprint_name (required), operand_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), lvs_variable, variant_name, node_position, +1 more. Returns: result
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")
Inputs: blueprint_name (required), lvs_variable, node_position, variant_set_name. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: state_name (required), state_machine_name (required), anim_blueprint_name (required), animation_asset. Returns: result
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")
Inputs: variable_name (required), variable_type (required), anim_blueprint_name (required), default_value. Returns: result
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")
Inputs: notify_name (required), animation_path (required), time, notify_type, +1 more. Returns: result
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")
Inputs: blueprint_name (required), string_a, string_b, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), damage_amount, node_position. Returns: result
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")
Inputs: blueprint_name (required), operator, operand_type, node_position. Returns: result
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")
Inputs: element_type (required), variable_name (required), blueprint_name (required), is_exposed. Returns: result
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")
Inputs: blueprint_name (required), scale_rule, location_rule, node_position, +2 more. Returns: result
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")
Inputs: blend_space_asset (required), anim_blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), cast_target_class (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), color, width, height, +3 more. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: action_asset (required), blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: event_name (required), blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, last_index, first_index, +1 more. Returns: result
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")
Inputs: function_name (required), blueprint_name (required), params, target, +3 more. Returns: result
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"}], )
Inputs: function_name (required), blueprint_name (required), inputs, is_pure, +1 more. Returns: result
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")
Inputs: blueprint_name (required), graph_name, start_closed, node_position. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), graph_name, node_position. Returns: result
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")
Inputs: action_name (required), blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, actor_class, node_position. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position. Returns: result
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")
Inputs: variable_name (required), variable_type (required), blueprint_name (required), is_exposed, +1 more. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), graph_name, target_class, +1 more. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), graph_name, target_class, +1 more. Returns: result
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")
Inputs: blueprint_name (required), half_size, draw_debug, node_position, +1 more. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: struct_type (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: sequence_name (required), blackboard_key (required), behavior_tree_name (required), node_name, +1 more. Returns: result
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")
Inputs: node_type (required), behavior_tree_name (required), x, y, +4 more. Returns: result
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")
Inputs: button_name (required), widget_name (required), size, text, +4 more. Returns: result
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")
Inputs: function_name (required), blueprint_name (required), interface_name (required), node_position, +1 more. Returns: result
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")
Inputs: widget_name (required), panel_name. Returns: result
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")
Inputs: blueprint_name (required), radius, draw_debug, half_height, +2 more. Returns: result
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")
Inputs: target_class (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: widget_name (required), checkbox_name (required), position, is_checked, +1 more. Returns: result
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")
Inputs: blueprint_name (required), max_value, min_value, operand_type, +1 more. Returns: result
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")
Inputs: key_name (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: comment_text (required), blueprint_name (required), size, color, +1 more. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), event_name, graph_name, +1 more. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), component_type (required), scale, +3 more. Returns: result
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")
Inputs: blueprint_name (required), component_blueprint_name (required), component_location, attach_to_component. Returns: result
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")
Inputs: blueprint_name (required), nested, first_index, node_position, +1 more. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: object_class (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, output_variable, save_game_class. Returns: result
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")
Inputs: blueprint_name (required), widget_class, node_position, store_in_variable, +1 more. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: event_name (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: function_name (required), blueprint_name (required), inputs, is_pure, +1 more. Returns: result
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")
Inputs: macro_name (required), blueprint_name (required), inputs, outputs. Returns: result
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")
Inputs: blueprint_name (required), duration, node_position. Returns: result
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")
Inputs: blueprint_name (required), user_index, node_position, slot_name_variable. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), target_blueprint (required), is_exposed. Returns: result
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")
Inputs: blueprint_name (required), slot_name, user_index, node_position. Returns: result
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")
Inputs: blueprint_name (required), n, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), color, duration, node_position. Returns: result
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")
Inputs: blueprint_name (required), size, color, duration, +1 more. Returns: result
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")
Inputs: blueprint_name (required), color, radius, duration, +1 more. Returns: result
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")
Inputs: blueprint_name (required), enable, node_position. Returns: result
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")
Inputs: blueprint_name (required), dispatcher_name (required), params. Returns: result
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")
Inputs: blueprint_name (required), success, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), with_break, node_position. Returns: result
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")
Inputs: blueprint_name (required), format_string, node_position. Returns: result
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")
Inputs: blueprint_name (required), start_closed, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), actor_class, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), actor_class, node_position. Returns: result
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")
Inputs: blueprint_name (required), lvs_variable, node_position, variant_set_name. Returns: result
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")
Inputs: key_name (required), blueprint_name (required), value_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), row_name, node_position, data_table_variable. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, coordinate_space, spline_component_variable. Returns: result
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")
Inputs: blueprint_name (required), cast_to_class, node_position. Returns: result
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")
Inputs: blueprint_name (required), player_index, node_position. Returns: result
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")
Inputs: blueprint_name (required), player_index, node_position. Returns: result
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")
Inputs: blueprint_name (required), radius, node_position. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, coordinate_space, spline_component_variable. Returns: result
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")
Inputs: blueprint_name (required), node_position, spline_component_variable. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), lvs_variable, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: box_name (required), widget_name (required), size, position, +2 more. Returns: result
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")
Inputs: end_bone (required), chain_name (required), start_bone (required), ik_rig_name (required), +2 more. Returns: result
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")
Inputs: image_name (required), widget_name (required), size, color, +2 more. Returns: result
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
Inputs: key (required), imc_name (required), action_name (required).
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")
Inputs: blueprint_name (required), node_position, instanced_mesh_variable. Returns: result
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")
Inputs: blueprint_name (required), attach_to_root, component_name, static_mesh_path. Returns: result
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")
Inputs: function_name (required), blueprint_name (required), interface_name (required), node_position. Returns: result
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")
Inputs: function_name (required), blueprint_name (required), interface_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), operand_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), draw_debug, node_position, trace_channel. Returns: result
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")
Inputs: blueprint_name (required), draw_debug, object_types, node_position. Returns: result
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")
Inputs: blueprint_name (required), trace_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), user_index, node_position, save_game_class, +2 more. Returns: result
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")
Inputs: blueprint_name (required), operator, node_position. Returns: result
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")
Inputs: macro_name (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), num_pins, element_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), key_type, num_pairs, value_type, +1 more. Returns: result
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")
Inputs: blueprint_name (required), num_pins, element_type, node_position. Returns: result
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")
Inputs: struct_type (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: map_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: map_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: map_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: map_variable (required), blueprint_name (required), node_position. Returns: result
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)
Inputs: key_type (required), value_type (required), variable_name (required), blueprint_name (required), +1 more. Returns: result
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")
Inputs: blueprint_name (required), expression, node_position. Returns: result
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")
Inputs: operation (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), operation, operand_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), motion_source, component_name, is_aim_controller, +1 more. Returns: result
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")
Inputs: blueprint_name (required), node_position, acceptance_radius. Returns: result
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")
Inputs: blueprint_name (required), loop, is_random, num_outputs, +1 more. Returns: result
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")
Inputs: blueprint_name (required), draw_debug, node_position, trace_channel. Returns: result
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")
Inputs: blueprint_name (required), draw_debug, object_types, node_position. Returns: result
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")
Inputs: slot_name (required), widget_name (required), size, position. Returns: result
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")
Inputs: blueprint_name (required), tolerance, node_position. Returns: result
add_niagara_componentB
Attach a NiagaraComponent to a Blueprint through the native bridge.
Use this to place an authored Niagara System on a generated gameplay actor. Follow with Blueprint compile, component readback, and viewport proof before claiming the VFX pass is complete.
KB: see knowledge_base/09_NIAGARA_VFX.md#blueprint-component-attachment Example: add_niagara_component(blueprint_name="/Game/BP_BlackHoleFX", niagara_system_path="/Game/VFX/NS_BlackHole")
Inputs: blueprint_name (required), component_name, niagara_system_path. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, pawn_sensing_component. Returns: result
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")
Inputs: blueprint_name (required), node_position, pawn_sensing_component. Returns: result
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")
Inputs: blueprint_name (required), level_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), event_name, node_position. Returns: result
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")
Inputs: blueprint_name (required), sight_radius, hearing_threshold, see_pawns_in_dark, +1 more. Returns: result
add_player_death_eventA
Add a custom LostGame event to handle player death as described in Ch. 11.
Creates:
Custom Event "LostGame"
SetGamePaused(true)
ShowMouseCursor(true)
CreateWidget(LoseMenu) + AddToViewport
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")
Inputs: blueprint_name (required), node_position, health_variable, lose_widget_name. Returns: result
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")
Inputs: blueprint_name (required), node_position, pitch_multiplier, sound_asset_path, +1 more. Returns: result
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")
Inputs: blueprint_name (required), sound_asset, node_position. Returns: result
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")
Inputs: blueprint_name (required), max_sim_time, node_position, simulation_frequency. Returns: result
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")
Inputs: blueprint_name (required), color, message, duration, +1 more. Returns: result
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")
Inputs: blueprint_name (required), duration, node_position. Returns: result
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")
Inputs: widget_name (required), progress_bar_name (required), size, percent, +3 more. Returns: result
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")
Inputs: blueprint_name (required), node_position, quit_preference. Returns: result
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")
Inputs: array_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), max_value, min_value, node_position. Returns: result
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")
Inputs: blueprint_name (required), max_value, min_value, node_position. Returns: result
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")
Inputs: blueprint_name (required), operator, operand_type, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, widget_variable. Returns: result
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")
Inputs: blueprint_name (required), loudness, max_range, node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), user_index, node_position, save_game_variable, +1 more. Returns: result
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")
Inputs: blueprint_name (required), index_type, num_options, option_type, +1 more. Returns: result
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")
Inputs: blueprint_name (required), num_outputs, node_position. Returns: result
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")
Inputs: sequence_asset (required), anim_blueprint_name (required), loop, graph_name, +2 more. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), node_position, collision_enabled. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), profile_name, node_position. Returns: result
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")
Inputs: set_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), paused, node_position, show_mouse_cursor. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), node_position, generate_overlap. Returns: result
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")
Inputs: blueprint_name (required), input_mode, flush_input, node_position, +1 more. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: material_path (required), blueprint_name (required), component_name (required), event_name, +1 more. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), parameter_name (required), dynamic_material_variable (required), scalar_value, +1 more. Returns: result
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")
Inputs: blueprint_name (required), looping, time_seconds, node_position, +2 more. Returns: result
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")
Inputs: blueprint_name (required), looping, timer_rate, function_name, +1 more. Returns: result
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")
Inputs: set_variable (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: element_type (required), variable_name (required), blueprint_name (required), is_exposed. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), parameter_name (required), dynamic_material_variable (required), color_value, +1 more. Returns: result
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")
Inputs: blueprint_name (required), blend_exp, blend_func, blend_time, +1 more. Returns: result
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")
Inputs: skeletal_mesh_path (required), save, bone_name, socket_name, +3 more. Returns: result
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")
Inputs: slider_name (required), widget_name (required), size, position, +4 more. Returns: result
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")
Inputs: blueprint_name (required), actor_class, node_position. Returns: result
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")
Inputs: actor_class (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position, trigger_event, particle_system_path. Returns: result
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")
Inputs: blueprint_name (required), graph_name, node_position, niagara_system_path. Returns: result
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")
Inputs: blueprint_name (required), radius, draw_debug, node_position, +1 more. Returns: result
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")
Inputs: blueprint_name (required), radius, draw_debug, object_types, +1 more. Returns: result
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")
Inputs: blueprint_name (required), num_points, component_name. Returns: result
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")
Inputs: blueprint_name (required), end_pos, start_pos, component_name, +1 more. Returns: result
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")
Inputs: anim_blueprint_name (required), state_machine_name. Returns: result
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")
Inputs: to_state (required), from_state (required), state_machine_name (required), anim_blueprint_name (required), +2 more. Returns: result
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)
Inputs: enum_type (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), cases, node_position. Returns: result
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")
Inputs: blueprint_name (required), cases, node_position. Returns: result
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")
Inputs: blueprint_name (required), use_self, node_position. Returns: result
add_teleport_system_to_pawnA
Add the complete teleportation system to a VR Pawn Blueprint.
From Ch. 16: Implements the full teleport system:
InputAxis MovementAxisRight_Y (thumbstick up detection + deadzone check)
DoOnce -> StartTeleportTrace function
TeleportTrace function (PredictProjectilePathByObjectType for arc)
On release: EndTeleportTrace + TryTeleport
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")
Inputs: blueprint_name (required), deadzone_threshold, use_projectile_path, teleport_visualizer_blueprint. Returns: result
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")
Inputs: widget_name (required), text_block_name (required), size, text, +3 more. Returns: result
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")
Inputs: timeline_name (required), blueprint_name (required), length, tracks, +1 more. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), cast_to_class, node_position. Returns: result
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")
Inputs: lvs_name (required), variant_name (required), variant_set_name (required), captured_properties. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: box_name (required), widget_name (required), size, position, +2 more. Returns: result
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")
Inputs: input_action (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), node_position. Returns: result
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")
Inputs: widget_name (required), animation_name (required), loop, duration, +3 more. Returns: result
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")
Inputs: blueprint_name (required), show_debug, component_name, interaction_distance. Returns: result
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")
Inputs: widget_name (required), z_order. Returns: result
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")
Inputs: montage_path (required), branching_point_name (required), save, time, +2 more. Returns: result
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")
Inputs: slot_name (required), montage_path (required), save, play_rate, +4 more. Returns: result
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")
Inputs: montage_name (required), save, overwrite, play_rate, +6 more. Returns: result
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")
Inputs: montage_path (required). Returns: result
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")
Inputs: montage_path (required), section_name (required), save, start_time, +1 more. Returns: result
audio_create_attenuationA
Create a Sound Attenuation asset with common 3D falloff defaults.
Args: name: Asset name such as SA_RoomTone. path: Content Browser folder under /Game. radius: Inner sphere radius. falloff_distance: Distance after radius over which volume falls off. spatialize: Enable 3D spatialization. attenuate: Enable distance attenuation. overwrite: Delete an existing asset with the same name first. save: Save the package after creation.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: audio_create_attenuation(name="SA_RoomTone", radius=500.0, falloff_distance=3000.0)
Inputs: name (required), path, save, radius, +4 more. Returns: result
audio_create_concurrencyA
Create a Sound Concurrency asset for voice limiting.
Args: name: Asset name such as SCN_Impacts. path: Content Browser folder under /Game. max_count: Maximum active voices in the group. resolution_rule: prevent_new, stop_oldest, stop_quietest, stop_lowest_priority, or stop_farthest_then_oldest. limit_to_owner: Limit concurrency per owning actor. retrigger_time: Minimum seconds between accepted plays. overwrite: Delete an existing asset with the same name first. save: Save the package after creation.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: audio_create_concurrency(name="SCN_Impacts", max_count=6, resolution_rule="stop_quietest")
Inputs: name (required), path, save, max_count, +4 more. Returns: result
audio_create_soundcueA
Create a SoundCue asset, optionally prewired to a SoundWave.
Args: name: Asset name such as SC_Footstep_Dirt. path: Content Browser folder under /Game. sound_wave: Optional SoundWave asset path to seed the cue. overwrite: Delete an existing asset with the same name first. save: Save the package after creation.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: audio_create_soundcue(name="SC_Footstep_Dirt", sound_wave="/Game/Audio/SFX/SW_Footstep_Dirt")
Inputs: name (required), path, save, overwrite, +1 more. Returns: result
batch_import_folderA
Batch-import all recognised assets from a local folder into UE5.
Scans the folder locally (no UE5 connection needed for the scan), then sends a single exec_python call to UE5 with an AssetImportTask per file. Results are reported per-file.
Args: folder_path: Absolute path on the MCP server machine to scan ue5_base_path: Root Content Browser path for imported assets (default "/Game/Imported/") recursive: Scan subdirectories (default True) import_textures: Import texture files (default True) import_meshes: Import FBX/OBJ/glTF mesh files (default True) import_audio: Import WAV/OGG/MP3 audio files (default True) preserve_folder_structure: Mirror the local subfolder structure in the Content Browser (default True) dry_run: If True, return the manifest without importing (default False)
Returns: JSON string: { "success": true, "dry_run": false, "total": 10, "imported": 9, "failed": 1, "results": [ {"file": "T_Bastila_n.png", "success": true, "asset_path": "/Game/..."}, {"file": "SM_Table.fbx", "success": false, "error": "..."}, ... ] }
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: batch_import_folder(folder_path="/Game/MCP_Test/Example")
Inputs: folder_path (required), dry_run, recursive, import_audio, +4 more. Returns: result
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")
Inputs: output_path (required), retargeter_path (required), source_animation_paths (required), output_suffix, +1 more. Returns: result
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")
Inputs: blueprint_name (required), dispatcher_name (required), dispatcher_blueprint (required), node_position, +1 more. Returns: result
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")
Inputs: event_name (required), widget_name (required), widget_blueprint_path (required), compile. Returns: result
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")
Inputs: event_name (required), widget_name (required), widget_component_name (required), function_name. Returns: result
bp_add_call_interface_functionA
Add a Blueprint Interface message-call node to a Blueprint graph.
Use this when a graph should call an interface function on a target object without coupling to a concrete class. The returned node exposes the interface message pins; connect target and exec pins with bp_connect_pins.
Args: blueprint_name: Blueprint asset name or path that receives the node. interface_name: Blueprint Interface asset name or path. function_name: Interface function to call. node_position: Optional [X, Y] graph position.
KB: see knowledge_base/02_BLUEPRINT_COMMUNICATION.md#overview Example: bp_add_call_interface_function(blueprint_name="/Game/MCP_Test/BP_Example", interface_name="/Game/MCP_Test/BPI_Interactable", function_name="Interact")
Inputs: function_name (required), blueprint_name (required), interface_name (required), node_position. Returns: result
bp_add_for_loop_with_break_nodeA
Add a ForLoopWithBreak macro node to a Blueprint graph.
Pins include execute, First Index, Last Index, Loop Body, Index, Break, and Completed. Use this when generated loop logic needs an early exit path instead of a fixed ForLoop.
Args: blueprint_name: Blueprint asset name or path. graph_name: Graph to mutate. Default EventGraph. first_index: Starting index default value. last_index: Ending index default value. node_position: Optional [X, Y] graph position.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_add_for_loop_with_break_node(blueprint_name="/Game/MCP_Test/BP_Example", graph_name="EventGraph", first_index=0, last_index=9)
Inputs: blueprint_name (required), graph_name, last_index, first_index, +1 more. Returns: result
bp_add_functionA
Add a new function graph to a Blueprint.
Creates a named function inside the Blueprint's function list. The function starts with a single 'entry' node. After creation use bp_add_node / bp_connect_pins / bp_set_pin_default to build the function body, then bp_compile to validate.
Args: blueprint_name: Blueprint asset name (e.g. 'BP_MyActor') function_name: Name for the new function (e.g. 'TakeDamage') return_type: Return pin type (e.g. 'float', 'bool', 'FVector'). Leave empty for void functions. params: JSON array of parameter objects, each with keys 'name' (str) and 'type' (str). E.g.: '[{"name":"DamageAmount","type":"float"}, {"name":"DamageCauser","type":"AActor"}]' category: Editor category for Blueprint palette grouping. is_pure: True = pure function (no exec pins). Default False. description: Tooltip text shown in Blueprint editor.
Returns: JSON StructuredResult. outputs.function_name — Confirmed function name outputs.graph_name — Graph name to use in subsequent bp_add_node calls outputs.next_steps — Suggested follow-up actions
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_add_function(blueprint_name="/Game/MCP_Test/BP_Example", function_name="ExampleName")
Inputs: function_name (required), blueprint_name (required), params, is_pure, +3 more. Returns: result
bp_add_nodeA
Add a node to a Blueprint graph and return its stable node_id.
This is the primary node-creation tool. It wraps the existing add_blueprint_event_node, add_blueprint_function_node, add_print_string_node, add_blueprint_branch_node, etc. behind a unified interface, and returns a structured result with the node_id for use in bp_connect_pins and bp_inspect_node.
node_type values (case-insensitive): event: — Event node (BeginPlay, Tick, Hit, etc.) function:: — Function call node print_string — PrintString node branch — Branch (if/else) node sequence — Sequence node variable_get: — Variable GET node variable_set: — Variable SET node delay — Delay node cast: — DynamicCast node macro: — Macro node (DoOnce, FlipFlop, Gate, etc.) math: — Math node (+, -, *, /, %, ==, !=, <, >, &&, ||) custom_event: — Custom Event node
node_params (optional dict): For function nodes: {"target_class": "Actor", "function_name": "SetActorHiddenInGame"} For event nodes: {"event_name": "BeginPlay"} For cast nodes: {"target_class": "MyCharacter"}
Returns: JSON string with StructuredResult. outputs.node_id — stable GUID to use in bp_connect_pins outputs.node_name — short object name (K2Node_...) outputs.node_type — confirmed type string outputs.pos_x, outputs.pos_y — node canvas position
Args: blueprint_name: Blueprint asset name node_type: Node type string (see above) graph_name: Target graph. Default 'EventGraph' node_params: Optional dict of extra params for the node type position_x: Canvas X position position_y: Canvas Y position
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_add_node()
Inputs: node_type, event_name, graph_name, node_class, +9 more. Returns: result
bp_add_variableB
Add a member variable to a Blueprint with full type support.
After adding a variable, use bp_add_node with 'variable_get:VarName' or 'variable_set:VarName' to place GET/SET nodes in the graph.
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: Blueprint asset name variable_name: New variable name (e.g. 'Health', 'bIsAlive') variable_type: Type string (see above) default_value: Optional initial value string is_exposed: Expose in Details panel (BlueprintVisible + EditAnywhere) category: Category for Details panel grouping. Default 'Default'
Returns: JSON string with StructuredResult. outputs.variable_name, variable_type, is_exposed, default_value
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_add_variable(blueprint_name="/Game/MCP_Test/BP_Example", variable_name="ExampleName", variable_type="ExampleName")
Inputs: variable_name (required), variable_type (required), blueprint_name (required), category, +2 more. Returns: result
bp_auto_format_graphA
Auto-arrange nodes in a Blueprint graph into a clean left-to-right layout.
Performs a topological sort of node execution order, then repositions nodes so execution flows left-to-right with consistent spacing. Data/reference nodes are placed below their consuming exec nodes.
This uses exec_python_transactional so the layout is undoable.
Layout rules:
Execution chain nodes are spaced x_spacing apart horizontally
Pure/getter nodes are placed below exec chain at y_spacing offset
Events (no exec-in) are anchored at start_x, start_y
Multiple disconnected chains are stacked vertically
Args: blueprint_name: Blueprint asset name graph_name: Graph to format. Default 'EventGraph' x_spacing: Horizontal spacing between exec nodes (default 350) y_spacing: Vertical spacing for data nodes (default 150) start_x: X position of first node (default -400) start_y: Y starting position (default 0)
Returns: JSON string with StructuredResult. outputs.nodes_repositioned — count of nodes moved outputs.layout_summary — list of {node_id, title, new_x, new_y}
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_auto_format_graph(blueprint_name="/Game/MCP_Test/BP_Example")
Inputs: blueprint_name (required), start_x, start_y, x_spacing, +2 more. Returns: result
bp_compileA
Compile a Blueprint and return structured errors/warnings.
Always run this after finishing a set of graph edits. The result includes had_errors, had_warnings, and a structured list of compile messages with category, message, and node reference where available.
Returns: outputs.had_errors — bool outputs.had_warnings — bool outputs.compile_messages — list of {category, message, node_name} outputs.error_count — int outputs.warning_count — int outputs.saved — bool (only if save_after_compile=True)
If had_errors is True, inspect compile_messages for the specific failure reason and which node is involved.
Args: blueprint_name: Blueprint asset name save_after_compile: Also save the Blueprint after successful compile. Default True.
Returns: JSON string with StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_compile(blueprint_name="/Game/MCP_Test/BP_Example")
Inputs: blueprint_name (required), save_after_compile. Returns: result
bp_connect_pinsA
Connect an output pin on one Blueprint node to an input pin on another.
Pin names MUST be the exact strings returned by bp_inspect_node. Common exec pin names: 'then' (output), 'execute' (input). Common data pin names: 'ReturnValue', 'Target', 'Value', etc.
If the connection fails due to type mismatch or schema rejection, the error field explains why so the agent can diagnose the issue without guessing.
Returns: outputs.source_node_id, source_pin, target_node_id, target_pin outputs.connection_verified — bool (True if UE5 confirmed success) errors[] — schema rejection reason if failed
Args: blueprint_name: Blueprint asset name source_node_id: GUID or name of the source node (has the output pin) source_pin: Output pin name on the source node target_node_id: GUID or name of the target node (has the input pin) target_pin: Input pin name on the target node graph_name: Graph name. Default 'EventGraph'
Returns: JSON string with StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_connect_pins(blueprint_name="/Game/MCP_Test/BP_Example", source_node_id="Example", source_pin="Exec", target_node_id="Example", target_pin="Exec")
Inputs: source_pin (required), target_pin (required), blueprint_name (required), source_node_id (required), +2 more. Returns: result
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")
Inputs: dest_bp (required), source_bp (required), component_name (required), new_component_name. Returns: result
bp_create_graphA
Add a new function or macro graph to an existing Blueprint.
Use this to create new function graphs that can be called from the EventGraph or other functions. After creation, use bp_add_node to populate it with nodes.
Note: 'EventGraph' already exists in every Blueprint — do not create it. Use bp_create_graph for custom function graphs (e.g. 'InitPlayer', 'CalculateDamage') or macro graphs.
Args: blueprint_name: Blueprint asset name (e.g. 'BP_MyActor') graph_name: Name for the new graph (e.g. 'InitPlayer') graph_type: 'function' (default) or 'macro'
Returns: JSON string with StructuredResult. outputs.graph_name — confirmed graph name created
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_create_graph(blueprint_name="/Game/MCP_Test/BP_Example", graph_name="EventGraph")
Inputs: graph_name (required), blueprint_name (required), graph_type. Returns: result
bp_disconnect_pinA
Break one or all connections on a specific pin.
Two modes: • Break ALL connections on a pin — supply only node_id + pin_name. • Break ONE specific connection — also supply target_node_id + target_pin_name to break just that link.
This is the inverse of bp_connect_pins. Use bp_inspect_node first to confirm the exact pin names and their current connections.
Args: blueprint_name: Blueprint asset name node_id: GUID of the node that owns the pin pin_name: Exact pin name (case-sensitive) graph_name: Graph containing the node. Default 'EventGraph'. target_node_id: (optional) GUID of the other node — if supplied, only the link to this node is broken. target_pin_name: (optional) Pin on the target node — required when target_node_id is supplied.
Returns: JSON StructuredResult. outputs.node_id — GUID of the node whose pin was modified outputs.pin_name — Pin that was disconnected outputs.mode — 'break_all' or 'break_one'
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_disconnect_pin(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example", pin_name="Exec")
Inputs: node_id (required), pin_name (required), blueprint_name (required), graph_name, +2 more. Returns: result
bp_find_disconnected_pinsA
Find all disconnected exec or input pins in a Blueprint graph.
Args: blueprint_path: Full asset path or plain name graph_name: Graph to inspect (default 'EventGraph') pin_type_filter: 'exec', 'input', or 'all'
Returns: StructuredResult with outputs: disconnected_pins[] — list of {node_guid, node_title, pin_name, pin_type, direction, severity} total_disconnected — int
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_find_disconnected_pins(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), graph_name, pin_type_filter. Returns: result
bp_find_orphaned_nodesA
Find nodes in a Blueprint graph that have zero connections of any kind.
Orphaned nodes have no input or output links. They are safe to remove and are a common byproduct of incomplete graph edits.
Args: blueprint_path: Full asset path or plain name graph_name: Graph to inspect
Returns: StructuredResult with outputs: orphaned_nodes[] — {node_guid, node_title, reason, auto_repairable} total_orphaned — int
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_find_orphaned_nodes(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), graph_name. Returns: result
bp_find_unreachable_nodesA
Find nodes in a graph that have no incoming exec path from an event node.
A node is unreachable if it has exec pins but no incoming exec connection and is not itself an event/entry node.
Args: blueprint_path: Full asset path or plain name graph_name: Graph to inspect
Returns: StructuredResult with outputs: unreachable_nodes[] — {node_guid, node_title, reason} total_unreachable — int
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_find_unreachable_nodes(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), graph_name. Returns: result
bp_find_unused_variablesA
Find Blueprint variables declared but not referenced in any graph.
Important: Variables that are instance-editable or exposed on spawn without graph usage are reported as 'possibly_unused' (not definitely unused) to prevent false positives.
Args: blueprint_path: Full asset path or plain name safe_mode: If True, mark instance-editable vars as 'possibly_unused' rather than 'unused' (default True — safer)
Returns: StructuredResult with outputs: unused_variables[] — list of variable issue items all_variables[] — all declared variable names variables_checked — int
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_find_unused_variables(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), safe_mode. Returns: result
bp_get_compile_diagnosticsA
Get compiler-derived diagnostics for a Blueprint in structured format.
Compiles the Blueprint (or reads existing compile status) and returns a structured list of errors and warnings — NOT just a raw string.
Each diagnostic item contains: severity, category, code, message, asset_path, graph_name, node_guid, node_title, pin_name, suggested_fix, auto_repairable
Args: blueprint_path: Full asset path (e.g. '/Game/Blueprints/BP_HealthSystem') or plain name ('BP_HealthSystem') include_warnings: Include warning-level items (default True) include_info: Include info-level items (default False)
Returns: StructuredResult with outputs: compile_clean — bool errors[] — structured error items warnings[] — structured warning items compile_time_ms — int compiler_summary — human-readable one-line summary
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_get_compile_diagnostics(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), include_info, include_warnings. Returns: result
bp_get_graph_detailA
Return full paginated node detail for a single Blueprint graph.
This is the precision tool for large graphs — use instead of bp_get_graph_summary when a graph has many nodes or when include_pin_defaults=False is needed for token budget.
The TakeDamage function graph (9 nodes) fits in <1800 tokens with include_pin_defaults=False.
Output format (data dict): blueprint_path: str — Full package path or asset name graph_name: str — Graph queried graph_type: str — 'EventGraph' | 'Function' | 'Macro' total_nodes: int — Total nodes in graph page: int — 0-based page index returned total_pages: int nodes: list — [{guid, title, class, position:[x,y], pins:[...]}] token_estimate: int — Rough token budget for this page
Also returned in top-level meta: tool, duration_ms, token_estimate, page, total_pages.
Args: blueprint_path: Full path OR bare name (e.g. '/Game/Blueprints/BP_HealthSystem' or 'BP_HealthSystem'). graph_name: Graph to detail (e.g. 'TakeDamage', 'EventGraph'). page: 0-based page. Default 0. page_size: Nodes per page (1–200). Default 50. include_pin_defaults: Include pin default values. False saves ~30% tokens.
Returns: JSON string with StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_get_graph_detail(blueprint_path="/Game/MCP_Test/BP_Example", graph_name="EventGraph")
Inputs: graph_name (required), blueprint_path (required), page, page_size, +1 more. Returns: result
bp_get_graph_summaryA
Get a compact, AI-readable summary of a Blueprint graph.
V5 enhancements over V4.1:
Always returns top-level variables[], function_graphs[], event_graphs[]
Pagination when include_nodes=True (page / page_size)
include_nodes=False returns only metadata (variables, graphs) — very compact
Output format (outputs dict): blueprint: str — Blueprint asset name graph: str — Graph name queried node_count: int — Total nodes in this graph page: int — Current page (0-based) total_pages: int — Total pages variables: list — [{name, type}] — all Blueprint member variables function_graphs: list — [{name, type:'function'}] event_graphs: list — [{name, type:'event'}] nodes: list — Node entries (empty when include_nodes=False) summary_text: str — Compact one-liner per node
Args: blueprint_name: Blueprint asset name (e.g. 'BP_HealthSystem') graph_name: Graph to inspect. Default 'EventGraph'. include_pin_defaults: Include pin default values. Default True. include_positions: Include node canvas positions. Default True. include_nodes: Include node list. Set False for metadata-only. Default True. page: 0-based page index when include_nodes=True. Default 0. page_size: Nodes per page. Default 50.
Returns: JSON string with StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_get_graph_summary(blueprint_name="/Game/MCP_Test/BP_Example")
Inputs: blueprint_name (required), page, page_size, graph_name, +3 more. Returns: result
bp_inspect_nodeA
Get full pin and connection details for a single Blueprint node.
Use this after bp_add_node to see the exact pin names before calling bp_connect_pins. Pin names returned here are the exact strings you must pass to bp_connect_pins.
Returns a StructuredResult with: outputs.node_id — the node's GUID outputs.node_name — short object name outputs.node_type — type string outputs.title — human-readable title outputs.pos_x, pos_y — canvas position outputs.pins — list of all pins: pin_name — exact name to use in bp_connect_pins direction — 'input' | 'output' pin_type — type string (exec, bool, float, object, etc.) default_value — current default value (empty if not set) linked_to — list of {node_id, pin_name} for connected pins
Args: blueprint_name: Blueprint asset name node_id: GUID or short object name from bp_add_node graph_name: Graph containing the node. Default 'EventGraph' include_hidden_pins: Include internal pins. Default False.
Returns: JSON string with StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_inspect_node(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example")
Inputs: node_id (required), blueprint_name (required), graph_name, include_hidden_pins. Returns: result
bp_remove_nodeA
Remove a node from a Blueprint graph by its node_id (GUID).
Breaks all pin connections on the node before removing it so the graph is left in a valid (though possibly uncompiled) state. The operation is NOT wrapped in a transaction on the Python side — the C++ bridge performs its own undo-mark.
Use bp_get_graph_summary first to confirm the node_id you want to delete, then run bp_compile after removal to verify the graph is clean.
Args: blueprint_name: Blueprint asset name (e.g. 'BP_MyActor') node_id: Stable GUID of the node to delete (from bp_get_graph_summary or bp_add_node outputs) graph_name: Graph containing the node. Default 'EventGraph'.
Returns: JSON StructuredResult. outputs.deleted_node_id — GUID of the removed node outputs.deleted_node_name — Object name of the removed node outputs.next_steps — Suggested follow-up actions
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_remove_node(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example")
Inputs: node_id (required), blueprint_name (required), graph_name. Returns: result
bp_remove_orphaned_nodesA
Remove confirmed orphaned nodes from a Blueprint graph.
Only nodes whose GUIDs are explicitly listed are removed. Event/entry nodes are always skipped even if listed.
Args: blueprint_path: Full asset path or plain name graph_name: Graph to modify node_guids: List of node GUIDs confirmed orphaned by bp_find_orphaned_nodes or bp_validate_graph
Returns: StructuredResult with outputs: removed_count — int removed_nodes[] — [{name, guid}] skipped_nodes[] — [{name, reason}] repairs_applied[] — list of repair records safe_to_continue — bool
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_remove_orphaned_nodes(blueprint_path="/Game/MCP_Test/BP_Example", graph_name="EventGraph", node_guids=[])
Inputs: graph_name (required), node_guids (required), blueprint_path (required). Returns: result
bp_repair_exec_chainA
Reconnect a broken exec chain between two named nodes in a Blueprint graph.
This is a deterministic repair: it only connects exec pins. It will NOT create new nodes or rearrange data connections.
Args: blueprint_path: Full asset path or plain name graph_name: Graph containing the nodes source_node_name: Partial/full name of the upstream node (exec-output side) destination_node_name: Partial/full name of the downstream node (exec-input side)
Returns: StructuredResult with outputs: connected — bool repair_detail — description of what was connected repairs_applied[] — list of repair records repairs_skipped[] — list of skipped records safe_to_continue — bool
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_repair_exec_chain(blueprint_path="/Game/MCP_Test/BP_Example", graph_name="EventGraph", source_node_name="ExampleName", destination_node_name="ExampleName")
Inputs: graph_name (required), blueprint_path (required), source_node_name (required), destination_node_name (required). Returns: result
bp_run_post_mutation_verifyA
Run the standard verification pack immediately after a Blueprint mutation.
This is the default evidence block that higher-order skills should include after any edit. Runs compile diagnostics + graph validation in one call.
Args: blueprint_path: Full asset path or plain name changed_graphs: List of graph names to validate (default: ['EventGraph'])
Returns: StructuredResult with outputs: compile_status — 'clean' | 'errors' | 'warnings_only' | 'unknown' error_count — int warning_count — int health_score — int 0-100 top_issues[] — first 5 most critical issues safe_to_continue — bool (no compile errors) auto_repair_recommended — bool (auto_repairable issues exist) full_issues[] — all issues
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_run_post_mutation_verify(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), changed_graphs. Returns: result
bp_set_pin_defaultA
Set the default/literal value for an unconnected input pin.
Use this to set constant values on node pins — for example, setting the 'Duration' on a Delay node, or the 'In String' on PrintString.
Only works on unconnected input pins. If the pin is already connected to another node, set_node_pin_value will be rejected by UE5 (the connected value overrides the default).
Value formats: bool: 'true' or 'false' int: '42' float: '3.14' string: 'Hello World' vector: '(X=1.0,Y=2.0,Z=3.0)' rotator: '(Pitch=0,Yaw=90,Roll=0)' enum: 'EnumValue' (exact enum string value)
Args: blueprint_name: Blueprint asset name node_id: GUID or short name of the node pin_name: Exact pin name (from bp_inspect_node output) default_value: Value string to set graph_name: Graph name. Default 'EventGraph'
Returns: JSON string with StructuredResult. outputs.node_id, pin_name, previous_value, new_value
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: bp_set_pin_default(blueprint_name="/Game/MCP_Test/BP_Example", node_id="Example", pin_name="Exec", default_value=0.0)
Inputs: node_id (required), pin_name (required), default_value (required), blueprint_name (required), +1 more. Returns: result
bp_validate_blueprintA
Top-level Blueprint validator: compile + graph structure + variable usage.
Aggregates compile diagnostics, graph-level validation, and variable usage into a single health score with an actionable recommendation block.
Args: blueprint_path: Full asset path or plain name include_graph_validation: Also run per-graph structural checks include_variable_check: Also check for unused variables
Returns: StructuredResult with outputs: blueprint_path — str compile_clean — bool health_score — int 0-100 graphs_checked — int error_count — int warning_count — int issues[] — all issues combined recommended_actions[] — actionable strings
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_validate_blueprint(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), include_variable_check, include_graph_validation. Returns: result
bp_validate_graphA
Inspect one Blueprint graph for structural health issues.
Checks exec-chain continuity, orphaned nodes, disconnected required inputs, and unreachable nodes — independent of compile status.
Args: blueprint_path: Full asset path or plain name graph_name: Graph to inspect (default 'EventGraph')
Returns: StructuredResult with outputs: graph_health_score — int 0-100 issue_count — int issues[] — structured issue items nodes_checked — int
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: bp_validate_graph(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), graph_name. Returns: result
bridge_descriptor_summaryC
Summarize the TCP bridge command registry as native-alignment metadata.
Inputs: registry_path. Returns: result
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")
Inputs: query_path (required), result_key (required), behavior_tree_name (required), interval, +4 more. Returns: result
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")
Inputs: behavior_tree_name (required), wait_time. Returns: result
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")
Inputs: behavior_tree_name (required). Returns: result
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=[])
Inputs: tree (required), behavior_tree_name (required), clear_existing. Returns: result
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")
Inputs: blueprint_name (required), graph_definition (required). Returns: result
build_trace_interaction_blueprintA
Build a complete trace-based interaction system from Ch.14.
Creates the full example from the book:
Adds a 'Trace Locations' macro (camera position + range ahead)
Adds keyboard input event (default: E key)
Adds LineTraceByChannel connected to the macro outputs
Adds Break Hit Result to access the Hit Actor
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()
Inputs: input_key, trace_range, trace_channel, blueprint_name. Returns: result
call_bridge_commandB
Plan or execute one Ghost TCP bridge command through descriptor gates.
This is a clean-room ToolsetRegistry-style adapter over Ghost's own TCP bridge. It is dry-run by default; mutating commands require allow_mutation=true before execution.
Inputs: command_name (required), params, dry_run, params_json, +3 more. Returns: result
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")
Inputs: event_name (required), blueprint_name (required), target_blueprint (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), dispatcher_name (required), node_position. Returns: result
call_toolB
Call a tool discovered through list_toolsets or describe_toolset.
Inputs: tool_name (required), arguments, toolset_name.
chaos_configure_cloth_componentC
Configure cloth simulation on a SkeletalMeshComponent.
KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#mcp-chaos-and-cloth-tools Example: chaos_configure_cloth_component(actor_name="BP_CloakedHero_0", update_in_editor=True, cloth_max_distance_scale=1.0, force_reset=True)
Inputs: actor_name (required), suspend, force_reset, component_name, +7 more. Returns: result
chaos_configure_geometry_collectionC
Configure a Geometry Collection component for Chaos destruction.
KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#mcp-chaos-and-cloth-tools Example: chaos_configure_geometry_collection(actor_name="GC_Barrier_A", simulate_physics=True, notify_breaks=True, damage_thresholds=[500000, 50000, 5000])
Inputs: actor_name (required), solver_actor, notify_breaks, gravity_enabled, +8 more. Returns: result
chaos_configure_solver_actorC
Configure a Chaos Solver actor's core simulation and event settings.
KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#mcp-chaos-and-cloth-tools Example: chaos_configure_solver_actor(actor_name="ChaosSolver_Destruction", generate_break_data=True, optimize_runtime_memory=True)
Inputs: actor_name (required), active, has_floor, floor_height, +10 more. Returns: result
chaos_create_solver_actorC
Create a Chaos Solver actor in the active editor world.
KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#mcp-chaos-and-cloth-tools Example: chaos_create_solver_actor(actor_name="ChaosSolver_Destruction", set_as_world_solver=True)
Inputs: location, rotation, overwrite, actor_name, +1 more. Returns: result
chaos_inspect_geometry_collectionC
Inspect a Geometry Collection actor/component or asset.
KB: see knowledge_base/26_CHAOS_PHYSICS_AND_DESTRUCTION.md#mcp-chaos-and-cloth-tools Example: chaos_inspect_geometry_collection(actor_name="BP_DestructibleBarrier_0")
Inputs: asset, actor_name. Returns: result
chat_get_cockpit_ledger_detailA
Return bounded IDE companion ledger detail for the MCP Chat cockpit.
The packet includes recent ledger events, per-event artifacts, artifact kinds, phase index data, latest status, and latest work order. It only reads local IDE companion ledger JSON files and never mutates Unreal, calls providers, or spends credits.
Args: session: Chat/companion session name to match when ledger_path is omitted. ledger_path: Optional ledger path from a cockpit overview or session list. event_index: Optional 1-based event index for single-event drilldown. limit: Maximum recent events to return when event_index is omitted. artifact_limit: Maximum artifacts to return per event.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d27-chat-cockpit-ledger-detail Example: chat_get_cockpit_ledger_detail(session="ide-companion")
Inputs: limit, session, event_index, ledger_path, +1 more. Returns: result
chat_get_cockpit_overviewB
Return a display-ready MCP Chat cockpit overview packet.
The packet combines saved chat sessions, recent messages, matching IDE companion ledger evidence, queued editor actions, blockers, cards, and suggested next actions. It only reads local JSON files.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d22-chat-cockpit-overview Example: chat_get_cockpit_overview(session="ide-companion")
Inputs: limit, session, message_limit. Returns: result
chat_get_contextC
Return recent chat context and compact knowledge-base state.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: chat_get_context()
Inputs: session, message_limit. Returns: result
chat_get_session_resume_contextA
Load recent chat messages plus matching IDE companion ledger summary.
Use this before showing a resume card in MCP Chat. The matching ledger
summary can be passed to skill_resume_ide_companion_session by path
when the developer chooses to continue that session.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d21-chat-cockpit-session-picker Example: chat_get_session_resume_context(session="ide-companion")
Inputs: session, message_limit. Returns: result
chat_list_sessionsA
List saved MCP Chat sessions and optional IDE companion ledgers.
Use this to drive an editor-side session picker before resuming a companion workflow. This tool only reads local JSON files; it does not mutate Unreal, call providers, or spend credits.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d21-chat-cockpit-session-picker Example: chat_list_sessions()
Inputs: limit, include_ide_companion_ledgers. Returns: result
chat_poll_messagesA
Poll for new human messages sent from the UE editor chat widget.
Args: since: Optional ISO-8601 timestamp. If omitted, this tool uses the previous poll cursor for this server process, or returns all human messages on first use. limit: Maximum number of messages to return. session: Optional named chat session. Empty uses the legacy default history.
Returns: Structured JSON containing messages and next_since for the next poll.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: chat_poll_messages()
Inputs: limit, since, session. Returns: result
chat_send_responseB
Send an agent response back to the UE editor chat widget.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: chat_send_response(message="I created the requested Blueprint.")
Inputs: message (required), context, session. Returns: result
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")
Inputs: blueprint_path_or_name (required). Returns: result
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")
Inputs: asset (required), chooser (required), save, enabled. Returns: result
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")
Inputs: name (required), path, save, overwrite, +1 more. Returns: result
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")
Inputs: chooser (required). Returns: result
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")
Inputs: blueprint_name (required). Returns: result
compile_blueprint_and_reportA
Compile a Blueprint and return graph-aware diagnostic evidence.
This B.2 report tool wraps the compile in Unreal editor progress and a transaction, then returns compile status, structured issues, graph summaries, and a safe_to_continue flag for higher-order workflows.
Args: blueprint_path: Full asset path or plain Blueprint asset name. include_graphs: Include graph node/orphan summaries when True. graph_names: Optional graph-name allowlist; empty checks all graphs.
Returns: StructuredResult JSON with outputs: compile_status, compile_clean, had_errors, had_warnings, errors[], warnings[], graph_summaries[], graph_count, safe_to_continue.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#b2-graph-aware-diagnostics-diagnosticstoolspy Example: compile_blueprint_and_report(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), graph_names, include_graphs. Returns: result
compile_material_and_reportA
Compile a Material and return expression-aware diagnostic evidence.
The tool invokes Unreal's material recompile path under a progress scope and returns compile status, issue arrays, expression count, and optional expression summaries for graph-aware material verification.
Args: material_path: Full Material asset path. include_expressions: Include expression class/name/position summaries.
Returns: StructuredResult JSON with outputs: compile_status, compile_clean, had_errors, errors[], warnings[], expression_count, expression_summaries[], safe_to_continue.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#b2-graph-aware-diagnostics-diagnosticstoolspy Example: compile_material_and_report(material_path="/Game/MCP_Test/M_Example")
Inputs: material_path (required), include_expressions. Returns: result
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="...")
Inputs: source_node_id (required), target_node_id (required), anim_blueprint_name (required), graph_name. Returns: result
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")
Inputs: blueprint_name (required), source_node_id (required), target_node_id (required), graph_name, +4 more. Returns: result
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")
Inputs: rig_path (required), child_name (required), parent_name (required), save, +6 more. Returns: result
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")
Inputs: rig_path (required), control_name (required), save, scale, +9 more. Returns: result
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()
Inputs: tolerance, reduce_keys, reset_controls, control_rig_path, +2 more. Returns: result
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")
Inputs: rig_name (required), save, overwrite, folder_path, +3 more. Returns: result
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")
Inputs: rig_path (required), include_names. Returns: result
cpp_analyze_classA
Analyze a UCLASS in the project's C++ source.
Extracts class metadata from .h files: parent class, UCLASS flags, UPROPERTY members, UFUNCTION methods, implemented interfaces.
Call cpp_set_codebase_path() first to point the bridge at your source.
Args: class_name: C++ class name (e.g. 'UUnrealMCPBridge', 'ABP_Hero'). include_inherited: Include inherited members (not yet implemented, reserved).
Returns: JSON StructuredResult with outputs: class, parent_class, uclass_flags, interfaces, properties [{name, type, uproperty_flags}], methods [{name, return, params, ufunction_flags}], header_file, line
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: cpp_analyze_class(class_name="Actor")
Inputs: class_name (required), include_inherited. Returns: result
cpp_find_referencesA
Find all usages of a C++ identifier across the indexed codebase.
Performs a pattern-aware search:
type='function' matches 'Identifier(' calls
type='class' matches word-boundary class references
type='variable' matches word-boundary variable references
Call cpp_set_codebase_path() first.
Args: identifier: Name to search for (e.g. 'HandleCommand', 'UUnrealMCPBridge'). type: 'class' | 'function' | 'variable'. Default 'function'. limit: Max hits to return. Default 100.
Returns: JSON StructuredResult with outputs: identifier, hits [{file, line, snippet}], total, truncated
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: cpp_find_references(identifier="Example")
Inputs: identifier (required), type, limit. Returns: result
cpp_set_codebase_pathA
Point the C++ analysis bridge at a source directory.
If path is None (default), auto-resolves to the project's Source/ directory by scanning upward for a .uproject file, then falls back to UNREAL_PROJECT_SOURCE_PATH env var.
The path is validated to prevent directory traversal attacks. Only paths under the project root or an explicit allowed prefix are accepted.
Args: path: Absolute path to source directory. None = auto-resolve.
Returns: JSON StructuredResult with outputs: path — resolved absolute path files_indexed — number of .h/.cpp files found parser — 'tree-sitter-cpp' or 'regex-fallback'
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: cpp_set_codebase_path()
Inputs: path. Returns: result
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")
Inputs: name (required), functions, variables, folder_path. Returns: result
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")
Inputs: name (required), auto_run_bt, behavior_tree. Returns: result
create_align_actors_utilityA
Create the AlignOnXAxis Editor Utility Blueprint from Ch. 19.
Creates BPU_AlignActors (ActorActionUtility) with an AlignOnXAxis function:
GetSelectionSet -> get array of selected actors
Get Location X of first actor (index 0)
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()
Inputs: name, folder_path. Returns: result
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")
Inputs: name (required), path, skeleton, parent_class. Returns: result
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")
Inputs: name (required), path. Returns: result
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")
Inputs: name (required), keys, path. Returns: result
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")
Inputs: name (required), parent_class (required). Returns: result
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")
Inputs: name (required), functions, folder_path. Returns: result
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")
Inputs: interface_name (required), path, functions. Returns: result
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")
Inputs: name (required), folder_path, parent_class. Returns: result
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()
Inputs: name, path, default_damage, damage_variable, +1 more. Returns: result
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")
Inputs: name (required), path. Returns: result
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")
Inputs: name (required), path, tick_interval. Returns: result
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")
Inputs: name (required), path, task_description. Returns: result
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()
Inputs: name, path, wander_radius. Returns: result
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")
Inputs: anim_blueprint_name (required), skeleton. Returns: result
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")
Inputs: name (required), add_camera, add_spring_arm, camera_location, +2 more. Returns: result
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()
Inputs: name, folder_path, orbit_radius, rotation_per_second. Returns: result
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")
Inputs: comment_text (required), blueprint_name (required), color, width, +3 more. Returns: result
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")
Inputs: row_struct (required), table_name (required), path. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), source_material_path (required), node_position, +1 more. Returns: result
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")
Inputs: name (required), functions, folder_path, utility_type. Returns: result
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()
Inputs: name, path, enemy_class, max_enemies, +2 more. Returns: result
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")
Inputs: action_name (required), path, value_type. Returns: result
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)
Inputs: values (required), enum_name (required), path. Returns: result
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()
Inputs: name, max_level, folder_path, xp_per_level. Returns: result
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")
Inputs: name (required). Returns: result
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")
Inputs: enemy_name (required), has_chase, has_attack, has_patrol. Returns: result
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")
Inputs: enemy_name (required), has_chase, has_attack, has_patrol, +4 more. Returns: result
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")
Inputs: name (required). Returns: result
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")
Inputs: name (required), hud_class, spectator_class, game_state_class, +2 more. Returns: result
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()
Inputs: name, folder_path, default_grab_type. Returns: result
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")
Inputs: name (required). Returns: result
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()
Inputs: health_bar, folder_path, stamina_bar, widget_name, +4 more. Returns: result
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:
create_ik_rig (source)
create_ik_rig (target)
create_ik_retargeter ← this tool
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")
Inputs: retargeter_name (required), source_ik_rig_path (required), target_ik_rig_path (required), path, +2 more. Returns: result
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:
create_ik_rig for source skeleton (e.g. Mannequin)
create_ik_rig for target skeleton (e.g. your custom character)
create_ik_retargeter linking source → target
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")
Inputs: ik_rig_name (required), skeletal_mesh_path (required), path, auto_generate_chains. Returns: result
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")
Inputs: key (required), action_name (required), input_type. Returns: result
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")
Inputs: context_name (required), path, mappings. Returns: result
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
Inputs: name, folder_path, variant_sets. Returns: result
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()
Inputs: widget_name, message_text, message_color, show_quit_button, +1 more. Returns: result
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")
Inputs: name (required), opacity, metallic, roughness, +3 more. Returns: result
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")
Inputs: name (required), value, pickup_type, rotate_speed. Returns: result
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")
Inputs: name (required), show_mouse_cursor, enable_click_events, enable_touch_events. Returns: result
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()
Inputs: name, folder_path, static_mesh_path, default_number_of_rows, +3 more. Returns: result
create_product_configurator_blueprintA
Create the BP_Configurator Blueprint from Ch. 20.
Creates a Blueprint that:
Holds a reference to the Level Variant Sets asset
On BeginPlay: iterates variant sets + variants to dynamically build a UMG widget with buttons for each variant
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()
Inputs: name, folder_path, lvs_asset_name, widget_blueprint_name. Returns: result
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")
Inputs: name (required), speed, damage, gravity_scale. Returns: result
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()
Inputs: name, folder_path. Returns: result
create_round_based_game_systemA
Create a complete round-based game progression system from Ch. 11.
Sets up the full arcade-style round system:
SaveGame blueprint for persistent round data
LoadRound / SaveRound macros in the character Blueprint
SetRoundTargetGoal macro to scale difficulty per round
Win condition check that advances rounds
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()
Inputs: character_blueprint, game_mode_blueprint, initial_target_goal, save_blueprint_name, +1 more. Returns: result
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")
Inputs: name (required), variables, folder_path. Returns: result
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")
Inputs: name (required), variables, folder_path. Returns: result
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()
Inputs: name, folder_path, static_mesh_path, default_space_between_instances. Returns: result
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=[])
Inputs: fields (required), struct_name (required), path. Returns: result
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")
Inputs: widget_name (required), path, parent_class. Returns: result
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()
Inputs: name, folder_path, enable_snap_turn, enable_teleportation, +2 more. Returns: result
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()
Inputs: save, compile, separation, blueprint_name, +9 more. Returns: result
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")
Inputs: blueprint_name (required), save, compile, enabled, +5 more. Returns: result
delete_actorC
Delete an actor from the level by name.
KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: delete_actor(name="ExampleName")
Inputs: name (required). Returns: result
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")
Inputs: node_id (required), blueprint_name (required), graph_name. Returns: result
describe_bridge_toolsetB
Describe one bridge command category and its command descriptors.
Inputs: toolset_name (required), registry_path, command_filter. Returns: result
describe_toolsetB
Describe one Unreal MCP toolset and return tool input schemas.
Inputs: toolset_name (required), tool_filter. Returns: result
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")
Inputs: blueprint_name (required), node_id, pin_name, graph_name, +4 more. Returns: result
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")
Inputs: button_text (required), dry_run, title_contains, process_name_contains. Returns: result
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()
Inputs: title_contains, process_name_contains. Returns: result
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")
Inputs: query_path (required), save, option_index, generator_type. Returns: result
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")
Inputs: query_path (required), save, test_type, option_index. Returns: result
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")
Inputs: query_name (required), save, overwrite, folder_path. Returns: result
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")
Inputs: query_path (required). Returns: result
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")
Inputs: code (required). Returns: result
execution_journal_finishA
Finish an execution journal and record final evidence.
Args: journal_path: Path returned by execution_journal_start status: completed, completed_with_warnings, failed, blocked, or cancelled summary: Short human-readable closeout artifacts: Optional final file, asset, screenshot, or log paths verification: Optional final test/diagnostic evidence
Returns: JSON string with StructuredResult and final journal stats.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: execution_journal_finish(journal_path="/Game/MCP_Test/Example")
Inputs: journal_path (required), status, summary, artifacts, +1 more. Returns: result
execution_journal_logA
Append a structured entry to an execution journal.
Args: journal_path: Path returned by execution_journal_start message: Short progress, validation, or failure note event_type: progress, tool_call, verification, decision, error, etc. tool_name: Optional MCP tool or Unreal command name success: Whether this step succeeded severity: debug, info, warning, error, or critical inputs: Optional summarized inputs for the step outputs: Optional summarized outputs or evidence artifacts: Optional file or asset paths produced/observed risk_level: Optional low/medium/high/critical risk label metadata: Optional additional data for later audit
Returns: JSON string with StructuredResult and updated journal stats.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: execution_journal_log(journal_path="/Game/MCP_Test/Example", message="Example")
Inputs: message (required), journal_path (required), inputs, outputs, +7 more. Returns: result
execution_journal_startA
Start a repo-local execution journal for an autonomous work session.
The journal is a JSON file with an immutable id, timestamps, inputs, entries, artifacts, and final verification data. Paths are constrained to the current workspace root so agents cannot quietly write elsewhere.
Args: title: Human-readable journal title goal: What the agent intends to accomplish project_name: Optional Unreal project or map name journal_dir: Workspace-relative directory for journal files tags: Optional labels for later search metadata: Optional extra context such as branch, map, or project path
Returns: JSON string with StructuredResult and the created journal path.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: execution_journal_start(title="Example")
Inputs: title (required), goal, tags, metadata, +2 more. Returns: result
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")
Inputs: class_name (required), exact. Returns: result
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")
Inputs: pattern (required). Returns: result
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")
Inputs: blueprint_name (required), node_name, node_type, event_name, +4 more. Returns: result
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()
Inputs: distance, location. Returns: result
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()
Inputs: no named parameters. Returns: result
gas_add_tagA
Record an owned GameplayTag on a Blueprint and ensure an ASC.
Args: target_bp: Blueprint asset name/path receiving the tag metadata. tag: Gameplay tag such as Ability.Movement.Dash or State.Stunned. ensure_asc: Add an AbilitySystemComponent if the Blueprint lacks one.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_add_tag(target_bp="/Game/BP_Hero", tag="Ability.Movement.Dash")
Inputs: tag (required), target_bp (required), ensure_asc. Returns: result
gas_apply_effectA
Record a default GameplayEffect application on a Blueprint and ensure an ASC.
Args: target_bp: Blueprint asset name/path receiving the effect metadata. effect: GameplayEffect asset path or class path. level: Default effect level. ensure_asc: Add an AbilitySystemComponent if the Blueprint lacks one.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_apply_effect(target_bp="/Game/BP_Hero", effect="/Game/GAS/Effects/GE_StartupStats")
Inputs: effect (required), target_bp (required), level, ensure_asc. Returns: result
gas_create_abilityA
Create a Blueprint GameplayAbility asset.
Args: name: Asset name, usually prefixed GA_. path: Destination folder under /Game. parent_class: Optional parent class path/name. Defaults to UGameplayAbility. overwrite: Delete an existing asset with the same path first.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_create_ability(name="GA_Dash", path="/Game/GAS/Abilities")
Inputs: name (required), path, overwrite, parent_class. Returns: result
gas_create_ability_task_nodeB
Add an AbilityTask factory call node to a GameplayAbility Blueprint graph.
Args: blueprint_name: GameplayAbility Blueprint asset name/path. task_class: AbilityTask class path/name, e.g. AbilityTask_WaitDelay. graph_name: Target graph. Default EventGraph. task_function: Optional static BlueprintCallable factory function name. position_x: Node canvas X coordinate. position_y: Node canvas Y coordinate.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_create_ability_task_node(blueprint_name="/Game/GAS/Abilities/GA_Dash", task_class="AbilityTask_WaitDelay")
Inputs: task_class (required), blueprint_name (required), graph_name, position_x, +2 more. Returns: result
gas_create_attribute_setA
Create a Blueprint AttributeSet asset when the project supports it.
Args: name: Asset name, usually prefixed AS_. path: Destination folder under /Game. parent_class: Optional parent class path/name. Defaults to UAttributeSet. overwrite: Delete an existing asset with the same path first.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_create_attribute_set(name="AS_HeroCombat", path="/Game/GAS/Attributes")
Inputs: name (required), path, overwrite, parent_class. Returns: result
gas_create_gameplay_cueA
Create a GameplayCue notify Blueprint asset.
Args: name: Asset name, usually prefixed GCN_. path: Destination folder under /Game. notify_type: actor or static. Actor cues can own state; static cues are fire-and-forget. parent_class: Optional parent class path/name. overwrite: Delete an existing asset with the same path first.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_create_gameplay_cue(name="GCN_DashTrail", notify_type="actor")
Inputs: name (required), path, overwrite, notify_type, +1 more. Returns: result
gas_create_gameplay_effectA
Create a Blueprint GameplayEffect asset.
Args: name: Asset name, usually prefixed GE_. path: Destination folder under /Game. parent_class: Optional parent class path/name. Defaults to UGameplayEffect. overwrite: Delete an existing asset with the same path first.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_create_gameplay_effect(name="GE_DashCooldown", path="/Game/GAS/Effects")
Inputs: name (required), path, overwrite, parent_class. Returns: result
gas_grant_abilityA
Record a default GameplayAbility grant on a Blueprint and ensure an ASC.
Args: target_bp: Blueprint asset name/path receiving the grant metadata. ability: GameplayAbility asset path or class path. level: Default grant level. input_id: Optional legacy input id. Use -1 when tag/input binding handles activation. ensure_asc: Add an AbilitySystemComponent if the Blueprint lacks one.
KB: see knowledge_base/19_GAMEPLAY_ABILITY_SYSTEM.md#mcp-gas-tools Example: gas_grant_ability(target_bp="/Game/BP_Hero", ability="/Game/GAS/Abilities/GA_Dash")
Inputs: ability (required), target_bp (required), level, input_id, +1 more. Returns: result
gen_capture_texture_paint_snapshotC
Capture the active Unreal viewport for a Texture/Paint session.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#texture-paint-viewport-snapshots Example: gen_capture_texture_paint_snapshot(session_name="demo", label="front_view", upload_to_tripo=False)
Inputs: label, show_ui, resolution, session_name, +3 more. Returns: result
gen_check_credit_budgetC
Guard a Tripo spend against the per-session credit budget.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#cost-guard Example: gen_check_credit_budget(estimated_credits=120, session_name="demo", operation="text_to_model", confirm_spend=True, reserve_credits=True)
Inputs: estimated_credits (required), operation, session_name, confirm_spend, +1 more. Returns: result
gen_compile_generated_animation_evidenceC
Compile no-spend evidence for a generated Uthana animation lifecycle.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#generated-animation-evidence Example: gen_compile_generated_animation_evidence(motion_id="motion-id", import_result_json="")
Inputs: motion_id, character_id, session_name, approval_note, +11 more. Returns: result
gen_compile_ide_companion_readinessC
Compile no-spend readiness for generated assets plus playable-slice development.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#ide-companion-readiness Example: gen_compile_ide_companion_readiness(brief="third-person dungeon demo", include_api_wallet=True)
Inputs: brief, timeout_s, content_path, session_name, +4 more. Returns: result
gen_compile_texture_paint_evidenceC
Compile a no-spend evidence receipt for a Tripo texture-paint pass.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#texture-paint-evidence Example: gen_compile_texture_paint_evidence(session_name="demo", texture_task_result_json="", import_result_json="")
Inputs: session_name, approval_note, model_task_id, wait_result_json, +4 more. Returns: result
generate_client_configA
Generate MCP client config files for Codex, Cursor, VS Code, Claude, and Gemini.
Args: client: One of "all", "codex", "cursor", "vscode", "claude_code", or "gemini". transport: "stdio", "streamable-http", or "sse". base_dir: Directory where client config folders/files should be written. Defaults to the current repository root. server_name: MCP server entry name to write. python_command: Python command for stdio configs. server_script: Optional absolute path to unreal_mcp_server.py for stdio configs. mcp_host: HTTP host for streamable-http or SSE configs. mcp_port: HTTP port for streamable-http or SSE configs. unreal_host: UE bridge host for stdio configs. unreal_port: UE bridge port for stdio configs. tool_search_mode: Add UNREAL_MCP_TOOL_SEARCH_MODE=1 to stdio configs. dry_run: Return config entries and paths without writing files.
Inputs: client, dry_run, base_dir, mcp_host, +8 more. Returns: result
gen_get_provider_configA
Read Tripo auth/config state without exposing the API key value.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#config-and-auth Example: gen_get_provider_config(include_paths=True)
Inputs: include_paths. Returns: result
gen_list_providersB
List configured generative providers and D.1 import helper readiness.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#provider-scaffold Example: gen_list_providers(include_import_helpers=True)
Inputs: include_import_helpers. Returns: result
gen_prepare_import_manifestC
Validate and normalize a generated asset import manifest for Unreal.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#import-manifest-helper Example: gen_prepare_import_manifest(task_id="tripo_task_123", local_files=["C:/Gen/slime.glb"], content_path="/Game/Generated/Enemies")
Inputs: task_id (required), provider, asset_name, local_files, +4 more. Returns: result
gen_prepare_texture_paint_sessionA
Plan a Tripo texture-paint edit session without making a paid request.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#d9-chat-dock-integration Example: gen_prepare_texture_paint_session(model_task_id="task_123", texture_prompt="weathered brass", view_angle="front", save_asset_name="MI_BrassPass")
Inputs: model_task_id (required), texture_prompt (required), blend_mode, view_angle, +6 more. Returns: result
gen_record_texture_paint_passB
Record a no-spend Texture/Paint brush pass for evidence and iteration.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#texture-paint-pass-records Example: gen_record_texture_paint_pass(session_name="demo", pass_label="front_highlights", affected_regions="front panels", approval_note="Approved pass")
Inputs: blend_mode, pass_label, pass_notes, blend_amount, +10 more. Returns: result
gen_save_provider_configC
Save Tripo/Uthana defaults and optionally store/clear local API keys.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#config-and-auth Example: gen_save_provider_config(default_model_version="tripo-default", output_folder="/Game/Generated", session_credit_budget=750)
Inputs: output_folder, store_api_key, tripo_api_key, uthana_api_key, +8 more. Returns: result
gen_texture_from_promptC
Plan a prompt-only texture set and material instance handoff.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#texture-only-path Example: gen_texture_from_prompt(prompt="wet mossy stone", channels=["BaseColor", "Normal", "ORM"], resolution=1024)
Inputs: prompt (required), channels, provider, asset_name, +3 more. Returns: result
gen_tripo_download_resultA
Download signed Tripo output URLs for a successful task into a local folder.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_download_result(task_id="model-task-id", target_folder="C:/Generated/Slime")
Inputs: task_id (required), target_folder (required), output_keys. Returns: result
gen_tripo_get_credit_balanceB
Fetch the authenticated Tripo API wallet credit balance.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#api-wallet-balance Example: gen_tripo_get_credit_balance()
Inputs: timeout_s, include_raw. Returns: result
gen_tripo_get_task_statusB
Get Tripo task status and output URLs.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_get_task_status(task_id="model-task-id")
Inputs: task_id (required). Returns: result
gen_tripo_image_to_modelB
Submit a Tripo image_to_model task from a local image, URL, or file token.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_image_to_model(image_url="https://example.com/slime.png", texture=True, confirm_spend=True)
Inputs: pbr, quad, texture, auto_size, +16 more. Returns: result
gen_tripo_import_to_projectB
Download a successful Tripo task result, import it, and capture viewport evidence.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#auto-import-bridge Example: gen_tripo_import_to_project(task_id="model-task-id", content_path="/Game/Generated/Enemies", create_material_instance=True)
Inputs: task_id (required), asset_name, output_keys, content_path, +5 more. Returns: result
gen_tripo_multiview_to_modelB
Submit a Tripo multiview_to_model task from ordered front/left/back/right images.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_multiview_to_model(images=[{"image_url":"https://example.com/front.png"},{"image_url":"https://example.com/left.png"}], confirm_spend=True)
Inputs: pbr, quad, images, texture, +13 more. Returns: result
gen_tripo_post_processC
Submit a Tripo convert_model post-process task.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_post_process(task_id="model-task-id", target_format="FBX", confirm_spend=True)
Inputs: task_id (required), quad, face_limit, scale_factor, +5 more. Returns: result
gen_tripo_refine_modelC
Submit a Tripo refine_model task for a legacy draft model task.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_refine_model(task_id="draft-task-id", confirm_spend=True)
Inputs: task_id (required), session_name, confirm_spend. Returns: result
gen_tripo_text_to_modelC
Submit a Tripo text_to_model task.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_text_to_model(prompt="stylized slime enemy", texture=True, pbr=True, confirm_spend=True)
Inputs: prompt (required), pbr, quad, texture, +13 more. Returns: result
gen_tripo_texture_modelB
Submit a Tripo texture_model task for an existing model task.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_texture_model(task_id="model-task-id", texture_prompt="mossy stone", confirm_spend=True)
Inputs: task_id (required), texture_prompt (required), pbr, texture, +6 more. Returns: result
gen_tripo_wait_for_taskB
Poll a Tripo task until it reaches a finalized status or timeout.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#tripo-task-family Example: gen_tripo_wait_for_task(task_id="model-task-id", timeout_s=900, poll_s=10)
Inputs: task_id (required), poll_s, timeout_s. Returns: result
gen_uthana_check_download_allowedB
Check whether a Uthana motion download is allowed before consuming quota.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_check_download_allowed(motion_id="motion-id")
Inputs: motion_id (required), timeout_s, character_id. Returns: result
gen_uthana_create_characterC
Upload a Tripo/exported character file to Uthana and create an auto-rigged character target.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_create_character(local_file="C:/Generated/Hero.fbx", character_name="Hero", confirm_usage=True)
Inputs: local_file (required), auto_rig, timeout_s, rerig_target, +6 more. Returns: result
gen_uthana_create_locomotionC
Generate Uthana locomotion for a character using travel angle, speed, and stride count.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_create_locomotion(character_id="character-id", travel_angle=45, confirm_usage=True)
Inputs: strides, style_id, timeout_s, move_speed, +5 more. Returns: result
gen_uthana_download_motionB
Download a Uthana motion file after explicit usage approval.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_download_motion(motion_id="motion-id", output_format="fbx", confirm_usage=True)
Inputs: motion_id (required), fps, no_mesh, in_place, +9 more. Returns: result
gen_uthana_get_accountB
Fetch Uthana account/org allowance state without exposing the API key.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_get_account()
Inputs: timeout_s, include_user. Returns: result
gen_uthana_get_characterA
Fetch Uthana character metadata by ID without downloading assets.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_get_character(character_id="character-id")
Inputs: character_id (required), timeout_s. Returns: result
gen_uthana_get_jobC
Poll a Uthana async job, such as video-to-motion, without downloading output.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_get_job(job_id="job-id")
Inputs: job_id (required), timeout_s. Returns: result
gen_uthana_get_motionB
Get Uthana motion metadata by ID.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_get_motion(motion_id="motion-id")
Inputs: motion_id (required), timeout_s. Returns: result
gen_uthana_import_animation_to_projectA
Import a downloaded Uthana FBX into Unreal and report remaining retarget/readback gates.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_import_animation_to_project(local_file="C:/MCP/uthana/motion.fbx")
Inputs: local_file (required), skeleton, motion_id, character_id, +3 more. Returns: result
gen_uthana_text_to_motionA
Generate a Uthana motion from text after explicit usage approval.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_text_to_motion(prompt="loopable guard patrol walk", confirm_usage=True)
Inputs: prompt (required), foot_ik, timeout_s, character_id, +3 more. Returns: result
gen_uthana_video_to_motionC
Create a Uthana video-to-motion job after explicit usage approval.
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#uthana-motion-task-family Example: gen_uthana_video_to_motion(video_file="C:/capture/reference.mp4", motion_name="A_ReferenceMove", confirm_usage=True)
Inputs: video_file (required), model, timeout_s, motion_name, +4 more. Returns: result
geom_apply_displacementA
Apply Perlin-noise displacement to a DynamicMesh actor.
Args: actor_name: DynamicMesh actor label to mutate. magnitude: Displacement magnitude in centimeters. frequency: Perlin noise frequency. seed: Deterministic random seed. along_normal: Apply displacement along vertex normals.
Returns: Structured JSON with resulting mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_apply_displacement(actor_name="DM_Rock", magnitude=12, frequency=0.08, seed=7)
Inputs: actor_name (required), seed, frequency, magnitude, +1 more. Returns: result
geom_bake_to_static_meshA
Bake a DynamicMesh actor into a StaticMesh asset.
Args: actor_name: DynamicMesh actor label to bake. asset_path: Content Browser asset path including asset name. enable_nanite: Enable Nanite on the generated static mesh. enable_collision: Generate collision settings on the new static mesh. recompute_normals: Recompute normals during asset creation. recompute_tangents: Recompute tangents during asset creation. overwrite: Delete an existing asset at asset_path first. save: Save the generated package after creation.
Returns: Structured JSON with baked asset path and mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_bake_to_static_mesh(actor_name="DM_CoverBlock", asset_path="/Game/Geometry/SM_CoverBlock_A")
Inputs: actor_name (required), save, overwrite, asset_path, +4 more. Returns: result
geom_boolean_opA
Apply a Geometry Script boolean operation between two DynamicMesh actors.
Args: target_actor: DynamicMesh actor label to mutate. tool_actor: DynamicMesh actor label used as the boolean cutter/tool. operation: "union", "intersection", "subtract", "trim_inside", or "trim_outside". output_space: "target", "tool", or "shared" transform space for the result. fill_holes: Fill holes generated by the boolean operation. simplify_output: Simplify coplanar boolean output. hide_tool: Hide the tool actor after a successful operation.
Returns: Structured JSON with target actor and resulting mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_boolean_op(target_actor="DM_Block", tool_actor="DM_Cutter", operation="subtract")
Inputs: tool_actor (required), target_actor (required), hide_tool, operation, +3 more. Returns: result
geom_create_dynamic_meshA
Create an editor DynamicMesh actor and seed it with a primitive mesh.
Args: actor_name: DynamicMesh actor label to create. primitive: One of "box", "sphere", "cylinder", "plane", or "empty". dimensions: Primitive dimensions in centimeters. Box/plane use X,Y,Z; sphere uses X as radius; cylinder uses X radius and Z height. location: Optional world location [x, y, z]. rotation: Optional world rotation [pitch, yaw, roll]. radial_steps: Segment count for sphere/cylinder primitives. height_steps: Vertical segments for cylinder and box-like primitives. overwrite: Delete an existing actor with the same label before creating.
Returns: Structured JSON with actor label, primitive, and mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_create_dynamic_mesh(actor_name="DM_CoverBlock", primitive="box", dimensions=[200, 80, 120])
Inputs: location, rotation, overwrite, primitive, +4 more. Returns: result
geom_extrudeA
Extrude faces on a DynamicMesh actor using Geometry Script modeling.
Args: actor_name: DynamicMesh actor label to mutate. distance: Extrusion distance in centimeters. direction: Fixed extrusion direction [x, y, z]. direction_mode: "fixed" or "average_face_normal". area_mode: "entire_selection", "per_polygroup", or "per_triangle". uv_scale: UV scale applied to generated side faces. solids_to_shells: Treat solids as shells during extrusion.
Returns: Structured JSON with resulting mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_extrude(actor_name="DM_Panel", distance=25, direction=[0, 0, 1])
Inputs: actor_name (required), distance, uv_scale, area_mode, +3 more. Returns: result
geom_remeshA
Uniformly remesh a DynamicMesh actor.
Args: actor_name: DynamicMesh actor label to mutate. target_triangle_count: Approximate triangle count when target_edge_length is 0. target_edge_length: Explicit edge length target; <=0 uses triangle count mode. iterations: Number of remeshing iterations. discard_attributes: Drop mesh attributes before remeshing. reproject: Reproject vertices to the input mesh surface.
Returns: Structured JSON with resulting mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_remesh(actor_name="DM_Rock", target_triangle_count=1200, iterations=12)
Inputs: actor_name (required), reproject, iterations, discard_attributes, +2 more. Returns: result
geom_uv_unwrapA
Generate or repack UVs for a DynamicMesh actor.
Args: actor_name: DynamicMesh actor label to mutate. uv_channel: UV channel index. method: "xatlas", "patch_builder", "recompute", or "layout". texture_resolution: Layout texture resolution used for packing. max_iterations: XAtlas iteration count. auto_pack: Pack generated PatchBuilder UVs.
Returns: Structured JSON with UV channel and mesh counts.
KB: see knowledge_base/22_GEOMETRY_SCRIPT_AND_MODELING.md#mcp-geometry-tools Example: geom_uv_unwrap(actor_name="DM_CoverBlock", method="xatlas", texture_resolution=2048)
Inputs: actor_name (required), method, auto_pack, uv_channel, +2 more. Returns: result
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()
Inputs: include_all, actor_name_or_label. Returns: result
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")
Inputs: name (required). Returns: result
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()
Inputs: no named parameters. Returns: result
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")
Inputs: blueprint_name (required). Returns: result
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")
Inputs: blueprint_name (required). Returns: result
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")
Inputs: blueprint_name (required). Returns: result
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")
Inputs: blueprint_name (required), graph_name, include_hidden_pins. Returns: result
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")
Inputs: blueprint_name (required), variable_name. Returns: result
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")
Inputs: blueprint_name (required), category. Returns: result
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")
Inputs: behavior_tree_name (required). Returns: result
get_changed_assets_sinceA
List Content Browser assets changed since a timestamp.
Compares package file modification times and optionally includes dirty in-editor packages. Accepts Unix epoch seconds or ISO-8601 timestamps.
Args: timestamp: Epoch seconds or ISO-8601 timestamp, e.g. "2026-06-07T00:00:00Z". path: Content root to scan, default "/Game". include_dirty: Include unsaved dirty content/map packages. include_unreal_generated: Include /Engine and /Script paths if encountered. limit: Maximum changed assets to return; 0 means no explicit cap.
Returns: StructuredResult JSON with outputs: changed_assets[], dirty_assets[], changed_count, dirty_count.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#b2-graph-aware-diagnostics-diagnosticstoolspy Example: get_changed_assets_since(timestamp="2026-06-07T00:00:00Z", path="/Game")
Inputs: timestamp (required), path, limit, include_dirty, +1 more. Returns: result
get_knowledge_baseA
Retrieve knowledge base content for a given topic.
Returns the full content of the matching reference doc(s) plus relevant book extracts from 4 UE5 textbooks. This is the primary anti-hallucination tool — always call this before implementing a system.
Args: topic: Topic to retrieve. Use list_knowledge_base_topics() to see all options. Examples: "ai", "blueprints", "animation", "ui", "materials", "gameplay", "input", "data", "communication", "components"
MANDATORY RULE: Call this tool before implementing ANY UE5 system. Before AI systems → get_knowledge_base("ai") Before animation → get_knowledge_base("animation") Before UI/HUD → get_knowledge_base("ui") Before gameplay → get_knowledge_base("gameplay") Before materials → get_knowledge_base("materials") Before input → get_knowledge_base("input") Before data/structs → get_knowledge_base("data") Before communication → get_knowledge_base("communication")
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#overview Example: get_knowledge_base(topic="Example")
Inputs: topic (required). Returns: result
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")
Inputs: node_id (required), blueprint_name (required), graph_name, include_hidden_pins. Returns: result
get_onboarding_contextA
Return a curated knowledge-base packet for a specific Unreal task domain.
Supported tasks: blueprints, animation, ai, materials, niagara, umg, world_building, audio, generative, multiplayer, gas, metasounds.
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#mandatory-agent-rules
Example: get_onboarding_context(task="Example")
Inputs: task (required). Returns: result
get_project_contextB
Return the current Unreal project/editor context with a 5 second cache.
Includes the .uproject path, engine version, open level, selected actor, dirty packages, top-level Content folders, and project/plugin list.
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#mandatory-agent-rules
Example: get_project_context()
Inputs: force_refresh. Returns: result
get_recent_output_logA
Retrieve recent lines from the Unreal Engine Output Log.
Use this after running any tool to check for warnings, errors, or diagnostic messages that Unreal wrote to the log.
Args: lines: Number of recent log lines to return (default 200, max 1000) filter_category: Only return lines containing this string (e.g. "LogBlueprint", "LogPython", "LogAssetTools", "Error")
Returns: JSON string: { "success": true, "lines": ["LogPython: Warning: ...", "LogBlueprint: Error: ..."], "count": 45, "filter": "Error" }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: get_recent_output_log()
Inputs: lines, filter_category. Returns: result
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")
Inputs: blueprint_name (required). Returns: result
get_server_infoA
Return Unreal-MCP-Ghost server version, transport, tool count, KB docs, and a start-here prompt for newly connected MCP agents.
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#mandatory-agent-rules
Example: get_server_info()
Inputs: no named parameters. Returns: result
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")
Inputs: skeletal_mesh_path (required). Returns: result
ghostrigger_call_mcp_toolA
Call a KotorMCP tool through GhostRigger's /mcp/tools/call endpoint.
Use ghostrigger_list_mcp_tools() first to discover available tool names and their argument schemas.
Key tool names (see ghostrigger_list_mcp_tools for full list): ghostrigger_open_model — open a model by resref ghostrigger_render_model — render a model to PNG ghostrigger_model_info — get geometry/bone/material info ghostrigger_list_game_models — list all models in the game ghostrigger_audit — audit model for issues kotor_lookup_2da — look up a 2DA table row kotor_lookup_tlk — look up a TLK dialog string kotor_list_modules — list all game modules kotor_describe_module — describe module contents
Args: tool_name: Name of the KotorMCP tool to call arguments: JSON string of arguments (e.g. '{"resref": "n_bastila"}')
Returns: JSON string: {"result": {...}} or {"error": "..."}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_call_mcp_tool(tool_name="ExampleName")
Inputs: tool_name (required), arguments. Returns: result
ghostrigger_export_modelA
Export a KotOR MDL model to FBX (or another format) via GhostRigger.
Calls the KotorMCP 'ghostrigger_open_model' tool through GhostRigger
with export options. The exported FBX is saved to export_path on
the local filesystem.
This is the first half of the KotOR→UE5 pipeline:
ghostrigger_export_model → exports MDL to FBX on disk
import_static_mesh / import_skeletal_mesh → imports FBX into UE5
Args: resref: Model resource reference (e.g. "n_bastila", "plc_bench") export_path: Absolute path on the MCP server machine where the FBX should be saved (e.g. "/home/user/exports/n_bastila.fbx" or "C:/exports/n_bastila.fbx") module_dir: Optional path to the module directory format: Export format: "fbx" (default) — future: "gltf", "obj"
Returns: JSON string: { "success": true, "resref": "n_bastila", "export_path": "/home/user/exports/n_bastila.fbx", "format": "fbx" } or {"error": "..."}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_export_model(resref="Example", export_path="/Game/MCP_Test/Example")
Inputs: resref (required), export_path (required), format, module_dir. Returns: result
ghostrigger_healthA
Check whether the GhostRigger IPC server is running and healthy.
Returns: JSON string: { "status": "ok", "program": "GhostRigger", "port": 7001, "version": "2.8", "mcp": true } or {"error": "Cannot reach GhostRigger at http://localhost:7001: ..."}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_health()
Inputs: no named parameters. Returns: result
ghostrigger_import_to_ue5A
Full KotOR→UE5 pipeline: export MDL via GhostRigger then import FBX into UE5.
Step 1: Calls GhostRigger to export the KotOR model to FBX at export_path.
Step 2: Calls UE5 via exec_python to import the FBX as a StaticMesh or
SkeletalMesh at ue5_destination_path.
Args: resref: KotOR model resource reference (e.g. "n_bastila") export_path: Absolute path where the FBX should be written (must be accessible to both GhostRigger and the UE5 machine — use a shared/mounted folder) ue5_destination_path: Content Browser destination (default "/Game/KotOR/Models/") is_skeletal: If True, import as SkeletalMesh (default False) skeleton: Existing skeleton asset path to reuse (SkeletalMesh only) module_dir: Optional module directory for GhostRigger
Returns: JSON string: { "success": true, "resref": "n_bastila", "export_path": "/shared/n_bastila.fbx", "asset_path": "/Game/KotOR/Models/n_bastila", "asset_type": "StaticMesh", "ghostrigger_export": {...}, "ue5_import": {...} }
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_import_to_ue5(resref="Example", export_path="/Game/MCP_Test/Example")
Inputs: resref (required), export_path (required), skeleton, module_dir, +2 more. Returns: result
ghostrigger_list_mcp_toolsA
List all KotorMCP tools available through GhostRigger's /mcp/tools/list endpoint.
GhostRigger exposes ~68 KotOR resource tools (installation management, discovery, game data lookups, 3-D model pipeline, module exploration, GFF/2da/TLK reading, animation debug, decompile, and more).
Returns: JSON string: {"tools": [{name, description, inputSchema}, ...]}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_list_mcp_tools()
Inputs: no named parameters. Returns: result
ghostrigger_list_resourcesA
List all kotor:// URI resource templates available from GhostRigger.
Returns the list of resource templates defined by KotorMCP, e.g.: kotor://k1/2da/{table} kotor://k1/tlk/{strref} kotor://k1/module/{module_id}/utc/{resref}
Returns: JSON string: {"resources": [{uri, name, description, mimeType}, ...]}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_list_resources()
Inputs: no named parameters. Returns: result
ghostrigger_open_creatureA
Tell GhostRigger to open a KotOR UTC creature blueprint.
Sends POST /api/open_utc. GhostRigger will locate the creature blueprint and display it for editing.
Args: resref: Creature resource reference (e.g. "n_bastila001") module_dir: Optional module directory path
Returns: JSON string: {"status": "ok", "action": "open_utc"}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_open_creature(resref="Example")
Inputs: resref (required), module_dir. Returns: result
ghostrigger_open_modelA
Tell GhostRigger to open a KotOR MDL model for viewing/editing.
Sends POST /api/open_mdl with the given resref. GhostRigger will locate the model in the game library and display it in the 3-D viewport.
Args: resref: Model resource reference (e.g. "n_bastila", "plc_bench") module_dir: Optional path to the module directory if the model is inside a specific module (leave empty to use the game installation library)
Returns: JSON string: {"status": "ok", "action": "open_mdl"} or {"error": "..."}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_open_model(resref="Example")
Inputs: resref (required), module_dir. Returns: result
ghostrigger_pingA
Ping the GhostRigger IPC server (POST /api/ping).
Returns: JSON string: {"status": "ok", "action": "ping", "program": "GhostRigger"}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_ping()
Inputs: no named parameters. Returns: result
ghostrigger_read_resourceA
Read a kotor:// resource URI from GhostRigger.
Examples: "kotor://k1/2da/appearance" — appearance.2da table "kotor://k1/tlk/42" — TLK string 42 "kotor://k1/module/danm13/utc/n_bastila001" — Bastila's UTC
Args: uri: A kotor:// URI (use ghostrigger_list_resources to see all templates)
Returns: JSON string: {"content": {...}} or {"error": "..."}
KB: see knowledge_base/16_ANIMATION_DEEP_DIVE.md#overview Example: ghostrigger_read_resource(uri="Example")
Inputs: uri (required). Returns: result
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"])
Inputs: hlod_layer (required), actor, actors. Returns: result
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")
Inputs: actor, build, force, layer, +5 more. Returns: result
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")
Inputs: blueprint_name (required), interface_name (required). Returns: result
import_animation_fbxA
Import an animation-only FBX onto an existing UE Skeleton.
This is the receiving half of DCC animation handoffs such as Cascadeur's
Animation FBX preset. It deliberately disables mesh, material, and
texture import so a validation or animation pass cannot silently replace
a production SkeletalMesh.
Args:
file_path: Absolute path to an FBX file on the Unreal host.
skeleton: Existing Skeleton asset path, for example
/Game/Characters/Mannequins/Meshes/SKM_Manny_Skeleton.
destination_path: Content Browser folder for AnimSequence assets.
destination_name: Optional asset name override. Empty preserves the
FBX take/file naming chosen by Unreal.
animation_length: exported_time (default) or animated_key.
import_custom_attributes: Preserve authored FBX custom attributes.
remove_redundant_keys: Allow Unreal's lossless redundant-key cleanup.
use_default_sample_rate: Sample at Unreal's default rate when true.
custom_sample_rate: Explicit sample rate when greater than zero.
replace_existing: Replace same-named destination assets only when
explicitly requested. Defaults false for non-destructive proof.
Returns: StructuredResult JSON with imported AnimSequence paths, the resolved Skeleton, and the effective import settings.
KB: see knowledge_base/05_ANIMATION_SYSTEM.md#import-and-retargeting Example: import_animation_fbx( file_path="C:/Animations/Walk.fbx", skeleton="/Game/Characters/Mannequins/Meshes/SKM_Manny_Skeleton", destination_path="/Game/Animations", )
Inputs: skeleton (required), file_path (required), animation_length, destination_name, +6 more. Returns: result
import_folder_as_characterA
Import a character export folder (mesh + textures + animations) as a complete set under one UE5 destination.
Designed for KotOR/GhostRigger export folders that follow the layout: / .fbx ← skeletal mesh (required) textures/ T_d.tga ← diffuse T_n.tga ← normal map ... animations/ ← optional animation FBXs Idle.fbx Walk.fbx
The skeletal mesh FBX is imported first (establishing the skeleton), then all texture files, then any animation FBXs reusing the created skeleton.
Args: folder_path: Absolute path on MCP server machine character_name: Used for the UE5 subfolder, e.g. "Bastila" ue5_base_path: Root Content Browser path (default "/Game/Characters/") skeleton: Existing skeleton path to reuse (leave empty to auto-create) import_animations: Import FBX files in an "animations" subfolder (default True) import_morph_targets: Import morph targets from the skeletal mesh (default True)
Returns: JSON string with the full import report and key asset paths: { "success": true, "character_name": "Bastila", "ue5_destination": "/Game/Characters/Bastila", "skeletal_mesh": "/Game/Characters/Bastila/SK_Bastila", "skeleton": "/Game/Characters/Bastila/SK_Bastila_Skeleton", "textures": ["/Game/Characters/Bastila/Textures/T_Bastila_d", ...], "animations": ["Idle", "Walk"], "reused_skeleton": false, "errors": [] }
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: import_folder_as_character(folder_path="/Game/MCP_Test/Example", character_name="ExampleName")
Inputs: folder_path (required), character_name (required), skeleton, ue5_base_path, +2 more. Returns: result
import_skeletal_meshA
Import an FBX file as a Skeletal Mesh into UE5 Content Browser.
Args: file_path: OS path to the FBX file on the UE5 Windows machine (e.g. "C:/Characters/Bastila.fbx") destination_path: Content Browser destination (default "/Game/Characters/") skeleton: Content Browser path to an existing Skeleton asset to reuse, e.g. "/Game/Mannequin/SK_Mannequin_Skeleton". Leave empty ("") to create a new skeleton from the file. import_animations: Import embedded animations as AnimSequence assets (default True) import_morph_targets: Import morph targets / blend shapes (default True) import_materials: Import materials embedded in the FBX (default True)
Returns: JSON string with StructuredResult — outputs on success: { "success": true, "stage": "import_skeletal_mesh", "outputs": { "asset_path": "/Game/Characters/SK_Bastila", "asset_type": "SkeletalMesh", "skeleton_path": "/Game/Characters/SK_Bastila_Skeleton", "animations_imported": ["Idle", "Walk"], "reused_skeleton": false }, "warnings": [], "errors": [], "log_tail": [] }
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: import_skeletal_mesh(file_path="/Game/MCP_Test/Example")
Inputs: file_path (required), skeleton, destination_path, import_materials, +2 more. Returns: result
import_sound_assetA
Import a WAV, OGG, or MP3 file from the UE5 host machine into the Content Browser as a SoundWave asset.
The file must already be present on the Windows machine running UE5 (e.g. "C:/Sounds/jump.wav" or "D:/Project/Audio/SFX_Shoot.wav"). For files that exist on the sandbox, use import_sound_asset_from_sandbox instead.
Args: file_path: Absolute OS path to the audio file on the UE5 Windows machine (e.g. "C:/Sounds/jump.wav"). Supports WAV, OGG, and MP3 formats. destination_path: Content Browser folder for the imported asset. Default: "/Game/Audio/" auto_create_cue: If True, also creates a SoundCue asset wired to the imported SoundWave in the same folder. The cue is named <asset_name>_Cue.
Returns: JSON string with the result: Success: {"success": true, "asset_path": "/Game/Audio/jump", "asset_type": "SoundWave", "cue_path": "/Game/Audio/jump_Cue"} (cue_path only if auto_create_cue=True) Failure: {"success": false, "error": ""}
Example usage: import_sound_asset( file_path="C:/Sounds/SFX_TurretFire.wav", destination_path="/Game/Audio/SFX/", auto_create_cue=True )
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#overview Example: import_sound_asset(file_path="/Game/MCP_Test/Example")
Inputs: file_path (required), auto_create_cue, destination_path. Returns: result
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")
Inputs: asset_name (required), local_file_path (required), loop, destination_path. Returns: result
import_static_meshA
Import a 3D model as a Static Mesh into UE5 Content Browser.
Supports FBX, OBJ, glTF (.gltf), and GLB (.glb) formats. For glTF/GLB files UE5's Interchange Framework handles import automatically — FBX options are not applied but all other parameters still work.
Args: file_path: OS path on UE5 machine (e.g. "C:/Models/table.fbx") destination_path: Content Browser destination (default "/Game/Meshes/") combine_meshes: Merge all meshes into one asset (default True) generate_lightmap_uvs: Auto-generate UV channel 1 for lightmaps (default True) auto_generate_collision: Create simple collision hull (default True) import_materials: Import materials embedded in the file (default True) import_textures: Import textures embedded in the file (default True)
Returns: JSON string with StructuredResult — outputs on success: { "success": true, "stage": "import_static_mesh", "outputs": { "asset_path": "/Game/Meshes/SM_Table", "asset_type": "StaticMesh", "poly_count": -1 }, "warnings": [], "errors": [], "log_tail": [] }
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: import_static_mesh(file_path="/Game/MCP_Test/Example")
Inputs: file_path (required), combine_meshes, import_textures, destination_path, +3 more. Returns: result
import_textureA
Import a texture file into UE5 Content Browser as a Texture2D asset.
Supports PNG, JPG/JPEG, TGA, EXR, HDR, and BMP formats. The file must already exist on the Windows machine running UE5.
When texture_type is "auto" (default) the correct compression settings and sRGB flag are inferred from the filename suffix: *_n / *_normal / *_nrm → TC_NORMALMAP, sRGB=False *_r / *_rough / *_m / *_metal *_ao / *_occlusion / *_orm *_mask → TC_MASKS, sRGB=False *_h / *_height / *_disp → TC_MASKS, sRGB=False *_e / *_emissive / *_emit → TC_DEFAULT, sRGB=True everything else (BaseColor…) → TC_DEFAULT, sRGB=True
Args: file_path: Absolute OS path on the UE5 Windows machine (e.g. "C:/Textures/T_Wood_BaseColor.png") destination_path: Content Browser folder (default "/Game/Textures/") texture_type: "auto" | "diffuse" | "normal" | "roughness" | "metallic" | "ao" | "emissive" | "height" | "default" Overrides filename-based detection when not "auto".
Returns: JSON string with StructuredResult — outputs on success: { "success": true, "stage": "import_texture", "outputs": { "asset_path": "/Game/Textures/T_Wood_BaseColor", "asset_type": "Texture2D", "texture_type": "BaseColor", "srgb": true, "compression": "TC_DEFAULT" }, "warnings": [], "errors": [], "log_tail": [] } failure: {"success": false, "stage": "import_texture", "errors": [""]}
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: import_texture(file_path="/Game/MCP_Test/Example")
Inputs: file_path (required), texture_type, destination_path. Returns: result
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()
Inputs: no named parameters. Returns: result
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.
Inputs: mode, wait_seconds, include_dialogs, stop_after_probe. Returns: result
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()
Inputs: include_dialogs. Returns: result
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()
Inputs: include_dialogs. Returns: result
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()
Inputs: include_dialogs. Returns: result
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()
Inputs: mode, wait_seconds, exercise_loop, include_dialogs, +1 more. Returns: result
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()
Inputs: load_level, save_level. Returns: result
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()
Inputs: load_level, save_level. Returns: result
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.
Inputs: mode, wait_seconds, include_dialogs, stop_after_probe. Returns: result
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()
Inputs: mode, wait_seconds, stop_after_probe. Returns: result
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()
Inputs: no named parameters. Returns: result
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")
Inputs: anim_blueprint_name (required), slot_name, graph_name. Returns: result
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")
Inputs: sequence_asset (required), anim_blueprint_name (required), graph_name, force_insert, +2 more. Returns: result
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")
Inputs: imc_path_or_name (required). Returns: result
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.
Inputs: asset_path (required), lod_index, max_sections. Returns: result
list_available_toolsA
List available MCP tools by domain/category using tool_inventory_categories.json.
Pass a category such as blueprint_graph, ui_umg, asset_import, or a friendly domain alias such as blueprints, generative, multiplayer, gas, or world_building.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#complete-command-reference
Example: list_available_tools()
Inputs: domain. Returns: result
list_bridge_toolsetsC
List TCP bridge command categories as Toolset-like descriptors.
Inputs: status, category, registry_path, response_format. Returns: result
list_knowledge_base_topicsA
List all available knowledge base topics.
Returns an index of every topic you can query with get_knowledge_base(). Call this first if you are unsure which topic covers the system you need.
MANDATORY: Query the knowledge base before implementing any UE5 system.
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#overview Example: list_knowledge_base_topics()
Inputs: no named parameters. Returns: result
list_toolsetsB
List Unreal MCP toolsets with optional text/category/status filters.
Inputs: status, category, filter_text, response_format. Returns: result
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")
Inputs: blueprint_name (required), grab_type, simulate_physics, grab_component_name. Returns: result
mass_add_traitA
Add a trait class to a MassEntity config asset.
Args: config_asset: MassEntity config asset path or object path. trait_class: MassEntity trait class, short name or /Script path. save: Save the asset after mutation.
Returns: Structured JSON with the added trait and updated trait list.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: mass_add_trait(config_asset="/Game/Mass/EntityConfigs/EC_CrowdAgent", trait_class="MassLODTrait")
Inputs: trait_class (required), config_asset (required), save. Returns: result
mass_create_entity_configA
Create a MassEntity config asset and optionally seed trait classes.
Args: name: Asset name to create. path: Content Browser folder under /Game. parent_config: Optional parent MassEntity config asset path. traits: Optional MassEntity trait classes, short names or /Script paths. overwrite: Delete an existing asset before creation. save: Save the asset package after creation.
Returns: Structured JSON with asset path, trait list, and config GUID.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: mass_create_entity_config(name="EC_CrowdAgent", traits=["MassAssortedFragmentsTrait"])
Inputs: name (required), path, save, traits, +2 more. Returns: result
mass_inspect_entity_configA
Inspect traits, parent config, and optional validation for a MassEntity config.
Args: config_asset: MassEntity config asset path or object path. validate: Validate the entity template against the editor world when available.
Returns: Structured JSON with trait details, parent path, and validation status.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: mass_inspect_entity_config(config_asset="/Game/Mass/EntityConfigs/EC_CrowdAgent", validate=True)
Inputs: config_asset (required), validate. Returns: result
mat_add_expressionA
Add a material expression (node) to a Material asset.
Common expression_type values: Texture — TextureSample (provide texture_path in params) Multiply — Multiply two inputs Add — Add two inputs Lerp — Linear interpolation Constant — Single float constant (provide value in params) Constant3 — RGB vector constant (provide r,g,b in params) Constant4 — RGBA vector constant (provide r,g,b,a in params) Param_Scalar — Scalar parameter (provide param_name in params) Param_Vector — Vector parameter (provide param_name in params) Param_Texture — Texture parameter (provide param_name in params) Fresnel — Fresnel effect CheapContrast — Cheap contrast adjustment Desaturation — Desaturation OneMinus — 1 - input VertexColor — Vertex color input WorldPosition — World position
expression_params (JSON object): texture_path: str — For TextureSample/Param_Texture param_name: str — For Param_* expressions value: float — For Constant r,g,b,a: float — For Constant3/Constant4
Args: material_path: Full asset path (e.g. '/Game/Materials/M_Rock') expression_type: Expression class short name (see above) position_x: Canvas X position. Default 0. position_y: Canvas Y position. Default 0. expression_params: JSON object of expression-specific params.
Returns: JSON StructuredResult. outputs.expression_index — Index for use in mat_connect_expressions outputs.expression_name — Object name of the created expression
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: mat_add_expression(material_path="/Game/MCP_Test/M_Example", expression_type="Example")
Inputs: material_path (required), expression_type (required), position_x, position_y, +1 more. Returns: result
mat_compileA
Compile (recompile) a Material and return structured errors/warnings.
Always run this after finishing material expression edits. Returns had_errors and a list of compile messages so the agent can diagnose and fix problems without opening the Material Editor.
Args: material_path: Full asset path (e.g. '/Game/Materials/M_Rock') save_after_compile: Also save the material asset. Default True.
Returns: JSON StructuredResult. outputs.had_errors — bool outputs.had_warnings — bool outputs.error_count — int outputs.warning_count — int outputs.saved — bool
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: mat_compile(material_path="/Game/MCP_Test/M_Example")
Inputs: material_path (required), save_after_compile. Returns: result
mat_connect_expressionsA
Connect two material expression nodes or connect an expression to a material input.
For material root input connections (BaseColor, Metallic, etc.) use '' (empty string) as to_expression_name and the slot name as to_input_name.
Common material root input names: BaseColor, Metallic, Specular, Roughness, EmissiveColor, Opacity, OpacityMask, Normal, WorldPositionOffset, SubsurfaceColor, AmbientOcclusion, Refraction, PixelDepthOffset
Common expression output names: RGB, R, G, B, A, (default) ''
Args: material_path: Full asset path to the Material from_expression_name: Object name of the source expression node (from mat_add_expression outputs.expression_name) from_output_name: Output pin name on the source node (e.g. 'RGB', 'R', '') to_expression_name: Object name of the target expression, OR '' to connect directly to a material root input slot to_input_name: Input pin/slot name on the target (e.g. 'A', 'BaseColor')
Returns: JSON StructuredResult.
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: mat_connect_expressions(material_path="/Game/MCP_Test/M_Example", from_expression_name="ExampleName", from_output_name="ExampleName", to_expression_name="ExampleName", to_input_name="ExampleName")
Inputs: material_path (required), to_input_name (required), from_output_name (required), to_expression_name (required), +1 more. Returns: result
mat_create_materialA
Create a new Unreal Engine Material asset.
Creates an empty material with the specified properties. After creation use mat_add_expression and mat_connect_expressions to build the material graph, then mat_compile to validate.
Blend modes: Opaque, Masked, Translucent, Additive, Modulate Shading models: DefaultLit, Unlit, SubSurface, PreintegratedSkin, ClearCoat, SubsurfaceProfile, TwoSidedFoliage, Hair, Cloth, Eye, SingleLayerWater
Args: material_name: Name for the new material asset (e.g. 'M_Rock') package_path: Content Browser folder. Default '/Game/Materials'. blend_mode: Material blend mode. Default 'Opaque'. shading_model: Shading model. Default 'DefaultLit'. two_sided: Enable two-sided rendering. Default False.
Returns: JSON StructuredResult. outputs.material_path — Full asset path (e.g. '/Game/Materials/M_Rock') outputs.next_steps — Suggested follow-up actions
KB: see knowledge_base/01_BLUEPRINT_FUNDAMENTALS.md#overview Example: mat_create_material(material_name="/Game/MCP_Test/M_Example")
Inputs: material_name (required), two_sided, blend_mode, package_path, +1 more. Returns: result
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")
Inputs: function_name (required), save, overwrite, description, +1 more. Returns: result
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")
Inputs: instance_name (required), parent_material_path (required), save, overwrite, +1 more. Returns: result
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")
Inputs: material_name (required), save, compile, opacity, +8 more. Returns: result
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")
Inputs: material_instance_path (required), save, scalar_parameters, vector_parameters, +1 more. Returns: result
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")
Inputs: material_path (required), save, compile, orm_texture, +3 more. Returns: result
mat_get_compile_diagnosticsA
Get compiler-derived diagnostics for a Material asset.
Args: material_path: Full asset path (e.g. '/Game/Materials/M_DemoB') include_warnings: Include warning-level items (default True)
Returns: StructuredResult with outputs: compile_clean — bool errors[] — structured error items warnings[] — structured warning items expression_count — int compiler_summary — str had_errors — bool
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: mat_get_compile_diagnostics(material_path="/Game/MCP_Test/M_Example")
Inputs: material_path (required), include_warnings. Returns: result
mat_validate_materialA
Validate a Material: expression count, disconnects, health score.
Gives materials the same trust model as Blueprints. Narrower than Blueprint validation but reliable and non-speculative.
Args: material_path: Full asset path (e.g. '/Game/Materials/M_DemoB')
Returns: StructuredResult with outputs: material_health_score — int 0-100 compile_clean — bool expression_count — int disconnected_count — int (expressions not connected to output) issues[] — structured issue items recommended_actions[] — actionable strings
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: mat_validate_material(material_path="/Game/MCP_Test/M_Example")
Inputs: material_path (required). Returns: result
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")
Inputs: static_mesh_path (required). Returns: result
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")
Inputs: character_name (required), dna_file, dna_asset, rig_logic_asset, +1 more. Returns: result
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")
Inputs: character_name (required), wrapper_blueprint (required), gameplay_tag, parent_class, +3 more. Returns: result
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")
Inputs: character_name (required), metahuman_root, create_manifest, body_skeletal_mesh, +2 more. Returns: result
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")
Inputs: character_name (required), metahuman_root. Returns: result
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")
Inputs: character_name (required), body_skeletal_mesh (required), ik_rig, retargeter, +3 more. Returns: result
metasound_add_nodeB
Add a native MetaSound node by registered class name.
Args: metasound: MetaSound Source/Patch asset path. class_name: Registered MetaSound node class name. class_namespace: Optional registered class namespace. class_variant: Optional registered class variant. major_version: Native class major version. node_position: Optional [X, Y] editor graph location.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: metasound_add_node(metasound="/Game/Audio/MetaSounds/MS_GeneratorHum", class_name="Sine", class_namespace="UE")
Inputs: metasound (required), class_name (required), class_variant, major_version, +2 more. Returns: result
metasound_compileA
Build, conform, and optionally save a MetaSound Source/Patch asset.
Args: metasound: MetaSound Source/Patch asset path. save: Save the package after compile/build.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: metasound_compile(metasound="/Game/Audio/MetaSounds/MS_GeneratorHum")
Inputs: metasound (required), save. Returns: result
metasound_connect_pinsA
Connect a MetaSound node output vertex to a node input vertex.
Args: metasound: MetaSound Source/Patch asset path. from_node_id: Source node GUID returned by metasound_add_node or inspection. from_output_id: Source output vertex GUID. to_node_id: Destination node GUID. to_input_id: Destination input vertex GUID.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: metasound_connect_pins(metasound="/Game/Audio/MetaSounds/MS_GeneratorHum", from_node_id="...", from_output_id="...", to_node_id="...", to_input_id="...")
Inputs: metasound (required), to_node_id (required), to_input_id (required), from_node_id (required), +1 more. Returns: result
metasound_create_patchA
Create a reusable MetaSound Patch asset for shared DSP logic.
Args: name: Asset name such as MSP_DamageCrackle. path: Content Browser folder under /Game. overwrite: Delete an existing asset with the same name first. save: Save the package after creation.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: metasound_create_patch(name="MSP_DamageCrackle", path="/Game/Audio/MetaSounds/Patches")
Inputs: name (required), path, save, overwrite. Returns: result
metasound_create_sourceA
Create a MetaSound Source asset for playable procedural audio.
Args: name: Asset name such as MS_GeneratorHum. path: Content Browser folder under /Game. one_shot: Metadata hint for source intent; true for one-shot sources. overwrite: Delete an existing asset with the same name first. save: Save the package after creation.
KB: see knowledge_base/21_METASOUNDS_AND_AUDIO_DSP.md#mcp-audio-tools Example: metasound_create_source(name="MS_GeneratorHum", path="/Game/Audio/MetaSounds")
Inputs: name (required), path, save, one_shot, +1 more. Returns: result
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")
Inputs: database (required), sequence (required), save, enabled, +3 more. Returns: result
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")
Inputs: name (required), schema (required), path, save, +3 more. Returns: result
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")
Inputs: name (required), path, save, skeleton, +3 more. Returns: result
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")
Inputs: asset (required). Returns: result
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])
Inputs: node_id (required), node_position (required), blueprint_name (required), graph_name. Returns: result
mrq_add_render_settingB
Add or update an MRQ output, pass, anti-aliasing, or console variable setting.
KB: see knowledge_base/28_MOVIE_RENDER_QUEUE_AND_SEQUENCER.md#mcp-movie-render-queue-tools Example: mrq_add_render_setting(job_name="Trailer_Master", setting_type="anti_aliasing", temporal_samples=8, warmup_frames=16)
Inputs: job_name, frame_end, resolution, frame_start, +10 more. Returns: result
mrq_create_jobC
Create and configure a Movie Render Queue job in the editor queue.
KB: see knowledge_base/28_MOVIE_RENDER_QUEUE_AND_SEQUENCER.md#mcp-movie-render-queue-tools Example: mrq_create_job(job_name="Trailer_Master", sequence="/Game/Cinematics/LS_Trailer", resolution=[3840, 2160])
Inputs: map, author, job_name, sequence, +6 more. Returns: result
mrq_render_queueC
Validate or start rendering the current Movie Render Queue.
KB: see knowledge_base/28_MOVIE_RENDER_QUEUE_AND_SEQUENCER.md#mcp-movie-render-queue-tools Example: mrq_render_queue(dry_run=False, executor="pie")
Inputs: dry_run, executor. Returns: result
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")
Inputs: blueprint_name (required), save, compile, node_position. Returns: result
net_add_replicated_componentB
Create or configure a Blueprint component template for replication.
Args: blueprint_name: Actor Blueprint asset name or path. component_name: SCS component template variable name. component_type: Optional component class/name to create when missing. replicates: Component replication flag. create_if_missing: Create the component when component_type is supplied and it is absent. save: Save the Blueprint package after mutation. compile: Compile the Blueprint after mutation.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_add_replicated_component(blueprint_name="/Game/BP_Door", component_name="ReplicatedMesh", component_type="StaticMeshComponent")
Inputs: blueprint_name (required), component_name (required), save, compile, +3 more. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), save, compile, +3 more. Returns: result
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")
Inputs: blueprint_name (required), save, compile, node_position. Returns: result
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")
Inputs: variable_name (required), blueprint_name (required), save, compile, +2 more. Returns: result
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")
Inputs: event_name (required), blueprint_name (required), save, compile, +2 more. Returns: result
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")
Inputs: event_name (required), blueprint_name (required), save, inputs, +4 more. Returns: result
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")
Inputs: blueprint_name (required). Returns: result
net_get_replication_graph_stateA
Inspect runtime replication graph/net driver state for the active world.
Args: max_actors: Maximum replicated actor samples to include.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_get_replication_graph_state(max_actors=10)
Inputs: max_actors. Returns: result
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")
Inputs: blueprint_name (required), save, compile, replicates, +3 more. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), save, compile, +1 more. Returns: result
net_set_function_rpcB
Create or configure a Blueprint Custom Event as an RPC.
Args: blueprint_name: Actor Blueprint asset name or path. function_name: Custom Event/function name to configure. rpc_type: server, client, netmulticast, net_multicast, multicast, or none. reliable: Mark the RPC reliable when True. create_if_missing: Create the Custom Event if it does not already exist. inputs: Optional typed input pins, e.g. [{"name": "Damage", "type": "Float"}]. node_position: Optional [X, Y] graph position for newly created events. save: Save the Blueprint package after mutation. compile: Compile the Blueprint after mutation.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_set_function_rpc(blueprint_name="/Game/BP_Door", function_name="Server_RequestOpen", rpc_type="server")
Inputs: function_name (required), blueprint_name (required), save, inputs, +5 more. Returns: result
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")
Inputs: blueprint_name (required), save, compile, node_position. Returns: result
net_set_property_replicatedA
Configure an existing Blueprint variable for replication or RepNotify.
Args: blueprint_name: Actor Blueprint asset name or path. variable_name: Existing Blueprint member variable. replicated: Enable replication when True; disable when False. repnotify: Use RepNotify instead of plain replication. replication_condition: Lifetime condition such as none, owner_only, or skip_owner. save: Save the Blueprint package after mutation. compile: Compile the Blueprint after mutation.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_set_property_replicated(blueprint_name="/Game/BP_Door", variable_name="bIsOpen", repnotify=True)
Inputs: variable_name (required), blueprint_name (required), save, compile, +3 more. Returns: result
net_set_replication_conditionB
Set the lifetime replication condition for a Blueprint variable.
Args: blueprint_name: Actor Blueprint asset name or path. variable_name: Existing Blueprint member variable. replication_condition: Condition such as none, initial_only, owner_only, or skip_owner. replication_mode: replicated, repnotify, or none. save: Save the Blueprint package after mutation. compile: Compile the Blueprint after mutation.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_set_replication_condition(blueprint_name="/Game/BP_Door", variable_name="bIsOpen", replication_condition="owner_only")
Inputs: variable_name (required), blueprint_name (required), replication_condition (required), save, +2 more. Returns: result
net_set_role_overrideB
Add a role-switch helper node for authority/role-specific Blueprint flow.
Args: blueprint_name: Actor Blueprint asset name or path. node_position: Optional [X, Y] graph position. save: Save the Blueprint package after mutation. compile: Compile the Blueprint after mutation.
KB: see knowledge_base/20_NETWORKING_AND_REPLICATION.md#mcp-network-tools Example: net_set_role_override(blueprint_name="/Game/BP_Door", node_position=[400, 0])
Inputs: blueprint_name (required), save, compile, node_position. Returns: result
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()
Inputs: blueprint_name. Returns: result
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()
Inputs: max_actors. Returns: result
niagara_add_empty_emitterC
Add a native empty emitter handle to a Niagara System asset.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_add_empty_emitter(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required), save, emitter_name, add_default_modules. Returns: result
niagara_add_mesh_rendererC
Add a Mesh Renderer to an existing Niagara emitter handle.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_add_mesh_renderer(system_path="/Game/MCP_Test/Example", static_mesh_path="/Game/MCP_Test/Example")
Inputs: system_path (required), static_mesh_path (required), save, emitter_id, +2 more. Returns: result
niagara_add_sprite_rendererC
Add a Sprite Renderer to an existing Niagara emitter handle.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_add_sprite_renderer(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required), save, emitter_id, emitter_name, +1 more. Returns: result
niagara_apply_system_settingsC
Apply safe Niagara System-level settings such as warmup and fixed bounds.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_apply_system_settings(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required), save, warmup_time, fixed_bounds_max, +2 more. Returns: result
niagara_create_systemC
Create an empty Niagara System asset when the UE editor factory is available.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_create_system(system_name="ExampleName")
Inputs: system_name (required), save, overwrite, folder_path. Returns: result
niagara_describe_systemB
Describe a Niagara System asset and report what Python can safely inspect.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_describe_system(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required). Returns: result
niagara_find_systemsC
Find Niagara System and Emitter assets through the Asset Registry.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_find_systems()
Inputs: page, limit, search, root_path. Returns: result
niagara_get_effect_recipeB
Return an original Niagara module-stack recipe for a named effect.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_get_effect_recipe()
Inputs: recipe_name. Returns: result
niagara_profile_systemB
Return lightweight asset-level Niagara profiling data and authoring hints.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_profile_system(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required). Returns: result
niagara_set_fixed_boundsB
Set Niagara System fixed bounds without changing unrelated system settings.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_set_fixed_bounds(system_path="/Game/MCP_Test/Example")
Inputs: system_path (required), save, fixed_bounds_max, fixed_bounds_min. Returns: result
niagara_set_spawn_rateC
Add or update an emitter SpawnRate module and set its particles-per-second value.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_set_spawn_rate(system_path="/Game/MCP_Test/Example", spawn_rate=0.0)
Inputs: spawn_rate (required), system_path (required), save, emitter_id, +1 more. Returns: result
niagara_set_system_user_parameterC
Add or update a Niagara System exposed user parameter.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_set_system_user_parameter(system_path="/Game/MCP_Test/Example", parameter_name="ExampleName")
Inputs: system_path (required), parameter_name (required), save, value, +1 more. Returns: result
niagara_validate_authoring_supportB
Probe available Niagara Python/editor APIs before native authoring work.
KB: see knowledge_base/09_NIAGARA_VFX.md#overview Example: niagara_validate_authoring_support()
Inputs: no named parameters. Returns: result
online_configure_default_subsystemC
Set the default Online Subsystem service in project config.
KB: see knowledge_base/30_ONLINE_SUBSYSTEM_AND_EOS.md#mcp-online-subsystem-and-eos-tools Example: online_configure_default_subsystem(default_service="EOS", native_service="EOS")
Inputs: native_service, default_service, enable_online_subsystem. Returns: result
online_configure_eos_sessionsC
Configure EOS session, lobby, presence, connect, and stat mirroring flags.
KB: see knowledge_base/30_ONLINE_SUBSYSTEM_AND_EOS.md#mcp-online-subsystem-and-eos-tools Example: online_configure_eos_sessions(use_eos_sessions=True, use_eos_lobbies=True, use_eos_presence=True)
Inputs: use_eos_connect, use_eos_lobbies, use_eos_presence, use_eos_sessions, +1 more. Returns: result
online_create_eos_artifact_configC
Create or update EOS artifact identity settings in project config.
KB: see knowledge_base/30_ONLINE_SUBSYSTEM_AND_EOS.md#mcp-online-subsystem-and-eos-tools Example: online_create_eos_artifact_config(artifact_name="Dev", product_id="...", sandbox_id="...", deployment_id="...")
Inputs: artifact_name (required), client_id, product_id, sandbox_id, +4 more. Returns: result
online_inspect_configC
Inspect Online Subsystem and EOS project configuration.
KB: see knowledge_base/30_ONLINE_SUBSYSTEM_AND_EOS.md#mcp-online-subsystem-and-eos-tools Example: online_inspect_config(include_plugins=True)
Inputs: include_plugins. Returns: result
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()
Inputs: no named parameters. Returns: result
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")
Inputs: save, overwrite, graph_path. Returns: result
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")
Inputs: scale, generate, location, rotation, +2 more. Returns: result
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)
Inputs: actor_label (required), cleanup, generate. Returns: result
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")
Inputs: blueprint_name (required), save, compile, component_name. Returns: result
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")
Inputs: blueprint_name (required), event_name, node_position, component_name. Returns: result
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")
Inputs: blueprint_name (required), save, dominant, hearing_range, +4 more. Returns: result
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")
Inputs: blueprint_name (required), save, dominant, sight_radius, +6 more. Returns: result
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")
Inputs: blueprint_name (required), save, senses, compile, +2 more. Returns: result
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")
Inputs: blueprint_name (required). Returns: result
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()
Inputs: include_memory, include_viewport. Returns: result
pie_capture_logA
Capture the tail of the current Unreal project log for verification.
Args:
max_lines: Maximum number of log lines to return
contains: Optional case-insensitive filter
save_artifact: Save captured lines to .mcp_artifacts/logs
artifact_name: Artifact filename stem when saving
Returns: JSON string with log file path, captured lines, and optional artifact path.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: pie_capture_log()
Inputs: contains, max_lines, artifact_name, save_artifact. Returns: result
pie_launch_sessionA
Request a PIE or Simulate session from the Unreal Editor.
Args: mode: "simulate" for Simulate In Editor, otherwise requests normal PIE wait_seconds: Short post-request delay before reporting session state
Returns: JSON string with requested mode, prior state, current state, and PIE world count.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: pie_launch_session()
Inputs: mode, wait_seconds. Returns: result
pie_simulate_inputA
Send a console-command style input to the active PIE world.
This intentionally starts with console commands because they are stable, scriptable, and auditable. Higher-fidelity key/mouse injection can build on top after the PIE loop has enough evidence capture.
Args:
console_command: Console command to execute, such as stat fps
player_index: Local player controller index
require_pie: Fail when no PIE/SIE session is active
Returns: JSON string with command dispatch details.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: pie_simulate_input(console_command="Example")
Inputs: console_command (required), require_pie, player_index. Returns: result
pie_stop_sessionA
Request the active PIE/SIE session to stop.
Args: wait_seconds: Short post-request delay before reporting session state
Returns: JSON string with prior and current PIE state.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: pie_stop_session()
Inputs: wait_seconds. Returns: result
ping_unrealA
Ping the UnrealMCP bridge and return its health response.
KB: see knowledge_base/10_WORLD_BUILDING.md#overview Example: ping_unreal()
Inputs: no named parameters. Returns: result
pixelstream_configure_pluginB
Set Pixel Streaming enablement and preferred generation flags in project config.
KB: see knowledge_base/29_PIXEL_STREAMING_AND_REMOTE.md#mcp-pixel-streaming-tools Example: pixelstream_configure_plugin(enable_pixel_streaming=True, prefer_pixel_streaming_2=False)
Inputs: enable_pixel_streaming, enable_pixel_streaming_2, prefer_pixel_streaming_2. Returns: result
pixelstream_configure_streamerC
Configure local Pixel Streaming streamer URL, ports, render, and encoder settings.
KB: see knowledge_base/29_PIXEL_STREAMING_AND_REMOTE.md#mcp-pixel-streaming-tools Example: pixelstream_configure_streamer(signalling_url="ws://127.0.0.1:8888", streamer_id="LocalDemo")
Inputs: streamer_id, signalling_url, signalling_port, web_server_port, +3 more. Returns: result
pixelstream_create_launch_profileB
Create a reusable Pixel Streaming launch profile and return its launch args.
KB: see knowledge_base/29_PIXEL_STREAMING_AND_REMOTE.md#mcp-pixel-streaming-tools Example: pixelstream_create_launch_profile(profile_name="LocalPixelStreaming", resolution_x=1280, resolution_y=720)
Inputs: streamer_id, profile_name, resolution_x, resolution_y, +2 more. Returns: result
pixelstream_inspect_configB
Inspect Pixel Streaming project configuration and plugin availability.
KB: see knowledge_base/29_PIXEL_STREAMING_AND_REMOTE.md#mcp-pixel-streaming-tools Example: pixelstream_inspect_config(include_plugins=True)
Inputs: include_plugins. Returns: result
project_find_assetsA
Find assets in the Unreal project using the Asset Registry.
Searches by asset class, package path, and optional tag filters. Results are paginated — use page / limit to scroll through large sets.
Returns a list of asset descriptors: package_name — full package path (e.g. '/Game/Blueprints/BP_Hero') asset_name — bare asset name (e.g. 'BP_Hero') class_path — asset class full path (e.g. '/Script/Engine.Blueprint') tags — dict of asset registry tags (e.g. {'ParentClass': '...'})
Args: class_names: Asset class filters (e.g. ['Blueprint', 'StaticMesh']). Empty = all classes. package_paths: Root paths to search (e.g. ['/Game/Blueprints']). recursive: Search subdirectories. Default True. tags: Tag=value filters (AND). Empty = no tag filter. limit: Page size. Default 200, max 1000. page: 0-based page index. Default 0.
Returns: JSON StructuredResult with outputs.assets list.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: project_find_assets()
Inputs: page, tags, limit, recursive, +2 more. Returns: result
project_find_blueprint_by_parentA
Find all Blueprints that derive from a given parent class.
Searches the Asset Registry for Blueprint assets, then filters by the 'ParentClass' tag. The tag value typically looks like '/Script/Engine.Actor' but the tool also matches on bare class name (e.g. 'Actor' matches '/Script/Engine.Actor').
Args: parent_class: Parent class name or full path (e.g. 'Actor', 'Character'). recursive: Search all sub-paths under /Game. Default True. limit: Max assets returned. Default 200.
Returns: JSON StructuredResult with outputs.assets (same shape as project_find_assets).
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: project_find_blueprint_by_parent(parent_class="Actor")
Inputs: parent_class (required), limit, recursive. Returns: result
project_get_referencesA
Get asset references (dependencies and/or referencers) for a package.
Uses the Asset Registry to traverse one level of the reference graph.
Args: package_name: Full package path (e.g. '/Game/Blueprints/BP_HealthSystem'). direction: 'in' (who uses this), 'out' (what this uses), or 'both'. hard_only: If True, only hard (hard-reference) edges are included.
Returns: JSON StructuredResult. Data keys present depend on direction: referencers — packages that reference this asset (direction in/both) dependencies — packages this asset depends on (direction out/both)
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: project_get_references(package_name="ExampleName")
Inputs: package_name (required), direction, hard_only. Returns: result
project_list_subsystemsA
Enumerate Unreal Engine Subsystem classes by category.
Uses unreal.get_all_classes_of_type() reflection — no hand-curated list. Results are cached for 10 s; pass refresh=True to force an immediate re-scan.
Categories: engine | editor | gameinstance | localplayer | all
Each entry: class — UClass name (e.g. 'UEditorAssetSubsystem') module — Outer package module name available — True (all discovered classes are considered available)
Args: category: Which subsystem base class to enumerate. Default 'all'. refresh: Force cache refresh. Default False.
Returns: JSON StructuredResult with outputs matching the category filter.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: project_list_subsystems()
Inputs: refresh, category. Returns: result
project_trace_reference_chainA
BFS trace of the reference chain from a starting package.
Traverses the asset reference graph and returns all reachable packages within max_depth hops. Deduplicates visited nodes. Truncates when max_nodes is hit (sets truncated=true).
Args: start_package: Starting package (e.g. '/Game/Materials/M_DemoB'). direction: 'in' (who references start) or 'out' (what start references). max_depth: Maximum BFS depth. Default 3. stop_on_class: Stop expanding a node if its class is in this list. max_nodes: Hard cap on total nodes in result. Default 500.
Returns: JSON StructuredResult with outputs.nodes list: [{package, depth, via}] plus depth_reached, truncated.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: project_trace_reference_chain(start_package="Example")
Inputs: start_package (required), direction, max_depth, max_nodes, +1 more. Returns: result
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")
Inputs: node_id (required), blueprint_name (required), graph_name. Returns: result
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")
Inputs: node_id (required), comment_text (required), blueprint_name (required), color, +1 more. Returns: result
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")
Inputs: viewmode (required), filepath, restore_viewmode. Returns: result
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")
Inputs: behavior_tree_name (required), fix_guids_only. Returns: result
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")
Inputs: output_path (required), retargeter_path (required), source_animation_path (required), overwrite, +1 more. Returns: result
risk_evaluate_actionA
Evaluate action risk before an autonomous agent mutates the project.
Args: action: Natural-language action description target: Actor, asset, subsystem, file, or feature target operation_type: inspect/read/create/edit/delete/compile/save/build/etc. asset_paths: Optional affected Unreal asset paths destructive: True for deletion, overwrite, reset, or irreversible edits requires_compile: True when Blueprint/C++ compile or VM recompile is needed affects_runtime: True when gameplay behavior may change touches_source: True when C++/Python/plugin source files are involved estimated_scope: single_asset, multi_asset, folder, level, or project_wide mitigations: Existing safeguards such as checkpoint, journal, dry-run, tests
Returns: JSON string with risk level, score, recommended gate, reasons, and checklist.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: risk_evaluate_action(action="Example")
Inputs: action (required), target, asset_paths, destructive, +6 more. Returns: result
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:
compile_blueprint(blueprint_name=...)— marks modified (plugin safe path)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")
Inputs: blueprint_name (required), only_if_dirty. Returns: result
scan_export_folderA
Scan a local folder for importable assets and return a categorised manifest.
This tool runs LOCALLY on the MCP server machine — it does NOT connect to UE5. Use it to preview what would be imported before calling batch_import_folder.
Args: folder_path: Absolute path to the folder on the MCP server machine (e.g. "/home/user/exports/Bastila" or "C:/KotOR/exports") recursive: If True, scan all subdirectories (default True)
Returns: JSON string with a categorised manifest: { "folder": "/home/user/exports/Bastila", "total_files": 12, "importable": 10, "skipped": 2, "categories": { "texture": [{"path": "...", "name": "...", "ext": ".png"}, ...], "mesh": [...], "audio": [...], "unknown": [...] }, "subdirs": ["textures", "meshes"] }
KB: see knowledge_base/31_GENERATIVE_CONTENT_PIPELINE.md#overview Example: scan_export_folder(folder_path="/Game/MCP_Test/Example")
Inputs: folder_path (required), recursive. Returns: result
scan_project_assetsC
Scan Content Browser assets via the Unreal Asset Registry.
Returns structured inventory rows with class, size, referencer count, dependency count, package path, and folder depth.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#asset-creation-patterns
Example: scan_project_assets()
Inputs: path, depth, class_filter. Returns: result
sc_get_changelistA
Get files in a source control changelist.
For providers without explicit changelists (Git, SVN), returns all locally modified files.
When no provider is configured, returns an empty files list (success=True, available=False).
Args: changelist: Changelist name/number. 'default' = default changelist.
Returns: JSON StructuredResult with outputs: changelist — the queried changelist name description — changelist description (empty string if unavailable) available — bool — False when no SC provider files — [{path, state}]
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: sc_get_changelist()
Inputs: changelist. Returns: result
sc_get_provider_infoA
Get information about the active source control provider.
Always returns success=True. When no SC provider is configured, returns provider='None', available=False — this is not an error.
Returns: JSON StructuredResult with outputs: provider — 'Perforce' | 'Subversion' | 'Git' | 'None' available — bool workspace — workspace/client name (Perforce only, else '') server — server address (else '') user — SC username (else '')
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: sc_get_provider_info()
Inputs: no named parameters. Returns: result
sc_get_statusA
Get the source control status of a single asset or file path.
Never raises when the provider is unavailable; returns state='unknown' or state='not_in_depot' as appropriate.
Args: path: Package path ('/Game/Blueprints/BP_HealthSystem') or absolute filesystem path to the .uasset file.
Returns: JSON StructuredResult with outputs: path — the queried path state — 'checked_out' | 'added' | 'unchanged' | 'deleted' | 'conflicted' | 'not_in_depot' | 'ignored' | 'unknown' revision — revision string (e.g. '#12') or '' if unavailable
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: sc_get_status(path="/Game/MCP_Test/Example")
Inputs: path (required). Returns: result
search_bridge_commandsB
Search TCP bridge command descriptors by text, category, status, or mutation class.
Inputs: limit, query, status, category, +3 more. Returns: result
search_knowledge_baseA
Search across all knowledge base files for a keyword or phrase.
Returns matching sections from both hand-written reference docs and book extracts. Use this when you need a specific term, function name, pattern, or concept and don't know which topic file covers it.
Args: query: Keyword or phrase to search for. Examples: "behavior tree task", "blend space", "data table row", "event dispatcher", "spawn actor", "material parameter"
KB: see knowledge_base/00_AGENT_KNOWLEDGE_BASE.md#overview Example: search_knowledge_base(query="Example")
Inputs: query (required). Returns: result
server_cancel_operationC
Request cooperative cancellation for a tracked operation.
Inputs: operation_id (required), reason. Returns: result
server_lifecycle_statusB
Report Ghost server lifecycle, transport, bridge, and catalog state.
Inputs: no named parameters. Returns: result
server_list_operationsC
List tracked indirect tool operations and their latest progress event.
Inputs: limit, include_completed. Returns: result
server_operation_statusA
Return detailed progress and cancellation state for one operation.
Inputs: operation_id (required). Returns: result
server_protocol_contractA
Describe Ghost's client-visible MCP protocol contract and native parity boundaries.
Inputs: no named parameters. Returns: result
server_refresh_metadataC
Refresh runtime metadata that can safely update without re-registering Python tools.
Inputs: dry_run. Returns: result
server_transport_diagnosticsA
Describe active MCP transport behavior, compatibility, security posture, and native gaps.
Inputs: no named parameters. Returns: result
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")
Inputs: blueprint_name (required), save, compile, use_lan, +3 more. Returns: result
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")
Inputs: blueprint_name (required), save, compile, use_lan, +3 more. Returns: result
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")
Inputs: name (required), property_name (required), property_value (required). Returns: result
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")
Inputs: name (required), scale, location, rotation. Returns: result
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")
Inputs: state_name (required), animation_asset (required), state_machine_name (required), anim_blueprint_name (required), +1 more. Returns: result
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")
Inputs: blackboard_name (required), behavior_tree_name (required). Returns: result
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)
Inputs: key_name (required), value_type (required), blueprint_name (required), node_position. Returns: result
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")
Inputs: blueprint_name (required), controller_class.
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")
Inputs: blueprint_name (required), new_parent_class (required). Returns: result
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")
Inputs: property_name (required), blueprint_name (required), property_value (required). Returns: result
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)
Inputs: default_value (required), variable_name (required), blueprint_name (required). Returns: result
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")
Inputs: blueprint_name (required), component_name (required), hidden_in_game, collision_preset, +1 more. Returns: result
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")
Inputs: parent_socket (required), blueprint_name (required), component_name (required), parent_component. Returns: result
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")
Inputs: property_name (required), blueprint_name (required), component_name (required), property_value (required). Returns: result
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")
Inputs: game_mode_name (required). Returns: result
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")
Inputs: root_bone (required), ik_rig_name (required), ik_rig_path (required). Returns: result
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")
Inputs: actor_name (required), material_path (required), element_index. Returns: result
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)
Inputs: value (required), node_id (required), pin_name (required), blueprint_name (required), +1 more. Returns: result
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")
Inputs: blueprint_name (required), can_be_damaged, auto_possess_ai, auto_possess_player, +3 more.
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")
Inputs: blueprint_name (required), component_name (required), mass, linear_damping, +3 more. Returns: result
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")
Inputs: actor_name (required), track_type (required), sequence_path (required), keyframes. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), material, materials, +1 more. Returns: result
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", )
Inputs: node_id (required), actor_class (required), blueprint_name (required), graph_name. Returns: result
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")
Inputs: blueprint_name (required), component_name (required), material, static_mesh. Returns: result
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")
Inputs: widget_name (required), text_block_name (required), binding_property (required), binding_type. Returns: result
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:
Create IK Rig for source skeleton (auto-generate chains)
Create IK Rig for target skeleton (auto-generate chains)
Create IK Retargeter (source → target, auto-map chains + auto-align)
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")
Inputs: retargeter_name (required), source_ik_rig_name (required), target_ik_rig_name (required), source_skeletal_mesh (required)… Returns: result
setup_full_save_load_systemA
Set up the complete save/load system as described in Ch. 11.
Creates:
BP_SaveInfo SaveGame Blueprint with Round variable
Variables in character BP: CurrentRound, SaveInfoRef, SaveSlotName
SaveRound macro (check validity, create if new, set round, save to slot)
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()
Inputs: slot_name, save_variables, character_blueprint, save_blueprint_name. Returns: result
setup_hit_material_swapA
Set up a full hit-detection + material swap interaction as in Ch. 5.
Creates the complete "cylinder target" interaction:
Event Hit -> track hit count
First hit: swap to hit material
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")
Inputs: blueprint_name (required), mesh_component, hit_material_path, hit_count_to_destroy, +1 more. Returns: result
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")
Inputs: material_path (required), include_recommendations. Returns: result
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()
Inputs: filepath, viewmode, restore_viewmode. Returns: result
skill_audit_blueprint_healthA
Audit the health of a Blueprint and return a structured report.
Calls only existing atomic tools (bp_get_graph_summary, bp_get_graph_detail, project_get_references, bp_compile). Does not use exec_python directly.
The audit checks: • Compilation status (had_errors flag) • Variable inventory • Disconnected exec pins (execution chains broken) • Disconnected non-exec input pins without defaults • Unused variables (declared but not referenced in any graph) • Incoming reference count
Returns a 0–100 health_score: 100 — clean compile, no issues 70-99 — minor issues (unused vars, unconnected data pins) 40-69 — significant issues (disconnected exec chains) 0-39 — compile failure or severe disconnection
Args: blueprint_name: Asset name (e.g. 'BP_HealthSystem'). blueprint_path: Full package path. None = '/Game/Blueprints/'. compile_check: Whether to run bp_compile. Default True.
Returns: JSON StructuredResult with outputs: compiles_clean, variable_count, function_graph_count, node_count_total, disconnected_exec_pins, disconnected_input_pins, unused_variables, incoming_references, warnings, health_score
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: skill_audit_blueprint_health(blueprint_name="/Game/MCP_Test/BP_Example")
Inputs: blueprint_name (required), compile_check, blueprint_path. Returns: result
skill_compile_ide_companion_asset_lifecycle_manifestA
Compile a provider-neutral generated asset lifecycle manifest.
Converts planned generated asset prompts into provider task contracts, readiness/spend gates, placeholder replacement mapping, quality gates, and evidence requirements. This tool does not call Tripo, spend credits, or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d34-ide-companion-generated-asset-lifecycle-manifest Example: skill_compile_ide_companion_asset_lifecycle_manifest(session_plan=plan, placeholder_manifest=manifest)
Inputs: session_plan (required), manifest_name, write_manifest, preferred_provider, +1 more. Returns: result
skill_compile_ide_companion_blocker_resolutionA
Compile no-spend resolution choices for IDE companion blockers.
Converts readiness/status blockers into unblock actions, fallback paths, placeholder policy, bridge-offline policy, and next MCP actions. This tool does not call Tripo or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d18-ide-companion-blocker-resolution Example: skill_compile_ide_companion_blocker_resolution(session_plan=plan, companion_status=status)
Inputs: dashboard, session_plan, companion_status, readiness_report, +1 more. Returns: result
skill_compile_ide_companion_dashboardB
Compile a display-ready dashboard packet for the IDE companion.
Reads the local ledger or a provided session plan and returns readiness, progress, next-work, generated-asset, mechanic, and evidence cards plus the current status/work-order payloads. This tool does not call Tripo or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d17-ide-companion-dashboard Example: skill_compile_ide_companion_dashboard(session_name="ide-companion")
Inputs: ledger_path, session_name, session_plan, current_blockers, +1 more. Returns: result
skill_compile_ide_companion_editor_queueA
Compile a bridge-gated editor action queue for an IDE companion session.
Turns a placeholder manifest or work order into durable editor actions that can be executed after the Unreal bridge is reachable. This tool writes only a local queue file; it does not call Tripo or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d20-ide-companion-editor-action-queue Example: skill_compile_ide_companion_editor_queue(session_plan=plan, companion_status=status, placeholder_manifest=manifest)
Inputs: session_plan (required), queue_name, work_order, companion_status, +1 more. Returns: result
skill_compile_ide_companion_placeholder_manifestA
Compile a no-spend placeholder manifest for blocked generated assets.
Converts planned generated asset prompts into placeholder assets, replacement mapping, creation tool steps, and evidence requirements. This tool does not call Tripo or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d19-ide-companion-placeholder-manifest Example: skill_compile_ide_companion_placeholder_manifest(session_plan=plan)
Inputs: session_plan (required), placeholder_root, blocker_resolution. Returns: result
skill_compile_ide_companion_sessionB
Compile a no-spend IDE companion session plan for a solo Unreal developer.
Returns a full orchestration plan covering readiness, generated assets, gameplay mechanic planning, editor implementation, runtime verification, fallback paths, gates, and next MCP tool calls.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d12-ide-companion-session-orchestrator Example: skill_compile_ide_companion_session(project_brief="third-person dungeon slice", mechanic_brief="patrol enemy that updates objective HUD")
Inputs: project_brief (required), content_path, session_name, mechanic_brief, +1 more. Returns: result
skill_compile_ide_companion_statusA
Compile a no-spend progress receipt for an IDE companion session.
Accepts a session plan plus optional readiness report, completed phase names, evidence map, and manual blockers. Returns the current phase states, blocking gates, evidence gaps, readiness flags, and next safe MCP action.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d13-ide-companion-status-receipt Example: skill_compile_ide_companion_status(session_plan=plan, readiness_report=readiness, completed_phases=["orient_to_project"])
Inputs: session_plan (required), evidence, completed_phases, current_blockers, +1 more. Returns: result
skill_compile_ide_companion_work_orderC
Compile the next safe work order for an IDE companion session.
Accepts a session plan plus optional status/readiness context and emits the selected phase, prerequisites, blockers, tool steps, evidence to collect, acceptance criteria, stop conditions, and after-completion status refresh.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d14-ide-companion-work-order Example: skill_compile_ide_companion_work_order(session_plan=plan, companion_status=status)
Inputs: session_plan (required), target_phase, companion_status, readiness_report. Returns: result
skill_create_health_systemA
Create a complete HealthSystem Blueprint using atomic graph tools.
This skill composes multiple bp_* atomic tools to create a functional Blueprint with health management logic. It is the reference example for how Ghost composes atomic tools into higher-order workflows.
The Blueprint will contain:
Variables: Health (Float), MaxHealth (Float), bIsDead (Boolean)
Function: TakeDamage(DamageAmount: Float) — subtracts, clamps, sets bIsDead=true when Health ≤ 0, prints damage report
EventGraph: BeginPlay → PrintString "[HealthSystem] Initialized..."
All steps use atomic tools (bp_add_variable, bp_add_node, bp_connect_pins, bp_set_pin_default, bp_compile) wherever dedicated tools exist. Operations without dedicated tools (float arithmetic, function params) use exec_python and are listed in outputs.exec_python_steps.
If any step fails, the skill stops immediately and reports which step failed and the structured error from the atomic tool.
Args: blueprint_name: Name of the Blueprint asset. Default 'BP_HealthSystem' blueprint_path: Content Browser folder. Default '/Game/Blueprints' initial_health: Starting Health value. Default 100.0 initial_max_health: Starting MaxHealth value. Default 100.0
Returns: JSON StructuredResult with: outputs.blueprint_path — full content browser path outputs.variables_created — ['Health', 'MaxHealth', 'bIsDead'] outputs.functions_created — ['TakeDamage'] outputs.event_graph_nodes — node count placed in EventGraph outputs.connections_made — total connections made outputs.compile_result — 'clean' or 'errors' outputs.exec_python_steps — steps that used exec_python fallback outputs.steps_completed — ordered list of completed steps outputs.steps_failed — non-empty if any step failed
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: skill_create_health_system()
Inputs: blueprint_name, blueprint_path, initial_health, initial_max_health. Returns: result
skill_generate_city_districtB
Plan a native-aligned city/district generation workflow.
Mode plan returns a no-mutation plan. Mode queue also returns a
structured, not-yet-executed tool queue. The skill composes PCG,
World Partition, Data Layer, HLOD, Blueprint blockout, screenshot, and
optional Mass/SmartObject steps while calling out deeper native gaps.
KB: see knowledge_base/10_WORLD_BUILDING.md#4-procedural-content-generation-pcg Example: skill_generate_city_district(brief="walkable sci-fi downtown district", mode="plan")
Inputs: brief (required), mode, style, density, +8 more. Returns: result
skill_generate_playable_sliceA
Plan, submit assets for, or assemble a generated playable slice.
Mode plan validates the schema and returns the end-to-end tool
sequence without network calls. Mode submit_assets requires
TRIPO_API_KEY and confirm_spend=True before submitting paid Tripo tasks.
Mode assemble consumes completed task_ids or imported_asset_paths,
then creates Blueprint/AI/HUD/level/evidence/report outputs.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d7-playable-slice-skill Example: skill_generate_playable_slice(brief="third-person dungeon demo with a slime and a boss", mode="plan")
Inputs: brief (required), mode, task_ids, content_path, +4 more. Returns: result
skill_package_vertical_slice_reportA
Package journal evidence into a production-style vertical slice report.
This skill composes Phase 6 outputs into a readable Markdown artifact: execution journal entries, screenshots/logs/assets, verification results, and a short follow-up checklist. It does not mutate Unreal assets.
Args: title: Report title summary: Human-readable closeout summary journal_path: Optional path returned by execution_journal_start report_dir: Workspace-relative report output directory project_name: Optional Unreal project/map name artifacts: Optional asset, screenshot, log, or file paths verification: Optional final verification evidence include_journal_entries: Include recent journal entries in the report max_entries: Maximum journal entries to include
Returns: JSON StructuredResult with outputs.report_path and evidence counts.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: skill_package_vertical_slice_report()
Inputs: title, summary, artifacts, report_dir, +5 more. Returns: result
skill_plan_gameplay_mechanicA
Plan an Unreal-ready gameplay mechanic implementation from a brief.
Returns a no-spend, no-editor-mutation plan covering generated asset prompts, Blueprint/component structure, AI/HUD/save/replication hooks, validation gates, and the ordered MCP tool sequence.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d11-gameplay-mechanic-planner Example: skill_plan_gameplay_mechanic(brief="player dash ability with cooldown and HUD feedback")
Inputs: brief (required), content_path, include_generated_assets. Returns: result
skill_record_ide_companion_evidenceA
Record phase evidence to the durable local IDE companion ledger.
Writes a JSON ledger under .mcp_artifacts/ide_companion_sessions,
refreshes status from the recorded evidence, and returns the ledger path
plus updated status. This tool does not call Tripo or mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d15-ide-companion-evidence-ledger Example: skill_record_ide_companion_evidence(session_plan=plan, phase_name="orient_to_project", summary="Project context loaded")
Inputs: phase_name (required), session_plan (required), summary, artifacts, +5 more. Returns: result
skill_repair_broken_blueprintA
Diagnose a Blueprint and apply deterministic repairs automatically.
Phase 4 / V6 skill — orchestrates the full repair loop:
Run compile diagnostics
Run structural validation (orphans, disconnected exec chains)
Build repair plan (auto_repairable issues only)
Apply repairs (orphan removal, exec reconnection)
Recompile Blueprint
Run post-mutation verification
Return before/after JSON with health_delta
Issues that are NOT deterministically repairable (compile errors,
possibly-unused variables, missing graphs) are collected in
repairs_skipped — never silently ignored.
Args: blueprint_path: Full asset path (e.g. '/Game/BP_HealthSystem') or plain name ('BP_HealthSystem') dry_run: If True, report what would be repaired without actually making changes (default False) max_repairs: Safety cap on number of auto-repairs applied in a single call (default 20)
Returns: StructuredResult with outputs: before — health snapshot before repair after — health snapshot after repair repairs_applied[] — list of applied repair records repairs_skipped[] — list of skipped issues with reasons health_delta — int (after.health_score - before.health_score) safe_to_continue — bool repair_summary — human-readable string
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: skill_repair_broken_blueprint(blueprint_path="/Game/MCP_Test/BP_Example")
Inputs: blueprint_path (required), dry_run, max_repairs. Returns: result
skill_resume_ide_companion_sessionA
Resume an IDE companion session from its durable local ledger.
Loads .mcp_artifacts/ide_companion_sessions/<session>.json or an
explicit ledger path, rebuilds status, compiles the next work order,
and returns a compact resume packet. This tool does not call Tripo or
mutate Unreal.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#d16-ide-companion-session-resume Example: skill_resume_ide_companion_session(session_name="ide-companion")
Inputs: ledger_path, session_name, current_blockers, readiness_report. Returns: result
smartobject_add_slotA
Add a slot to a SmartObject definition.
Args: definition: SmartObject definition asset path or object path. slot_name: Editor display name for the slot. offset: Slot offset [x, y, z] in definition space. rotation: Slot rotation [pitch, yaw, roll]. activity_tags: Gameplay tags describing slot activities. runtime_tags: Initial runtime tags for the slot. enabled: Initial enabled flag. save: Save the asset after mutation.
Returns: Structured JSON with added slot details, tag warnings, and slot count.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: smartobject_add_slot(definition="/Game/AI/SmartObjects/SO_CoverPoint", slot_name="LeftPeek", offset=[0, -60, 0])
Inputs: definition (required), save, offset, enabled, +4 more. Returns: result
smartobject_create_definitionA
Create a SmartObject definition asset and optional default slot.
Args: name: Asset name to create. path: Content Browser folder under /Game. slot_name: Optional first slot name; empty creates no slot. overwrite: Delete an existing asset before creation. save: Save the asset package after creation.
Returns: Structured JSON with asset path and slot count.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: smartobject_create_definition(name="SO_CoverPoint", slot_name="UseCover")
Inputs: name (required), path, save, overwrite, +1 more. Returns: result
smartobject_inspect_definitionA
Inspect a SmartObject definition's slots, tags, and bounds.
Args: definition: SmartObject definition asset path or object path.
Returns: Structured JSON with slot names, transforms, tag containers, and bounds.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: smartobject_inspect_definition(definition="/Game/AI/SmartObjects/SO_CoverPoint")
Inputs: definition (required). Returns: result
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, )
Inputs: asset_path (required), tags, scale, dry_run, +8 more. Returns: result
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")
Inputs: limit, room_type, tag_filter, actor_query, +5 more. Returns: result
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)
Inputs: composition_plan_json (required), limit, dry_run, default_tags, +10 more. Returns: result
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.
Inputs: design_intent_json (required), scene_context_json (required). Returns: result
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="")
Inputs: composition_plan_json (required), clearance_padding, surface_tolerance, import_results_json, +2 more. Returns: result
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"])
Inputs: limit, query, folders, class_names, +3 more. Returns: result
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")
Inputs: reference_image, scene_graph_json, tripo_batch_json, apply_result_json, +20 more. Returns: result
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"])
Inputs: tags, limit, data_layer_names, placement_layout, +3 more. Returns: result
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")
Inputs: actor (required), nearby_limit, nearby_radius, include_bounds, +1 more. Returns: result
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"])
Inputs: limit, room_type, room_origin, requested_zones, +6 more. Returns: result
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")
Inputs: tags, intent, policy, asset_paths, +4 more. Returns: result
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])
Inputs: reference_image (required), detected_items_json (required), limit, room_type, +2 more. Returns: result
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)
Inputs: tags, limit, scale, dry_run, +11 more. Returns: result
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="")
Inputs: composition_plan_json (required), limit, max_scale, min_scale, +4 more. Returns: result
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="")
Inputs: max_iterations, nudge_distance, reference_image, screenshot_notes, +4 more. Returns: result
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")
Inputs: limit, style, intent, room_type, +14 more. Returns: result
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"])
Inputs: limit, style, intent, room_type, +11 more. Returns: result
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="")
Inputs: composition_plan_json (required), layout_preflight_json (required), limit, pairwise_padding, +4 more. Returns: result
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"])
Inputs: limit, room_id, room_type, zone_names, +5 more. Returns: result
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")
Inputs: reference_image (required), limit, style, intent, +14 more. Returns: result
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="")
Inputs: composition_plan_json (required), limit, anchor_floor, anchor_walls, +3 more. Returns: result
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")
Inputs: style, max_items, room_type, room_origin, +16 more. Returns: result
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")
Inputs: composition_plan_json (required), limit, tag_filter, actor_query, +5 more. Returns: result
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="")
Inputs: composition_plan_json (required), pairwise_padding, clearance_padding, min_walkway_width, +2 more. Returns: result
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="")
Inputs: reference_image (required), detected_items_json (required), limit, room_type, +4 more. Returns: result
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="")
Inputs: limit, overwrite, image_size, padding_px, +5 more. Returns: result
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])
Inputs: reference_image (required), style, intent, max_items, +7 more. Returns: result
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="")
Inputs: composition_plan_json (required), limit, content_path, session_name, +3 more. Returns: result
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)
Inputs: actor, limit, center, radius, +3 more. Returns: result
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)
Inputs: limit, query, center, radius, +6 more. Returns: result
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"])
Inputs: composition_plan_json (required), limit, minimum_score, asset_catalog_json, +3 more. Returns: result
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)
Inputs: limit, tag_filter, class_filter, include_hidden, +2 more. Returns: result
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)
Inputs: limit, query, actors, center, +12 more. Returns: result
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)
Inputs: limit, center, points, trace_up, +7 more. Returns: result
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)
Inputs: limit, query, actors, center, +11 more. Returns: result
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)
Inputs: limit, nearby_radius, include_nearby. Returns: result
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")
Inputs: name (required), type (required), location, rotation. Returns: result
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")
Inputs: actor_name (required), blueprint_name (required), location, rotation. Returns: result
statetree_add_stateA
Add a root subtree or child state to a StateTree asset.
Args: state_tree: StateTree asset path or object path. name: State display name to add. parent_state: Optional parent state name or GUID. Empty uses the first root. description: Optional editor description for the state. state_type: "state", "group", "linked", "linked_asset", or "subtree". as_subtree: Add as a top-level subtree instead of child state. enabled: Initial enabled flag. save: Save the asset after mutation.
Returns: Structured JSON with inserted state details and state counts.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: statetree_add_state(state_tree="/Game/AI/StateTrees/ST_CombatBrain", name="Patrol", parent_state="Root")
Inputs: name (required), state_tree (required), save, enabled, +4 more. Returns: result
statetree_createA
Create a StateTree asset with an editor schema.
Args: name: Asset name to create. path: Content Browser folder under /Game. schema_class: StateTree schema class, short name or /Script path. overwrite: Delete an existing asset before creation. save: Save the asset package after creation.
Returns: Structured JSON with asset path, schema class, and readiness info.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: statetree_create(name="ST_CombatBrain", schema_class="StateTreeComponentSchema")
Inputs: name (required), path, save, overwrite, +1 more. Returns: result
statetree_inspectA
Inspect a StateTree asset's schema, readiness, and editor state hierarchy.
Args: state_tree: StateTree asset path or object path.
Returns: Structured JSON with schema, compiled state count, and state hierarchy.
KB: see knowledge_base/23_MASS_ENTITY_AND_STATETREE.md#mcp-mass-statetree-and-smartobject-tools Example: statetree_inspect(state_tree="/Game/AI/StateTrees/ST_CombatBrain")
Inputs: state_tree (required). Returns: result
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()
Inputs: show_ui, filename, resolution. Returns: result
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")
Inputs: texture_path (required). Returns: result
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")
Inputs: output_name (required), save, width, height, +11 more. Returns: result
tool_contribution_contractC
Describe how Ghost tools can be contributed, discovered, and reviewed.
Inputs: response_format. Returns: result
ue_describe_assetA
Return detailed metadata for an asset in the Content Browser.
Gives the class, disk path, dependencies, and editable properties for any asset at the given Content Browser path.
Args: asset_path: Content Browser path (e.g. "/Game/Blueprints/BP_Player", "/Game/Materials/M_Rock", "/Game/Characters/SK_Bastila")
Returns: JSON string: { "success": true, "asset_path": "/Game/...", "exists": true, "class_name": "Blueprint", "disk_path": "C:/Project/Content/...", "object_path": "/Game/.../BP_Player.BP_Player", "metadata": {...} }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_describe_asset(asset_path="/Game/MCP_Test/Example")
Inputs: asset_path (required). Returns: result
ue_exec_progressA
Run a Python snippet inside a ScopedSlowTask with a progress dialog.
Use this for long-running operations (bulk imports, retargeting, etc.) to keep the UE5 editor responsive and show a cancel button.
Your code can call: _task.enter_progress_frame(N, "Step description") to advance the progress bar by N units.
Args: code: Python snippet to execute with progress reporting task_name: Label shown in the Unreal progress dialog total_work: Total work units for the progress bar (default 100)
Returns: JSON string with StructuredResult.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: ue_exec_progress(code="Example")
Inputs: code (required), task_name, total_work. Returns: result
ue_exec_safeA
Run a Python snippet inside Unreal Engine with automatic structured error handling.
Unlike the raw exec_python, this tool:
Wraps code in a try/except that always produces valid JSON
Returns a normalised StructuredResult with success, stage, message, outputs, warnings, errors, and log_tail
Is safe to call from the AI without worrying about parse failures
Your code should populate these variables: _result : dict — key/value outputs to return to the caller _warnings : list — non-fatal warnings _errors : list — error messages (also raised via exception)
Example code: import unreal bp = unreal.load_asset('/Game/Blueprints/BP_Player') if bp: _result['class_name'] = bp.get_class().get_name() else: _errors.append('Blueprint not found')
Args: code: Python snippet to execute in Unreal Engine stage_name: Descriptive name for the operation (used in result.stage)
Returns: JSON string with StructuredResult: { "success": true, "stage": "script", "message": "Operation completed", "outputs": {...}, "warnings": [], "errors": [], "log_tail": [] }
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: ue_exec_safe(code="Example")
Inputs: code (required), stage_name. Returns: result
ue_exec_transactA
Run a Python snippet inside a named ScopedEditorTransaction.
Wraps the code in an Unreal transaction so that the entire operation appears as ONE undo step in the UE5 editor. If the code raises an exception, the transaction is cancelled and the editor state is rolled back to its pre-transaction position.
This is the PREFERRED way to run any mutating Unreal Python:
Blueprint modifications
Asset property changes
Component additions
Material edits
Your code should populate _result{}, _warnings[], _errors[] as needed (same contract as ue_exec_safe).
Args: code: Python snippet to execute inside the transaction transaction_name: Name shown in the UE5 Edit menu under Undo History
Returns: JSON string with StructuredResult.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: ue_exec_transact(code="Example")
Inputs: code (required), transaction_name. Returns: result
ue_find_assets_by_classA
Find all Content Browser assets of a given UClass.
Args: class_name: UClass name filter (e.g. "Blueprint", "StaticMesh", "Material", "AnimSequence", "SoundWave") search_path: Content Browser root to search (default "/Game/") limit: Maximum number of results (default 50)
Returns: JSON string: { "success": true, "class_name": "Blueprint", "search_path": "/Game/", "assets": ["/Game/Blueprints/BP_Player", ...], "count": 12, "truncated": false }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_find_assets_by_class(class_name="Actor")
Inputs: class_name (required), limit, search_path. Returns: result
ue_list_editor_selectionA
Return what is currently selected in the Unreal Editor viewport.
Useful for context-aware scripting: "what is the AI looking at right now?"
Returns: JSON string: { "success": true, "selected_actors": [ {"name": "SM_Table_1", "class": "StaticMeshActor", "location": [0,0,0]}, ... ], "count": 1 }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_list_editor_selection()
Inputs: no named parameters. Returns: result
ue_list_uclass_methodsA
List callable methods on a UClass Python binding.
Useful before calling get_editor_property / set_editor_property to discover the correct property names, or before calling a method to confirm it exists.
Args: class_name: Unreal class (e.g. "AssetToolsHelpers", "EditorAssetLibrary") filter_prefix: Only return methods starting with this prefix (e.g. "import")
Returns: JSON string: { "success": true, "class_name": "EditorAssetLibrary", "methods": ["consolidate_assets", "delete_asset", "does_asset_exist", ...], "count": 52 }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_list_uclass_methods(class_name="Actor")
Inputs: class_name (required), filter_prefix. Returns: result
ue_list_uclass_propertiesA
List editor-exposed properties (UProperties) for a UClass.
Returns the names, types, and categories of all editor properties accessible via set_editor_property() / get_editor_property().
Args: class_name: Unreal class (e.g. "StaticMeshComponent", "PointLight") include_inherited: Include inherited properties (default False)
Returns: JSON string: { "success": true, "class_name": "StaticMeshComponent", "properties": [ {"name": "static_mesh", "type": "StaticMesh", "category": "StaticMeshComponent"}, ... ], "count": 42 }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_list_uclass_properties(class_name="Actor")
Inputs: class_name (required), include_inherited. Returns: result
ue_reflect_classA
Reflect a UClass: return its parent chain, category, flags, and module.
Use this before writing any exec_python that creates, loads, or modifies instances of an Unreal class — it confirms the class exists and tells you its full hierarchy.
Args: class_name: Unreal class name (e.g. "StaticMesh", "Blueprint", "Character", "PointLight", "NiagaraSystem")
Returns: JSON string: { "success": true, "class_name": "StaticMesh", "parent_chain": ["StaticMesh", "StreamableRenderAsset", "Object"], "is_blueprint": false, "module": "Engine", "category": "Mesh", "found": true }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_reflect_class(class_name="Actor")
Inputs: class_name (required). Returns: result
ue_summarize_operation_effectsA
Summarize what assets exist (a snapshot of the Content Browser).
Use this before and after an import/modification operation to see what changed. Returns asset counts by class.
Args: search_path: Content Browser path to scan (default "/Game/")
Returns: JSON string: { "success": true, "search_path": "/Game/", "total_assets": 245, "by_class": { "Blueprint": 42, "StaticMesh": 87, "Material": 23, ... } }
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#overview Example: ue_summarize_operation_effects()
Inputs: search_path. Returns: result
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")
Inputs: widget (required), property_path (required), binding_target (required), binding_kind. Returns: result
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")
Inputs: blueprint_name (required), dispatcher_name (required), node_position. Returns: result
validate_import_resultA
Validate that an imported asset exists and matches expectations.
Use immediately after import_texture, import_static_mesh, import_skeletal_mesh, or generative imports to prove the asset loaded, has the expected class, has dependency/reference metadata, and is not still dirty when saved output is required.
Args: expected_asset_path: Imported asset path, e.g. "/Game/Meshes/SM_Table". expected_class: Optional expected class substring, e.g. "StaticMesh". source_file: Optional original OS file path to verify still exists. require_saved: Warn when the package is still dirty.
Returns: StructuredResult JSON with outputs: exists, class_name, class_matches, dirty, source_file_exists, dependency_count, referencer_count, valid.
KB: see knowledge_base/12_MCP_TOOL_USAGE_GUIDE.md#b2-graph-aware-diagnostics-diagnosticstoolspy Example: validate_import_result(expected_asset_path="/Game/MCP_Test/SM_Example", expected_class="StaticMesh")
Inputs: expected_asset_path (required), source_file, require_saved, expected_class. Returns: result
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")
Inputs: actor_name (required), save, color, lod_index, +2 more. Returns: result
viewport_capture_screenshotC
Capture the active Unreal viewport to a workspace-local PNG artifact.
Args: artifact_name: Screenshot filename stem screenshot_dir: Workspace-relative output directory show_ui: Forwarded to the native screenshot command when supported resolution: Forwarded to the native screenshot command when supported
Returns: JSON string with filepath, dimensions, size, and hash.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: viewport_capture_screenshot()
Inputs: show_ui, resolution, artifact_name, screenshot_dir. Returns: result
viewport_compare_screenshotA
Compare two workspace-local viewport screenshot artifacts.
Args: baseline_path: Workspace-local baseline PNG path candidate_path: Workspace-local candidate PNG path pass_threshold: Similarity threshold, 0-1
Returns: JSON string with similarity and artifact metadata.
KB: see knowledge_base/32_AGENT_PLAYABLE_SLICE_RECIPE.md#overview Example: viewport_compare_screenshot(baseline_path="/Game/MCP_Test/Example", candidate_path="/Game/MCP_Test/Example")
Inputs: baseline_path (required), candidate_path (required), pass_threshold. Returns: result
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")
Inputs: child_name (required), child_class (required), widget_blueprint_path (required), parent_name. Returns: result
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")
Inputs: widget_blueprint_path (required), parent_name. Returns: result
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)
Inputs: size_x (required), size_y (required), position_x (required), position_y (required), +8 more. Returns: result
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")
Inputs: widget_name (required), property_name (required), property_value (required), widget_blueprint_path (required). Returns: result
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")
Inputs: after_node_id (required), blueprint_name (required), sound_asset_path (required), node_position, +1 more. Returns: result
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")
Inputs: name (required), save, type, private, +4 more. Returns: result
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")
Inputs: label, center, extent. Returns: result
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")
Inputs: max, min, exact, label, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 729 tools
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.
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.
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.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for controlling Unreal Engine 5 from AI agents, providing 120+ commands for spawning actors, editing Blueprints, managing assets, and more via CLI or MCP.27 PyPI216MIT
- AlicenseBqualityCmaintenanceAn MCP server that gives AI agents broad control over Unreal Engine 5.7, enabling actor/asset/level management, Blueprint and material creation, screenshots, automation, and arbitrary editor Python execution.35MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control and query Unreal Engine 4.27.2 editor through MCP, supporting asset creation, level editing, and project inspection via Python remote execution.135 npm32MIT
- FlicenseNot gradedqualityDmaintenanceWraps Unreal Editor as an MCP server, enabling AI agents to automate editor tasks through Python scripts.11-