Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: blueprint-authoring description: > Blueprint authoring workflow for the Flopperam Unreal Engine MCP. Covers the full create, author, commit, verify cycle using the narrow bp_* tool surface. Use when creating or editing Blueprints, adding variables/components/events/functions, wiring graphs, or debugging compile errors.
Blueprint Authoring Workflow
The Blueprint Authoring Cycle
orient (bp_brief / bp_inspect) → probe (bp_dry_run) → create (bp_create) → author (narrow writes) → commit (bp_commit) → verify (bp_inspect / pie_test_bp)
Skip steps for trivial edits — a single-variable tweak on an already-read BP goes straight from bp_variable to bp_commit.
Step 1: Orient (Read Before Write)
At least one read-class tool MUST fire before any write. This satisfies the write guard.
bp_brief(blueprint_path)— compact one-call overview (parent, components, variables, graphs, dispatchers). Use FIRST.bp_inspect({queries: [...]})— 21 targeted ops:overview,get_variables,get_functions,get_nodes,get_connections,export_spec,health_check, etc. Batched — every op in one call shares loaded BP cache.bp_export(blueprint_path)— full GraphSpec JSON dump for cloning or diffing.search_assets— find unknown Blueprint paths by name/prefix.
Step 2: Probe (Optional, Recommended for Complex Work)
bp_dry_run(op=check_intent, intent=[...])— fast static validation. Catches bogus class paths, wrong K2_ function names, unsupported variable types BEFORE an apply cycle.bp_dry_run(op=check_spec, blueprint_path, spec_json)— runs the composer's real dry-run (non-destructive, snapshot + rollback). Returns blockers + warnings.
Step 3: Create Asset
bp_create(op=from_parent, blueprint_path, parent_class, components?, variables?, interfaces?)— create Actor/Pawn/Character/Component/Object BP with inline bootstrap.bp_create(op=from_actor, actor_label, package_path, name)— bake a placed level actor into a new BP.bp_create(op=interface|enum|struct)— create BPIs / Enums / Structs.
Step 4: Author (Narrow Writes)
All narrow writes defer compile — stack many, then commit once.
Variables
bp_variable({blueprint_path, variables: [...]}) — batched CRUD.
Type vocabulary: bool, int, int64, float, double, string, name, text, byte, Vector, Rotator, Transform, Color, LinearColor, object refs (/Script/Engine.Actor), BP class refs, enums, containers (Array<T>, Set<T>, Map<K,V>).
Field gotchas:
read_only(NOTblueprint_read_only— extra underscore is silently ignored)default_valueordefault(NOTvalue— silently ignored)categoryonly (NOTcatordisplay_category)
Components
bp_component({blueprint_path, components: [...]}) — batched CRUD with inline property writes (collision, transforms, mesh refs, attach sockets).
Graphs
bp_graph({blueprint_path, graphs: [...]}) — function/macro/event graph CRUD. Auto-creates FunctionEntry + FunctionResult nodes — reference via $entry.<pin> / $result.<param>.
Nodes
bp_nodes({blueprint_path, graph, nodes: [...]}) — batched add/remove on ONE graph.
~40 node types: event, custom_event, function_call, variable_get, variable_set, branch, sequence, cast, make_struct, break_struct, spawn_actor, input_action, timeline, math, comparison, select, for_each_loop, switch_*, make_array, format_text, call_dispatcher, bind_dispatcher.
Declare stable_id for each node, reference with $stable_id from bp_wire.
Wiring
bp_wire({blueprint_path, graph, edges: [...], defaults: [...], pin_ops: [...]}) — batched exec + data edges + pin defaults + pin ops.
ALWAYS include exec AND data edges in ONE call — partial wiring is the #1 failure mode.
Edge format: $<stable_id>.<pin> for new nodes, $<32-char-hex-guid>.<pin> for existing un-tagged nodes.
Enhanced Input
bp_input({actions: [...], bindings: [...], bind?: {...}}) — create IAs + IMCs + key mappings + modifiers + triggers in ONE call.
Class-Level Settings
bp_class({blueprint_path, operations: [...]}) — reparent, add_interface, set_cdo_property (dot-notation like "CharacterMovement.MaxWalkSpeed").
Step 5: Commit
bp_commit(blueprint_path) — single compile + auto-layout + health report.
Returns: compile_status, errors[], warnings[], orphan_pins, dangling_exec_chains, unreachable_nodes.
- UpToDateWithWarnings is NOT success — investigate every warning.
- Multi-commit across fix passes is normal (author → commit → read errors → narrow fix → commit again).
Step 6: Verify
bp_brief/bp_inspectfor structural confirmationpie_test_bpfor runtime-behavioral verification (30+ assertion types)- A compile-clean BP that fails PIE is the #1 silent-bug source
Hard Rules
- Read before write — at least one read-class tool must fire first
- Batch arrays —
variables[],components[],graphs[],nodes[],edges[],operations[]are designed for one call with many items - One bp_wire call per graph for the initial wiring pass (exec + data together)
- One bp_commit per target BP per authoring pass
- snake_case node types —
event,function_call,variable_get,branch,spawn_actor - Pure functions have NO exec pins —
variable_get, math,K2_GetActorLocation,make_struct,break_struct,Array_Length - Function inputs are OUTPUT pins on FunctionEntry — reference via
$entry.<ParamName>, do NOT create variable_get - Latent nodes (Delay, RetriggerableDelay) only work in EventGraphs
- `math` node is SCALAR-ONLY — use KismetMathLibrary function_calls for Vector/Rotator math
- `function_call` class field is `class` (NOT
scope— silently ignored) - `comparison` op is lowercase —
equal,not_equal,greater,less(NOT PascalCase)
Compound Escape Hatches
bp_author(blueprint_path, spec_json)— full GraphSpec one-shot when you have the complete specrepair_blueprint(blueprint_path)— rescue corrupted BPs (duplicate graphs, orphan nodes, broken references)bp_skills({topics: [...]})— load skill docs before first use of unfamiliar tools (batch 3-8 topics)