Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

UnrealMCP — AI Bridge for Unreal Engine 5

PYPI · UNREALMCP

Control the Unreal Engine 5 editor from any MCP client: Blueprints, materials, Niagara.

Available components

0 this week 0 Trust /100

Last scanned (13 hours ago)

Scores higher than 0% of PyPI servers

Category Developer Tools

Recent critical change

Known CVEs (13 Oct 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security25
Provenance & Transparency45
Schema Quality & AI Usability68
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 35352 tokens (~123/item across 286 items; 286 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 31 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "execute_python" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 287 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (15)

  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Checks we could not complete (1)

These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.

  • Malware scan in Supply Chain SecurityMalware scan not yet available for this package.

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • Malware scan: pass → unverified ▼ security
    • Stability: pass → 0.80 functional
  • 2 Nov 26 0
    • Provenance: unverified → fail ▼ security
  • 31 Oct 26 0
    • Provenance: fail → unverified ▼ security
  • 30 Oct 26 0
    • Malware scan: unverified → pass ▲ security
    • Stability: 0.97 → pass security
  • 29 Oct 26 0
    • Stability: pass → 0.97 functional
  • 26 Oct 26 0
    • Malware scan: pass → unverified ▼ security
  • 23 Oct 26 0
    • Stability: 0.97 → pass security
  • 22 Oct 26 0
    • Stability: pass → 0.97 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 6 Nov 2026 · Analysed pypi/unrealmcp@1.3.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi
Reason No attestation published

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend Known build tool setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Vulnerabilities 6 findings
ID CVE Severity Vector Fix available
GHSA-m8x7-r2rg-vh5g CVE-2025-64340 medium CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H yes
GHSA-rww4-4w9c-7733 CVE-2026-27124 high yes
GHSA-vv7q-7jx5-f767 CVE-2026-32871 critical CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H yes
PYSEC-2026-2475 CVE-2025-64340 medium CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H yes
PYSEC-2026-2476 CVE-2026-27124 none yes
PYSEC-2026-338 CVE-2026-32871 critical CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 75 packages
Packages resolved 75
Stale 5
No linked repository 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 286 exposed · ~35,325 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_blueprint_node ~236

Add a node to a Blueprint graph. Node types by category: FLOW: Branch, Comparison, Switch, SwitchEnum, SwitchInteger, ExecutionSequence DATA: VariableGet, VariableSet, MakeArray CASTING: DynamicCast, ClassDynamicCast, CastByteToEnum UTILITY: Print, CallFunction, Select, SpawnActor SPECIAL: Timeline, GetDataTableRow, AddComponentByClass, Self, Knot EVENT: Event (specify event_type: BeginPlay, Tick, Destroyed, etc.) Extra args are only needed for specific node types (message for Print, variable_name for Variable nodes, target_function for CallFunction, etc.).

NameTypeReqDescription
blueprint_namestringyes–
event_typestring––
function_namestring––
messagestring––
node_typestringyes–
pos_xnumber––
pos_ynumber––
target_blueprintstring––
target_functionstring––
variable_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_component_to_blueprint ~98

Add a component to a Blueprint's default components. Args: blueprint_path: Full path to blueprint (e.g. "/Game/Blueprints/BP_MyActor") component_class: e.g. "StaticMeshComponent", "PointLightComponent" component_name: Optional custom name for the component

NameTypeReqDescription
blueprint_pathstringyes–
component_classstringyes–
component_namestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_data_table_row ~67

Add a new row, optionally setting initial field values. data is a JSON string mapping field names to values, e.g. '{"FieldA": 1}'.

NameTypeReqDescription
datastring––
data_table_pathstringyes–
row_namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_event_node ~58

Add an event node (ReceiveBeginPlay, ReceiveTick, ReceiveDestroyed, etc.).

NameTypeReqDescription
blueprint_namestringyes–
event_namestringyes–
pos_xnumber––
pos_ynumber––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_function_input ~58

Add an input parameter to a Blueprint function.

NameTypeReqDescription
blueprint_namestringyes–
function_namestringyes–
is_arrayboolean––
param_namestringyes–
param_typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_function_output ~58

Add an output parameter to a Blueprint function.

NameTypeReqDescription
blueprint_namestringyes–
function_namestringyes–
is_arrayboolean––
param_namestringyes–
param_typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_input_action_modifier ~149

Add a modifier to an Input Action. Args: asset_path: Path to the InputAction asset modifier_type: Class name — InputModifierDeadZone | InputModifierScalar | InputModifierNegate | InputModifierSwizzleAxis | InputModifierSmooth | InputModifierSmoothDelta | InputModifierScaleByDeltaTime | InputModifierResponseCurveExponential | InputModifierResponseCurveUser | InputModifierFOVScaling | InputModifierToWorldSpace properties: Optional modifier properties (e.g. {"LowerThreshold": 0.2, "Type": "Radial"})

NameTypeReqDescription
asset_pathstringyes–
modifier_typestringyes–
properties–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_input_action_trigger ~133

Add a trigger to an Input Action. Args: asset_path: Path to the InputAction asset trigger_type: Class name — InputTriggerDown | InputTriggerPressed | InputTriggerReleased | InputTriggerHold | InputTriggerHoldAndRelease | InputTriggerTap | InputTriggerRepeatedTap | InputTriggerPulse | InputTriggerChordAction | InputTriggerCombo properties: Optional trigger properties (e.g. {"HoldTimeThreshold": 0.5, "bIsOneShot": true})

NameTypeReqDescription
asset_pathstringyes–
properties–––
trigger_typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_key_mapping ~150

Add a key-to-action mapping to an Input Mapping Context. Args: context_path: Path to the IMC asset action_path: Path to the InputAction asset key: Key name (e.g. "SpaceBar", "W", "Gamepad_LeftY", "LeftMouseButton") triggers: Optional list of triggers, each {"type": "InputTriggerHold", "properties": {...}} modifiers: Optional list of modifiers, each {"type": "InputModifierNegate", "properties": {...}}

NameTypeReqDescription
action_pathstringyes–
context_pathstringyes–
keystringyes–
modifiers–––
triggers–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_mapping_modifier ~103

Add a modifier to a specific mapping in an Input Mapping Context. Args: context_path: Path to the IMC asset mapping_index: Index of the mapping (from get_input_mapping_context) modifier_type: Modifier class name (e.g. "InputModifierNegate") properties: Optional modifier properties

NameTypeReqDescription
context_pathstringyes–
mapping_indexintegeryes–
modifier_typestringyes–
properties–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_mapping_trigger ~102

Add a trigger to a specific mapping in an Input Mapping Context. Args: context_path: Path to the IMC asset mapping_index: Index of the mapping (from get_input_mapping_context) trigger_type: Trigger class name (e.g. "InputTriggerPressed") properties: Optional trigger properties

NameTypeReqDescription
context_pathstringyes–
mapping_indexintegeryes–
properties–––
trigger_typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_mass_config_trait ~170

Add a SINGLE trait to a Mass Entity Config without replacing existing traits. Safe for configs with complex replicator settings — only appends, never replaces. Returns error if the trait already exists on the config. Args: asset_path: Path to MassEntityConfigAsset (e.g. "/Game/.../DA_MinerMassEntityConfig_Mk1") trait_class: Full class path (e.g. "/Script/Jiggify.MassBuildingHealthTrait") properties: Optional dict of property values to set on the new trait. Supports floats, ints, bools, strings. Example: {"MaxHealth": 150, "Resistance_Fire": 0.2}

NameTypeReqDescription
asset_pathstringyes–
properties–––
trait_classstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_material_comments ~79

Add comment boxes to a material graph for organization. comments is a JSON array. Each entry: {text, pos_x, pos_y, size_x, size_y, font_size, color: [r,g,b], show_bubble, color_bubble, group_mode}.

NameTypeReqDescription
commentsstringyes–
material_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_material_expression ~125

Add a single expression node without clearing other nodes. Returns the new node_index. Wire it up with connect_material_expressions. node is a JSON object: {"type": "ScalarParameter", "pos_x": -1200, "pos_y": -400, "properties": {"parameter_name": "Speed", "default_value": 0.5}} For Custom HLSL nodes, include top-level "code", "description", "output_type", "inputs", and "outputs" fields.

NameTypeReqDescription
material_pathstringyes–
nodestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_material_function_input ~267

Add an input pin to a Material Function. Args: function_path: Full path to existing material function input_name: Pin name (e.g. "BaseColor", "Strength", "UV") input_type: Scalar | Vector2 | Vector3 | Vector4 | Texture2D | TextureCube | Texture2DArray | VolumeTexture | StaticBool | MaterialAttributes | TextureExternal | Bool | Substrate description: Tooltip text sort_priority: Controls display order (lower = higher) use_preview_as_default: Use preview_value as the default when input is unconnected preview_value: JSON array for default value (e.g. "[0.5]", "[1.0, 0.0, 0.0, 1.0]") pos_x: Graph X position (default -600) pos_y: Graph Y position (default 0)

NameTypeReqDescription
descriptionstring––
function_pathstringyes–
input_namestringyes–
input_typestring––
pos_xinteger––
pos_yinteger––
preview_value–––
sort_priorityinteger––
use_preview_as_defaultboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_material_function_output ~140

Add an output pin to a Material Function. Args: function_path: Full path to existing material function output_name: Pin name (e.g. "Result", "Normal", "Mask") description: Tooltip text sort_priority: Controls display order (lower = higher) pos_x: Graph X position (default 200) pos_y: Graph Y position (default 0)

NameTypeReqDescription
descriptionstring––
function_pathstringyes–
output_namestringyes–
pos_xinteger––
pos_yinteger––
sort_priorityinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_component ~122

Add a NiagaraComponent to an existing actor in the level. Args: actor_name: Name/label of the target actor system_path: Path to the Niagara System asset to assign component_name: Optional name for the component relative_location: Relative offset as "(X,Y,Z)" auto_activate: If true, auto-activate on begin play

NameTypeReqDescription
actor_namestringyes–
auto_activateboolean––
component_name–––
relative_location–––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_custom_hlsl_input ~108

Add a typed input pin to a scratch pad module's Custom HLSL node. Types: float, int, bool, vec2/3/4, color, quat, matrix, position, ParameterMap, or any registered Niagara type. The pin's name is usable inside the HLSL source.

NameTypeReqDescription
module_namestringyes–
pin_namestringyes–
pin_typestring––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_custom_hlsl_output ~63

Add a typed output pin to a scratch pad module's Custom HLSL node.

NameTypeReqDescription
module_namestringyes–
pin_namestringyes–
pin_typestring––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_emitter ~124

Add an emitter to a Niagara System. Provide either emitter_path (existing emitter asset) or template (built-in template name). Args: system_path: Path to the Niagara System asset emitter_path: Path to an existing NiagaraEmitter asset to add emitter_name: Optional display name for the emitter in this system template: Built-in template name (e.g. "Fountain", "Sprite", "Mesh")

NameTypeReqDescription
emitter_name–––
emitter_path–––
system_pathstringyes–
template–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_event_handler ~201

Add an event handler to an emitter that responds to events from a source emitter. Args: system_path: Path to the Niagara System asset emitter_name: Name of the receiving emitter source_emitter: Name of the emitter producing the event event_name: Event name (e.g. "CollisionEvent", "DeathEvent", "LocationEvent") execution_mode: How events are handled — "every_particle", "spawn_particles", "single_particle" spawn_number: Number of particles to spawn per event (for spawn_particles mode) max_events_per_frame: Limit on events processed per frame (0 = unlimited)

NameTypeReqDescription
emitter_namestringyes–
event_namestringyes–
execution_modestring––
max_events_per_frameinteger––
source_emitterstringyes–
spawn_numberinteger––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_graph_node ~345

Create a new node inside a Niagara scratch-pad / dynamic-input / module graph. Mirrors the node-creation pattern used by the Niagara editor schema actions (FGraphNodeCreator + AllocateDefaultPins + NotifyGraphChanged). Spawns on both asset and edit-copy graphs when a system is open. Args: node_type: One of "Op", "FunctionCall", "DataInterfaceFunction", "ParameterMapGet", "ParameterMapSet", "Reroute", "Input" pos_x, pos_y: Graph position op_name: (node_type=Op) — discover via get_niagara_schema_actions (e.g. "Numeric::Add", "Numeric::Mul", "Numeric::Length") function_script: (node_type=FunctionCall) UNiagaraScript asset path input_name + input_type: (node_type=Input) variable name + Niagara type di_class + function_name: (node_type=DataInterfaceFunction) — wraps a data-interface member function. Discover via list_niagara_data_interface_functions. Examples: di_class="NiagaraDataInterfaceArrayPosition", function_name="Length" Use list_niagara_script_parameters after to verify the pin layout.

NameTypeReqDescription
di_class–––
function_name–––
function_script–––
input_name–––
input_type–––
module_name–––
node_typestringyes–
op_name–––
pos_xinteger––
pos_yinteger––
script_path–––
system_path–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_map_get_pin ~175

Add a typed output pin to the first ParameterMapGet node in a scratch pad graph. Mirrors clicking "+" on a Map Get node in the editor and picking a variable. The pin name becomes the parameter handle (e.g. "Engine.DeltaTime", "User.MyParam", "Particles.Velocity"). Args: system_path: Niagara System asset path module_name: Scratch pad module name parameter_name: Variable name including namespace (e.g. "Engine.DeltaTime") parameter_type: Niagara type (float, int, bool, vec2/3/4, color, quat, matrix, position, ...)

NameTypeReqDescription
module_namestringyes–
parameter_namestringyes–
parameter_typestring––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_map_set_pin ~121

Add a typed input pin to the first ParameterMapSet node in a scratch pad graph. Mirrors clicking "+" on a Map Set node in the editor. Args: system_path: Niagara System asset path module_name: Scratch pad module name parameter_name: Variable name including namespace parameter_type: Niagara type (see add_niagara_map_get_pin)

NameTypeReqDescription
module_namestringyes–
parameter_namestringyes–
parameter_typestring––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_module ~154

Add a module to an emitter's script usage stack. Args: system_path: Path to the Niagara System asset emitter_name: Name of the target emitter module_path: Path to the module script asset (e.g. "/Niagara/Modules/Update/SolveForcesAndVelocity") script_usage: Target stack — EmitterSpawn, EmitterUpdate, ParticleSpawn, ParticleUpdate, SystemSpawn, SystemUpdate index: Position in the stack (-1 = append at end)

NameTypeReqDescription
emitter_namestringyes–
indexinteger––
module_pathstringyes–
script_usagestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_node_pin ~233

Generic: add a typed dynamic pin to any node in a scratch pad graph. Works with Custom HLSL, Map Get, Map Set, or any node inheriting from UNiagaraNodeWithDynamicPins. Identify the target node via exactly one of node_class / node_index / node_id. Args: system_path: Niagara System asset path module_name: Scratch pad module name pin_name: New pin name pin_type: Niagara type string (float, vec3, color, etc.) direction: "input" or "output" node_class: Class short name (e.g. "NiagaraNodeParameterMapGet", "ParameterMapGet") node_index: Raw Graph->Nodes index node_id: UEdGraphNode::NodeGuid string

NameTypeReqDescription
directionstring––
module_namestringyes–
node_class–––
node_id–––
node_index–––
pin_namestringyes–
pin_typestring––
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_renderer ~129

Add a renderer to an emitter. Args: system_path: Path to the Niagara System asset emitter_name: Name of the target emitter renderer_type: Renderer class — SpriteRenderer, MeshRenderer, RibbonRenderer, LightRenderer, ComponentRenderer material_path: Optional material asset path for sprite/mesh/ribbon renderers mesh_path: Optional static mesh path for MeshRenderer

NameTypeReqDescription
emitter_namestringyes–
material_path–––
mesh_path–––
renderer_typestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_script_parameter ~191

Add an input or output parameter to a Niagara script. For a dynamic input, "output" adds a new entry to the Output Dynamic Input node (screenshot 5's "Add Parameter" dropdown). Type must be a name registered in FNiagaraTypeRegistry — use list_niagara_parameter_types to discover valid options (e.g. "float", "Vector", "LinearColor", "Quat", "Position", "NiagaraID", "Matrix"). Args: name: Parameter name (input names without namespace prefix become Module.<name>) type: Niagara type name direction: "output" (default — appends to output node) | "input"

NameTypeReqDescription
directionstring––
module_name–––
namestringyes–
script_path–––
system_path–––
typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_simulation_stage ~139

Add a simulation stage to an emitter. Simulation stages allow additional processing passes over particles or data interfaces. Args: system_path: Path to the Niagara System asset emitter_name: Name of the target emitter stage_name: Display name for the simulation stage iteration_source: What to iterate over — "particles" or a data interface name num_iterations: Number of times to execute this stage per frame

NameTypeReqDescription
emitter_namestringyes–
iteration_sourcestring––
num_iterationsinteger––
stage_namestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_niagara_user_parameter ~470

Add a user parameter to a Niagara System. Supports every type the editor's User Parameters "+" menu can add — primitives, structs, enums, and Data Interfaces. Use list_niagara_parameter_types to discover valid type names before calling. Args: system_path: Path to the Niagara System asset parameter_name: Name for the new parameter (auto-prefixed with "User.") parameter_type: Type name. Resolved via NiagaraTypeRegistry, so anything Niagara registered is valid. Examples: - Primitives: "float", "int", "bool", "Vector2", "Vector", "Vector4", "LinearColor", "Quat", "Position", "Matrix" - Niagara structs: "NiagaraID", "NiagaraRandInfo", "NiagaraSpawnInfo" - Enums: "ENiagaraExecutionState", any registered UEnum path - Data Interfaces (bare or prefixed): "ArrayFloat", "ArrayVector", "ArrayVector4", "ArrayInt32", "Curve", "Vector2DCurve", "VectorCurve", "Vector4Curve", "CurlNoise", "Grid2D", "Grid3D", "SkeletalMesh", "StaticMesh", "Texture", "TextureCube", "VolumeTexture", "Texture2DArray", "RenderTarget2D", "SplineComponent", "Camera", "Collision", "PhysicsAsset", "Spline", and any other NiagaraDataInterface subclass including plugin-provided ones. default_value: Optional default. For scalars pass as string or number; for vector/color/struct pass UE-standard text form like "(X=1,Y=2,Z=3)" or "(R=1,G=0.5,B=0,A=1)". Data interfaces use the CDO defaults — use set_niagara_user_parameter afterwards for richer initialization. Returns the created parameter with its resolved type name, kind (primitive / struct / enum / data_interface / object), size_bytes, and (for DIs) class_path.

NameTypeReqDescription
default_value–––
parameter_namestringyes–
parameter_typestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_binding ~138

Add a property binding connecting a source node's output to a target node's input. Args: asset_path: Content path to the StateTree asset source_node_guid: GUID of the source node source_property: Property path on source (e.g. "TargetLocation") target_node_guid: GUID of the target node target_property: Property path on target (e.g. "TargetLocation")

NameTypeReqDescription
asset_pathstringyes–
source_node_guidstringyes–
source_propertystringyes–
target_node_guidstringyes–
target_propertystringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_condition ~201

Add a condition to a state's enter conditions or a transition's conditions. Args: asset_path: Content path to the StateTree asset condition_class: Condition struct name (e.g. "StateTreeCompareIntCondition") state: State index path state_name: State name state_guid: State GUID target: "enter_conditions" or "transition" transition_index: Required when target="transition" operand: "And" or "Or" (how to combine with previous conditions) properties: JSON object for condition properties instance_properties: JSON object for condition instance data

NameTypeReqDescription
asset_pathstringyes–
condition_classstringyes–
instance_properties–––
operandstring––
properties–––
state–––
state_guid–––
state_name–––
targetstring––
transition_index–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_evaluator ~103

Add a global evaluator to the StateTree. Args: asset_path: Content path to the StateTree asset evaluator_class: Evaluator struct name (e.g. "MassEnemyHasTargetEvaluator") properties: JSON object for evaluator node properties instance_properties: JSON object for evaluator instance data properties

NameTypeReqDescription
asset_pathstringyes–
evaluator_classstringyes–
instance_properties–––
properties–––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_global_task ~92

Add a global task to the StateTree. Args: asset_path: Content path to the StateTree asset task_class: Task struct name properties: JSON object for task node properties instance_properties: JSON object for task instance data properties

NameTypeReqDescription
asset_pathstringyes–
instance_properties–––
properties–––
task_classstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_parameter ~88

Add a tree-level parameter. Args: asset_path: Content path to the StateTree asset name: Parameter name type: Property type ("bool", "int32", "float", "FVector", "FName", "FString", etc.)

NameTypeReqDescription
asset_pathstringyes–
namestringyes–
typestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_state ~209

Add a state to the tree. Omit parent params for a root-level state. Args: asset_path: Content path to the StateTree asset name: Name for the new state parent: Parent state index path (e.g. "0/1") parent_name: Parent state name parent_guid: Parent state GUID state_type: "State", "Group", "Linked", "LinkedAsset", or "Subtree" selection_behavior: "None", "TryEnterState", "TrySelectChildrenInOrder", "TrySelectChildrenAtRandom", "TrySelectChildrenWithHighestUtility", "TryFollowTransitions" position: Insert position (-1 = append)

NameTypeReqDescription
asset_pathstringyes–
namestringyes–
parent–––
parent_guid–––
parent_name–––
positioninteger––
selection_behavior–––
state_typestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_task ~149

Add a task to a state. Args: asset_path: Content path to the StateTree asset task_class: Task struct name (e.g. "MassEnemyAttackTask", "MassNavMeshPathFollowTask") or full path state: State index path state_name: State name state_guid: State GUID properties: JSON object for task node properties instance_properties: JSON object for task instance data properties

NameTypeReqDescription
asset_pathstringyes–
instance_properties–––
properties–––
state–––
state_guid–––
state_name–––
task_classstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_statetree_transition ~256

Add a transition to a state. Args: asset_path: Content path to the StateTree asset trigger: "OnStateCompleted", "OnStateFailed", "OnStateSucceeded", "OnTick", "OnEvent" state: Source state index path state_name: Source state name state_guid: Source state GUID target_state: Target state index path, or special: "TreeSucceeded", "TreeFailed", "TreeStopped", "NextSibling" target_state_name: Target state name target_state_guid: Target state GUID priority: "Low", "Normal", "Medium", "High", "Critical" delay: Delay in seconds before transitioning delay_variance: Random variance (+/-) on delay event_tag: Gameplay tag for OnEvent trigger

NameTypeReqDescription
asset_pathstringyes–
delay–––
delay_variance–––
event_tag–––
prioritystring––
state–––
state_guid–––
state_name–––
target_state–––
target_state_guid–––
target_state_name–––
triggerstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

add_widget ~195

Add a new widget to a Widget Blueprint's Designer tree. Args: widget_class: Short name like "TextBlock", "Image", "Button", "CanvasPanel", "VerticalBox", "HorizontalBox", "Overlay", "SizeBox", "Border", "ScrollBox", "ProgressBar", etc. parent_widget_name: Name of the parent panel (e.g. "CanvasPanel_0") widget_name: Optional name (auto-generated if empty) index: Insert position among siblings (-1 = append) slot_properties: Canvas anchors, offsets, etc. widget_properties: Widget values like {"Text": "Hello"}

NameTypeReqDescription
indexinteger––
parent_widget_namestringyes–
slot_properties–––
widget_blueprint_pathstringyes–
widget_classstringyes–
widget_namestring––
widget_properties–––
NameTypeReqDescription
resultstringyes–

No examples provided.

analyze_blueprint_graph ~66

Analyze a specific graph — nodes, connections, and execution flow.

NameTypeReqDescription
blueprint_pathstringyes–
graph_namestring––
include_node_detailsboolean––
include_pin_connectionsboolean––
trace_execution_flowboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

apply_and_save_niagara_scratch_pad ~65

Apply a scratch pad module's edit-copy AND save the asset (Apply & Save button). Mirrors FNiagaraScratchPadScriptViewModel::ApplyChangesAndSave.

NameTypeReqDescription
module_namestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

apply_material_to_actor ~42

Apply a material to a level actor.

NameTypeReqDescription
actor_namestringyes–
material_pathstringyes–
material_slotinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

apply_material_to_blueprint ~51

Apply a material to a Blueprint component.

NameTypeReqDescription
blueprint_namestringyes–
component_namestringyes–
material_pathstringyes–
material_slotinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

apply_niagara_scratch_pad ~77

Commit a scratch pad module's edit-copy to the original script (Apply button). Mirrors FNiagaraScratchPadScriptViewModel::ApplyChanges. Requires the Niagara System to be open in the editor so the view model exists.

NameTypeReqDescription
module_namestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

build_material_function_graph ~273

Build the internal node graph of a Material Function in one atomic call. Same interface as build_material_graph but for Material Functions. FunctionInput nodes use type="FunctionInput" with extra fields: input_name, input_type (Scalar/Vector2/Vector3/Vector4/Texture2D/TextureCube/ Texture2DArray/VolumeTexture/StaticBool/MaterialAttributes/TextureExternal/Bool/Substrate), description, sort_priority, use_preview_as_default, preview_value ([x,y,z,w]) FunctionOutput nodes use type="FunctionOutput" with extra fields: output_name, description, sort_priority Connections between nodes use the same format as build_material_graph: from_node (int), from_pin (str), to_node (int), to_pin (str) To connect a node to a FunctionOutput's input, use to_pin="" (the output has a single unnamed input pin labeled "A" internally). Args: function_path: Full path to existing material function nodes: JSON array of node definitions connections: JSON array of connections clear_existing: Remove existing expressions before building (default True)

NameTypeReqDescription
clear_existingboolean––
connectionsstringyes–
function_pathstringyes–
nodesstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

build_material_graph ~599

Build a complete material node graph in one atomic operation. Creates expression nodes and wires them together in a single call. By default clears existing expressions first (safe rebuild — all external references stay intact). Args: material_path: Full path to existing material (e.g. "/Game/Materials/M_Portal") nodes: JSON array of node definitions. Each node has: - type: Short class name (e.g. "TextureCoordinate", "Custom", "ScalarParameter", "Constant3Vector", "TextureSample", "Multiply", "Add", "Panner", "Time", "VectorParameter", "LinearInterpolate", "ComponentMask") Auto-prefixed with "MaterialExpression" if needed. - pos_x, pos_y: Graph position (default -300, 0) - properties: Dict of editor properties to set. Common ones: - parameter_name: str — name shown in material instances - default_value: number or [r,g,b,a] - slider_min, slider_max: float — slider range - group: str — parameter group name - Values starting with "/" are loaded as assets - Lists of 3-4 become LinearColor, lists of 2 become Vector2D For Custom HLSL nodes (type="Custom"), also supports: - code: HLSL source code string - description: Node title in the graph - output_type: "float" | "float2" | "float3" | "float4" - inputs: List of input pin names (e.g. ["UV", "Speed"]) - outputs: List of {"name": str, "type": str} for additional outputs connections: JSON array of connections. Each connection has: - from_node: Source node index (int, 0-based into nodes array) - from_pin: Output pin name ("" for default output) - to_node: Target node index (int) or "material" for material output - to_pin: Input pin name, or material property when to_node="material": BaseColor, Metallic, Specular, Roughness, Anisotropy, EmissiveColor, Opacity, OpacityMask, Normal,…

NameTypeReqDescription
clear_existingboolean––
connectionsstringyes–
material_pathstringyes–
nodesstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

cleanup_material_function ~102

Remove unconnected/orphaned nodes from a Material Function. Deletes: - FunctionOutput nodes with no input wired (duplicate output pins) - FunctionInput nodes whose output nobody consumes (duplicate input pins) - Orphaned internal nodes WARNING: Only call when the user explicitly asks to clean up. Args: dry_run: If true, reports what would be deleted without deleting.

NameTypeReqDescription
dry_runboolean––
function_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

cleanup_material_graph ~185

Delete orphaned and/or dead-end nodes from a material graph. WARNING: NEVER call this tool unless the user explicitly asks to clean up or delete unconnected nodes. Users may intentionally keep disconnected nodes as references, scratchpads, or work-in-progress. Deleting them without permission will cause data loss and frustration. Args: mode: What to delete: "orphaned" — only nodes with NO connections at all (safest) "dead_ends" — nodes whose output goes nowhere (has inputs but no consumers) "all" — both orphaned and dead-ends dry_run: If true, reports what WOULD be deleted without actually deleting. Always use dry_run=true first to preview before deleting.

NameTypeReqDescription
dry_runboolean––
material_pathstringyes–
modestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

clear_niagara_module_input ~190

Reset a module input to its default — equivalent to "Reset to Default" in the stack UI. Finds the override pin, breaks its connections, removes any orphan nodes that were exclusively feeding it (dynamic input node, map get, custom HLSL, etc.), then removes the override pin itself from the ParameterMapSet so the input reverts cleanly. Supports nested path syntax: input_name="Spawn Count.Position Array" clears the Position Array binding INSIDE the dynamic input attached to Spawn Count — without touching Spawn Count's own binding. Mirrors FNiagaraStackGraphUtilities::RemoveNodesForStackFunctionInputOverridePin (non-exported — replicated here).

NameTypeReqDescription
emitter_namestringyes–
input_namestringyes–
module_namestringyes–
script_usagestringyes–
system_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

compile_blueprint ~21

Compile a Blueprint.

NameTypeReqDescription
blueprint_namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

Install

How do I install the UnrealMCP — AI Bridge for Unreal Engine 5 MCP server?

UnrealMCP — AI Bridge for Unreal Engine 5 runs locally as a PyPI package, launched with uvx unrealmcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · unrealmcp

# add to Claude Code
claude mcp add aadeshrao123-unreal-mcp -- uvx unrealmcp
Common questions

What is the UnrealMCP — AI Bridge for Unreal Engine 5 MCP server?

UnrealMCP — AI Bridge for Unreal Engine 5 is an MCP server listed in the public MCP registry as io.github.aadeshrao123/unreal-mcp. Control the Unreal Engine 5 editor from any MCP client: Blueprints, materials, Niagara. This page covers its PyPI package (unrealmcp).

What tools does the UnrealMCP — AI Bridge for Unreal Engine 5 MCP server expose?

UnrealMCP — AI Bridge for Unreal Engine 5 exposes 286 tools: execute_python, health_check, find_assets, list_assets, open_asset, and 281 more. Their descriptions and schemas cost roughly 35,325 tokens of context every time the server is loaded.

Is the UnrealMCP — AI Bridge for Unreal Engine 5 MCP server still maintained?

UnrealMCP — AI Bridge for Unreal Engine 5 is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the UnrealMCP — AI Bridge for Unreal Engine 5 MCP server under?

UnrealMCP — AI Bridge for Unreal Engine 5 declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.