UE-MCP

Tool Reference

Tool Reference documentation.

This page lists ue-mcp's own category tools and actions. For the official Unreal 5.8 tools that ue-mcp wraps (surfaced inside these same categories), see Native Tools.

UE-MCP exposes 23 category tools covering 682+ actions, plus a flow tool for running multi-step YAML workflows. Every category tool takes an action parameter that selects the operation, plus action-specific parameters.

First call in any session

Start with project(action="get_status") to check the connection, then level(action="get_outliner") or asset(action="list") to explore.

How to read this page

Each row lists a single action and its key parameters. Optional params are marked with ?. For full schemas (types, descriptions, defaults), every action also surfaces its description through the MCP schema - your AI client can introspect them at runtime.


project

Project status and editor connection: get_status (is the editor connected?), set_project (switch/redirect the bridge to another .uproject), get_info. Also config INI files, module load state, and C++ source inspection. Call project(get_status) first in any session.

ActionDescription
get_statusCheck server mode and editor connection
set_projectSwitch project. Params: projectPath
get_infoRead .uproject file details
read_configRead INI config. Params: configName (e.g. 'Engine', 'Game')
search_configSearch INI files. Params: query
list_config_tagsExtract gameplay tags from config
read_cpp_headerParse a .h file. Params: headerPath
read_moduleRead module source. Params: moduleName
list_modulesList C++ modules
search_cppSearch .h/.cpp files. Params: query, directory?
read_engine_headerParse a .h file from the engine source tree. Params: headerPath (relative to Engine/Source, or absolute)
find_engine_symbolGrep engine headers for a symbol. Params: symbol, maxResults?
list_engine_modulesList modules in Engine/Source/Runtime
search_engine_cppSearch engine .h/.cpp/.inl files across Runtime/Editor/Developer/Plugins. Params: query, tree? (Runtime|Editor|Developer|Plugins|all - default Runtime), subdirectory?, maxResults? (default 500)
search_toolsSearch every ue-mcp tool + action by keyword or task INTENT (a synonym layer maps 'screenshot'->capture_scene_png, 'tile a texture'->the texture-bomb flow, etc.) and return ranked matches (tool, action, description, score). The first step before editor(execute_python); most tasks already have a dedicated action. Params: query (space-separated keywords/intent), limit? (default 20) (#704)
execute_python_reportMeasurement for #704: reads this session's execute_python calls and, for each, runs its taskSummary back through search_tools to flag calls that OVERLAPPED an existing dedicated action ('you used Python for X, but tool Y does X'). Returns totalCalls, overlapping[] and an overlapRate. Params: none (#704)
list_filesList files on disk under a directory, optionally filtered by extension(s). Runs in the MCP server process (no editor round-trip). Params: directory (absolute, or relative to the project dir), extensions? (e.g. ['png','exr'] or 'png'), recursive? (default false), maxResults? (default 1000) (#608)
set_configWrite to INI. Params: configName, section, key, value
buildBuild C++ project. Params: configuration?, platform?, clean?
generate_project_filesGenerate IDE project files (Visual Studio, Xcode, etc.)
create_cpp_classCreate a new native UCLASS in a project module. Uses the same engine template path as File → New C++ Class. Writes .h + .cpp; returns both paths plus needsEditorRestart (true unless Live Coding successfully hot-reloaded). Params: className (no prefix), parentClass? (default UObject; accepts short names like 'Actor' or /Script/[Module].[Class] paths), moduleName? (default: first project module, use list_project_modules to pick), classDomain? ('public'|'private'|'classes', default public), subPath?
list_project_modulesList native modules in the current project (name, host type, source path). Feed moduleName from here into create_cpp_class
list_loaded_modulesEnumerate ALL engine+project modules with runtime load state (loaded/gameModule), not just uproject-declared ones. Params: filter? (case-insensitive substring), loadedOnly? (default false) (#689)
is_module_loadedReport whether a named module is currently loaded in the editor. Params: moduleName (#689)
live_coding_compileTrigger a Live Coding compile (Windows only). Hot-patches method bodies of existing UCLASSes without editor restart - the fast inner loop for UFUNCTION implementations. Does NOT reliably register brand-new UCLASSes; use build_project + editor restart for those. Params: wait? (default false - fire and return 'in_progress')
live_coding_statusReport Live Coding availability/state (available, started, enabledForSession, compiling). Helps choose between live_coding_compile and build_project
write_cpp_fileWrite a .h / .cpp / .inl file under the project's Source/ tree. Used to append UPROPERTYs/UFUNCTIONs or method bodies after create_cpp_class. Writes are scoped to Source/ for safety. Params: path (relative to Source/ or absolute within Source/), content (full file contents)
read_cpp_sourceRead a .cpp file from the project Source/ tree. Companion to read_cpp_header for round-trip edits. Params: sourcePath (relative to Source/ or absolute)
write_source_fileWrite a .h/.cpp/.inl into a named module's Public/Private folder (resolves the module dir for you, including plugin modules under Plugins/*/Source/ that write_cpp_file refuses). After a new file, build_project + restart; after a body edit, live_coding_compile. Params: module (module name, default the project's primary module), visibility (Public|Private, default Private), fileName, content
read_source_fileRead a .h/.cpp/.inl from a named module's folder (companion to write_source_file; resolves plugin modules too). With no visibility it tries Public then Private then the module root. Params: module, visibility?, fileName
add_module_dependencyAdd a module to a target module's Build.cs dependency array. Params: moduleName (the Build.cs to edit - must exist in the project), dependency (module name to add, e.g. 'UMG'), access? ('public'|'private', default 'private')
add_cpp_memberAppend a UPROPERTY/UFUNCTION declaration to an existing UCLASS header inside the access specifier you choose. Idempotent: if a declaration containing the same memberName is already present, returns existed:true. Params: headerPath (relative to Source/ or absolute), declaration (full multi-line UPROPERTY(...) / UFUNCTION(...) block plus its single-line member or function signature), memberName (the identifier the declaration introduces - used for idempotency), access? ('public'|'protected'|'private', default 'public')

asset

Asset management: list, search, read, CRUD, import meshes/textures, datatables, stringtables.

ActionDescription
listList assets via the AssetRegistry (sees /Game and every mounted plugin root). Params: directory? (default /Game), classFilter?, recursive? (default true), maxResults? (default 2000)
searchSearch by name/class/path. Params: query, directory?, maxResults?, searchAll?
readRead asset via reflection. Params: assetPath
read_propertiesRead asset properties with values. Blueprint paths resolve to the generated-class CDO (#568). propertyName accepts dotted/indexed paths into nested structs, array elements, and instanced subobjects (e.g. Config.Traits[1].Params.Field); landing on an array of subobjects also lists each element's index+class (#527). Params: assetPath, propertyName?, includeValues?, valueFormat?
list_propertiesList reflected properties on any asset. Params: assetPath, includeValues?, valueFormat? ('text'|'json')
get_propertiesRead property values on any asset. propertyName accepts dotted/indexed paths into nested structs, array elements, and instanced subobjects. valueFormat='json' returns structured values. Params: assetPath, propertyName?, includeValues?, valueFormat?
duplicateDuplicate asset. Params: sourcePath, destinationPath
renameRename asset. Params: assetPath, newName (or sourcePath, destinationPath), force?
bulk_renameBatched rename using IAssetTools::RenameAssets - single transaction with one redirector-fixup pass (matches Content Browser drag). Use this over looped rename for scene-referenced assets. World assets are rejected (status=rejected_world); use rename_asset which handles WP externals atomically (#409). Params: renames[] where each entry is (sourcePath, destinationPath) OR (assetPath, newName)
moveMove asset. Params: sourcePath, destinationPath
deleteDelete asset. On failure returns reason (open_in_editor / has_referencers / in_memory_referenced / package_read_only / package_dirty / unknown) plus referencers, inMemoryReferencers, packageReadOnly, packageDirty diagnostics (#601). Pass force=true to auto-close any open asset editors before deleting (#278). Params: assetPath, force?
delete_batchBatch-delete assets. Per-path status (deleted/absent/failed) plus reason+referencers on failed entries (#278). Params: assetPaths[], force?
create_data_assetCreate UDataAsset instance of custom class. Params: name, className (/Script/Module.ClassName or loaded name), packagePath?, properties? (key/value map)
create_asset_by_classCreate an asset of ANY concrete UObject class (not just UDataAsset) - physical-material subclasses, curves, settings objects. Params: name, className, packagePath?, properties?, onConflict?. Actors/components and specialized assets (Blueprint/Material) have dedicated actions (#726)
saveSave asset(s). Params: assetPath?
save_all_dirtyFlush every dirty package to disk in one call. End-of-workflow shortcut after bulk import/edit. Params: saveMapPackages? (default true), saveContentPackages? (default true)
set_mesh_materialAssign material to static mesh slot. Params: assetPath, materialPath, slotIndex?
recenter_pivotMove static mesh pivot to geometry center. Params: assetPath OR assetPaths
import_static_meshImport from FBX, OBJ, or GLB/glTF (glTF routes through Interchange) (#549). importUniformScale=100 fixes metre-authored FBX (#687). Params: filePath, name?, packagePath?, combineMeshes?, importMaterials?, importTextures?, generateLightmapUVs?, importUniformScale?
import_skeletal_meshImport skeletal mesh from FBX. importUniformScale=100 fixes metre-authored FBX (Blender FBX_SCALE_ALL) that lands 100x too small on a cm skeleton (#687). Returns post-import readback: boxExtent, morphTargets[], numLODs, skeleton (#678). Params: filePath, name?, packagePath?, skeletonPath?, importMaterials?, importTextures?, importUniformScale? (default 1.0), importMorphTargets? (default true), createPhysicsAsset? (default false), replaceExisting? (default true)
import_animationImport anim from FBX. Params: filePath, name?, packagePath?, skeletonPath
import_textureImport image. sRGB/compressionSettings/lodGroup/neverStream are applied at import time (folded in, no second call needed) (#661). Params: filePath, name?, packagePath?, sRGB?, compressionSettings? (Default|Normalmap|Grayscale|HDR|BC7|...), lodGroup?, neverStream?
read_cloth_dataRead Chaos cloth data on a skeletal mesh: per clothing asset, its configs (reflected properties), LOD count, and per-LOD point-weight-map summary (name, target, vertex count, min/max - including the MaxDistances mask). Params: skeletalMeshPath (#595)
set_cloth_configSet properties on a clothing asset's Chaos cloth config via reflection. Params: skeletalMeshPath, properties (object), clothingAsset? (name filter), configType? (config class/key filter) (#595)
export_textureExport a Texture2D to a PNG on disk (for inspection or external diffing). Params: assetPath, outputPath (.png) (#697)
compare_texturesCompare two Texture2D assets by dimensions, pixel format, and source-content identity (FTextureSource id) - tells you whether an authored texture actually changed without offline pixel-diffing. Params: assetPathA, assetPathB (#697)
import_texture_batchImport many textures in one call - the loop stays inside the editor (no per-file bridge round-trip), so this finishes far faster than N import_texture calls. Per-item result records mirror import_texture. Params: items[]: [(filePath, packagePath?, name?, replaceExisting?)], packagePath? (default for items that don't set it), save? (default true), automated? (default true)
reimportReimport asset from source file. Params: assetPath, filePath?
read_datatableRead DataTable rows. Params: assetPath, rowFilter?
create_datatableCreate DataTable. Params: name, packagePath?, rowStruct
reimport_datatableReimport DataTable from JSON. Params: assetPath, jsonPath?, jsonString?
set_datatable_rowAppend or overwrite a single DataTable row. Params: assetPath, rowName, row (object with row-struct fields - partial updates merge with the existing row)
add_datatable_rowAlias for set_datatable_row (#437)
update_datatable_rowAlias for set_datatable_row; partial update merges with existing row (#437)
remove_datatable_rowRemove a single DataTable row. Idempotent (alreadyDeleted=true if missing). Params: assetPath, rowName (#437)
get_datatable_rowRead one DataTable row's fields without dumping the whole table. Params: assetPath, rowName (#535)
set_datatable_cellWrite a single field on a single existing row (merges, leaves other cells untouched). Errors if the row doesn't exist. Params: assetPath, rowName, fieldName, value (#535)
rename_datatable_rowRename a row key, preserving its values. Params: assetPath, oldName, newName (#535)
fill_datatable_from_jsonBulk-upsert rows from a {rowName: {field: value}} object without touching unrelated rows (non-destructive, unlike reimport_datatable). Params: assetPath, rows (object) or jsonString (#535)
create_curvetableCreate CurveTable asset. Params: name, packagePath?, onConflict?
read_curvetableRead CurveTable rows and keys. Params: assetPath, rowFilter?
list_curvetable_rowsAlias for read_curvetable. Params: assetPath, rowFilter?
import_curvetableImport CurveTable from JSON/CSV string or file. Params: assetPath, jsonString?, csvString?, filePath?, format?, interpMode?
add_curvetable_rowAdd CurveTable row. Params: assetPath, rowName, curveType? ('simple'|'rich'), interpMode?
remove_curvetable_rowRemove CurveTable row. Idempotent if missing. Params: assetPath, rowName
rename_curvetable_rowRename CurveTable row. Params: assetPath, oldName, newName
get_curvetable_keysRead keys from one CurveTable row. Params: assetPath, rowName
set_curvetable_keysReplace keys on one CurveTable row. Params: assetPath, rowName, keys:[(time,value,interpMode?,arriveTangent?,leaveTangent?)]
add_curvetable_keyAdd or update one key on a CurveTable row. Params: assetPath, rowName, time, value, interpMode?, keyTimeTolerance?
list_texturesList textures. Params: directory?, recursive?
get_texture_infoGet texture details. Params: assetPath
set_texture_settingsSet texture settings. Params: assetPath, settings (object with compressionSettings?, lodGroup?, sRGB?, neverStream?)
create_stringtableCreate a StringTable asset. Params: name, packagePath?, namespace?, onConflict?
read_stringtableRead StringTable entries and keys. Params: assetPath, keyFilter?
list_stringtable_keysList StringTable keys. Params: assetPath, keyFilter?
get_stringtable_entryRead one StringTable entry. Params: assetPath, key
set_stringtable_entryCreate or update one StringTable entry. Params: assetPath, key, sourceString (or value)
remove_stringtable_entryRemove one StringTable entry. Idempotent (alreadyDeleted=true if missing). Params: assetPath, key
import_stringtableImport StringTable entries from CSV. Params: assetPath, filePath (or csvPath)
add_input_mappingAppend an Enhanced Input key mapping to an InputMappingContext (InputAction + key by name string e.g. 'Mouse2D','LeftMouseButton'). Idempotent on (action,key). For modifiers/triggers use gameplay(set_mapping_modifiers). Same as gameplay(add_imc_mapping) (#525). Params: mappingContext (IMC path), inputAction (IA path), key
remove_input_mappingRemove an IMC key mapping. Same as gameplay(remove_imc_mapping) (#525). Params: mappingContext (IMC path), mappingIndex? | (inputAction? + key?)
list_input_mappingsList an IMC's key->action bindings with triggers/modifiers. Same as gameplay(read_imc) (#525). Params: mappingContext (IMC path)
add_socketAdd socket to StaticMesh or SkeletalMesh. SkeletalMesh writes mesh-local sockets by default; pass a Skeleton asset path to edit skeleton-level sockets. Idempotent on socket name; pass onConflict='update' to overwrite an existing socket's transform with the supplied relativeLocation/relativeRotation/relativeScale (#412). Params: `assetPath, socketName, boneName? (SkeletalMesh only, default 'root'), relativeLocation?, relativeRotation?, relativeScale?, onConflict? (skip\
remove_socketRemove socket by name. Params: assetPath, socketName
list_socketsList sockets on a mesh (StaticMesh or SkeletalMesh). SkeletalMesh results include mesh-local sockets plus assigned Skeleton sockets, each with source='mesh' or source='skeleton'. Params: assetPath
set_socket_transformUpdate an existing socket's relative transform on StaticMesh or SkeletalMesh. Pass any subset of relativeLocation/relativeRotation/relativeScale; omitted fields stay at their current values. Errors if the socket does not exist (use add_socket to create). Common after FBX import when SOCKET_* empties land with scale=(100,100,100) (#412). Params: assetPath, socketName, relativeLocation?, relativeRotation?, relativeScale?
set_propertySet a UPROPERTY on any loaded asset (Material, DataAsset, DataTable, SubsurfaceProfile, etc.) using a dotted path. Blueprint paths resolve to the generated-class CDO so you can author its defaults + Instanced sub-object arrays (#568). Walks nested structs, array elements by index, and instanced subobjects internally - no more read-modify-write copies (e.g. settings.mean_free_path_distance on a UMaterial, or Config.Traits[1].Params.Field on a config asset #527). Value goes through MCPJsonProperty::SetJsonOnProperty so JSON null clears object refs, structs accept {x,y,z}, arrays/maps round-trip. Params: assetPath, propertyName (dotted path), value (#420)
set_texture_settings_by_typeApply the canonical (compressionSettings, sRGB, LOD group) combo to every texture in each group: normal -> Normalmap, grayscale -> Grayscale, baseColor -> Default sRGB, hdr -> HDR. Params: groups (object: (normal?:[paths], grayscale?:[paths], baseColor?:[paths], hdr?:[paths])) (#421)
create_interchange_pipelineOne-call factory for a UInterchangeGenericAssetsPipeline asset with the 15-property mesh-import boilerplate already applied (RecomputeNormals=false, MikkTSpace=true, HighPrecisionTangents=true, BuildNanite=false, CreatePhysicsAsset=false, etc.). Params: assetPath OR (name + packagePath?), meshType? (skeletal default | static), options? (dotted-path overrides on the resulting pipeline e.g. ('MeshPipeline.bBuildNanite': true)), onConflict? (#421)
reload_packageForce reload an asset package from disk. Params: assetPath
health_checkDiagnose stuck-unloadable asset. Returns onDisk/inRegistry/isLoaded/canLoad/isStuck flags so an agent can detect the half-shutdown state where load returns null but the file exists (#279). Params: assetPath
force_reloadAggressive reload that resets package loaders + GCs + LoadObject. Recovers from the half-shutdown state without an editor restart (#279). Closes any open editors first. Params: assetPath
exportExport asset to disk file (Texture2D → PNG, StaticMesh → FBX, etc.). Params: assetPath, outputPath
search_ftsRanked asset search (token-scored over name/class/path). Params: query, maxResults?, classFilter?
reindex_ftsRebuild the SQLite FTS5 asset index. Params: directory?
get_referencersReverse dependency lookup (what references this). Params: packages[] OR packagePath (#150)
get_dependenciesForward dependency lookup (what packages this asset references). Params: packages[] OR packagePath, hard? (default true), soft? (default true) (#588)
list_skeleton_bonesList bones (names + rest-pose local and component-space transforms) from a SkeletalMesh or Skeleton asset, no live actor needed. Params: assetPath, includeTransforms? (default true) (#593)
get_primary_asset_idsEnumerate AssetManager-registered FPrimaryAssetIds (verify a primary-asset registration). Params: type? (FPrimaryAssetType; omit for all types), maxResults? (default 1000) (#579)
set_sk_material_slotsSet materials on a USkeletalMesh by slot name or slotIndex (bypasses the blueprint override-materials path that UE's ICH silently reverts). Params: assetPath, slots[(slotName?|slotIndex?, materialPath)]
diagnose_registryScan a content path and compare disk vs AssetRegistry (including in-memory pending-kill entries). Returns onDiskCount, inMemoryIncludedCount, ghostCount and paths. Params: path, recursive? (default true), reconcile? (forceRescan=true)
get_mesh_boundsGet StaticMesh OR SkeletalMesh bounding box. Params: assetPath
get_mesh_infoOne-call mesh QA: bounds + material slots + skeleton + LOD/vertex counts. Works for both UStaticMesh and USkeletalMesh. Params: assetPath
read_import_sourcesRead AssetImportData source filenames on an imported asset (StaticMesh, SkeletalMesh, Texture, Animation, etc.). Returns sources[] of {relativeFilename, absolutePath, timestamp, fileHash, displayLabelName}. Params: assetPath (#270)
get_mesh_collisionInspect StaticMesh collision setup. Params: assetPath
move_folderMove/rename entire content folder with redirector fixup in one transaction. Params: sourcePath, destinationPath (#192)
create_folderCreate empty content browser folder(s). Params: path OR paths[] (e.g. /Game/Foo, /Game/Bar/Baz)
delete_folderDelete content browser folder(s) - counterpart to delete_asset, which leaves the parent directory entry behind as an orphan. Empty folders only by default; pass force=true to also delete any assets still inside (Content Browser 'Delete folder' equivalent). Per-path status (deleted/absent/failed) with reason (invalid_path/protected_path/not_empty/delete_failed) and a sample of contained assets on not_empty entries. Params: path OR paths[], force?
set_mesh_navSet StaticMesh nav contribution. Params: assetPath, bHasNavigationData?, clearNavCollision? (#167)
create_user_defined_enumCreate a UserDefinedEnum content asset, optionally pre-populated with values. Params: name, packagePath? (default /Game), values? ([display-name strings]), onConflict? (#686)
list_enum_valuesList a UEnum's enumerators (index, authored short name, display name, value). Works on native and UserDefinedEnum assets. Params: assetPath (#686)
edit_user_defined_enumAuthor a UserDefinedEnum content asset. op=add_value appends an enumerator (authored name is auto-assigned; pass displayName - or name - to set the editable display text). op=rename_value sets a new displayName on the enumerator resolved by index or name (matches short or display name). op=remove_value deletes it. Recompiles dependents automatically. Native UEnums are not editable. Params: assetPath, op (add_value|rename_value|remove_value), displayName?, name?, index? (#686)
create_user_defined_structCreate a UserDefinedStruct content asset, optionally pre-populated with fields. Each field is {name, type} where type is a MakePinType string (bool|int|int64|float|string|name|text|byte, a struct like Vector, an enum, or an object ref like Actor). Params: name, packagePath? (default /Game), structFields? ([(name, type)]), onConflict? (#735)
list_struct_fieldsList a UserDefinedStruct's members (index, internal name, friendly/display name, GUID, type label). Use this to find the GUID for a stable rename/retype. Native structs are not editable. Params: assetPath (#735)
edit_user_defined_structAuthor a UserDefinedStruct content asset. op=add_field appends a member (type via MakePinType string; pass fieldName for its display name). op=rename_field sets a new newDisplayName on the member resolved by fieldGuid or fieldName - the member GUID is preserved so existing Blueprint pins and DataTable rows survive. op=set_field_type changes a member's type. op=remove_field deletes it. Recompiles dependents automatically. Native structs are not editable. Params: assetPath, op (add_field|rename_field|set_field_type|remove_field), fieldName?, fieldGuid?, newDisplayName?, type? (#735)
rename_struct_fieldRename a UserDefinedStruct field's display name while preserving its member GUID, so Blueprint pins and DataTable rows keyed off it survive. Convenience wrapper over edit_user_defined_struct(op=rename_field). Resolve the field by fieldGuid or fieldName (matches friendly or internal name). Params: assetPath, fieldName | fieldGuid, newDisplayName (#735)
lockAcquire an exclusive lock on an asset for this session, so concurrent agents don't mutate the same asset at once. The lock registry lives in the shared editor bridge, keyed by asset path with a TTL lease so a crashed session never wedges an asset. Returns acquired=true, or acquired=false with holder{sessionId, ttlSecondsRemaining} when another session holds it. Params: assetPath, ttlSeconds? (default 300), sessionId?
unlockRelease an asset lock held by this session (or force=true to break any holder's lock). Params: assetPath, force?, sessionId?
list_locksList all currently-held asset locks with holder session id, acquiredAt, and ttlSecondsRemaining.

blueprint

Blueprint reading, authoring, and compilation, including AnimGraph/EventGraph node scripting: add_node, connect_pins, search_node_types, plus variables, functions, graphs, components, interfaces, and event dispatchers.

ActionDescription
readRead BP structure incl. SCS components AND inherited native components from the CDO (CharacterMesh0, CharMoveComp, etc.). Params: assetPath, includeComponentProperties? (dump UPROPERTY name/type/value per component template; off by default) (#353/#370)
list_variablesList variables. Params: assetPath
list_functionsList functions/graphs. Params: assetPath
read_graphRead graph nodes. Supports pagination, file dumps, and title/class node filters. Params: assetPath, graphName, offset?, limit?, includePins?, includeDefaults?, includeComments?, dumpToFile?, outputPath?, titleFilter?, classFilter? (#560)
read_graph_summaryLightweight graph summary (nodes+edges only, ~10KB). Filterable node list. Params: assetPath, graphName?, titleFilter?, classFilter? (#560)
get_execution_flowTrace exec pins from an entry point. Params: assetPath, graphName?, entryPoint?
get_dependenciesForward (classes/functions/assets) or reverse (referencers) deps. Params: assetPath, reverse?
createCreate Blueprint. Params: assetPath, parentClass?
add_variableAdd variable. Params: assetPath, name, varType
set_variable_propertiesEdit variable properties. Params: assetPath, name, instanceEditable?, blueprintReadOnly?, category?, tooltip?, replicationType?, exposeOnSpawn?
create_functionCreate function. Params: assetPath, functionName
delete_functionDelete function. Params: assetPath, functionName
rename_functionRename function. Params: assetPath, oldName, newName
add_nodeAdd graph node. For a CallFunction node bound to a custom C++ UFUNCTION, pass nodeParams {functionName, className (or targetClass) = /Script/Module.Class}; the function also resolves against the BP's own component classes and an unambiguous loaded BlueprintCallable function, producing a bound node with pins instead of a stub (#546). nodeClass='CallParent' places a 'Parent: <Function>' call bound to the parent implementation (functionName resolves against ParentClass) so an override graph can chain to the base (#688). Params: assetPath, graphName?, nodeClass, nodeParams?
delete_nodeDelete node. Params: assetPath, graphName, nodeName
set_node_propertySet node pin default or struct property. Params: assetPath, graphName, nodeName, propertyName, value
connect_pinsWire nodes. Params: sourceNode, sourcePin, targetNode, targetPin, assetPath, graphName?, breakExistingSource?, breakExistingTarget?
add_componentAdd BP component. componentClass accepts short names (e.g. 'ChildActorComponent') or full paths. For a ChildActorComponent, pass childActorClass to set its ChildActorClass in the same call (a Blueprint path with or without _C, or a C++ class) (#526). Params: assetPath, componentClass, componentName?, parentComponent? (SCS parent for hierarchy - #115), childActorClass?
remove_componentRemove SCS component. Params: assetPath, componentName
set_component_propertySet property on SCS or inherited component. Inherited components go through the child BP's InheritableComponentHandler override template so the parent stays untouched. Pass value=null to clear a TObjectPtr/SoftObject/WeakObject/UClass/Interface reference (e.g. clear AnimClass on CharacterMesh0) (#420). Params: assetPath, componentName, propertyName, value
set_component_override_materialsWrite OverrideMaterials on a mesh-component template (StaticMeshComponent / SkeletalMeshComponent / any UMeshComponent). Pass materialPaths as a string[] of material asset paths (empty array clears). Avoids any TArray<UObject*> coercion on the generic set_component_property path (#442). Params: assetPath, componentName, materialPaths
add_timeline_trackAdd a track to a Blueprint timeline. Creates the UTimelineTemplate if missing, builds the matching curve asset (float/vector/color/event), applies keyframes, bumps TimelineLength to cover the last key, then recompiles so K2Node_Timeline regenerates its output pins. Params: assetPath, timelineName, trackName, trackType ('float'|'vector'|'color'|'event'), keyframes ([(time, value)])
set_capsule_sizeCall UCapsuleComponent::SetCapsuleSize on a CapsuleComponent template (CharacterMovement-friendly path; raw property writes leave the visualizer stale). Pass either or both of halfHeight/radius. Returns the new + previous values. Params: assetPath, componentName, halfHeight?, radius? (#419)
get_component_propertyRead a single property value from an SCS or inherited component template. Returns the ICH override value for child BPs if one exists. Params: assetPath, componentName, propertyName
set_class_defaultSet UPROPERTY on Blueprint CDO. Pass value=null to clear an object/class/interface reference (#420). Params: assetPath, propertyName, value
delete_variableDelete a member variable. Params: assetPath, name
add_function_parameterAdd input or output parameter to a function. Params: assetPath, functionName, parameterName, parameterType?, isOutput?
set_variable_defaultSet default value on a BP variable. Params: assetPath, name, value
compileCompile Blueprint. Params: assetPath
list_node_typesList node types. Params: category?, includeFunctions?
search_node_typesSearch nodes. Params: query
create_interfaceCreate BP Interface. Params: assetPath
add_interfaceImplement interface. Params: blueprintPath, interfacePath
override_functionOverride an inherited interface implementation (inherited via the parent class) or an overridable parent virtual function, with the matching signature so it actually binds as the override (create_function makes a blank, non-binding graph). Returns kind ('function' with a graphName, or 'event' with a nodeId in EventGraph). Event-shaped functions become override events unless preferFunction=true. Pass interfacePath to also implement the interface first if it is not present. Then wire the body with add_node (use nodeClass='CallParent' to chain to the base implementation). Params: assetPath, functionName, source? ('auto'|'interface'|'parent', advisory), preferFunction?, interfacePath? (#688)
list_overridable_functionsList functions this Blueprint can override: inherited interface implementations and overridable parent virtuals. Each entry has name, source ('interface'|'parent'), declaringClass, canBeEvent. Params: assetPath (#688)
list_graphsList all graphs in a blueprint. Params: assetPath
add_event_dispatcherAdd event dispatcher (multicast delegate variable + signature graph + UFunction). Without parameters, broadcasters fire void(). With parameters, the signature graph gets typed user pins so K2Node_CallDelegate compiles cleanly (#276). Params: blueprintPath, name, parameters?: [(name, type)] where type is bool/int/float/string/name/text/vector/rotator/transform/object:/Script/Module.Class/struct:/Script/Module.Struct
duplicateDuplicate blueprint asset. Params: sourcePath, destinationPath
add_local_variableAdd function-scope local variable. Params: assetPath, functionName, name, varType?
list_local_variablesList local variables in a function. Params: assetPath, functionName
validateValidate blueprint without saving (compile + collect diagnostics). Params: assetPath
read_component_propertiesDump ALL UPROPERTYs on a BP component template incl. array contents (#105). Params: assetPath, componentName
read_node_propertyRead a node pin default OR a reflected node property for verification (#102). Params: assetPath, graphName?, nodeName, propertyName
reparent_componentReparent an SCS component under a new parent (#115). Params: assetPath, componentName, newParent
reparentChange a Blueprint's ParentClass and recompile (#138). Params: assetPath, parentClass (short name or full path)
flush_ichFlush orphaned InheritableComponentHandler override records (invalid component-override entries invisible to read/remove_component). Recompiles + saves. Params: assetPath
set_actor_tick_settingsSet actor CDO tick settings (#116). Params: assetPath, bCanEverTick?, bStartWithTickEnabled?, TickInterval?
export_nodes_t3dExport graph nodes as T3D text (Ctrl+C equivalent) for bulk round-trip (#130). Params: assetPath, graphName?, nodeIds? (omit = whole graph)
import_nodes_t3dPaste a T3D node blob into a graph (Ctrl+V equivalent) for bulk authoring (#130). Params: assetPath, graphName?, t3d, posX?, posY?
set_cdo_propertySet UPROPERTY on any C++ class CDO (not just Blueprints). Params: className, propertyName, value (#182/#183)
get_cdo_propertiesRead UPROPERTY values from any C++ class CDO. Params: className, propertyNames? (#183)
run_construction_scriptSpawn temp actor, run construction script, return generated components and transforms. Params: assetPath, location? (#195)
compile_allBatch compile + save Blueprints. Params: assetPaths[], save? (default true)
authorAuthor a whole Blueprint in one call: optionally create it (parentClass), then add components, variables and function stubs, then compile - one agent-facing action instead of a dozen add_* round-trips. Params: assetPath, parentClass? (create/ensure the BP if given), components? [(componentClass, componentName?, parentComponent?, childActorClass?)], variables? [(name, varType)], functions? [(functionName)], compile? (default true)
cleanup_graphRemove orphan/corrupted nodes (no class, blank title+no pins, missing target UFunction). Params: assetPath, graphName? (default: every graph) (#285)
connect_pins_batchApply many pin connections in one call (single compile + save). Params: assetPath, graphName?, connections[]: [(sourceNode, sourcePin, targetNode, targetPin)] (#267)
set_node_positionMove a graph node to (posX, posY). Params: assetPath, graphName?, nodeId, posX, posY (#277)
auto_layoutTopological layered layout for a graph. Eliminates the (0,0) stack from programmatic add_node. Params: assetPath, graphName?, columnGap? (default 360), rowGap? (default 200) (#277)
diffSemantic structural diff between two Blueprints (binary uassets are unreviewable in git). Compares parent class, variables (type/default), functions/macros, components, and per-graph node + connection deltas keyed on stable node GUIDs so edits are matched rather than shown as remove+add. Returns a structured delta plus a human summary and changeCount. Params: assetPath (base/A), otherPath (compare/B). Revision-based diffing via source control is a staged follow-up.

level

Level actors, selection, components, level management, volumes, lights, and splines.

ActionDescription
get_outlinerList actors (each row includes editorHidden - hidden in the viewport but still rendering in game). Params: classFilter?, nameFilter?, editorHidden? (filter to only hidden/only visible), world? (editor|pie|auto), limit?, includeStreaming? (#717)
set_editor_visibilityBulk set editor-only visibility (temporarily-hidden-in-editor). Target actorLabels[] or all=true. Params: hidden (required; true=hide, false=show), actorLabels?, all? (#717)
place_actorSpawn actor. Pass world:pie to spawn into the running PIE world (#585). Params: actorClass, label?, location?, rotation?, scale?, staticMesh?, material?, world? (editor|pie)
delete_actorRemove actor. Params: actorLabel
get_actor_detailsInspect actor. Params: actorLabel OR actorPath, includeProperties?, propertyName?, world? (editor|pie)
move_actorTransform actor. Pass world:pie to move a live PIE actor (resolves labels/names from get_outliner {world:pie}) (#586). Params: actorLabel, location?, rotation?, scale?, world? (editor|pie)
aim_actor_atRotate an actor so its forward (+X) points at a target. Params: actorLabel, targetPoint (Vec3) OR targetActor (label), roll? (default 0), world? (editor|pie) (#566)
nav_project_pointProject a world point onto the navmesh. Returns onNavMesh + projectedLocation. Params: point (Vec3), extent? (Vec3, default 100), world? (editor|pie) (#585)
selectSelect actors. Params: actorLabels[]
get_selectedGet selection
add_componentAdd component to actor. Params: actorLabel, componentClass, componentName?
remove_componentRemove instance component from a level actor by name. Idempotent: returns alreadyDeleted=true if no matching component exists. Params: actorLabel, componentName (#426)
set_component_propertySet component prop. Pass value=null to clear a TObjectPtr/SoftObject/WeakObject/UClass/Interface reference (#420). Resolves inherited/SCS components on placed Blueprint instances case-insensitively, and refreshes the scene transform after RelativeLocation/RelativeRotation/RelativeScale3D writes (#539). Params: actorLabel, componentName, propertyName, value
get_component_detailsRead a placed actor's component transforms. With componentName returns that component's relative+world location/rotation/scale, class, and attach parent; without it lists every component. With includeValues=true also dumps arbitrary UPROPERTY values (custom fields, CharacterMovement MaxWalkSpeed, etc.); world='pie' reads the live PIE instance (#539/#584). Params: actorLabel, componentName?, includeValues?, propertyNames? (filter), world? (editor|pie)
get_currentGet current level name and path
loadLoad level. Params: levelPath
saveSave current level
listList levels. Params: directory?, recursive?
createCreate new level. Params: levelPath?, templateLevel?
spawn_volumePlace volume. Params: volumeType, location?, extent?, label?
list_volumesList volumes. Params: volumeType?
set_volume_propertiesEdit volume. Params: actorLabel, properties
spawn_lightPlace light. Params: lightType (point|spot|directional|rect|sky), location?, rotation?, intensity?, color? ((r,g,b) 0-255), attenuationRadius? (point/spot/rect only; #723), mobility? (static|stationary|movable; default movable so the light renders without a build), label? (#331/#310)
set_light_propertiesEdit a light OR SkyLight (intensity/color now work on SkyLight too, #608). Params: actorLabel, intensity?, color?, rotation? (DirectionalLight sun angle), mobility? (static|stationary|movable), recaptureSky?, volumetricScatteringIntensity?, sourceRadius? (point/spot), innerConeAngle?/outerConeAngle? (spot)
set_fog_propertiesEdit ExponentialHeightFog incl. volumetric fog (#608). Params: actorLabel?, fogDensity?, fogHeightFalloff?, startDistance?, fogInscatteringColor?, enableVolumetricFog?, volumetricFogScatteringDistribution?, volumetricFogExtinctionScale?, volumetricFogDistance?, volumetricFogAlbedo?
get_actors_by_classList actors by class. Matches Blueprint subclasses of a native base via IsChildOf when className resolves to a UClass (short name, /Script path, or BP class path), else falls back to name-substring. Each actor includes location/rotation/scale. Params: className, world? (editor|pie), matchSubclasses? (default true), includeTransforms? (default true) (#675)
get_actors_by_component_classList actors that own a component of a given class (exact or substring match). Returns each actor plus its matchedComponents. Params: componentClass, world? (editor|pie) (#582)
count_actors_by_classHistogram of actor classes in the level (sorted desc). Params: world? (editor|pie), topN? (#146)
get_runtime_virtual_texture_summaryList RuntimeVirtualTextureVolume actors + their bound VirtualTexture assets (#150)
set_water_body_propertySet a property on an actor's WaterBodyComponent (ShapeDilation, WaterLevel, etc.). Params: actorLabel, propertyName, value
build_lightingBuild lights. Params: quality?
get_spline_infoRead a spline component's points, closedLoop, length, and per-point tangents/types. Works in editor or PIE (#553). Optional componentName picks a specific (custom) spline; projectPoint (Vec3) returns the closest location, inputKey, distanceAlongSpline, distanceToSpline, and tangent (#555). Params: actorLabel, componentName?, world? (editor|pie), projectPoint?
set_spline_pointsSet spline points. Params: actorLabel, points[], closedLoop?
set_actor_materialSet material on actor. Params: actorLabel, materialPath, slotIndex?
get_world_settingsRead world settings (GameMode, KillZ, gravity, etc.)
set_world_settingsSet world settings. Params: defaultGameMode?, killZ?, globalGravityZ?, enableWorldBoundsChecks?
get_actor_boundsGet actor AABB. Params: actorLabel
get_component_treeDeep component-tree dump for an actor. Returns per-component: name, class, attachParent, attachSocket, mobility, visibility, relative+world transforms, tags. For PrimitiveComponents adds collisionProfile/collisionEnabled/bounds/castShadow. For StaticMeshComponent adds staticMesh + materials[]. For SkeletalMeshComponent adds skeletalMesh + skeleton + materials[]. For NiagaraComponent adds niagara{asset,active,visible} and for AudioComponent audio{sound,playing} - runtime FX state in PIE (#581). Params: actorLabel | actorPath, world? (editor|pie), componentClass? (substring filter), includeProperties? (dump UPROPERTY name/type/value per component) (#240/#241/#302/#320/#370/#353/#581)
get_relative_transformCompute target's transform in reference's local space (location/rotation/scale). Common dungeon/calibration workflow. Params: target (actor label), reference (actor label), world? (#386/#387)
resolve_actorResolve internal/runtime actor name to editor label. Params: internalName (e.g. StaticMeshActor_141)
set_actor_propertySet per-instance UPROPERTY on a level actor. Params: actorLabel ('WorldSettings' targets the world settings actor), propertyName (dotted paths like 'Foo.Bar' supported), value (string/number/bool/object/array; a label string resolves to an AActor* ref, and a JSON array of labels populates a TArray of actor refs #538), force? (bypass EditDefaultsOnly), world? (editor|pie) (#202/#230)
read_actor_motionSnapshot motion telemetry for one or many actors: location, rotation, velocity, scale, angularVelocity (when simulating physics), grounded + distanceToGround (downward 200u trace). Defaults to the PIE world with editor fallback. Loop at your sample interval for long telemetry probes. Params: actorLabel? OR actorLabels (string[]), world? ('pie'|'editor') (#453)
add_hismc_instancesBulk-add transforms to a HISMC / ISMC component on an actor (Python add_instance crashes on UE 5.7; this is the C++ path). Params: actorLabel, componentName? (default: first ISMC/HISMC found), transforms ([(location: (x,y,z), rotation?: (pitch,yaw,roll), scale?: (x,y,z))]), worldSpace? (default true) (#434)
get_instance_transformsRead every instance transform on an actor's ISMC/HISMC. Params: actorLabel, componentName? (default first), worldSpace? (default true)
update_instance_transformUpdate a single ISMC/HISMC instance by index; unspecified location/rotation/scale are preserved. Params: actorLabel, componentName?, index, location?, rotation?, scale?, worldSpace? (default true) (#697)
remove_instanceRemove a single ISMC/HISMC instance by index. Params: actorLabel, componentName?, index (#697)
set_nanite_settingsEnable/disable + force-build Nanite on a UStaticMesh asset (rebuilds render data immediately, not on next cook). Params: assetPath, enabled? (default true), positionPrecision? (#696)
get_nanite_infoRead a UStaticMesh's Nanite state (naniteEnabled, positionPrecision, numLODs). Params: assetPath (#696)
add_post_process_blendableAdd a material blendable (post-process material or MID, e.g. a toon/outline pass) to a PostProcessVolume's WeightedBlendables. Params: actorLabel (the PPV), materialPath, weight? (default 1) (#666)
export_actor_fbxExport an actor's skeletal/static mesh to FBX and write a metadata sidecar JSON (actor transform, mesh, materials, skeleton) for a downstream bridge (e.g. MetaTailor). Params: actorLabel, outputPath (.fbx)
spawn_skeletal_mesh_actorSpawn a SkeletalMeshActor for visual/deform verification. Optional per-slot materials and single-node animation preview (animSequence + loop). Returns actorLabel + boxExtent. Params: skeletalMesh, label?, location?, rotation?, scale?, materials? (path[]), animSequence?, loop? (#679/#677)
delete_actorsBulk-delete actors. Params: at least one of labelPrefix, className, tag; dryRun? to preview
add_actor_tagAppend a tag to an actor's Tags array. Params: actorLabel, tag (#219)
remove_actor_tagRemove a tag from an actor's Tags array. Params: actorLabel, tag (#219)
set_actor_tagsReplace an actor's Tags array. Params: actorLabel, tags[] (#219)
list_actor_tagsList an actor's Tags. Params: actorLabel (#219)
attach_actorAttach actor as child. Params: childLabel, parentLabel, attachRule? (KeepWorld|KeepRelative|SnapToTarget; default KeepWorld), socketName? (#205)
detach_actorDetach actor from parent. Params: childLabel (#205)
set_actor_mobilitySet actor root component Mobility. Params: actorLabel, mobility (static|stationary|movable) (#205)
get_current_edit_levelRead the active edit-target sub-level (#204)
set_current_edit_levelSet the active edit-target sub-level so subsequent spawns land in it. Params: levelName (e.g. SubLevel_A) (#204)
list_streaming_sublevelsList streaming sub-levels with transform + initially-loaded/visible flags (#206)
add_streaming_sublevelAdd a streaming sub-level. Params: levelPath, streamingClass? (LevelStreamingDynamic|LevelStreamingAlwaysLoaded), location?, initiallyLoaded?, initiallyVisible? (#206)
remove_streaming_sublevelRemove a streaming sub-level. Params: levelName | levelPath (#206)
set_streaming_sublevel_propertiesUpdate sub-level transform/visibility flags. Params: levelName | levelPath, location?, initiallyLoaded?, initiallyVisible?, editorVisible? (#206)
spawn_gridBatch-spawn StaticMeshActors on a grid. Params: staticMesh, min, max (Vec3 bounds), countX?, countY?, countZ?, jitter?, labelPrefix? (#203)
batch_translateTranslate a set of actors by an offset. Params: offset (Vec3), actorLabels[] OR tag (#203)
place_actors_batchBulk-spawn StaticMeshActors with per-instance mesh + transform. Params: actors[]: [(staticMesh, location?, rotation?, scale?, label?)]
line_traceLine trace in the editor world. Returns hit + actorLabel/actorClass/componentName/componentClass/location/impactPoint/normal/distance/faceIndex/boneName/physicalMaterial. Params: start (Vec3), end? (Vec3) OR direction? (Vec3) + distance? (default 200000), ignoreActors? (array of labels) (#420)
snap_actor_to_floorSnap an actor's bounds-bottom to the first downward line-trace hit. Equivalent of the End-key shortcut, works on arbitrary geometry (not just Landscape). Params: actorLabel, floorOffset? (added to impact Z, default 0), maxDistance? (default 100000) (#419)

material

Materials: create, read, parameters, shading, textures, and graph authoring (expression nodes, connections).

ActionDescription
readRead material structure. Params: assetPath
list_parametersList overridable parameters. Params: assetPath
set_parameterSet parameter on MaterialInstance. Params: assetPath, parameterName, parameterType, value
read_instanceRead a MaterialInstanceConstant parent and override summary. Params: assetPath
set_instance_parentSet a MaterialInstanceConstant parent. Params: assetPath, newParentPath (or parentPath)
batch_set_instancesBatch reparent + reassign parameters across many Material Instances in one call. Params: instances[] = [(assetPath, parentPath?, parameters?:[(name, type (scalar|vector|texture), value)])]
clear_instance_parametersClear all MaterialInstanceConstant parameter overrides. Params: assetPath
list_static_switchesList static switch parameters on a Material or MaterialInstance. Params: assetPath
set_static_switchSet a MaterialInstanceConstant static switch parameter. Params: assetPath, parameterName, value, association?, parameterIndex?
set_expression_valueSet a value on an expression node. Common typed knobs: value (constant/param default), texturePath (TextureSample/TextureSampleParameter2D default texture). For any OTHER UPROPERTY on the expression (e.g. SamplerType, SamplerSource, Group), pass propertyName + value to hit the generic reflection setter. Params: materialPath, expressionIndex, value?, texturePath?, propertyName? (#663)
set_custom_expressionRead/write a MaterialExpressionCustom (HLSL) node: code, named inputs[] (rebuilds input pins; wire them with connect_expressions targetInput=<name>), outputType (float1|float2|float3|float4|materialAttributes), description. Omit code/inputs to read. Add the node first via add_expression expressionType=Custom. Params: materialPath, expressionIndex, code?, inputs?, outputType?, description? (#617)
disconnect_propertyDisconnect a material property input. Params: materialPath, property
create_instanceCreate material instance. Params: parentPath, name?, packagePath?
createCreate material. Params: name, packagePath?
create_functionCreate a MaterialFunction asset. Params: name, packagePath? (default /Game/Materials/Functions), description? (#463)
add_function_expressionAdd an expression node to a MaterialFunction graph. Params: functionPath, expressionType (e.g. Constant3Vector, FunctionInput, FunctionOutput, If), positionX?, positionY?, inputName? (for FunctionInput), inputType? (Scalar|Vector2|Vector3|Vector4|Texture2D|TextureCube|StaticBool|MaterialAttributes), outputName? (for FunctionOutput) (#463)
connect_function_expressionsWire two expressions inside a MaterialFunction. Params: functionPath, sourceExpression (name or index), sourceOutput?, targetExpression (name or index), targetInput? (#463)
list_function_expressionsList expression nodes inside a MaterialFunction. Params: functionPath (#463)
create_simpleSingle-call simple material. Params: name, packagePath?, baseColor? ((r,g,b)), metallic?, specular?, roughness?, emissive?, usages?[] (e.g. InstancedStaticMeshes, Nanite, NiagaraSprites)
set_usageSet EMaterialUsage flag(s) on a material. Params: assetPath, usage OR usages[], enabled? (default true)
set_shading_modelSet shading model. Params: assetPath, shadingModel
set_blend_modeSet blend mode. Params: assetPath, blendMode
set_domainSet material domain. Params: assetPath, materialDomain (Surface | DeferredDecal | LightFunction | Volume | PostProcess | UI | RuntimeVirtualTexture)
set_base_colorSet base color. Params: assetPath, color
connect_textureConnect texture to property. Params: materialPath, texturePath, property
add_expressionAdd expression node. Params: materialPath, expressionType, name?, parameterName?, group?, sortPriority?, defaultValue? (scalar number or (r,g,b,a) for vector params), value? (number for Constant, (r,g,b) for Constant3Vector, (x,y) for Constant2Vector), channels? ((r,g,b,a) bools for ComponentMask), positionX?, positionY? (#318)
connect_expressionsWire two expressions. Params: materialPath, sourceExpression, sourceOutput?, targetExpression, targetInput?
connect_to_propertyWire expression to material output. Params: materialPath, expressionName, outputName?, property
list_expressionsList expression nodes. Params: materialPath
delete_expressionRemove expression. Params: materialPath, expressionName
list_expression_typesList available expression types
recompileRecompile material. Pass recompileChildren=true to cascade to every MaterialInstanceConstant whose parent chain reaches this material (#421). Params: materialPath, recompileChildren?
duplicateDuplicate material asset. Params: sourcePath, destinationPath
validateValidate material graph - find orphans, broken refs. Params: assetPath
get_shader_statsShader compile stats, sampler+param counts. Params: assetPath
export_graphExport material graph as JSON. Params: assetPath
import_graphRebuild graph from JSON. Params: assetPath, nodes, propertyConnections?
build_graphBuild graph from spec. Params: assetPath, nodes, propertyConnections?
render_previewRender preview PNG. Params: assetPath, outputPath, width?, height?
begin_transactionBegin undo transaction. Params: label?
end_transactionEnd undo transaction

animation

Animation assets, skeletons, montages, blendspaces, anim blueprints, physics assets.

ActionDescription
read_anim_blueprintRead AnimBP structure. Params: assetPath
read_montageRead montage. Params: assetPath
read_sequenceRead anim sequence. Params: assetPath
scan_animation_tracksScan AnimSequence bone-track counts. Params: directory?, recursive?, assetPaths?, skeletonPath?, targetTrackCount?, includeTrackNames?
read_blendspaceRead blendspace. Params: assetPath
add_blend_sampleAppend a sample to a BlendSpace. Params: assetPath, animation (AnimSequence path), position (x,y) (or flat x,y) (#248)
set_blend_sampleMove an existing BlendSpace sample or swap its animation. Params: assetPath, sampleIndex, position? (x,y) (or flat x,y), animation? (#272)
listList anim assets. Params: directory?, recursive?
create_montageCreate montage. Params: animSequencePath, name?, packagePath?
create_anim_blueprintCreate AnimBP. Params: skeletonPath, name?, packagePath?, parentClass?
create_blendspaceCreate blendspace (2D). Params: skeletonPath, name?, packagePath?, axisHorizontal?, axisVertical?
create_blendspace_1dCreate BlendSpace1D. Params: skeletonPath, name?, packagePath?, axisName? (default Speed), axisMin?, axisMax?, gridNum? (#459)
populate_blendspaceOne-call axis params + samples authoring for BlendSpace 1D/2D. Params: assetPath, axis? ((name?, min?, max?, gridNum?)) for axis 0, blendspaceAxes? (per-axis array), axisHorizontal?/axisVertical? + horizontalMin/horizontalMax/verticalMin/verticalMax/gridNumHorizontal/gridNumVertical (back-compat), samples ([(animationPath, x, y?)]), clearExisting? (default true) (#459)
add_notifyAdd notify. For PlayMontageNotify the notifyName is also written onto the spawned notify object so OnPlayMontageNotifyBegin broadcasts it (not 'None'), and montage branching-point markers refresh (#528). Params: assetPath, notifyName, triggerTime, notifyClass?
remove_notifyRemove notify(s) by name and/or class. Pass at least one of notifyName/notifyClass; both filters AND. Idempotent: alreadyDeleted=true if no match. Params: assetPath, notifyName?, notifyClass? (#471)
get_skeleton_infoRead skeleton. Params: assetPath
list_socketsList sockets. Params: assetPath
list_skeletal_meshesList skeletal meshes. Params: directory?, recursive?
get_physics_assetRead physics asset. Params: assetPath
create_sequenceCreate blank AnimSequence. Params: name, skeletonPath, packagePath?, numFrames?, frameRate?
set_bone_keyframesSet bone transform keyframes. Params: assetPath, boneName, keyframes
bake_keyframes_batchBake per-bone keyframe arrays for many bones into an AnimSequence in one call. Auto-creates each bone track first (set_bone_keyframes silently leaves a T-pose if the track is missing), wraps the batch in one transaction, and raises if any bone fails instead of reporting hollow success (#540). Params: assetPath, tracks ([(bone, keyframes:[(location,rotation(x,y,z,w),scale?)])]), save? (default true)
get_bone_transformsRead reference pose transforms. Params: skeletonPath, boneNames?, space? ('local' default, or 'component' for composed parent-chain transforms - retarget-chain / anatomical-scale work) (#245)
inspect_anim_nodesDeep-dump the FAnimNode_* struct of anim graph nodes (PoseDriver PoseTargets/PoseAsset/RBF params/source bones, etc.) that read_anim_graph omits because it skips the 'Node' property. Params: assetPath, graphName? (default AnimGraph), nodeClass? (substring filter, e.g. 'PoseDriver') (#657)
compare_curves_to_morph_targetsCompare an AnimSequence/PoseAsset's curve names against a SkeletalMesh's morph target names. Returns curves[], morphTargets[], matched[], curvesWithoutMorph[], morphsWithoutCurve[] - verify authored curves drive morphs without Python. Params: animPath (AnimSequence or PoseAsset), skeletalMeshPath (#656)
set_montage_sequenceReplace the animation sequence in a montage slot. With segmentIndex, replaces only that one segment; without it, replaces every segment in the slot. Params: assetPath, animSequencePath, slotIndex? (default 0), segmentIndex? (#626)
set_montage_propertiesSet montage properties. Params: assetPath, sequenceLength?, rateScale?, blendIn?, blendOut?
create_state_machineCreate state machine in AnimBP. Params: assetPath, name?, graphName?
add_stateAdd state to a state machine. Params: assetPath, stateMachineName, stateName
add_transitionAdd directed transition between states. Params: assetPath, stateMachineName, fromState, toState
set_state_animationAssign anim asset to state. Params: assetPath, stateMachineName, stateName, animAssetPath
set_transition_blendSet blend type/duration on transition. Params: assetPath, stateMachineName, fromState, toState, blendDuration?, blendLogic?
set_transition_conditionSet a transition's 'can enter transition' condition from a bool variable, keyed by transition (not graph name - every rule graph is named 'Transition' so blueprint graph tools can only reach the first). Wires VariableGet(bool) -> bCanEnterTransition, replacing any prior condition. Identify the transition by transitionGuid (from add_transition/read_state_machine) OR fromState+toState. Params: assetPath, stateMachineName, variableName (existing bool var), transitionGuid? OR fromState?+toState?, negate? (default false) (#707)
read_state_machineRead state machine topology. Params: assetPath, stateMachineName
read_anim_graphRead AnimBP AnimGraph nodes with properties & pins. Params: assetPath, graphName?
add_curveAdd float curve to AnimSequence. Params: assetPath, curveName, curveType?
set_anim_curve_keysSet float-curve key VALUES on an AnimSequence (add_curve only creates an empty named curve). Adds the curve if missing, then replaces its keys. Use for authoring Distance/Speed/any float curve directly. Params: assetPath, curveName, keys ([(time, value, interp?('linear'|'constant'|'cubic'))]), interpolation? (default 'linear') (#712)
apply_animation_modifierInstantiate a UAnimationModifier subclass and run it on an AnimSequence. Headline use: modifierClass='DistanceCurveModifier' bakes a Distance curve from the clip's root motion for distance matching (bake root motion first). Registers the modifier on the sequence. DistanceCurveModifier ships in the 'Animation Locomotion Library' plugin (off by default). Params: assetPath, modifierClass, props? (e.g. (CurveName, Axis, bStopAtEnd, StopSpeedThreshold, SampleRate)) (#712)
set_montage_slotSet slot name on a montage track. Params: assetPath, slotName, trackIndex?
add_montage_sectionAdd composite section to montage. Params: assetPath, sectionName, startTime?, linkedSection?
create_ik_rigCreate IKRigDefinition asset, optionally with retargetRoot + chains[]. Params: name, skeletalMeshPath, packagePath?, retargetRoot?, chains?: [(name, startBone, endBone, goal?)]
read_ik_rigRead IK Rig chains, solvers, skeleton. Params: assetPath
list_control_rig_variablesList ControlRig variables and hierarchy. Params: assetPath
read_control_rig_hierarchyRead a Control Rig's per-element hierarchy metadata: each element's name, type (Bone|Control|Null|Curve...), index, and parent. Params: assetPath (#619)
set_root_motionSet root motion settings on AnimSequence. Params: assetPath, enableRootMotion?, forceRootLock?, useNormalizedRootMotionScale?, rootMotionRootLock?
add_virtual_boneAdd virtual bone. Params: skeletonPath, sourceBone, targetBone
remove_virtual_boneRemove virtual bone. Params: skeletonPath, virtualBoneName
create_compositeCreate AnimComposite. Params: name, skeletonPath, packagePath?
list_modifiersList applied animation modifiers. Params: assetPath
create_ik_retargeterCreate IKRetargeter asset and (default) initialize the UE 5.7 ops stack: assigns sourceRig+targetRig to all ops, runs AutoMapChains. Returns chainsMapped count. Params: name, packagePath?, sourceRig?, targetRig?, autoMapChains? (default true) (#246)
read_ik_retargeterRead IKRetargeter: source/target rigs and chain mappings. Params: assetPath (#246)
set_ik_rig_meshSet the preview/source skeletal mesh on an EXISTING IK Rig. Params: rigPath, meshPath (#701)
set_ik_retargeter_rigSet the source or target IK Rig on an EXISTING IK Retargeter. Params: retargeterPath, rigPath, side? (source|target, default target) (#703)
auto_align_retarget_poseAuto-align all bones of the source/target retarget pose (chain-to-chain) - fixes a retargeter that outputs a static reference pose. Params: retargeterPath, side? (source|target, default target) (#701)
reset_retarget_poseReset the current retarget pose (all bones) to the reference pose. Params: retargeterPath, side? (source|target, default target) (#701)
batch_retarget_animationsBake a set of source AnimSequences onto the target skeleton through an IK Retargeter (RunBatchRetarget). Params: retargeterPath, sourceMesh, targetMesh, animPaths[], outputPath? (default: alongside source), prefix?, suffix? (default _Retargeted), overwrite? (#701)
set_anim_blueprint_skeletonSet target skeleton on AnimBP. Params: assetPath, skeletonPath
read_bone_trackRead bone transform samples from AnimSequence. Params: assetPath, boneName, frames?: [int]
create_pose_search_databaseCreate a PoseSearchDatabase asset (motion matching). Params: name, packagePath?, schemaPath?
set_pose_search_schemaSet the Schema on an existing PoseSearchDatabase. Params: assetPath, schemaPath
add_pose_search_sequenceAppend an AnimSequence/AnimComposite/AnimMontage/BlendSpace to a PoseSearchDatabase, with optional per-clip flags. Params: assetPath, sequencePath, mirror? ('original'|'mirrored'|'both'), disableReselection?, sampleStart?, sampleEnd?, enabled? (#684)
set_pose_search_clipsAuthor the whole clip list of a PoseSearchDatabase in one call (the 'duplicate a stock PSD, swap its clips' pipeline step). Replaces the list by default. Each clip carries per-entry flags. Params: assetPath, clips ([(sequencePath, mirror? ('original'|'mirrored'|'both'), disableReselection?, sampleStart?, sampleEnd?, enabled?)] - a bare string path also works), clearExisting? (default true)
build_pose_search_indexBuild (or rebuild) the search index. Params: assetPath, wait? (default true)
read_pose_search_databaseInspect a PoseSearchDatabase: schema, animation entries, cost biases, tags. Params: assetPath
set_pose_search_database_settingsTune a PoseSearchDatabase: cost biases, KD-tree neighbours, search mode, PCA components, normalization set. Params: assetPath, continuingPoseCostBias?, baseCostBias?, loopingCostBias?, kdTreeQueryNumNeighbors?, numberOfPrincipalComponents?, poseSearchMode? ('bruteforce'|'pcakdtree'|'vptree'|'eventonly'), normalizationSetPath? (motion matching)
create_pose_search_schemaCreate a PoseSearchSchema (the feature definition a database indexes against). Binds a skeleton (and optional mirror table) and, by default, adds Trajectory+Pose default channels so the schema is immediately buildable. Refine with add_pose_search_schema_*_channel. Params: name, skeletonPath, packagePath?, mirrorDataTablePath?, sampleRate?, addDefaultChannels? (default true) (motion matching)
add_pose_search_schema_pose_channelAdd a Pose feature channel to a schema (samples named bones for velocity/position/rotation/phase). Params: schemaPath, bones ([(bone, flags?:['velocity','position','rotation','phase'], weight?)] - a bare bone-name string defaults to position), weight? (motion matching)
add_pose_search_schema_trajectory_channelAdd a Trajectory feature channel to a schema (past/future motion samples). Params: schemaPath, samples ([(offset (seconds; negative=history, positive=prediction), flags?:['position','velocity','facingDirection','velocityDirection', ...XY variants], weight?)]), weight? (motion matching)
read_pose_search_schemaInspect a PoseSearchSchema: skeleton(s), mirror table, sample rate, feature channels. Params: schemaPath (motion matching)
create_mirror_data_tableCreate a MirrorDataTable for a skeleton (needed for mirrored poses in motion matching / mirror nodes). Auto-derives bone-pair rows from find/replace expressions (defaults to UE mannequin _l/_r suffix swap). Params: name, skeletonPath, packagePath?, expressions? ([(find, replace, method?:'suffix'|'prefix'|'regex')]), mirrorAxis? (motion matching)
read_mirror_data_tableInspect a MirrorDataTable: skeleton and bone-pair rows (name -> mirroredName). Params: assetPath (motion matching)
create_pose_search_normalization_setCreate a PoseSearchNormalizationSet grouping databases so they normalize their cost space together (consistent blending across a locomotion set). Assign it via set_pose_search_database_settings(normalizationSetPath). Params: name, packagePath?, databases? ([PoseSearchDatabase paths]) (motion matching)
add_motion_matching_nodeAdd a Motion Matching node to an AnimBP AnimGraph and point it at a PoseSearchDatabase (the runtime node that searches the database each frame). Connects its output to the Output Pose by default. For chooser-driven database selection, bind an anim-node function that calls SetDatabasesToSearch. Params: assetPath (AnimBP), databasePath, graphName? (default AnimGraph), connectToOutput? (default true), blendTime? (motion matching)
add_pose_history_nodeAdd a Pose History (PoseSearchHistoryCollector) node to an AnimBP AnimGraph - the Motion Matching node needs it in the graph to query pose/trajectory history. Defaults to self-generated trajectory (no external trajectory pin needed) and inserts itself into the pose chain feeding the Output Pose. Params: assetPath (AnimBP), graphName? (default AnimGraph), poseCount?, samplingInterval?, generateTrajectory? (default true), trajectoryHistoryCount?, trajectoryPredictionCount?, insertBeforeOutput? (default true) (motion matching)
set_motion_matching_chooserDrive the Motion Matching node's Database from a ChooserTable so the database is selected at runtime by character state. Wires a thread-safe EvaluateChooser (result typed to PoseSearchDatabase) into the MM node's Database pin. contextSource selects what the chooser reads its columns from: 'self' (default, the anim instance - choosers branching on AnimBP variables) or 'pawn' (the owning pawn via TryGetPawnOwner - choosers branching on character/pawn state). Params: assetPath (AnimBP), chooserPath (ChooserTable), graphName? (default AnimGraph), contextSource? ('self'|'pawn') (motion matching)
add_sequence_evaluatorAdd a Sequence Evaluator node (explicit-time player) to an AnimBP graph - the node distance matching drives by setting its ExplicitTime each frame. graphName can be the top-level AnimGraph or a state's inner graph (pass the state name). Defaults bTeleportToExplicitTime=false so time advances and root motion extracts. Connects to the Output Pose / state result by default. Returns nodeGuid for bind_anim_node_function. Params: assetPath (AnimBP), sequencePath?, graphName? (default AnimGraph), explicitTime?, shouldLoop?, teleportToExplicitTime? (default false), connectToOutput? (default true) (#713)
bind_anim_node_functionBind a thread-safe anim-node function to an anim graph node's update slot - the mechanism distance matching uses to advance a Sequence Evaluator's explicit time (function calls AnimDistanceMatchingLibrary::DistanceMatchToTarget / AdvanceTimeByDistanceMatching). The function must already exist on the AnimBP as a BlueprintThreadSafe function. Identify the node by nodeGuid. Params: assetPath (AnimBP), nodeGuid, functionName, graphName? (default AnimGraph), binding? ('update' (default)|'becomeRelevant'|'initialUpdate') (#713)
set_sequence_propertiesBatch-set properties on AnimSequence assets. If a path is a Montage and resolveFromMontages is true (default), resolves to its first AnimSequence. Params: assetPaths[], properties(enableRootMotion?, forceRootLock?, useNormalizedRootMotionScale?, rootMotionRootLock?), resolveFromMontages?
bake_root_motion_from_boneBake delta translation from a source bone (e.g. pelvis) onto the root bone across the whole sequence; compensates the source bone so world-space position is unchanged. Params: assetPath, sourceBone, rootBone? (default 'root'), axes? (default ['x','y']), interpolation? ('linear'|'per_frame', default 'linear')
get_bone_transformRead a bone or socket transform on a live actor's SkeletalMeshComponent. Wraps GetBoneTransform / GetSocketTransform. Params: actorLabel, boneName (or socket name), componentName? (default: CharacterMesh0 / Mesh / first SK component), world? (auto|pie|game|editor, default auto), space? (world|component|local, default world)
list_bonesList bones in a live actor's SkeletalMeshComponent ref skeleton (name, index, parent). Params: actorLabel, componentName?, world? (auto|pie|game|editor, default auto) (#420)
rebind_leader_poseRe-bind every secondary SkeletalMeshComponent on an actor to a body component (default CharacterMesh0 / Mesh). One-call fix for the 'character explodes after rotating the actor' failure mode. Params: actorLabel, bodyComponent? (#419)
preview_animationToggle bUpdateAnimationInEditor + VisibilityBasedAnimTickOption=AlwaysTickPoseAndRefreshBones on every SkeletalMeshComponent of an actor. Bypasses the 'cannot be edited on templates' guard for level instances. Params: actorLabel, enabled (#419/#420)

landscape

Landscape terrain: info, layers, sculpting, painting, materials, heightmap import.

ActionDescription
get_infoGet landscape setup
list_layersList paint layers
sampleSample height/layers. Params: x, y
list_splinesRead landscape splines
get_componentInspect component. Params: componentIndex
set_materialSet landscape material. Params: materialPath
add_layer_infoRegister paint layer (creates LayerInfo asset + binds to active landscape). Params: layerName, packagePath?, weightBlended?
create_layer_infoStandalone LayerInfo asset creation - no landscape required. Params: layerName, name? (default LI_[layerName]), packagePath? (default /Game/Landscape/LayerInfos), physMaterial? (asset path), hardness? (#251)
createSpawn a new ALandscape with a flat heightmap. Defaults match the Editor's Landscape Mode 'create new' (8x8 components, 63 quads/subsection, 2 subsections/component = 1016x1016 quads). Params: location? (Vec3), scale? (Vec3, default 100,100,100), componentCountX? (default 8), componentCountY? (default 8), subsectionSizeQuads? (one of 7|15|31|63|127|255, default 63), numSubsections? (1|2, default 2), heightOffset? (uint16, default 32768 = mid-elevation), label? (#303)
get_material_usage_summaryPer-proxy summary: landscape/hole material paths + component/grass/nanite counts (#150)
list_proxiesEnumerate loaded World Partition LandscapeStreamingProxy actors with per-proxy worldBounds (origin/extent), plus loadedProxies + parentLandscapes counts. Only loaded proxies appear (unloaded are not spawned) - confirm a proxy is streamed in before trusting a layer/height readback (#733)
find_proxy_atResolve which loaded LandscapeStreamingProxy covers a world X/Y. Returns found/loaded + label, or loaded:false when the covering proxy is streamed out. Params: worldX, worldY (#733)

pcg

Procedural Content Generation: graphs, nodes, connections, execution, volumes.

ActionDescription
list_graphsList PCG graphs. Params: directory?, recursive?
read_graphRead graph structure. Params: assetPath
read_node_settingsRead node settings. Params: assetPath, nodeName
get_componentsList PCG components in level
get_component_detailsInspect PCG component. Params: actorLabel
create_graphCreate graph. Params: name, packagePath?
add_nodeAdd node. Params: assetPath, nodeType, nodeName?
connect_nodesWire nodes. Params: assetPath, sourceNode, sourcePin, targetNode, targetPin
disconnect_nodesRemove a wired edge between two PCG nodes. Params: assetPath, sourceNode, targetNode, sourcePin? (default: any), targetPin? (default: any)
set_node_settingsSet node params. Params: assetPath, nodeName, settings
set_static_mesh_spawner_meshesPopulate weighted MeshEntries on a PCGStaticMeshSpawner node (#145). Params: assetPath, nodeName, entries=[(mesh, weight?)], replace? (default true)
remove_nodeRemove node. Params: assetPath, nodeName
executeRegenerate PCG. Params: actorLabel
force_regenerateForce a stuck PCG component to regenerate (clears graph ref, re-sets, cleanup+generate). Params: actorLabel (#146)
cleanupCleanup a PCG component (remove spawned content). Params: actorLabel, removeComponents? (default true) (#146)
toggle_graphToggle a PCG component's graph assignment to force reinit (no generate). Params: actorLabel, graphPath? (#146)
add_volumePlace PCG volume. Params: graphPath, location?, extent?
import_graphBulk-author a PCG graph from JSON. Params: assetPath, nodes=[(name,class,posX?,posY?,settings?)], connections=[(from,fromPin?,to,toPin?)], replace? (default false)
export_graphExport a PCG graph as JSON. Params: assetPath, includeSettings? (default true)

foliage

Foliage painting, types, sampling, and settings.

ActionDescription
list_typesList foliage types in level
get_settingsRead foliage type settings. Params: foliageTypeName
sampleQuery instances in region. Params: center, radius, foliageType?
create_typeCreate foliage type from mesh. Params: meshPath, name?, packagePath?
set_settingsModify type settings. Params: foliageTypeName, settings

niagara

Niagara VFX: systems, emitters, spawning, parameters, and graph authoring.

ActionDescription
listList Niagara assets. Params: directory?, recursive?
get_infoInspect system. Params: assetPath
spawnSpawn VFX as a transient component (GC's before offscreen capture). For a findable preview use spawn_actor. Params: systemPath, location, rotation?, label?
spawn_actorSpawn a PERSISTENT, labeled NiagaraActor in the editor world (findable, re-activatable, survives capture - unlike spawn). Assigns the system and activates. Params: systemPath, location?, rotation?, label?, activate? (default true) (#537)
reactivateReset + reactivate the NiagaraComponent on a placed actor (replay a burst before capturing). Params: actorLabel (#537)
set_parameterSet parameter. Params: actorLabel, parameterName, value, parameterType?
createCreate system. Params: name, packagePath?
create_emitterCreate Niagara emitter. Params: name, packagePath?, templatePath?
add_emitterAdd emitter to system. Params: systemPath, emitterPath
list_emittersList emitters in system. Params: systemPath
set_emitter_propertySet emitter property. Params: systemPath, emitterName?, propertyName, value
list_modulesList Niagara modules. Params: directory?
get_emitter_infoInspect emitter. Params: assetPath
list_renderersList renderers on an emitter. Params: systemPath, emitterName?, emitterIndex?
add_rendererAdd renderer (sprite/mesh/ribbon or full class). Params: systemPath, rendererType, emitterName?, emitterIndex?
remove_rendererRemove renderer by index. Params: systemPath, rendererIndex, emitterName?, emitterIndex?
set_renderer_propertySet renderer bool/number/string property. Params: systemPath, rendererIndex, propertyName, value, emitterName?, emitterIndex?
inspect_data_interfacesList user-scope data interfaces. Params: systemPath
create_system_from_specDeclaratively create a system + emitters. Params: name, packagePath?, emitters?:[(path)]
get_compiled_hlslRead GPU compute script info for an emitter. Params: systemPath, emitterName?, emitterIndex?
list_system_parametersList user-exposed system parameters. Params: systemPath
list_module_inputsList modules + their input pins for an emitter. Params: systemPath, emitterName?, emitterIndex?, stackContext? (ParticleSpawn|ParticleUpdate|EmitterSpawn|EmitterUpdate|all - default all)
set_module_inputSet literal default on a module input pin. Params: systemPath, moduleName, inputName, value, emitterName?, emitterIndex?, stackContext?
list_static_switchesList static switch inputs on a module. Params: systemPath, moduleName, emitterName?, emitterIndex?, stackContext?
set_static_switchSet static switch value on a module's function call node. Params: systemPath, moduleName, switchName, value, emitterName?, emitterIndex?, stackContext?
create_module_from_hlslCreate a NiagaraScript module backed by a custom HLSL node. Params: name, hlsl, packagePath?, inputs?:[(name,type)], outputs?:[(name,type)]
create_scratch_moduleCreate empty Niagara scratch module. Params: name, packagePath?, inputs?:[(name,type)], outputs?:[(name,type)] (#185)
batchRun a sequence of niagara operations against the bridge in order. Fails fast on the first error (returns results up to that point + error). Params: ops:[(action, params)] where action is any niagara subaction listed above

audio

Audio: the full UE5 audio stack authored end-to-end - sound assets, playback, MetaSound + SoundCue graph authoring, submixes and effect chains, sound classes/mixes, concurrency, attenuation, and spatialization. Nothing here creates an empty placeholder; every asset is authorable to a working state.

Assets and playback

ActionDescription
listList sound assets (SoundWave, SoundCue, MetaSoundSource) under a directory, paginated. Params: directory? (default /Game), recursive? (default true), maxResults? (default 1000), offset? (default 0). Returns assets, count, total, offset, hasMore, nextOffset.
extract_pcmDecode a USoundWave's imported audio to in-memory PCM (no intermediate file) for semantic sound search / analysis. Returns sampleRate, numChannels, numFrames, durationSeconds, and 16-bit PCM base64 (interleaved). Params: soundPath, maxSeconds? (cap the decoded window), downmixMono? (default false)
import_audioImport a WAV/OGG/FLAC file as a USoundWave. Returns durationSeconds, numChannels, looping. Params: filePath, name?, packagePath? (default /Game/Audio), looping?, replaceExisting? (default true)
play_at_locationPlay a sound in the editor world. Params: soundPath, location, volumeMultiplier?, pitchMultiplier?
spawn_ambientPlace an AmbientSound actor. Params: soundPath, location, label?

MetaSound graph authoring

Prefer metasound_author - it stamps a whole graph in one call. The granular actions are for incremental edits to a graph created with create_metasound in the same editor session.

ActionDescription
metasound_authorOne-shot: stamp a whole MetaSound graph from a declarative spec. Params: name, packagePath?, format? (mono|stereo), oneShot?, inputs? [(name,dataType,default?)], outputs? [(name,dataType)], nodes? [(id,class,namespace?,variant?,majorVersion?,inputs?)], connections? [(from,to)]. Connection endpoints are nodeId:vertex, or the special heads input:[name], output:[name], audioOut:[channel]. Each element reports its own ok/error; builds and saves at the end.
create_metasoundCreate an empty MetaSoundSource and open a builder session for incremental authoring. Params: name, packagePath? (default /Game/Audio/MetaSounds), format?, oneShot?
metasound_add_nodeAdd a node by registered class name. Params: assetPath, nodeClassName, nodeNamespace? (default UE), nodeVariant?, majorVersion?
metasound_add_input / metasound_add_outputAdd a graph input/output. Params: assetPath, name, dataType, defaultValue?
metasound_connectConnect node output vertex to node input vertex. Params: assetPath, fromNodeId, fromOutput, toNodeId, toInput
metasound_connect_input / metasound_connect_output / metasound_connect_audio_outConnect a graph input to a node, a node to a graph output, or a node to the source audio output (channel?).
metasound_set_defaultSet a default on a node input or graph input. Params: assetPath, value, dataType?, (nodeId + inputName) or graphInput
metasound_buildWrite the builder document to the asset and save. Params: assetPath
metasound_list_node_classesList common MetaSound node classes to add. Params: filter?
metasound_get_graphReport a MetaSound's builder-session state. Params: assetPath

SoundCue graph authoring

ActionDescription
cue_authorOne-shot: create a SoundCue and stamp its whole node tree. Params: name, packagePath?, nodes [(id,type,soundWavePath?,properties?)], connections [(parent,child,index?)] (omit parent => root), root?. Node types: wave_player, mixer, random, modulator, attenuation, looping, concatenator, delay, switch.
create_cueCreate a SoundCue, optionally seeded from a wave. Params: name, packagePath?, soundWavePath?
cue_add_nodeAdd a node to a cue graph. Params: cuePath, nodeType, soundWavePath?, properties?
cue_connectConnect a node as a child of another (or as root). Params: cuePath, parentNodeId?, childNodeId, childIndex?
cue_get_graphRead a cue node graph. Params: cuePath

Mixing, routing, and spatialization

ActionDescription
create_submixCreate a USoundSubmix, optionally parented. Params: name, packagePath?, parentPath?, outputVolume?, wetLevel?, dryLevel?
set_submix_parentReparent a submix. Params: submixPath, parentPath (empty detaches)
add_submix_effectAppend an effect preset to a submix's chain (creates the preset). Params: submixPath, effectType (reverb|eq|dynamics|filter|delay), name?, packagePath?, settings?
create_sound_classCreate a USoundClass. Params: name, packagePath?, parentPath?, properties?
create_sound_mixCreate a USoundMix with class adjusters. Params: name, packagePath?, adjusters? [(soundClassPath, volumeAdjuster?, pitchAdjuster?, applyToChildren?)], fadeInTime?, fadeOutTime?
create_concurrencyCreate a USoundConcurrency. Params: name, packagePath?, maxCount?, limitToOwner?, resolutionRule?, volumeScale?
create_attenuationCreate a USoundAttenuation. Params: name, packagePath?, settings?, falloffDistance?, spatialize?, enableOcclusion?
set_sound_submixSet a sound's base submix. Params: soundPath, submixPath
add_sound_submix_sendAdd a submix send to a sound. Params: soundPath, submixPath, sendLevel?
set_sound_classAssign a sound class. Params: soundPath, soundClassPath
set_sound_attenuationAttach an attenuation asset. Params: soundPath, attenuationPath
set_sound_concurrencyAttach a concurrency asset. Params: soundPath, concurrencyPath
set_propertySet any UPROPERTY on an audio asset (dotted path, nested structs/arrays/object refs). Params: assetPath, propertyName, value

Example - a one-call sine synth routed through a music submix:

audio(action="metasound_author",
  name="Hum", packagePath="/Game/Audio/MetaSounds", format="mono", oneShot=false,
  nodes=[{ "id": "osc", "class": "Sine", "variant": "Audio", "inputs": { "Frequency": 220.0 } }],
  connections=[{ "from": "osc:Audio", "to": "audioOut:0" }])

audio(action="create_submix", name="Music", packagePath="/Game/Audio/Submixes")
audio(action="add_submix_effect", submixPath="/Game/Audio/Submixes/Music.Music", effectType="reverb")
audio(action="set_sound_submix", soundPath="/Game/Audio/MetaSounds/Hum.Hum", submixPath="/Game/Audio/Submixes/Music.Music")

widget

UMG Widget Blueprints, Editor Utility Widgets, and Editor Utility Blueprints.

ActionDescription
read_treeRead widget hierarchy. Params: assetPath
get_detailsInspect widget (curated subset). Params: assetPath, widgetName
get_propertiesFull reflected property dump for a widget - every UPROPERTY (RenderOpacity, Visibility, ColorAndOpacity, Border padding/colors, Image brush TintColor/ImageSize, fonts, etc.) plus the slot block, for diagnosing visual bugs get_details omits. Pass includeSubtree to also dump children (#547). Params: assetPath, widgetName, includeSubtree?
list_bindingsList designer property bindings on a WidgetBlueprint (the UE 5.7 Python API keeps them protected). Returns {widgetName, propertyName, functionName, bindingType}. Optional filterWidgetName/filterProperty (#530). Params: assetPath, filterWidgetName?, filterProperty?
clear_bindingRemove designer binding(s) matching widgetName (and optional propertyName) from a WidgetBlueprint without opening the editor. Idempotent (#530). Params: assetPath, widgetName, propertyName?
set_propertySet widget property. Slot struct props take UE struct text that persists every field - Slot.Size=(Value=1.0,SizeRule=Fill), Slot.Padding=(Left=8,Top=8,Right=8,Bottom=8) - or a nested field path like Slot.Size.Value / Slot.Padding.Left; an invalid value errors instead of silently writing 0 (#532). Params: assetPath, widgetName, propertyName, value
set_styleSet a full/nested style struct on a widget from JSON (FButtonStyle, FEditableTextBoxStyle, FSlateFontInfo, FSlateColor and their nested brushes) - what set_property's scalar path can't express. value is a JSON object mirroring the struct. Params: assetPath, widgetName, propertyName (e.g. WidgetStyle), value (#563)
reorder_childReorder a widget among its parent panel's children (move to a sibling index) - e.g. insert a new row BETWEEN two existing children. move_widget only reparents. Params: assetPath, widgetName, index (#635)
bulk_set_propertiesApply many {widgetName, propertyName, value} style/property writes to a WidgetBlueprint in one call (single compile+save) - font/color/style stylesheet across many widgets. Params: assetPath, properties[] (#563)
listList Widget BPs. Params: directory?, recursive?
read_animationsRead UMG animations. Params: assetPath
createCreate Widget BP. Params: name, packagePath?, parentClass?
create_utility_widgetCreate editor utility widget. Params: name, packagePath?
run_utility_widgetOpen editor utility widget. Params: assetPath
create_utility_blueprintCreate editor utility blueprint. Params: name, packagePath?
run_utility_blueprintRun editor utility blueprint. Params: assetPath
add_widgetAdd widget to widget tree. Params: assetPath, widgetClass, widgetName?, parentWidgetName?
remove_widgetRemove widget from tree. Params: assetPath, widgetName
move_widgetReparent widget. Params: assetPath, widgetName, newParentWidgetName
set_rootReplace WBP root with an existing widget by name (#365). Params: assetPath, widgetName
wrap_rootWrap the current root in a new panel widget (UMG 'Wrap With'). Params: assetPath, wrapperClass (must be a UPanelWidget subclass), wrapperName? (#365)
list_classesList available widget classes
list_runtime(#160) List live UUserWidget instances in the PIE world. Params: classFilter?, namePrefix?, viewportOnly?
get_runtime(#160) Inspect a live PIE widget tree with text/visibility/brush/percent plus style values: renderOpacity (all), colorAndOpacity (TextBlock/Image), Border brushColor/contentColorAndOpacity (#592). Params: widgetName? | className?, childName?, maxDepth?
get_runtime_delegates(#161) Read delegate binding state on a live PIE widget. Params: widgetName, className?
add_to_viewport(#602) Instantiate a WidgetBlueprint and add it to the live PIE viewport for visual verification. Requires PIE running. Params: assetPath (WidgetBlueprint path), zOrder?
invoke_runtime_function(#559) Fire a UI interaction on a live PIE widget: a parameterless UFUNCTION (functionName) on the located UserWidget, OR a button click via childName (broadcasts the child UButton's OnClicked). Locate the widget with widgetName or className. Params: widgetName?|className?, functionName?, childName?

editor

Editor commands, Python execution, PIE, undo/redo, hot reload, viewport, performance, sequencer, build pipeline, logs, editor control.

ActionDescription
start_editorLaunch Unreal Editor with the current project and reconnect bridge
stop_editorClose Unreal Editor gracefully
restart_editorStop then start the editor
build_projectBuild the project's C++ code using Unreal Build Tool. Editor should be stopped first
execute_commandRun console command. Params: command
execute_pythonGATED LAST RESORT. execute_python is unreachable until a semantic tool search over your taskSummary has been run AND every candidate it returns is EXPLICITLY ruled out with a stated reason. Flow: (1) call with taskSummary (+code) - it returns the candidate actions; (2) re-call with the same taskSummary/code PLUS ruledOut=[{action, reason}] giving a specific reason each candidate does not fit. Python runs only once every candidate is ruled out. Params: code, taskSummary (required), ruledOut?, resultVariable? (name of a top-level variable to return as result, separate from print()/log; #732) (#704)
run_python_fileRun a Python file from disk with file/name populated (#142). Params: filePath, args?, resultVariable? (return a named top-level variable as result, separate from logs; #732)
purge_python_modulesPurge cached embedded-Python modules whose name starts with a prefix, so the editor drops stale code after you edit a Python tool on disk. Returns the purged names + count. Params: prefix (required, non-empty) (#719)
set_propertySet UObject property. Saves the package to disk by default; pass save=false to leave it dirty in-memory (batch many writes, then editor(save_dirty)/asset(save)) (#674). Params: objectPath, propertyName, value, save? (default true)
get_propertyRead UObject property. Params: objectPath, propertyName
describe_objectDescribe a UObject and optionally list/read properties. Params: objectPath, includeProperties?, includeValues?, propertyNames?
play_in_editorPIE control. Params: pieAction (start|stop|status), waitForAssetRegistry? (start only; default true - block until the AssetRegistry initial scan completes before requesting PIE, otherwise PIE silently no-ops on cold editor starts), assetRegistryTimeoutSeconds? (default 180) (#406)
get_runtime_valueRead PIE actor property. Params: actorLabel, propertyName (supports dotted paths: component.field or component.struct.field for nested reads on component subobjects, #344/#381)
get_pie_pawnResolve the controlled pawn in the active PIE world. Params: playerIndex? (default 0)
invoke_functionCall a BlueprintCallable / Exec UFUNCTION on a target actor or one of its components. Params: actorLabel, functionName, component? (component subobject name; redirects target from the actor to that component, #382), args? (object), actorArgs? (object mapping UObject* parameter name to actor label, resolved against live actors in the active world; #383), world? (editor|pie)
invoke_static_functionCall a static UFUNCTION on a UBlueprintFunctionLibrary (no actor instance). invoke_function needs an actor/component target; this targets the library class CDO instead, so it reaches static *_BlueprintOnly libraries (Voxel sculpt/query/stamp), GeometryScript, Kismet math, any function library. Params: className (short name or /Script/Module.Class path), functionName, args? (name -> JSON value, same marshalling as invoke_function), actorArgs? (name -> actor label for UObject* params that are actors, e.g. the sculpt actor), worldContextParam? (name of a UObject* param to fill with the editor/PIE world; auto-detected for params named WorldContextObject), world? (editor|pie)
list_function_librariesEnumerate UBlueprintFunctionLibrary subclasses on this build. Filter by name (case-insensitive substring, e.g. 'GeometryScript' / 'Kismet' / 'Animation'). Returns name, module, and (by default) every static BlueprintCallable function on the library with its tooltip. Use to discover what's available for editor.invoke_function (#455). Params: pattern?, includeFunctions?
set_pie_time_scaleFast-forward PIE game time. Params: factor (>0)
hot_reloadHot reload C++
undoUndo last transaction
redoRedo last transaction
get_perf_statsEditor performance stats
run_statRun a stat overlay. A bare name (e.g. 'unit','fps','game','gpu') is prefixed with 'stat '; or pass a full command. Params: name? OR command? (#722)
set_scalabilitySet rendering quality via the Scalability system (actually applies + persists, not just sg.* cvars). Params: level (Low|Medium|High|Epic|Cinematic)
set_cvarsBulk-set console variables. Params: cvars ((name: value) object OR [(name, value)] array)
capture_screenshotScreenshot. target=pie captures the actual PIE game viewport with UI + on-screen debug canvas (what the player sees), even in Play-in-New-Window; target=editor captures the level viewport; target=window synchronously captures the whole active Slate window (pixel-true for ALL Slate/UMG UI, works unfocused/off-screen — the reliable mode for agent visual QA of game UI). Returns includesDebugCanvas, and window title + width/height for target=window. Params: filename?, resolution?, target? (auto|pie|editor|window; auto routes to PIE when running) (#226/#724)
capture_scene_pngHeadless PNG screenshot via SceneCapture2D (works unfocused, guaranteed RGBA8 LDR). focusActorLabel auto-frames the camera on an actor's bounds; world:pie captures the running game world (#599). Params: outputPath, location?, rotation?, focusActorLabel?, focusDirection?, focusMargin?, world? (editor|pie), width? (default 1280), height? (default 720), fov? (default 90) (#148/#599)
set_realtimeToggle realtime update on the level editor viewports so the editor-world sim (Niagara, anims) ticks - otherwise capture_scene_png renders an unticked, empty sim. Params: enabled (default true) (#537)
get_viewportGet viewport camera
hit_test_viewport_pixelRay-cast from a screen pixel through the active editor viewport and return the first hit. Builds the ray from the live viewport's projection matrix (no FOV/aspect guessing). Returns hit + actorLabel/actorClass/componentName/componentClass/materialPath/location/impactPoint/normal/distance/faceIndex/boneName/physicalMaterial. Params: x, y (pixel coords), width? height? (override viewport size when picking from a different-resolution screenshot), maxDistance? (default 200000), ignoreActors? (array of actor labels) (#418)
get_runtime_valuesBulk runtime read across the active world. For each actor/component matching classFilter, resolves every path against the (actor|component) root and returns rows of {actorLabel, actorClass, componentName?, componentClass?, values, errors?}. Paths support property hops, sub-object hops, and zero-arg BlueprintCallable getter calls at any segment (e.g. 'PowerConnector.GetRequired' reaches a UFUNCTION on a UObject sub-object). classFilter matches actor class OR component class - omit to match everything. World defaults to PIE if running, else editor. Params: classFilter?, paths[], world? (editor|pie) (#414)
set_viewportSet viewport camera. Params: location?, rotation?
focus_on_actorFocus on actor. Params: actorLabel
create_sequenceCreate Level Sequence. Params: name, packagePath?
close_sequenceClose the currently open Level Sequence editor (Sequencer) before bulk-deleting actors a sequence may possess. Returns wasOpen + closedSequence (#718)
open_tabOpen a registered editor tab by ID so its UI can be screenshotted (e.g. 'ProjectSettings', 'OutputLog'). Params: tabId (#727)
open_settingsOpen (and navigate) a settings viewer for visual settings evidence. Params: container? (Project|Editor; default Project), category? (e.g. Engine), section? (e.g. Physics, or a combined Engine.Physics) (#727)
get_sequence_infoRead sequence: bindings (possessable/spawnable) with their Sequencer tags (#556), tracks, and optional section detail. Params: assetPath, includeSectionDetails? (attach sockets, first transform key values per track)
add_sequence_trackAdd an empty track. Params: assetPath, trackType, actorLabel?
add_sequence_sectionAdd a section to a track (creating the track if needed), set its start/end in seconds, and for a CameraCut track bind it to a camera. Returns the section index + channel names to key. Params: sequencePath, trackType (Transform|Float|Fade|CameraCut|Audio|Event|SkeletalAnimation), actorLabel? (binding scope), startSeconds?, endSeconds?, cameraActorLabel? (#548)
set_sequence_keyframesAdd keyframes to a section channel. Transform channels: Location.X/Y/Z, Rotation.X/Y/Z (or friendly x/y/z, yaw/pitch/roll); Fade/Float: the float channel. Params: sequencePath, trackType, actorLabel?, sectionIndex? (default 0), channel, keyframes ([(seconds, value)]), interpolation? (cubic|linear) (#548)
set_sequence_playback_rangeSet a Level Sequence's playback range in seconds. Params: sequencePath, startSeconds, endSeconds (#548)
play_sequencePlay/stop/pause sequence. Params: assetPath, sequenceAction
build_allBuild all (geometry, lighting, paths, HLOD)
build_geometryRebuild BSP geometry
build_hlodBuild HLODs
validate_assetsRun data validation. Params: directory?
get_build_statusGet build/map status
cook_contentCook content. Params: platform?
get_logRead output log. Params: maxLines?, filter?, category?
search_logSearch log. Params: query
get_message_logRead message log. Params: logName?
list_crashesList crash reports
get_crash_infoGet crash details. Params: crashFolder
check_for_crashesCheck for recent crashes
set_dialog_policyAuto-respond to dialogs matching a pattern. Params: pattern, response
clear_dialog_policyClear dialog policies. Params: pattern?
get_dialog_policyGet current dialog policies
list_dialogsList active modal dialogs
respond_to_dialogClick a button on the active modal dialog. Params: buttonIndex?, buttonLabel?
open_assetOpen asset in its editor. Params: assetPath
reload_bridgeHot-reload Python bridge handlers from disk
save_dirtyFlush every dirty package and return a per-package saved/failed map. Use after multi-step CDO/component edits when set_class_default leaves the asset dirty without persisting (#378). Params: includeMaps? (default true), includeContent? (default true)
configure_pieSet ULevelEditorPlaySettings - multi-client PIE, net mode, single-process flag, Play-in-New-Window resolution. Params: numClients?, netMode? (standalone|listen|client), runUnderOneProcess?, launchSeparateServer?, newWindowWidth?, newWindowHeight? (#384/#671)
get_pie_configRead current ULevelEditorPlaySettings (numClients, netMode, single-process, separate-server) (#384)
pie_set_player_viewPoint the running PIE player's view (control rotation) at a pitch/yaw/roll so a capture frames the intended direction. Requires PIE. Params: pitch?, yaw?, roll? (#671)
stage_game_inputStage input for the running game: set input mode (gameOnly|gameAndUI|uiOnly) and mouse cursor so injected/simulated input reaches the pawn. Requires PIE. Params: inputMode? (default gameOnly), showMouseCursor? (#671)
run_automation_testsHeadlessly run registered Automation tests whose name matches a filter and report pass/fail + error messages (non-latent tests run fully; latent commands are flushed best-effort). Params: filter? (name substring, empty = all), maxTests? (default 50) (#693)
invoke_function_repeatingFire a parameterless UFUNCTION on an actor repeatedly at an interval for sustained on-demand triggering (human visual verification). Returns immediately; the remaining calls run in the background. Params: actorLabel, functionName, count? (default 5), intervalSeconds? (default 1.0), world? (editor|pie|auto) (#583)
list_dirty_packagesEnumerate currently-dirty content + map packages (#340)

reflection

UE reflection: classes, structs, enums, gameplay tags.

ActionDescription
reflect_classReflect UClass. Params: className, includeInherited?
reflect_structReflect UScriptStruct. Params: structName
reflect_enumReflect UEnum. Params: enumName
list_classesList classes. Params: parentFilter?, limit?
list_tagsList gameplay tags. Params: filter?
create_tagCreate gameplay tag. Params: tag, comment?
create_enumCreate UUserDefinedEnum asset, optionally seeded with entries. Params: name, packagePath?, entries?: (string|(name, displayName?))[], onConflict? (#274)
set_enum_entriesReplace entries on an existing UUserDefinedEnum. Params: assetPath, entries[] (#274)
is_class_loadedReport whether a UClass is currently loaded in the editor (loaded), whether it exists/is loadable (exists), and its owning module + that module's load state. Distinguishes 'not loaded yet' from 'does not exist'. Params: className (short name, /Script/[Module].[Class], or BP class path) (#689)
is_module_loadedReport whether a named module is currently loaded. Params: moduleName (#689)
list_loaded_modulesEnumerate modules with runtime load state. Params: filter? (case-insensitive substring), loadedOnly? (default false)

gameplay

Gameplay systems: physics, collision, navigation, input, behavior trees, AI (EQS, perception, State Trees, Smart Objects), game framework.

ActionDescription
set_collision_profileSet collision preset. Params: actorLabel, profileName
set_simulate_physicsToggle physics. Accepts simulate (or legacy enabled); errors explicitly when neither is given. Params: actorLabel, simulate (#721)
add_impulseApply an impulse (or force with mode='force') to a (PIE) actor's simulating physics body so its motion can be observed over time - loop level(read_actor_motion) to sample the response. Params: actorLabel, impulse (x,y,z) (or force/vector), mode? (impulse|force), componentName?, boneName?, location? (apply at world point), velChange?/accelChange?, world? (editor|pie|auto) (#676)
set_collision_enabledSet collision mode. Params: actorLabel, collisionEnabled
set_collisionUnified collision authoring for a placed actor (actorLabel) or a Blueprint component template (assetPath+componentName). Apply any of: collisionProfile, collisionEnabled (NoCollision|QueryOnly|PhysicsOnly|QueryAndPhysics), objectType (channel name), responseToAllChannels (Block|Overlap|Ignore), responses ({channel: Block|Overlap|Ignore}). Profile is applied first, then overrides. componentName optional for actors (defaults to all primitive components), required for Blueprint templates (#545)
set_physics_propertiesSet mass/damping/gravity. Params: actorLabel, mass?, linearDamping?, angularDamping?, enableGravity?
rebuild_navigationRebuild navmesh
find_nav_pathSynchronous nav-path query between two world points. Returns valid/partial/length plus the polyline. The standard 'why doesn't my AI move?' diagnostic. Params: start (Vec3), end (Vec3), pathfindingContext? (actorLabel - uses its agent + filter) (#424)
list_nav_invokersEnumerate actors carrying a NavigationInvokerComponent + their tile generation/removal radii. Diagnoses 'no navmesh in this region' caused by missing or mis-sized invokers (#424)
get_navmesh_infoQuery nav system
project_to_navProject point to navmesh. Params: location, extent?
spawn_nav_modifierPlace nav modifier. Params: location, extent?, areaClass?
create_input_actionCreate InputAction. Params: name, packagePath?, valueType?
create_input_mappingCreate InputMappingContext. Params: name, packagePath?
list_input_assetsList input assets. Params: directory?, recursive?
read_imcRead InputMappingContext mappings. Params: imcPath
get_applied_imcsRead a live PIE player's currently-applied Input Mapping Contexts (with priority + registrationCount). Requires PIE running. Params: playerIndex? (default 0) (#604)
list_input_mappingsAlias for read_imc. List key→action bindings with triggers/modifiers. Params: imcPath
add_imc_mappingAdd key mapping to IMC. Params: imcPath, inputActionPath, key
set_mapping_modifiersSet modifiers/triggers on an IMC mapping. Each modifier OR trigger is either {type:'<ShortName>', <prop>:<val>} or {class:'/Script/Module.Class', properties:{...}} - the class form resolves any custom UInputModifier/UInputTrigger subclass (e.g. type:'Hold' with HoldTimeThreshold). Unresolvable trigger specs are reported in failedTriggers and never leave a null entry (#649/#725). Params: imcPath, mappingIndex?, modifiers?, triggers?
remove_imc_mappingRemove an IMC mapping. Params: imcPath, mappingIndex? | (inputActionPath? + key?) (#158)
set_imc_mapping_keyRebind an IMC mapping to a new key. Params: imcPath, newKey, mappingIndex? | key? | inputActionPath? (#158)
set_imc_mapping_actionRetarget an IMC mapping to a different InputAction. Params: imcPath, newInputActionPath, mappingIndex? | key? | inputActionPath? (#158)
list_behavior_treesList behavior trees. Params: directory?, recursive?
get_behavior_tree_infoInspect behavior tree (top-level + blackboard). Params: assetPath
read_behavior_tree_graphWalk BT tree: composites, tasks, decorators, services with blackboard keys. Params: assetPath
create_blackboardCreate Blackboard. Params: name, packagePath?
add_blackboard_keyAdd a typed key to a Blackboard asset. Params: blackboardPath, keyName, keyType (Bool|Int|Float|String|Name|Vector|Rotator|Object|Class|Enum), baseClass? (for Object/Class types; e.g. /Script/Engine.Actor) (#250)
remove_blackboard_keyRemove a key from a Blackboard asset by name. Idempotent. Params: blackboardPath, keyName (#469)
set_blackboard_parentSet Parent on a BlackboardData asset (canonical UE child-of-parent pattern). Pass parentPath="None" or omit to clear. autoPruneDuplicateKeys (default true) removes own-keys that the parent chain already defines so the BT compiler accepts the child (#469)
read_blackboardRead a Blackboard asset: parent path, ownKeys, inheritedKeys (walks the parent chain). Params: blackboardPath (#469)
list_bt_node_classesEnumerate every concrete BehaviorTree node class on this build (composites, tasks, decorators, services). Filter by kind to narrow. Useful for discovering plugin-supplied decorator/task classes without grepping engine + plugin source. Params: kind? ('composite'|'task'|'decorator'|'service') (#494)
set_behavior_tree_blackboardRebind a BehaviorTree asset's BlackboardAsset reference. Params: behaviorTreePath, blackboardPath
create_behavior_treeCreate behavior tree. Params: name, packagePath?, blackboardPath?
create_eqs_queryCreate EQS query. Params: name, packagePath?
list_eqs_queriesList EQS queries. Params: directory?
add_perceptionAdd AIPerceptionComponent. Params: blueprintPath, senses?
configure_senseAdd + configure an AI perception sense config on the blueprint's AIPerceptionComponent. Params: blueprintPath, senseType (Sight|Hearing|Damage|Touch|Team|Prediction|Blueprint), settings? ((SightRadius: ...)), componentName?
get_state_tree_runtimeRead a running StateTreeComponent's active state names in PIE (the 'brain' state). Params: actorLabel, world? (default pie), componentName? (#654)
create_state_treeCreate a StateTree with a proper UStateTreeEditorData (schema + root state), so states/tasks are authorable via statetree(*) and persist across save/load (#653). Params: name, packagePath?, schema? (default /Script/GameplayStateTreeModule.StateTreeComponentSchema)
list_state_treesList StateTrees. Params: directory?
add_state_tree_componentAdd StateTreeComponent. Params: blueprintPath
create_smart_object_defCreate SmartObjectDefinition. Params: name, packagePath?
add_smart_object_componentAdd SmartObjectComponent. Params: blueprintPath
add_smart_object_slotAppend a FSmartObjectSlotDefinition to a SmartObjectDefinition's Slots array. Params: assetPath, name?, offset? ((x,y,z)), rotation? ((pitch,yaw,roll)), tags? (array)
set_smart_object_slotMutate an existing slot's offset/rotation/tags. Params: assetPath, slotIndex, offset? ((x,y,z)), rotation? ((pitch,yaw,roll)), tags? (array)
remove_smart_object_slotRemove a slot by index. Idempotent: out-of-range returns alreadyDeleted=true. Params: assetPath, slotIndex (#416)
list_smart_object_slotsList slots on a SmartObjectDefinition with index, offset, rotation, and raw text. Params: assetPath (#416)
add_smart_object_slot_behaviorAttach a behavior definition (UBehaviorDefinition asset or class) to a slot's BehaviorDefinitions array. Pass instanceProperties to seed UPROPERTYs on a freshly-spawned class-instance. Params: assetPath, slotIndex, behaviorClass (asset path or class path), instanceProperties? (#416)
create_game_modeCreate GameMode BP. Params: name, packagePath?, parentClass?, defaults?
create_game_stateCreate GameState BP. Params: name, packagePath?, parentClass?
create_player_controllerCreate PlayerController BP. Params: name, packagePath?, parentClass?
create_player_stateCreate PlayerState BP. Params: name, packagePath?
create_hudCreate HUD BP. Params: name, packagePath?
set_world_game_modeSet level GameMode override. Params: gameModeClass (or legacy gameModePath)
get_framework_infoGet level framework classes
get_navmesh_detailsRead RecastNavMesh generation params (cellSize, agentHeight, maxStepHeight, etc.) (#163)

gas

Gameplay Ability System: abilities, effects, attribute sets, cues.

ActionDescription
add_ascAdd AbilitySystemComponent. Params: blueprintPath, componentName?
create_attribute_setCreate AttributeSet BP. Params: name, packagePath?
add_attributeAdd attribute to set. Params: attributeSetPath, attributeName, defaultValue?
create_abilityCreate GameplayAbility BP. Params: name, packagePath?, parentClass?
set_ability_tagsSet tags on ability. Params: abilityPath, ability_tags?, cancel_abilities_with_tag?, activation_required_tags?, activation_blocked_tags?
create_effectCreate GameplayEffect BP. Params: name, packagePath?, durationPolicy?
set_effect_modifierAdd modifier. Params: effectPath, attribute, operation?, magnitude?
create_cueCreate GameplayCue. Params: name, packagePath?, cueType?
get_infoInspect GAS setup. Params: blueprintPath
set_asc_defaultsWire an AttributeSet onto a Blueprint's ASC component (DefaultStartingData) so attributes exist at runtime. Params: blueprintPath, attributeSet (content path or class name), componentName?, initDataTable? (starting values)
apply_effectApply a GameplayEffect to a live actor's ASC (agnostic stat/damage stimulus - uses the game's own effect). Params: actorLabel, effectClass (content path or class name), level?, setByCaller? ((tag-or-name: magnitude)), world? (auto|pie|editor, default auto)
set_attributeSet a gameplay attribute's base value on a live actor's ASC (recalculates CurrentValue through the aggregator). Params: actorLabel, attribute (Health | SetName.Health), value, world?
get_attributeRead gameplay attribute base + current values on a live actor's ASC. Omit attribute to list all. Params: actorLabel, attribute?, world?
init_ascInitialize a live actor's ASC (InitAbilityActorInfo) and optionally instantiate an AttributeSet so attributes are live - the runtime setup step for testing a bridge-authored GAS actor. Params: actorLabel, attributeSet? (content path or class name), world?
get_asc_stateIntrospect a live actor's ASC: granted ability specs (class, level, inputID, active, dynamicTags) + owned gameplay tags. Params: actorLabel, world? (auto|pie|editor) (#587)

networking

Networking and replication: actor replication, property replication, net relevancy, dormancy.

ActionDescription
set_replicatesEnable actor replication. Params: blueprintPath, replicates?
set_property_replicatedMark variable as replicated. Params: blueprintPath, propertyName, replicated?, replicationCondition?, repNotify?
configure_net_frequencySet update frequency. Params: blueprintPath, netUpdateFrequency?, minNetUpdateFrequency?
set_dormancySet net dormancy. Params: blueprintPath, dormancy
set_net_load_on_clientControl client loading. Params: blueprintPath, loadOnClient?
set_always_relevantAlways network relevant. Params: blueprintPath, alwaysRelevant?
set_only_relevant_to_ownerOnly relevant to owner. Params: blueprintPath, onlyRelevantToOwner?
configure_cull_distanceNet cull distance. Params: blueprintPath, netCullDistanceSquared?
set_priorityNet priority. Params: blueprintPath, netPriority?
set_replicate_movementReplicate movement. Params: blueprintPath, replicateMovement?
get_infoGet networking info. Params: blueprintPath

demo

Neon Shrine demo scene builder and cleanup.

ActionDescription
stepExecute demo step. Params: stepIndex?
cleanupRemove demo assets and actors. Switches editor to /Game/MCP_Home before deleting so the editor is never left on an Untitled map
go_homeSwitch the editor to /Game/MCP_Home (creating it on first use). Use this before any operation that would leave the editor on an Untitled map

feedback

Submit feedback to improve ue-mcp when native tools fall short and execute_python was used as a workaround.

ActionDescription
submitSubmit feedback about a tool gap. Blocks on an MCP elicitation prompt that asks the USER (not the agent) to approve or decline the exact payload before anything is posted to GitHub

statetree

StateTree asset editing: read, modify states/tasks/conditions/transitions/bindings/evaluators/global tasks/colors/state parameters/root parameters, compile and validate.

ActionDescription
readFull dump of a StateTree asset: state hierarchy (with description, tag, customTickRate, color), tasks, conditions, transitions, evaluators, global tasks, root params, bindings. Params: assetPath
list_statesList all states with IDs and paths. Params: assetPath
add_stateAdd child state. Params: assetPath, stateId? (parent GUID, omit for root), name, stateType? (State|Group|LinkedAsset|Subtree), selectionBehavior?, insertIndex?
remove_stateRemove a state by ID. Params: assetPath, stateId
set_state_propertySet a property on a state. Params: assetPath, stateId, propertyName (name|type|selectionBehavior|bEnabled|weight|linkedAsset|description|tag|customTickRate|color), value
clear_state_nodesRemove all tasks/conditions/transitions from a state. Params: assetPath, stateId
add_taskAdd a task to a state. Params: assetPath, stateId, structType (C++ struct name e.g. FMyStateTreeTask or an engine-shipped task like FStateTreeRunParallelStateTreesTask), instanceProperties?
add_enter_conditionAdd an enter condition to a state. Params: assetPath, stateId, structType (C++ struct name), instanceProperties?, operand? (And|Or)
remove_enter_conditionRemove an enter condition by index. Params: assetPath, stateId, conditionIndex
remove_taskRemove a task by index. Params: assetPath, stateId, taskIndex
set_task_instance_propertySet a property on a task's instance data. Params: assetPath, stateId, taskIndex, propertyName, value
set_task_propertySet a property on the task's node struct (FStateTreeTaskBase-level: bConsideredForCompletion, bTaskEnabled, bShouldStateChangeOnReselect). Distinct from set_task_instance_property which targets instance data. Params: assetPath, stateId, taskIndex, propertyName, value (string-encoded e.g. 'true'/'false')
add_transitionAdd a transition to a state. Params: assetPath, stateId, trigger (OnStateCompleted|OnStateSucceeded|OnStateFailed|OnTick|OnEvent; combine with | e.g. OnStateSucceeded|OnStateFailed), transitionType (GotoState|NextState|Succeeded|Failed), eventTag?, targetStateId?, targetStatePath?, priority? (Low|Normal|Medium|High|Critical), delayDuration?, bDelayTransition?
add_transition_conditionAdd a condition to an existing transition. Params: assetPath, stateId, transitionIndex, structType, instanceProperties?, operand?
remove_transitionRemove a transition by index. Params: assetPath, stateId, transitionIndex
add_bindingAdd a property binding. Params: assetPath, sourceStructId, sourcePath, targetStructId, targetPath
remove_bindingRemove a property binding. Params: assetPath, targetStructId, targetPath
list_bindingsList all property bindings. Params: assetPath, structId? (filter)
list_bindable_sourcesEnumerate the context/bindable sources in a StateTree (context objects, parameters, evaluators, global tasks, per-state nodes) with their structId + struct type - what a property can bind FROM. Params: assetPath (#681)
add_evaluatorAdd an evaluator to the StateTree (tree-level). Params: assetPath, structType (must derive from FStateTreeEvaluatorBase), instanceProperties?
remove_evaluatorRemove an evaluator by node ID. Params: assetPath, nodeId
set_evaluator_instance_propertySet a property on an evaluator's instance data. Params: assetPath, nodeId, propertyName, value
set_evaluator_propertySet a property on the evaluator's node struct (FStateTreeEvaluatorBase-level). Params: assetPath, nodeId, propertyName, value
add_global_taskAdd a global task to the StateTree (tree-level). Params: assetPath, structType (must derive from FStateTreeTaskBase), instanceProperties?
remove_global_taskRemove a global task by node ID. Params: assetPath, nodeId
set_global_task_instance_propertySet a property on a global task's instance data. Params: assetPath, nodeId, propertyName, value
set_global_task_propertySet a property on a global task's node struct (FStateTreeTaskBase-level). Params: assetPath, nodeId, propertyName, value
list_colorsList all color palette entries for a StateTree. Params: assetPath
add_colorAdd a new color to the StateTree palette. Params: assetPath, displayName, color? (FLinearColor string e.g. '(R=1.0,G=0.0,B=0.0,A=1.0)')
list_state_parametersList parameters defined on a state. Params: assetPath, stateId
add_state_parameterAdd a parameter to a state's property bag. Rejects fixed-layout (linked) states. Params: assetPath, stateId, paramName, paramType (Bool|Int32|Int64|Float|Double|Name|String|Text)
remove_state_parameterRemove a parameter from a state's property bag by name. Rejects fixed-layout (linked) states. Params: assetPath, stateId, paramName
set_state_parameterSet the value of an existing state parameter. On fixed-layout states, also marks the parameter as overridden. Params: assetPath, stateId, paramName, value
set_root_parametersDefine root parameters (property bag). Params: assetPath, parameters[] ((name, type)) where type is float|int32|bool|string|name|double
compileCompile a StateTree asset. Returns success, errors[], warnings[]. Params: assetPath
validateValidate a StateTree asset without compiling. Params: assetPath

chooser

Author ChooserTable assets (the data-driven selection layer behind Motion Matching): introspect columns, list/add/edit/delete rows mapping input-column conditions to an output object.

ActionDescription
createCreate an empty ChooserTable asset. Add input columns with add_column, then rows with add_row. Params: name, packagePath? (default /Game), onConflict? (#685)
describeIntrospect a ChooserTable: row count, each input column (index, name, columnType, cellType) and the fallback result. Read this first to learn the cell text format each column expects. Params: table (#685)
add_columnAdd an input column to a ChooserTable (so rows have a condition to fill). columnType is a Chooser column struct short name, e.g. EnumColumn, BoolColumn, FloatRangeColumn, GameplayTagColumn, ObjectColumn, or an Output* column. Optionally bind its input: inputStruct (parameter struct e.g. EnumContextProperty/BoolContextProperty), boundProperty (context property name to read), enumPath (for enum columns). Sizes the new column's cells to the current rows. Params: table, columnType, inputStruct?, boundProperty?, enumPath? (#685)
list_rowsList every row: index, disabled flag, output object (resultType + referenced asset path), and each column's cell value as round-trippable text. Params: table (#685)
add_rowAppend a row. Set the output via output (asset path) + outputType ('asset' hard ref default | 'soft_asset' | 'evaluate' for a nested ChooserTable). Set input-column conditions via cells (array aligned to column order) and/or inputs (object keyed by column index or name). Cell values are struct text like '(Value=2)' - partial fields are allowed and unspecified ones keep defaults; a bare number/bool works for scalar columns. Params: table, output?, outputType?, cells?, inputs? (#685)
set_rowEdit an existing row by index: optionally replace the output (output + outputType), toggle disabled, and/or update column cells (cells / inputs, same format as add_row). Params: table, index, output?, outputType?, disabled?, cells?, inputs? (#685)
delete_rowDelete a row by index (removes its output plus the per-row cell from every column). Params: table, index (#685)

plugins

Introspect npm-distributed plugins that contribute actions into other categories. Read-only.

ActionDescription
listEvery plugin loaded from ue-mcp.yml: name, version, prefix, status, and injected actions
describeFull detail for one plugin including knowledge files and flows. Params: name

epic

Epic's native Unreal 5.8 AI Toolset Registry, wrapped as first-class actions. Every toolset Epic ships (GAS, Niagara, PCG, UMG, StateTree, editor actor/asset/blueprint, sequencer, and more) is discoverable and callable in-process. Requires UE 5.8+ with the ToolsetRegistry plugin enabled - call epic(status) first to check availability.

ActionDescription
statusReport whether Epic's ToolsetRegistry is available and how many toolsets are registered. Never errors (reports available=false with a reason when the plugin is absent). Params: none
list_toolsetsList registered toolsets: name, version, description, tool names + count. Strips the verbose per-tool input/output schemas to stay small - use describe_toolset for those (or includeSchemas). Params: nameFilter? (case-sensitive substring on the qualified name), includeSchemas? (return full tool objects with input/output schemas)
describe_toolsetFull schema for one toolset: every tool with its input/output JSON schema. Params: toolset (qualified name from list_toolsets, e.g. 'GASToolsets.AttributeSetToolset')
call_toolExecute a registered Epic tool exactly as its MCP server would. Params: toolset (qualified), tool (qualified name from describe_toolset, e.g. 'GASToolsets.AttributeSetToolset.ListAttributeSets'), input? (object) or inputJson? (raw JSON string)

fab

Import Fab (Epic marketplace) content: check plugin/login status, trigger login/logout, sync your owned library into the Content Browser, inspect/clear the download cache, and import owned or local source files into the project.

Fab's window in the editor is a web frontend: catalog browsing, your library, purchases, and signed-URL resolution all live on Epic's servers behind the browser (there is no official consumer REST API). This category drives the native download+import layer beneath it, so store browsing stays in the Fab window. The workflow: log in (in the Fab window or via login), add items to your library, sync_library, then import_file owned/cached assets into any content path.

ActionDescription
statusReport Fab plugin state: whether the module is loaded, whether the native import/cache API is linked in this build, whether the Fab window has been opened this session, and the download cache location/size. Call this first.
loginTrigger the Fab login flow (EOS account portal). Asynchronous - returns once the flow is opened, not once authenticated.
logoutClear the persistent Fab authentication for this device.
sync_libraryLoad the user's owned Fab library ("My Folder") into the Content Browser via TEDS. Requires an active login; items appear asynchronously. Params: batchSize?
list_cachedList the entries currently in the local Fab download cache (already-downloaded owned assets).
cache_infoReport the Fab download cache location, total size, and entry count.
clear_cacheDelete the local Fab download cache to reclaim disk. Does not affect assets already imported into the project.
import_fileImport a source file into the project through the Fab Interchange import pipeline. Use for owned assets downloaded/cached locally, or any local source file (fbx, textures). Single files import synchronously and report the created asset paths; pack/quixel workflows may run asynchronously. Params: source (absolute path on disk), destination (content path like /Game/Fab/Imported)