SKILL.md
SKILL.mdBrowse 6 files
3,254 tokens
13,893 bytes
Token encoding: o200k_base
Snapshot 24fd22b
1---2name: unreal-mcp3description: Automate Unreal Engine editor scenes, actors, and renders.4version: 1.0.05requires: Unreal Editor 5.8+ with the Unreal MCP plugin enabled and its server running6author: Hermes Agent7license: MIT8tags: [unreal, unreal-engine, ue5, 3d, mcp, scenes, cinematics, lighting, gamedev]9platforms: [linux, macos, windows]10metadata:11 hermes:12 tags: [unreal, unreal-engine, ue5, 3d, mcp, scenes, cinematics, lighting, gamedev]13 related_skills: []14---15 16# Unreal Engine MCP Skill17 18Companion skill for the `unreal-engine` entry in the Hermes MCP catalog. The19MCP server (Epic's official, experimental "Unreal MCP" plugin, internal id20`ModelContextProtocol`) runs INSIDE the Unreal Editor process and exposes21editor functionality as typed tools. This skill teaches how to drive it well:22discovering the live tool surface, sequencing calls safely, translating23plain-English asks into scenes that actually look good, and verifying work24visually. The user should never need to touch the editor beyond launching it.25 26## When to Use27 28Use when the user wants anything done in Unreal Engine: build or dress a29level, spawn/move/delete actors, set up lighting and atmosphere, create or30tune material instances, frame a camera shot, capture screenshots or renders,31import assets, inspect the scene or UI, run automation tests, or script the32editor. Works for single actions ("make the sun golden hour") and for33complete multi-step projects ("build me a moody forest clearing with a34campfire and render a shot of it").35 36Don't use for: DCC-style mesh modeling/sculpting (model in Blender and37import the result), or for editing Unreal C++ project source (that's normal38code work — use the terminal; this skill is about the live editor).39 40## Prerequisites41 42Two halves, in this order: the editor side must be up before Hermes connects.43 44### One-time, editor side45 461. Unreal Editor **5.8+** with a project open. (macOS: full Xcode must be47 installed and its license accepted — the editor exits on first launch48 without it; see pitfalls.)492. **Edit > Plugins** — enable **Unreal MCP** (its Toolset Registry50 dependency auto-enables). Restart the editor when prompted.513. The typed toolsets ship separately from the server: also enable the52 **AllToolsets** plugin in the same Plugins browser. Unreal MCP ships NO53 tools itself — AllToolsets provides the shipped toolsets (SceneTools,54 ActorTools, MaterialInstanceTools, ObjectTools, …); skip it and the55 server connects but the agent has nothing to call.564. **Edit > Editor Preferences > General > Model Context Protocol** — enable57 **Auto Start Server**. Default bind is `http://127.0.0.1:8000/mcp`58 (port/path configurable in the same panel; server name is `unreal-mcp`).59 To start manually instead, run `ModelContextProtocol.StartServer` in the60 editor console (backtick key).61 62### One-time, Hermes side63 64 hermes mcp install unreal-engine65 66This writes the `mcp_servers.unreal-engine` HTTP entry pointing at67`http://127.0.0.1:8000/mcp` and probes the live server for its tools. Run it68while the editor + server are up so the probe sees the real surface. If the69user changed port/path in Editor Preferences, edit the `url` in70`~/.hermes/config.yaml` under `mcp_servers.unreal-engine` to match.71 72Do NOT use `ModelContextProtocol.GenerateClientConfig` for Hermes — that73writes `.mcp.json`-style files for Claude Code/Cursor/etc. Hermes connects74from `config.yaml` via the catalog entry.75 76### Every session77 781. Launch Unreal Editor, wait for the project to finish loading; confirm the79 server started (Output Log shows the bind address, or run80 `ModelContextProtocol.StartServer` manually).812. Start the Hermes session. Tools register as `mcp_unreal_engine_*`. If82 they're missing: editor wasn't up first — start it, then open a new83 Hermes session.843. Sanity check: call `mcp_unreal_engine_list_toolsets` and confirm toolsets85 come back.86 87## The Tool Surface: Discovery, Not a Fixed List88 89By default the plugin runs in **tool-search mode**: `tools/list` returns only90three meta-tools, and every real tool is reached through them. Through Hermes91they appear as:92 93| Hermes tool | Purpose |94|---|---|95| `mcp_unreal_engine_list_toolsets` | Names + descriptions of every registered toolset |96| `mcp_unreal_engine_describe_toolset` | Full JSON schemas for one named toolset's tools |97| `mcp_unreal_engine_call_tool` | Invoke a named tool with arguments, get the result |98 99The discovery walk, always in this order:100 1011. `list_toolsets` → see what capability groups this project actually has102 (the surface is project-dependent: enabled plugins, Game Feature Plugins,103 and any custom toolsets all contribute). Names come back FULLY QUALIFIED104 (`editor_toolset.toolsets.scene.SceneTools`,105 `EditorToolset.EditorAppToolset`) — use them verbatim as `toolset_name`.1062. `describe_toolset` on the group you need → read the real parameter107 schemas. Never guess parameter names — schemas are the contract.1083. `call_tool` with the qualified toolset name, the SHORT tool name109 (`find_actors`, not the dotted form), and arguments matching the schema.110 111Cache what you learn for the session; re-list only after the editor side112changes (new plugin enabled, toolset authored, `RefreshTools` run).113 114The alternative eager mode (`Enable Tool Search` off in Editor Preferences)115advertises every tool as its own `mcp_unreal_engine_<tool>` entry. Discovery116then happens at `hermes mcp install`/`configure` time instead. Tool-search117mode is the default and what this skill assumes; it also keeps schema tokens118out of every API call, so prefer it.119 120See `references/tool-surface.md` for the shipped toolset catalog, authoring121custom toolsets, and the full plugin configuration/console-command reference.122 123## Operating Loop124 125Every Unreal task follows the same loop:126 1271. **Inspect first.** List toolsets, then query the scene/level state before128 touching anything. Never assume an empty or default level. In an129 unfamiliar project, also check for project-registered Agent Skills130 (`call_tool` → `AgentSkillToolset.ListSkills`): a matching project skill's131 instructions override this skill's generic defaults.1322. **Act in small, single-purpose calls.** One logical step per `call_tool`.133 The server executes tools **serially on the game thread** — a big134 monolithic operation freezes the editor UI until it finishes and risks135 client timeouts. Exception: for loops over 5+ homogeneous operations,136 ONE `ProgrammaticToolset.execute_tool_script` call batches them137 server-side without breaking the serial rule138 (`references/advanced-workflows.md`).1393. **NEVER issue overlapping calls.** Do not batch multiple140 `mcp_unreal_engine_*` calls in one turn — Hermes runs batched calls141 concurrently, and parallel calls against the game thread deadlock or142 fail. Strictly one call, await result, next call. This overrides the143 general parallel-tool-calls guidance.1444. **Read every result.** Many tools (Blueprint compiles, material edits,145 widget creation) report success/failure in the response body with no146 protocol-level exception. Anything that isn't an explicit success is a147 stop-and-diagnose, not a shrug. After property writes, read the value148 back — several write paths silently no-op (see pitfalls).1495. **Verify visually and structurally.** After each milestone, confirm state150 by querying the actors/properties you changed, and capture a viewport151 screenshot when composition matters (see `references/tool-surface.md` for152 the capture options; `vision_analyze` the image — you are the art153 director, judge it).1546. **Save often.** Editor edits are in-memory until packages/levels are155 saved; an editor crash loses everything since the last save, and MCP156 edits are not reliably undoable. Save before AND after any bulk change,157 and after every milestone.1587. **Report concretely.** Actor labels, asset paths (`/Game/...`), file159 locations of captures/renders.160 161Rules of the world while you work:162 163- Units are **centimeters**; axes are **Z-up**, X-forward; rotations are164 degrees (Rotator: Roll around X, Pitch around Y, Yaw around Z). Human eye165 height ≈ 165 cm; a door ≈ 210×90 cm. Full tables in166 `references/scene-craft.md`.167- Content paths use long package names: `/Game/Folder/Asset.Asset` for168 project content, `/Engine/BasicShapes/Cube.Cube` for engine primitives.169- Actor **labels** (what you see in the Outliner, settable, non-unique) are170 not actor **names** (internal, unique). Prefer resolving actors by171 label/class queries, then hold on to whatever handle the tool returns.172- Prefer physically-plausible lighting values (lux/candela/Kelvin) over173 arbitrary brightness numbers — but FIRST read the existing sun's174 intensity to learn the scene's calibration convention; template worlds175 are often calibrated around `intensity: 10`, and physical values blow176 them out (`references/scene-craft.md` has the numbers,177 `references/pitfalls.md` #12b has the calibration rule).178 179## From Plain English to a Scene180 181The user gives intent, not specs. Translate before you build:182 1831. **Extract the brief.** Subject, mood, time of day, interior/exterior,184 style, deliverable (screenshot? render? playable level?). Ask at most one185 round of clarifying questions, then commit — you are the technical186 director; don't bounce Unreal jargon back at the user.1872. **Plan the build order.** The order that works: level/environment shell →188 blocking (major geometry/meshes in place) → lighting + atmosphere →189 materials → set dressing/detail → camera → capture/render. Post the plan190 as a todo list for multi-step builds.1913. **Build with the loop above**, one milestone at a time, screenshot at192 each milestone.1934. **Art-direct yourself.** Compare each screenshot against the brief:194 readable silhouette? believable light direction/intensity? horizon not195 dead-center? scale correct against a human-height reference? Fix before196 moving on.1975. **Deliver.** Screenshots/renders as files (`MEDIA:` path), plus a short198 summary of what exists in the level and where it was saved.199 200`references/recipes.md` has complete worked builds (exterior daylight scene,201moody interior, golden-hour cinematic + render, asset import & placement)202with the exact call sequences and values.203 204## Reference Files205 206Load on demand; keep SKILL.md-level rules in mind throughout.207 208| Reference | Contents |209|---|---|210| `references/tool-surface.md` | Shipped toolsets catalog, discovery protocol detail, plugin console commands/CVars/flags, screenshot & capture paths, MCP Inspector debugging, extending with custom Python/C++ toolsets |211| `references/advanced-workflows.md` | Sophisticated workflows, live-verified: ProgrammaticToolset batching, Blueprint DSL authoring loop (create→DSL→compile→spawn), PIE test sessions, Sequencer orientation (140 tools), LogsToolset self-debugging, automation testing, semantic asset search, config settings, per-situation decision table |212| `references/scene-craft.md` | Numeric cheat sheet: physical light intensities, color temperatures, exposure/EV100, fog densities, mood recipes (noon/golden hour/overcast/night/interior), scale tables, content path conventions |213| `references/recipes.md` | End-to-end worked builds with exact call sequences |214| `references/pitfalls.md` | Setup, runtime, and workflow pitfalls with fixes — read before your first session and whenever something misbehaves |215 216## Pitfalls (top of mind — full list in references/pitfalls.md)217 218- **Start order matters.** Editor + server up first, then the Hermes219 session. Missing `mcp_unreal_engine_*` tools = wrong order.220- **One call at a time.** Serial game thread; no batching, no overlap.221- **The editor UI freezes during each call.** That's by design (game-thread222 execution). Warn the user during long operations; keep calls small.223- **Modal dialogs block everything.** A tool call that opens (or collides224 with) a modal editor dialog stalls until a human dismisses it. If a call225 hangs indefinitely, tell the user to check the editor for a dialog.226- **Timeouts on long operations.** Hermes' per-call default is 120 s; asset227 imports, big level saves, and renders can exceed it. Raise228 `mcp_servers.unreal-engine.timeout` in `~/.hermes/config.yaml` for229 render/import-heavy sessions.230- **Stale tool schemas.** After authoring/hot-reloading toolsets or enabling231 a plugin, run `ModelContextProtocol.RefreshTools` in the editor console232 and re-`list_toolsets`. New C++ `UFUNCTION`s need a full editor restart —233 Live Coding won't surface them.234- **Experimental plugin.** APIs and tool shapes can change between engine235 versions; trust `describe_toolset` over memory, including this skill's236 examples. When docs and the live schema disagree, the live schema wins.237- **Don't expose the server beyond localhost.** Loopback-only, no auth, by238 design. Never suggest binding it wider.239- **Licensing note.** The server logs on start: data transmitted via the240 plugin to a connected LLM service is Licensed Technology under the UE241 EULA (§6(e)) — the user is responsible for ensuring their LLM provider242 doesn't train on it. Surface this if the user asks about data handling.243 244## Verification Checklist245 246- [ ] `list_toolsets` returns toolsets at session start (connection healthy)247- [ ] Scene state queried before first edit (never assumed empty)248- [ ] After each milestone: changed actors/properties re-queried and a249 screenshot reviewed against the brief250- [ ] Level/dirty packages saved after each milestone and at the end251- [ ] Deliverables exist on disk (screenshot/render paths confirmed) and are252 reported to the user with absolute paths253- [ ] Editor left in a clean state: no pending modal, no unsaved surprise,254 user told exactly what was created/changed and where255 Discovery context
Discovered by repository scan. No exact path reference found in the snapshot’s root AGENTS.md.