Skip to main content
Lead Developer · 2026 - Present

UE5 authoring is a thousand small manual steps. Loom turns them into one conversation.

Unreal Engine work scatters across the Blueprint editor, config files, build scripts, and a dozen asset editors. Loom puts one semantic layer over all of it: 41 namespaces and 558 operations that let anyone on the team ask for a replicated variable, a GAS ability, a sequencer track, or a C++ class and get it built, validated, and compiled. When Epic shipped its own official UE 5.8 MCP, Loom plugged into it instead of competing with it. One endpoint now serves both.

PythonFastMCPC++UE 5.5-5.8BlueprintIRFTS5 Index
before

Blueprint Node Graph

Event BeginOverlap
Branch
Cast To AChar
Is Valid?
Set Health
Compile
Print String

What designers see when they open UE5

after

With Loom

user prompt

“Create a health pickup that heals 25 HP on overlap”

→ Blueprint generated

result

HealthPickup_BP compiled
OnOverlapApplyDamage(−25)
2 nodes · 1 event · validated

What a designer types into an AI assistant

the bottleneck

The setup tax

Every gameplay idea funneled through one person. Designers and artists opened the node graph and closed it. AI assistants could write code but had no way to touch UE5 Blueprints.

the result

Six people creating Blueprints independently

Designers, artists, and writers describe behavior in plain English. Loom handles the translation. The programmer ships features instead of answering questions.

layer 1

MCP Server

One FastMCP tool per namespace, 558 operations behind an op argument. Any MCP-compatible AI calls them.

layer 2

BlueprintIR

Turns raw Blueprint binary graphs into typed, machine-readable structure AI can reason about.

layer 3

C++ Plugin

Around 110 command files compiled into UE5. Every mutating op validates, compiles, and rolls back on failure.

the core abstraction

BlueprintIR

A structured intermediate representation of Blueprint graphs that AI can reason about. Raw node data is IDs, pixel positions, and opaque pin arrays. BlueprintIR carries the control flow, so mistakes get caught before they land in the graph.

raw blueprint data

What AI normally sees

{
  "nodes": [
    {
      "id": "K2Node_Event_42",
      "pos_x": -208,
      "pos_y": 16,
      "pins": [
        "ED43A1...", "B7F902..."
      ]
    },
    {
      "id": "K2Node_CallFunc_87",
      "pos_x": 304,
      "pos_y": 16,
      "pins": [
        "A9C3D4...", "E1F5B8..."
      ]
    }
  ],
  "connections": [
    ["ED43A1...", "A9C3D4..."]
  ]
}

Node IDs, pixel positions, opaque pin arrays

blueprintir

What AI sees with Loom

{
  "graph": "BP_HealthPickup",
  "exec_chain": [
    {
      "node": "EventBeginOverlap",
      "type": "event",
      "fires_on": "actor_overlap",
      "then": "ApplyHealing"
    },
    {
      "node": "ApplyHealing",
      "type": "function_call",
      "target": "OverlappingActor",
      "function": "AddHealth",
      "args": { "amount": 25 }
    }
  ],
  "data_flow": [
    "BeginOverlap.OtherActor → ApplyHealing.Target"
  ]
}

Typed nodes, execution order, connection semantics

one tool per namespace · 558 operations

loom_blueprintloom_graphloom_animloom_materialloom_sequencerloom_physicsloom_worldloom_pcgloom_eqsloom_audioloom_indexloom_assetsloom_executeloom_skillsloom_rawloom_vfxloom_landscapeloom_wploom_clothloom_destructionloom_btloom_aiperceptionloom_gasloom_renderingloom_projectloom_inputloom_codeloom_configloom_buildloom_dataloom_netloom_localizationloom_umgloom_onlineloom_state_treeloom_moverloom_modelingloom_smart_objectsloom_massloom_substrate

“Describe what you want. Get a working Blueprint.”

The entire Hiraeth team uses Loom as their primary Blueprint workflow

Namespace Dispatch

Loom registers one MCP tool per namespace instead of one per operation. An op argument routes through a shared dispatcher that handles introspection, structured errors, and forwarding to the C++ plugin in one place. This is the real loom_blueprint registration from server.py.

pythonloom-server/src/loom_server/server.py

Every namespace tool is two lines of dispatch; the _OPS registry carries descriptions and argument schemas. An offline test fails if a manifest namespace ever ships without a matching registration. That guard exists because it happened once: 11 namespaces (113 ops) shipped unreachable before the test caught the drift.

daily use

What the team actually does with it

Designer

Describes a health pickup that heals 25 HP on overlap. Loom generates the Blueprint, validates it, and compiles it in the editor.

Sound Designer

Wants footstep audio to change based on surface type. Loom wires the material check, switch statement, and audio components.

New Team Member

Asks Loom to explain an existing Blueprint. BlueprintIR traces the execution chain and describes what each node does and why it connects the way it does.

Writer

Needs a dialogue trigger that fires when the player enters a volume. Loom sets up the overlap event, dialogue widget, and input binding to advance lines.

Next case study