Skill v1.0.1
currentAutomated scan100/100+3 new
version: "1.0.1" name: ue-mcp-blueprint description: Use when authoring or modifying Unreal Blueprint assets through ue-mcp. Covers the read-then-write discipline, node/pin wiring, component (SCS) hierarchy, variables, interfaces, compilation, and the difference between pin defaults and linked inputs. Pulls in any time the user asks to create, edit, or inspect a Blueprint.
ue-mcp blueprint authoring
The blueprint tool covers reading, authoring, and compiling Blueprints. The default workflow is read → mutate → compile, never fire-and-forget.
Authoring a graph body: prefer the Epic DSL (#711)
When you are authoring the contents of a graph (event graph, function body, macro) - a set of nodes plus their wiring - do not default to node-by-node add_node/connect_pins. Reach for Epic's graph DSL first:
blueprint(action="epic_get_graph_dsl_docs")- read the S-expression grammar once.blueprint(action="epic_write_graph_dsl", ...)- author + compile the whole graph body in one call.
The DSL authors and compiles an entire graph in a single round-trip, which is materially faster and more reliable than stitching individual K2Nodes together (one correct pass vs several failed iterations). Use it for graph bodies whenever it is available.
Availability / fallback. The epic_* actions come from Epic's ToolsetRegistry and require UE 5.8+ with the Epic toolset plugins enabled. Check with epic(action="status"). When they are unavailable (pre-5.8, or the registry is off), fall back to the native node path below.
Keep using the native actions for read/discovery, SCS components, CDO/class defaults, interfaces + event dispatchers, structured compile/validate, and anything with no Epic equivalent - the native path adds idempotency and rollback the raw tools lack. See the ue-mcp-epic-routing skill for the full epic-vs-native decision.
Discovery before authoring
For any existing Blueprint:
blueprint(action="read", assetPath=...)- structure (parent, components, graphs)blueprint(action="read_graph_summary", assetPath=..., graphName=...)- lightweight node+edge summary (~10KB) - use this beforeread_graph(which can be 100KB+)blueprint(action="list_graphs", assetPath=...)- every graph in the BP including event graphs, functions, macros, interface implsblueprint(action="list_variables" | "list_functions" | "list_local_variables")- the member surface.list_functionscovers the same graphs aslist_graphs(own functions, parent overrides, interface impls, event graphs and their entry points, macros, collapsed subgraphs), each tagged withkindandsource; passincludeInherited: trueto also see overridable functions not implemented yetblueprint(action="get_execution_flow", assetPath=..., entryPoint=...)- trace exec pins from an entry pointblueprint(action="get_dependencies", assetPath=..., reverse=false|true)- classes/functions/assets this BP uses, or callers ifreverse: true
Mutation recipe
- Create the skeleton -
blueprint(action="create", assetPath, parentClass?). - Add variables + components -
add_variable,add_component(passparentComponentfor SCS hierarchy). - Build graphs -
add_nodeeach K2Node,set_node_propertyfor pin defaults,connect_pinsto wire exec + data. - Compile -
blueprint(action="compile", assetPath). Compilation errors come back in the result; fix them before proceeding.
Node wiring fundamentals
add_nodetakesnodeClassas a K2Node class short name (K2Node_CallFunction,K2Node_VariableGet,K2Node_DynamicCast,K2Node_IfThenElse, etc.) plusnodeParamsfor class-specific fields (FunctionReference,VariableReference,TargetType).- Pin defaults vs linked values:
set_node_propertywrites a literal default onto a pin;connect_pinswires a pin to another node's output. A literal default is ignored once a pin is linked. read_node_propertyreads either a pin default or a reflected node UPROPERTY - use this to verify the pin was actually set before compiling.- Graphs with duplicate names (rare but possible after rename) can be disambiguated by passing
graphIndexalongsidegraphName.
Components (SCS)
add_componentcreates a node in the Simple Construction Script. PassparentComponentto put the new component under an existing parent - otherwise it becomes a top-level child of the scene root.set_component_propertywrites on the child BP's InheritableComponentHandler override template, not on the parent - the parent stays untouched. This matters when editing inherited components.read_component_propertiesdumps every UPROPERTY on the template, including array contents.reparent_componentmoves an SCS node to a new parent.
CDO (class defaults)
set_class_defaultwrites a UPROPERTY on the Blueprint CDO (the class default object). For actor tick settings specifically, useset_actor_tick_settings- it handlesbCanEverTick,bStartWithTickEnabled,TickIntervalin one call.
Interfaces + event dispatchers
create_interface+add_interface- the implement-side.add_event_dispatcher- fires a multicast delegate from the BP.
Verify before compile
blueprint(action="validate")runs the compiler diagnostics without saving. Cheaper round-trip when iterating.blueprint(action="read_graph_summary")after mutations confirms the graph shape.