Install
openclaw skills install @tomleelive/openclaw-unreal-skillControl Unreal Engine Editor via OpenClaw Unreal Plugin. Use for Unreal development tasks including level/actor management, transforms, PIE control, debugging, input simulation, and console commands. Can create/delete actors, save levels, run console commands, simulate input, and capture viewport screenshots and logs — destructive operations should be confirmed with the user. Use only on explicit Unreal Editor requests, in trusted local projects.
openclaw skills install @tomleelive/openclaw-unreal-skillMCP skill for controlling Unreal Engine Editor via OpenClaw.
What this skill can change: anything the Unreal Editor can — actors and their
components and transforms, the open level, imported assets, PIE (Play In Editor),
and whatever a console command reaches (console.execute).
What runs without asking: read-only tools only — level.getCurrent,
level.list, actor.find, actor.getAll, actor.getData, transform.get*,
component.get, editor.getState, asset.list, blueprint.list,
debug.hierarchy, debug.screenshot, console.getLogs, debug.log. Their
behaviour is unchanged.
What is gated at runtime: every project-changing tool — actor.create,
actor.delete, actor.setProperty, transform.set*, component.add/remove,
level.open, level.save, asset.import, console.execute, input.simulate*,
editor.play/stop/pause/resume, blueprint.open — and any batch that
carries one of them. The gateway extension refuses these by default. A tool name
it does not recognise counts as project-changing unless its verb is clearly
read-only: the gate fails closed, never open.
How to enable them — both steps are required:
The operator starts the gateway with the opt-in environment variable. It is read from the gateway process, so the model cannot set it:
OPENCLAW_EDITOR_ALLOW_DESTRUCTIVE=1 openclaw gateway restart
# or, scoped to this skill only:
OPENCLAW_UNREAL_ALLOW_DESTRUCTIVE=1 openclaw gateway restart
The caller passes confirm: true on each project-changing call, after the
user has approved that specific change:
unreal_execute: actor.delete {name: "Cube_01"}, confirm: true
Missing either one is a refusal with an explanation of what was blocked and how to allow it. Nothing reaches the Editor in the meantime.
Preview first: dryRun: true reports how a call is classified and what would
be sent, and sends nothing:
unreal_execute: level.save, dryRun: true
→ {risk: "project-changing", requiresConfirmation: true, wouldRun: false, executed: false}
Check the current state: openclaw unreal status prints whether
project-changing tools are enabled, and GET /unreal/status reports the same as
destructiveOperations: "enabled" | "blocked".
Scope of the gate: it lives in the gateway extension that ships with this
skill (extension/index.ts), so it covers every call routed through the OpenClaw
gateway — Telegram, Discord and the other channels. The Unreal Editor plugin's
embedded HTTP server (port 27184, Mode B below) is a separate install from the
plugin repository and is not gated by this package: keep that port on the local
machine and review the plugin repository for its own controls.
The plugin connects to OpenClaw Gateway via HTTP polling. Works automatically when Gateway is running.
The plugin runs an embedded HTTP server on port 27184. Use the included MCP bridge:
# Claude Code
claude mcp add unreal -- node /path/to/Plugins/OpenClaw/MCP~/index.js
# Cursor — add to .cursor/mcp.json
{"mcpServers":{"unreal":{"command":"node","args":["/path/to/Plugins/OpenClaw/MCP~/index.js"]}}}
Both modes run simultaneously.
Window → OpenClaw Unreal Plugin — opens a dockable tab with:
level.getCurrent — current level namelevel.list — all levels in projectlevel.open — open level by namelevel.save — save current levelactor.find — find by name/classactor.getAll — list all actorsactor.create — create actors: StaticMeshActor (Cube, Sphere, Cylinder, Cone), PointLight, Cameraactor.delete — delete by nameactor.getData — detailed actor infoactor.setProperty — set properties via UE reflection systemtransform.getPosition / transform.setPositiontransform.getRotation / transform.setRotationtransform.getScale / transform.setScaleTransform tools require a valid RootComponent (works on StaticMeshActor, PointLight, etc. — not on bare Actor).
component.get — get component datacomponent.add — add component (not yet implemented)component.remove — remove component (not yet implemented)editor.play — start PIE (uses RequestPlaySession)editor.stop — stop PIEeditor.pause / editor.resume — pause/resume PIEeditor.getState — current editor statedebug.hierarchy — actor hierarchy treedebug.screenshot — capture editor viewportdebug.log — write to output loginput.simulateKey — simulate key pressinput.simulateMouse — simulate mouseinput.simulateAxis — simulate axisasset.list — list assets at pathasset.import — import asset (not yet implemented)console.execute — run console commandconsole.getLogs — read project log file; params: count (number of lines), filter (text filter)blueprint.list — list blueprintsblueprint.open — open blueprint (not yet implemented)Clear the build cache and restart the editor:
rm -rf YourProject/Plugins/OpenClaw/Binaries YourProject/Plugins/OpenClaw/Intermediate
openclaw gateway statusThis skill drives a live Unreal Editor. Full disclosure of capabilities and current limitations:
Origin header → 403) and supports optional shared-secret auth — set OPENCLAW_BRIDGE_TOKEN for both the Unreal Editor process and the MCP client to require X-OpenClaw-Token on every request. Without the token set, keep the port on trusted machines only — any local process can send editor commands.console.execute) and simulating keyboard/mouse input are refused by the gateway extension unless it was started with OPENCLAW_EDITOR_ALLOW_DESTRUCTIVE=1 and the call carries confirm: true. Confirm the change with the user before setting it — see Safety and permissions. None of these should run implicitly from a vague request.debug.screenshot and console.getLogs can capture whatever is on screen or in project logs — including credentials, tokens, or source paths if present. Review before sharing captures outside the machine.disableModelInvocation: true is set — the model cannot auto-invoke this skill; it runs only on explicit user request. Project-changing tools default to refused, and dryRun: true previews any call without sending it. Keep the project under source control before automation sessions. The Korean SKILL_KO.md states the same recommendation; if the two ever disagree, this file governs.Apache-2.0 — See LICENSE.md