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.
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.6Lists 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 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.
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:
5 · Connect your agent & prompt
Point any MCP client at the endpoint (next section) and start talking to it.
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/mcpClaude 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.
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.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.
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.
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.
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"A whole playable loop — level, pawn, input, GameMode, HUD, win/lose — proven in PIE.
A wired, compiling Blueprint graph from a plain behavior description.
A designed UMG interface — HUD or menu — with layout, type scale, and styling.
A blocked-out, lit, dressed scene with real composition.
World & level
Create, open, and save levels, and set the GameMode that governs play.
new_levelEditor mutationsCreates 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 mutationsOpens an existing level asset for editing, replacing the current level. Args: path (e.g. "/Game/Maps/MyLevel"). Not undoable.
save_levelUtilitySaves the current editor level to disk, persisting the scene. Takes no arguments.
set_game_modeEditor mutationsSets 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.
Actors & scene
Spawn, transform, organize, inspect, and dress the actors in your level.
spawn_actorEditor mutationsSpawns 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 mutationsDuplicates 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 mutationsDeletes 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 mutationsSets 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 mutationsSets 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 mutationsDrops 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 mutationsScatters 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_folderUtilityFiles 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_selectionUtilitySets 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-onlyReturns the labels and classes of the actors currently selected in the Unreal editor viewport.
list_actorsRead-onlyLists 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-onlyReturns 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-onlyReturns 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 mutationsSets 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 mutationsAdds 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 mutationsConfigures 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.
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 mutationsCreates 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 mutationsAdds 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 mutationsAdds 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_blueprintUtilityCompiles 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 mutationsSets 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 mutationsAdds 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 mutationsAdds 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 mutationsAdds 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 mutationsAdds 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.1Adds 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.1Adds 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 mutationsConnects 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 mutationsSets 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.
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.3Creates 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.3Creates 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.3Binds 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.4Adds 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.4Connects 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.5Adds 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.5Adds 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.5Sets 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.
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 mutationsCreates 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 mutationsAdds 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 mutationsSets 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-onlyRenders 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).
Materials & look
Assign materials, tune them via dynamic instances, project decals, and grade the scene with post-processing.
set_materialEditor mutationsSets 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 mutationsTunes 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-onlyLists 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 mutationsSpawns 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 mutationsAdjusts 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.
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 mutationsCreates 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 mutationsBuilds 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 mutationsImports 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_assetUtilitySaves 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-onlySearches 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-onlyReads 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 mutationsSets 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-onlyReads 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 mutationsSets 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 mutationsSets 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 mutationsSets 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 mutationsEdits 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 mutationsSets 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.
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 mutationsMaps 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.
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-onlyAims 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-onlyAims 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 mutationsStarts 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_editorUtilityStops the active Play-In-Editor (PIE) session and returns to editing. No-op if not currently playing. Takes no arguments.
take_screenshotRead-onlyCaptures 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-onlyCompares 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-onlyReturns 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).
Bulk & orchestration
Collapse many calls into one request for bulk work.
batchUtilityRuns 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.
Escape hatches
For anything without a dedicated tool. These sit behind their own gates and are off by default.
execute_pythonPython gateExecutes 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 gateRuns 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-onlyReads a console variable's current value and help text. Args: name (e.g. "r.ScreenPercentage"). Read-only.
set_cvarConsole gateSets a console variable. Args: name, value. Requires 'Allow Console Commands'.