The grimoire.
Every tool this build ships, grouped by category, plus the skills, the audit agent, the environment flags, and how the backends route. This is the whole surface; what you see is what you get.
One package, the proven core. These 82 tools are the ones verified safe against real projects. Read tools can't mutate; every write saves through a compile gate and a backup. Tools that could corrupt a project (or that aren't fully proven) simply aren't in this build.
Tools by category
Blueprint 39 tools
| add_component | Add a component (StaticMeshComponent, AudioComponent, etc.) to a Blueprint's SimpleConstructionScript tree: author-time component setup, not runtime spawning. |
| add_function | Create a new BP function graph with the given name. |
| add_function_input | Add an input parameter to an existing function. |
| add_function_output | Add an output parameter to an existing function. |
| add_node | Spawn a new K2 (Blueprint) node in a graph. |
| add_variable | Add a member variable to a Blueprint class. |
| apply_ops | Execute a batch of write operations sequentially in a single tool call. |
| attach_component | Re-parent an SCS component on a Blueprint. |
| auto_layout_graph | Auto-position the nodes in a Blueprint graph so they don't overlap. |
| bp_structural_diff | Compare two Blueprints structurally: variables, components, function/macro/event-graph node signatures, connection counts. |
| clone_graph | Copy every node in `graph` from the `source` Blueprint into the same-named graph of the `target` Blueprint, preserving wiring. |
| create_blueprint | Create a new Blueprint asset under `/Game/...` extending `parent_class`. |
| delete_function | Delete a Blueprint function graph by name. |
| delete_node | Delete a K2 node by GUID. |
| delete_variable | Remove a Blueprint member variable by name. |
| find_dangling_references | Walk a Blueprint's function bodies (and optionally top-level graphs) for nodes referencing variables / intra-BP functions that no longer exist on the BP. |
| find_node | Search all nodes in a Blueprint by class name or title substring (case-insensitive); searches ALL graphs at once, unlike `get_graph` which reads one named graph. |
| find_overriders | Find Blueprints under `path` that match a structural query: extend `parent_class`, override `function_name`, and/or implement `interface`. |
| get_components | List the SCS components (StaticMeshComponent, LightComponent, child actors, etc.) attached to a blueprint, with parent/child hierarchy. |
| get_function | Fetch a specific Blueprint function by name: signature (inputs, outputs, locals) + body graph. |
| get_graph | Fetch a Blueprint graph by name (default: EventGraph). |
| get_node | Fetch a single K2 node by GUID inside a graph. |
| implement_interface | Add `interface` to the implemented-interfaces list of the `asset` Blueprint, generating the stub function graphs the interface requires. |
| list_blueprints | List Blueprint assets under a content path. |
| list_timelines | List all Timeline nodes in a Blueprint (names, track counts, length, loop, auto_play). |
| list_variables | List all member variables on a Blueprint, with type, default, category, and replication state. |
| peek_graph | Lightweight probe for a Blueprint graph: returns node count + kind histogram + connection count without any node/pin/connection detail. |
| read_blueprint | Read top-level metadata for a Blueprint: parent class, interfaces, variables, function/graph summaries, macros. |
| read_timeline | Read a Timeline from a Blueprint: float/vector/event/linear_color tracks with their FRichCurveKey arrays (time, value, interp). |
| remove_component | Remove a component from a Blueprint's SCS tree by name. |
| rename_variable | Rename a Blueprint member variable. |
| retype_variable | Change a Blueprint member variable's type without delete + re-add. |
| set_component_property | Set a UPROPERTY on a Blueprint component's template (the author-time default values, what the BP Details panel shows for that component). |
| set_node_position | Move a K2 node (by GUID) to (x, y) inside a Blueprint graph. |
| set_pin_default | Set the literal default value on a node's input pin. |
| set_variable_category | Change the My-Blueprint-panel category label on a Blueprint member variable (the "Stats" / "Combat" group header in the BP editor). |
| set_variable_default | Change a Blueprint member variable's default value (string form, as displayed in the Details panel: e.g. |
| summarize_blueprint | Tiny orientation response for a Blueprint: parent class plus counts of variables, functions, graphs, macros, and interfaces. |
| wire_pins | Connect two K2 pins. |
Editor 5 tools
| get_compile_status | Blueprint compile status: wraps `UBlueprint::Status` into a stable string. |
| get_dirty_packages | List loaded packages with unsaved changes. |
| get_material_instance_params | Dump scalar/vector/texture parameter values from a UMaterialInstanceConstant asset. |
| get_static_mesh_info | Static mesh LOD / triangle / vertex info. |
| health_check | Probe whether the live editor is responsive. |
Anim 4 tools
| list_anim_blueprints | List UAnimBlueprint assets under a content path. |
| list_anim_montages | List UAnimMontage assets under a content path (default `/Game`). |
| read_anim_blueprint | Walk a UAnimBlueprint: parent class + each state machine's states (state / conduit / transition / entry). |
| read_anim_montage | Read a UAnimMontage: sections (name, start_time, next_section), notifies (name, trigger_time, duration, notify_class), slot tracks (slot_name, anim segments with anim_sequence path). |
Asset 4 tools
| get_dependencies | Return every asset (package path) that this asset DEPENDS on. |
| get_project_metadata | Read the project's `.uproject` file and return parsed metadata (project name, EngineAssociation, category, description, plus the raw JSON for anything else). |
| get_referencers | Return every asset (package path) that REFERENCES this asset. |
| read_config_value | Read a UE config (.ini) value. |
Assets 3 tools
| find_asset | Find assets whose name or package path contains `query` (case-insensitive). |
| list_assets | List every asset (any UClass) under `path`. |
| read_actor_instance | Read ANY object instance by package path, including a level-placed actor stored in its own external package under `/<Mount>/__ExternalActors__/...` (World Partition / One-File-Per-Actor), which `read_blueprint` can't open. |
Class Info 3 tools
| find_class | Search the UClass registry by substring. |
| get_class_info | Inspect a UClass: parent + ancestor chain + every UPROPERTY + UFUNCTION. |
| list_functions | List every UFUNCTION on a class with its flags (BlueprintCallable, BlueprintPure, etc.). |
Niagara 2 tools
| list_niagara_systems | List UNiagaraSystem assets under a content path (default `/Game`). |
| read_niagara_system | Read a UNiagaraSystem's emitter handles (each names an underlying UNiagaraEmitter) and its exposed user parameter names. |
Material 2 tools
| list_materials | List all UMaterial / UMaterialInstance assets under a content path. |
| read_material | Read a material's expression graph: every UMaterialExpression node (id, class, parameter name, x/y), every connection (from expression output → expression input or master-material slot like BaseColor / Roughness), and the names of all exposed scalar/vector parameters. |
Level Sequence 2 tools
| list_level_sequences | List ULevelSequence assets under a content path. |
| read_level_sequence | Read a sequence's playback range (start/end seconds) and its top-level tracks. |
Gameplay Tag 2 tools
| list_gameplay_tags | Query the project's GameplayTagsManager. |
| read_ability_set | Read a GAS ability-set DataAsset: every granted ability class + its level. |
Diff 2 tools
| diff_asset | Structural diff between two Blueprint assets. |
| prepare_merge | AI-assisted merge context. |
State Tree 2 tools
| list_state_trees | List UStateTree assets under a content path (default `/Game`). |
| read_state_tree | Read a UStateTree's hierarchy + transitions: every state (id, name, parent) and every transition (from, to, trigger). |
Data Table 2 tools
| list_data_tables | List all UDataTable assets under a content path. |
| read_data_table | Load a DataTable and return its row-struct type, column names, and every row's field values. |
Data Asset 2 tools
| list_data_assets | List all UDataAsset subclass instances under a content path. |
| read_data_asset | Read every UPROPERTY on a UDataAsset. |
Behavior Tree 2 tools
| list_behavior_trees | List UBehaviorTree assets under a content path (default `/Game`). |
| read_behavior_tree | Walk a UBehaviorTree's node graph. |
Discover 2 tools
| list_node_kinds | List the `kind` values that `add_node` accepts, with required extras for each. |
| list_pin_categories | List the canonical BPPinType.category values + container modifiers. |
Cpp 1 tool
| compile_function | Compile a tiny pseudocode DSL into a fully-wired Blueprint function. |
Other 1 tool
| preview_ops | Validate an apply_ops batch without mutating anything. |
Read 1 tool
| describe_k2node | Introspect a K2 node class (custom or engine): given a class path like `/Script/BlueprintGraph.K2Node_FormatText` (or a short name like `K2Node_FormatText`), spawns a transient instance, calls AllocateDefaultPins, and reports its pins (name/direction/type/defaults), purity, title, tooltip, menu category, parent class, and owning module. |
Widget 1 tool
| read_widget_blueprint | Read a UWidgetBlueprint's widget tree: every UWidget node (name, class, parent name) and the root widget's name. |
Skills & the audit agent
Ship with the plugin under Claude/; install with
Install-ClaudeAssets.ps1 or point your client's skills folder at it.
| aethyr | Core skill: inspect, edit, and operate on Blueprints: the wire format, package paths, per-tool guidance. |
| bp-batches | Multi-step edits as one transaction: apply_ops / preview_ops / compile_function, with rollback-on-failure. |
| bp-debug | Failure triage: error codes, package-vs-object paths, did-you-mean, partial-write recovery. |
| bp-audit agent | Read-only structural auditor: "audit /Game/AI" fans out reads and returns a tight report; mutates nothing. |
Configuration
Set these in your MCP client's env block. The defaults are safe.
| AETHYR_PROJECT | Path to the .uproject to drive. Auto-discovered above the server if unset. |
| AETHYR_ALLOW_WRITE | Set 1 to enable write tools. Off by default: read-only until you opt in. |
| AETHYR_BACKEND | auto (default) · live · commandlet · mock. Auto routes per call. |
| AETHYR_BACKUP | 1 by default: copies an asset to a backup ring before its first save each session. |
| AETHYR_AUTO_CHECKOUT | 1 by default: auto-checks-out an asset from source control before a write. |
| AETHYR_TIMEOUT_SECONDS | Per-call subprocess timeout (default 120). |
Backends
- auto: the default. Probes each call and routes to live if an editor is open, else commandlet.
- live: talks to a running editor over a local TCP socket (fast; great while you're working in-editor).
- commandlet: spawns a headless editor to serve calls when none is open.
- mock: fixtures only, no engine; for trying the wire format without a project. Writes are blocked.