// documentation

Everything you need to build a game by prompting.

Install, connect any MCP agent, and reach for 83 typed, safety-gated tools and 4 agentic skills. Start with the five-minute setup, then dive into the full reference below.

Get Conduit free Start the setup
// getting started

What you need

Conduit is a native C++ plugin that compiles into your project. You need a C++-capable Unreal project and any MCP-compatible agent.

Unreal Engine 5.7 or 5.8 — broader 5.5–5.8 coverage in progress.
A C++ project with the Visual Studio toolchain (Windows).
An MCP agent — Claude Code, Claude Desktop, or any MCP client.

The Python Editor Script Plugin and Enhanced Input are auto-enabled as plugin dependencies — nothing to install by hand.

anim_graph_describeRead-onlynew in 1.6

Lists an AnimGraph’s structure so you can edit it idempotently. Args: anim_blueprint, optional state (a state id or name — describe that state’s pose graph instead). Returns each node’s id, type and pins; for a StateMachine node it also lists its states and transitions with ids.

// install

Install in five steps

It is a drop-in source plugin: place it, build it, flip the gates you want, connect, and prompt.

1 · Get the plugin

Grab a license (free for indies), accept your GitHub invite, and download AgentConduit-vX.Y.Z.zip from the repository's Releases tab. Unzip the AgentConduit/ folder.

Get Conduit free

2 · Drop it in & build

Place the folder at YourProject/Plugins/AgentConduit/, regenerate project files, and build the Development Editor target.

# your project layout
YourProject/
  YourProject.uproject
  Plugins/
    AgentConduit/        <- drop the folder here
      AgentConduit.uplugin

3 · Enable & launch

Open the editor, enable Edit → Plugins → AgentConduit, and restart. The Output Log confirms the server is live:

AgentConduit MCP server listening on http://127.0.0.1:30010/mcp

4 · Flip the safety gates you want

Conduit is read-only until you opt in. In Project Settings → Plugins → AgentConduit, enable only what you need — each switch is independent:

Allow Editor Mutationswrite tools — spawn, author, edit
Allow Console Commandsexec console + CVars
Allow Python Executionthe Python escape hatch

5 · Connect your agent & prompt

Point any MCP client at the endpoint (next section) and start talking to it.

// connect

One endpoint, any MCP client

Conduit speaks the Model Context Protocol over Streamable-HTTP. If your agent talks MCP, it works.

Claude Code — one command

claude mcp add --transport http agentconduit http://127.0.0.1:30010/mcp

Claude Desktop / config-based clients

{
  "mcpServers": {
    "agentconduit": {
      "type": "http",
      "url":  "http://127.0.0.1:30010/mcp"
    }
  }
}

Locked-down setup? Set an Auth Token in settings and every request to /mcp must carry Authorization: Bearer <token> (HTTP 401 otherwise). Empty by default for open local connections.

// your first prompt

Say it. Watch it build.

Describe what you want. The agent picks the tools, makes the edits inside the real editor, and verifies with screenshots and play-in-editor.

You > Make a coin-collector: a floor, a coin Blueprint with a Score
      variable and a BeginPlay graph, spawn one, a GameMode, and
      SpaceBar mapped to jump.
// Conduit drives the editor — a verified live run, 24/24 tool calls on UE 5.7
Level created & saved, floor actor with a real cube mesh
BP_Coin with a StaticMesh component and a Score variable
Event graph: BeginPlay → PrintString → SET Score=5 → Branch, compiled clean
Coin spawned, BP_GameMode applied, Enhanced Input SpaceBar → IA_Jump
// core concepts

Architecture

The MCP server runs inside the editor process. No Python sidecar, no socket bridge, no glue. Your agent POSTs JSON-RPC 2.0 to a local endpoint; tools execute on the game thread against live editor subsystems.

mcp client AI agent Claude Code, Desktop, … no sidecar · in-process Unreal Editor process AgentConduit · MCPCore embedded HTTP MCP server 83 tools → subsystems GEditor · assets · Blueprints · UMG HTTP / JSON-RPC 2.0 POST /mcp 127.0.0.1:30010/mcp results / images

The transport is content-negotiated: a request that sends Accept: text/event-stream gets an SSE-framed reply; otherwise plain JSON. Image-returning tools (screenshots, widget renders) stream encoded PNG bytes back inline.

Safety & gates

Conduit is built to be trusted in a real project. Every reference card below carries a badge showing which gate, if any, the tool needs.

Read-onlyInspection tools always work — listing actors, reading properties, screenshots. No gate required.
Editor mutationsAnything that writes — spawn, author Blueprints, edit assets — needs Allow Editor Mutations.
Console gateConsole commands and CVars need Allow Console Commands — a separate switch.
Python gateThe Python escape hatch needs Allow Python Execution. Enabling one gate never silently enables another.

Transactions & undo

Every write runs inside an undo transaction — Ctrl-Z works, and a failed mutation rolls back automatically. Structural edits are serialized so overlapping requests can't corrupt an asset or the undo buffer. Many authoring tools mark an asset dirty in memory; persist with save_asset or save_level when you're done.

// agentic layer

Skills — outcomes, not API calls

Skills are expert workflows that encode design judgment. Install them into your project and your agent gets a head start on real game-building.

pwsh Scripts/Install-AgentConduitSkills.ps1 -ProjectRoot "C:\Path\To\YourUnrealProject"
game-bootstrapper

A whole playable loop — level, pawn, input, GameMode, HUD, win/lose — proven in PIE.

gameplay-logic-builder

A wired, compiling Blueprint graph from a plain behavior description.

game-ui-builder

A designed UMG interface — HUD or menu — with layout, type scale, and styling.

level-designer

A blocked-out, lit, dressed scene with real composition.

// tool reference · 1 / 11

World & level

Create, open, and save levels, and set the GameMode that governs play.

new_levelEditor mutations

Creates a new blank level and opens it for editing, replacing the current level. Optional path (e.g. "/Game/Maps/MyLevel") saves the new level to that asset. Not undoable.

load_levelEditor mutations

Opens an existing level asset for editing, replacing the current level. Args: path (e.g. "/Game/Maps/MyLevel"). Not undoable.

save_levelUtility

Saves the current editor level to disk, persisting the scene. Takes no arguments.

set_game_modeEditor mutations

Sets the GameMode for the current level (World Settings override). Args: game_mode (a GameMode class — native name or Blueprint class path ending in _C). Configure its DefaultPawn / PlayerController / HUD via set_blueprint_default on the GameMode Blueprint. Saves via save_level.

// tool reference · 2 / 11

Actors & scene

Spawn, transform, organize, inspect, and dress the actors in your level.

spawn_actorEditor mutations

Spawns an actor into the current editor level. class (required) is a native class name (e.g. "StaticMeshActor", "PointLight") or a Blueprint class path (e.g. "/Game/.../BP_Foo.BP_Foo_C"). Optional location {x,y,z}, rotation {pitch,yaw,roll}, and label. Undoable.

duplicate_actorEditor mutations

Duplicates the selected actor (or actor_label). Args: offset {x,y,z} applied per copy, count (number of copies, default 1). Great for repeating buildings / props. Undoable.

delete_actorEditor mutations

Deletes actors from the current level. Provide actor_label (exact label; may match several), name_contains (delete every outliner actor whose label contains this substring), or neither to delete the current selection. Undoable.

set_actor_transformEditor mutations

Sets world location, rotation, and/or scale of the selected actor (or actor_label). Each of location {x,y,z}, rotation {pitch,yaw,roll}, scale {x,y,z} is optional; provide at least one. Omitted axes keep their current value. Undoable.

set_actor_poseEditor mutations

Sets a skeletal mesh actor's pose from an AnimSequence. Args: animation (required, AnimSequence asset path), optional time (seconds into the anim to freeze on, default 0), play (bool, loop instead of freezing). Use to give mannequins a natural pose. Undoable.

drop_to_groundEditor mutations

Drops the selected actor(s) (or actor_label, or name_contains) straight down so their lowest point rests on the first surface below. Undoable.

scatter_actorsEditor mutations

Scatters StaticMeshActors over an area. Args: meshes (array of static mesh paths, picked at random per instance), count, center {x,y,z}, extent {x,y} (half-size of the scatter box), scale_min / scale_max (uniform scale range, default 1), random_yaw (default true), align_to_ground (default true), label_prefix (default 'Scatter'). Undoable.

set_actor_folderUtility

Files actors into a World Outliner folder. Args: folder (required, e.g. "AgentConduit/Buildings"; empty string moves to root), and either actor_label (exact) or name_contains (substring) to choose actors.

set_selectionUtility

Sets the editor selection. Args: actor_label (select actors with this label), name_contains (select all outliner actors whose label contains this substring), or neither to clear the selection (useful to remove the move-gizmo before a screenshot).

get_selected_actorsRead-only

Returns the labels and classes of the actors currently selected in the Unreal editor viewport.

list_actorsRead-only

Lists actors in the current editor level with a class-count summary, mirroring the World Outliner. Optional filters: name_filter (substring of the label), class_filter (substring of the class name, e.g. "Light" or "Fog"), and limit (default 200, max 1000).

get_actor_detailsRead-only

Returns transform, attachment, tags, and components for the selected actor(s). Pass actor_label to inspect a specific actor by its World Outliner label instead of the selection.

get_actor_boundsRead-only

Returns the world-space bounding box of the selected actor (or actor_label): center, full size (x/y/z), min/max corners, and the pivot offset (geometry center minus actor location). Use to size and align meshes whose pivots are off-center.

set_static_meshEditor mutations

Sets the Static Mesh on an actor's StaticMeshComponent (so a spawned StaticMeshActor shows geometry). Args: mesh (Static Mesh asset path), optional actor_label (else uses the selection), optional component (a specific StaticMeshComponent name). Applies to all matched actors.

add_componentEditor mutations

Adds a component to a level actor instance. Args: component_class (e.g. "PointLightComponent", "AudioComponent", "BoxComponent"), name, optional actor_label (else uses the selection). Scene components attach to the actor's root. Set its properties with set_actor_property (use the component name).

set_physicsEditor mutations

Configures physics / collision on an actor's primitive component(s). Args: optional simulate (bool — enable rigid-body physics), optional collision_preset (e.g. "BlockAll", "OverlapAllDynamic", "PhysicsActor", "NoCollision"), optional actor_label (else selection). Provide at least one of simulate / collision_preset.

// tool reference · 3 / 11

Blueprints & logic

Author Blueprint classes — structure (components, variables) and node-graph logic (events, functions, flow, casts, input). Build a graph, then compile_blueprint to validate.

create_blueprintEditor mutations

Creates a new Blueprint class asset from a parent class (default Actor). Args: name, path (content folder, e.g. "/Game/Blueprints"), optional parent_class (native class name or asset path, default "Actor"), optional save (default true). Flesh it out with add_blueprint_component / add_blueprint_variable / the node tools.

add_blueprint_componentEditor mutations

Adds a component to a Blueprint's component hierarchy (SimpleConstructionScript). Args: blueprint (asset path), component_class (e.g. "StaticMeshComponent", "PointLightComponent"), name (the new component's variable name). Recompiles the Blueprint.

add_blueprint_variableEditor mutations

Adds a member variable to a Blueprint. Args: blueprint (asset path), name, type (one of: bool, byte, int, int64, float, string, name, text, vector, rotator, transform, color; or a class / struct path for object references), optional is_array (default false), optional default_value (Unreal text form). Recompiles the Blueprint.

compile_blueprintUtility

Compiles a Blueprint asset and reports the resulting status (errors / warnings). Args: blueprint (asset path). Call this after structural edits to validate the Blueprint.

set_blueprint_defaultEditor mutations

Sets a default property on a Blueprint's CDO and recompiles. Args: blueprint (required, BP asset path), property (required), value (required; string/number/boolean or asset path for object refs), save (default true).

add_blueprint_event_nodeEditor mutations

Adds an event node to a Blueprint's event graph. Args: blueprint (asset path), event_name (e.g. "ReceiveBeginPlay", "ReceiveTick", or any name when custom is true), optional custom (bool, default false — true makes a Custom Event), optional target_class (for overrides; defaults to the Blueprint's parent). Returns the node id and pin names.

add_blueprint_function_nodeEditor mutations

Adds a function-call node to a Blueprint's event graph. Args: blueprint (asset path), function (function name, e.g. "PrintString", "SetActorLocation"), optional target_class (class declaring the function, e.g. "KismetSystemLibrary"; defaults to the Blueprint's own class hierarchy). Returns the node id and pin names.

add_blueprint_variable_nodeEditor mutations

Adds a variable node to the event graph. Args: blueprint (asset path), variable (an existing variable name), optional mode = "get" (default) or "set". Returns the node id and pins so you can wire it with connect_blueprint_pins.

add_blueprint_flow_nodeEditor mutations

Adds a control-flow node to the event graph. Args: blueprint (asset path), type = "branch" (if/else) or "sequence" (run pins in order). Returns the node id and pins. For a Branch, set its 'Condition' input via connect_blueprint_pins or set_pin_default.

add_blueprint_cast_nodeEditor mutationsnew in 1.1

Adds a Cast node to the event graph (e.g. cast an overlap's OtherActor to a specific class before using it). Args: blueprint (asset path), target_class (the class to cast to — native name or Blueprint class path ending _C). Returns the node id and pins (Object in, As<Type> out, Cast Failed exec).

add_blueprint_input_action_nodeEditor mutationsnew in 1.1

Adds an Enhanced Input action event node to the event graph, so an Input Action drives Blueprint logic. Args: blueprint (asset path — usually a Pawn / Character / PlayerController), action (Input Action asset path). Returns the node id and its trigger pins (Triggered, Started, Completed, …, plus ActionValue). Pair with add_input_mapping to bind keys.

connect_blueprint_pinsEditor mutations

Connects two Blueprint node pins. Args: blueprint (asset path), from_node and to_node (node ids from add_blueprint_*_node), from_pin (an output pin name, e.g. "then") and to_pin (an input pin name, e.g. "execute"). Use "then" / "execute" for exec flow. Recompiles the Blueprint.

set_pin_defaultEditor mutations

Sets the default (literal) value on an unconnected INPUT pin of a Blueprint node — e.g. drop an asset onto a SystemTemplate / Sound pin, or set a number/bool/enum/string. Args: blueprint (asset path), node (node id), pin (input pin name), value (for object/class pins: an asset or class path, or "None" to clear; otherwise the literal text). Fails if the pin is connected. Recompiles the Blueprint.

// tool reference · 4 / 11

Animation

Author Animation Blueprints end-to-end — the single biggest capability gap versus other Unreal MCPs. Create the AnimBP and blendspaces, build the AnimGraph (blendspace / sequence players into the output pose), and lay out a locomotion state machine with states, transitions and rules, then bind it to a skeletal mesh. compile_blueprint validates the result.

create_anim_blueprintEditor mutationsnew in 1.3

Creates an Animation Blueprint bound to a skeleton (its AnimGraph is seeded automatically). Args: name, path, skeleton (USkeleton asset path), optional parent_class (a UAnimInstance subclass; default UAnimInstance), optional save (default true). Author its Event Graph with the add_blueprint_* node tools; bind it with set_anim_class.

create_blendspaceEditor mutationsnew in 1.3

Creates a 1D or 2D BlendSpace for locomotion. Args: name, path, skeleton, optional type ("1D" default / "2D"), axis_x {name,min,max,grid} and (2D) axis_y, and samples — an array of {anim, x, y}. Samples outside the axis range are rejected.

set_anim_classEditor mutationsnew in 1.3

Binds an Animation Blueprint to a SkeletalMeshComponent. Args: anim_class (an AnimBlueprint asset path or a UAnimInstance class path), optional component, and a target: either target (a Blueprint asset path — sets the component template’s Anim Class and recompiles) or actor_label / the current selection (a level actor instance).

anim_graph_add_nodeEditor mutationsnew in 1.4

Adds a node to an AnimGraph. Args: anim_blueprint, node_type = "StateMachine" | "BlendSpacePlayer" | "SequencePlayer" | "VariableGet", optional asset (BlendSpace / AnimSequence), optional variable (for VariableGet), optional state (add inside a state’s pose graph), pos_x/pos_y. Returns the node id and its pins; reference the output-pose node as "root".

anim_graph_connectEditor mutationsnew in 1.4

Connects two AnimGraph pins (pose or data). Args: anim_blueprint, from_node & to_node (node ids, or "root" for the output-pose node), from_pin & to_pin (e.g. a player’s "Pose" into root "Result", or a Speed VariableGet into a player’s "X"), optional state.

anim_sm_add_stateEditor mutationsnew in 1.5

Adds a state to a state machine; its pose graph is created automatically. Args: anim_blueprint, state_machine (a StateMachine node id or name), name, optional entry (bool — make it the machine’s default state), pos_x/pos_y. Author the pose with anim_graph_add_node/connect passing state = this id.

anim_sm_add_transitionEditor mutationsnew in 1.5

Adds a transition between two states. Args: anim_blueprint, state_machine, from_state & to_state (state ids or names), optional blend_time (crossfade seconds, default 0.2). Returns the transition id — set its rule next (a transition with no rule never fires).

anim_sm_set_transition_ruleEditor mutationsnew in 1.5

Sets a transition’s condition. Args: anim_blueprint, transition, variable (a member variable), comparison one of > < >= <= == != for a numeric variable, or "bool" to use a boolean variable directly, and value (the number to compare against). Builds VariableGet → comparison → CanEnterTransition and recompiles.

// tool reference · 5 / 11

UMG — game UI

Build Widget Blueprints (HUDs, menus), set widget and layout-slot properties, and render the UI to an image so the agent can see it.

create_widget_blueprintEditor mutations

Creates a UMG Widget Blueprint (game UI / HUD) with a root Canvas Panel. Args: name, path (e.g. "/Game/UI"), optional parent_class (default "UserWidget"), optional save (default true). Add widgets with add_widget.

add_widgetEditor mutations

Adds a widget to a Widget Blueprint's tree. Args: widget_blueprint (asset path), widget_class (e.g. "Button", "TextBlock", "Image", "VerticalBox"), name, optional parent (name of an existing panel widget to nest under; defaults to the root panel). Recompiles the Blueprint.

set_widget_propertyEditor mutations

Sets a property on a widget inside a Widget Blueprint. Args: widget_blueprint (asset path), widget (the widget's name, e.g. "Title"), property (dotted path, e.g. "Text", "Font.Size", "ColorAndOpacity.SpecifiedColor"), value (string/number/bool or Unreal text form). Optional target = "widget" (default) or "slot" to edit the layout slot (anchors / position / padding). Optional save (default true). Recompiles the Blueprint.

render_widgetRead-only

Renders a Widget Blueprint (UMG) to a PNG so the agent can SEE the UI (take_screenshot only captures the 3D viewport, not Slate / UMG). Args: widget_blueprint (asset path), optional live (bool — capture the LIVE in-viewport instance during Play In Editor, with real bound / runtime data, instead of a fresh static mock), width, height, max_width (downscale, default 1280, max 4096). Default renders the static design (no WidgetController bound).

// tool reference · 6 / 11

Materials & look

Assign materials, tune them via dynamic instances, project decals, and grade the scene with post-processing.

set_materialEditor mutations

Sets a material on a mesh component of the selected actor (or actor_label). Args: material (required, asset path), slot (material index, default 0), optional component (mesh component name; defaults to the actor's first mesh component). Undoable.

set_material_paramEditor mutations

Tunes the material on a mesh component by creating a dynamic instance and setting parameters. Args: actor_label (or selection), optional component and slot (default 0), scalar_params (object of name->number, e.g. tiling/roughness), vector_params (object of name->{r,g,b,a}, e.g. tint). Use get_material_params first for the real names. Undoable.

get_material_paramsRead-only

Lists a material's editable parameters and current values. Source: material (asset path), or actor_label (+ optional component, slot) to read the material on a mesh component slot. Use before set_material_param to learn the real parameter names.

spawn_decalEditor mutations

Spawns a decal projecting a material onto surfaces. Args: material (required, decal material path), location {x,y,z}, rotation {pitch,yaw,roll} (default projects downward onto the ground), size {x,y,z} (projection box half-extents, default 256/512/512), label. Undoable.

set_postprocessEditor mutations

Adjusts global post-processing (creates an unbound PostProcessVolume if needed). Optional: exposure (EV compensation), saturation (1=neutral), contrast (1=neutral), bloom (intensity), vignette (0-1), temperature (white temp Kelvin, ~6500 neutral). Undoable.

// tool reference · 7 / 11

Data, assets & properties

Create and import assets, read and write properties anywhere by reflection, edit nested struct/array/map paths, and populate CurveTables.

create_assetEditor mutations

Creates a new asset and saves it. Args: class (required, asset class name or /Script path, e.g. "LevelUpInfo", "CurveTable", "DataAsset"), path (required, content folder), name (required), save (default true). Then use set_asset_property to populate it. Best for UDataAsset subclasses and CurveTables; Blueprints / Materials need their own factories.

create_fontEditor mutations

Builds a runtime UFont from imported UFontFace assets so UMG TextBlocks can use them (the Unreal Python API can't construct the font composite — this does it natively). Args: name, path (content folder), faces (array of {typeface, fontface}), save (default true). In UMG, set the TextBlock Font's FontObject to the created UFont and TypefaceFontName to a typeface name.

import_assetEditor mutations

Imports a source file from disk into the project. Args: source (a file path, e.g. an .fbx / .png / .wav), destination (content folder, e.g. "/Game/Meshes"), optional name, optional replace (default false), optional save (default true). Returns the imported asset path(s).

save_assetUtility

Saves an asset to disk, persisting any in-memory edits (e.g. after add_blueprint_* / add_blueprint_variable, which only mark the asset dirty). Args: asset (asset path).

list_assetsRead-only

Searches the project's Asset Registry. Optional filters: class_filter (asset type, e.g. "StaticMesh", "Material", "Blueprint", "SkeletalMesh"), name_filter (substring of the asset name), path (content path, default "/Game"), and limit (default 100, max 1000). Returns object paths usable with spawn_actor / set_actor_property.

get_asset_propertiesRead-only

Reads an asset's properties by reflection. Args: asset (required, asset path, e.g. a UDataAsset), optional property (a single property name; if omitted, lists all editor-visible properties and values).

set_asset_propertyEditor mutations

Sets a property on an asset (e.g. a UDataAsset) by reflection. Args: asset (required, path), property (required), value (required; string/number/boolean map directly, struct types take Unreal text form), save (default true). Note: DataTables are not edited this way — they need row-level editing.

get_actor_propertyRead-only

Reads a property value from the selected actor or actor_label. With property, returns that value; without it, lists all editor-visible properties and their values. Optional component targets a named component instead of the actor.

set_actor_propertyEditor mutations

Sets a property (by name, via reflection) on the selected actor or actor_label. Args: property (required), value (required; string/number/boolean map directly, struct types take Unreal text form e.g. "(X=1,Y=2,Z=3)"), optional component to target a named component. Undoable.

set_component_propertyEditor mutations

Sets a property on a named component of a level actor. Args: component (the component name, e.g. "PointLight"), property (dotted path, e.g. "Intensity", "LightColor", "Sound"), value (string/number/bool, or an asset path for object references like a Sound/Texture), optional actor_label (else selection). Use add_component first.

set_property_pathEditor mutations

Sets a value at a nested property path. Root: asset (asset path) or actor_label. path (required) navigates struct members, array indices, and TMap keys-by-name, e.g. "LevelUpInformation[1].LevelUpRequirement" or "CharacterClassInformation[Bruiser].XPReward.Value". Maps are keyed by NAME, not by ordinal. value (required). For assets, save (default true).

array_opEditor mutations

Edits an array property. Root: asset (path) or actor_label. path (required) = the array property (may itself be nested). op (required): 'add' (append empty), 'add_n' (append count empties), 'remove' (at index), 'clear', or 'size' (resize to count). For assets, save (default true). Then set elements with set_property_path.

set_curve_table_rowEditor mutations

Sets a row of a CurveTable to a rich curve of keys. Args: curve_table (required, path), row (required, row name e.g. "XP_Bruiser"), keys (required, array of {x,y} points, e.g. [{"x":1,"y":0},{"x":2,"y":100}] for level→XP), interp ("linear" | "constant" | "cubic", default linear), save (default true). Replaces the row if it exists.

// tool reference · 8 / 11

Gameplay & input

Wire Enhanced Input. Set the GameMode with set_game_mode (under World & level), drive logic from input with add_blueprint_input_action_node (under Blueprints), and bind keys here.

add_input_mappingEditor mutations

Maps a key to an Input Action in an Enhanced Input Mapping Context. Args: context (Input Mapping Context asset path), action (Input Action asset path), key (e.g. "W", "SpaceBar", "Gamepad_FaceButton_Bottom", "LeftMouseButton"). Create the IA / IMC assets with create_asset (class "InputAction" / "InputMappingContext"). Saves the context.

// tool reference · 9 / 11

Camera, play & verify

Frame the viewport, run Play-In-Editor, and close the loop — screenshots, reference diffs, and the output log let the agent see and confirm its own work.

set_viewport_cameraRead-only

Aims the active level-editor perspective viewport. Optional location {x,y,z}, rotation {pitch,yaw,roll}, and fov (degrees). Omitted values keep their current setting. Use before take_screenshot to frame a shot.

focus_camera_on_actorRead-only

Aims the perspective viewport at the selected actor (or actor_label), framing it using its bounds. Optional distance (multiplier of the actor's size, default 2.5) and yaw / pitch for the viewing angle in degrees.

start_play_in_editorEditor mutations

Starts a Play-In-Editor (PIE) session in the active level. PIE initializes over the next frame(s), so this returns once the start is requested; confirm with a follow-up tool (e.g. take_screenshot). No-op if already playing.

stop_play_in_editorUtility

Stops the active Play-In-Editor (PIE) session and returns to editing. No-op if not currently playing. Takes no arguments.

take_screenshotRead-only

Captures the active editor viewport and returns it as a PNG image. Optional max_width (default 1280, max 4096) downscales large captures to keep the payload small.

compare_to_referenceRead-only

Compares the current viewport against a reference image. Args: reference (required, image file path on disk), height (composite height in px, default 400). Returns the two images side-by-side (reference left, current right) plus a rough pixel-similarity percentage.

get_output_logRead-only

Returns recent Unreal editor log lines (newest last). Optional args: count (default 100, max 1000), contains (substring filter), and min_verbosity (one of all | display | warning | error; default all).

// tool reference · 10 / 11

Bulk & orchestration

Collapse many calls into one request for bulk work.

batchUtility

Runs several tool calls in order in a single request (fewer round-trips for bulk work). Args: calls (array of objects, each { "tool": name, "arguments": { … } }), optional stop_on_error (default false — continue past failures). Returns a numbered per-call result summary. Each sub-call still enforces its own safety gate. Image results are noted, not embedded.

// tool reference · 11 / 11

Escape hatches

For anything without a dedicated tool. These sit behind their own gates and are off by default.

execute_pythonPython gate

Executes a Python script in Unreal's embedded interpreter (the unreal module is available) and returns captured stdout / stderr and the final expression's value. Use this for anything without a dedicated tool — asset edits, reflection, bulk operations. Multi-line scripts are supported. Runs inside one undo transaction. Requires 'Allow Python Execution' and the Python Editor Script Plugin.

exec_console_commandConsole gate

Runs an Unreal console command and returns its console output (e.g. "stat fps", "r.ScreenPercentage 50", "show Collision"). Targets the running game when in play mode, otherwise the editor world. Output written via UE_LOG appears in get_output_log instead. Requires 'Allow Console Commands'.

get_cvarRead-only

Reads a console variable's current value and help text. Args: name (e.g. "r.ScreenPercentage"). Read-only.

set_cvarConsole gate

Sets a console variable. Args: name, value. Requires 'Allow Console Commands'.

Ready to build? It's free for indies.

Install in minutes, prompt your first level today, and ship when you're ready.