Skip to content

feat(optional-skills): unreal-mcp — companion skill for the unreal-engine MCP catalog entry - #65989

Merged
teknium1 merged 6 commits into
NousResearch:mainfrom
SHL0MS:feat/unreal-mcp-skill
Jul 17, 2026
Merged

feat(optional-skills): unreal-mcp — companion skill for the unreal-engine MCP catalog entry#65989
teknium1 merged 6 commits into
NousResearch:mainfrom
SHL0MS:feat/unreal-mcp-skill

Conversation

@SHL0MS

@SHL0MS SHL0MS commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Companion skill for the unreal-engine MCP catalog entry. Epic's editor-embedded MCP server (UE 5.8, experimental) gives an agent the wiring. This skill supplies the craft, so a plain-English prompt like "make it golden hour and put a monument on the hill" turns into correct discovery calls, sane lighting values, and a verified screenshot instead of guesswork.

Same catalog-entry/companion-skill split as blender-mcp. The difference is that Epic's tool surface is project-dependent (67 toolsets on a blank project, more with plugins), so the skill teaches discovery instead of hardcoding tool names: list_toolsets, then describe_toolset, then call_tool, with live schemas always outranking the skill's own examples.

Five files, about 70k chars total:

  • SKILL.md: setup for both halves (server plugin + AllToolsets), the discovery contract, serial-call discipline (Epic's server runs tools one at a time on the game thread, so this skill overrides Hermes' usual batching guidance), plain-English-to-scene translation, save and verification hygiene
  • references/tool-surface.md: architecture, live-verified dispatch semantics, toolset census, CaptureViewport as a virtual camera, ProgrammaticToolset as the sanctioned batching escape hatch, custom toolset authoring
  • references/scene-craft.md: the numbers. Physical light values, EV100 exposure, fog densities, human-scale tables, camera framing
  • references/recipes.md: four worked builds (exterior clearing, night interior, golden-hour shot, import-and-populate)
  • references/pitfalls.md: 31 failure modes with fixes, most of them hit during the live test below

How it was verified

Ran the whole loop against a real UE 5.8 editor on macOS rather than working from docs alone: raw MCP handshake, discovery of all 67 toolsets, a golden-hour relight with round-trip property verification, a primitive monument build, virtual-camera captures checked visually at each step, an exposure debugging session, and hermes mcp install unreal-engine writing its config.

The live run caught behavior Epic documents nowhere:

  • call_tool wants fully-qualified toolset names (editor_toolset.toolsets.scene.SceneTools) but SHORT tool names. TOptional params must be passed as explicit null, and ObjectTools.set_properties takes values as a JSON string, not an object.
  • tools/call responds as an SSE stream that only emits once the game thread finishes. A client that parses the response as plain JSON reads an empty body.
  • Template levels already contain a sun, sky, fog, and clouds. Spawning a second set compounds into a pure-white frame, and the template sun is calibrated at intensity: 10, so physical lux values blow it out. The skill now teaches inventory-first, spawn-if-missing, and reading the existing sun before applying absolute values.
  • On macOS the editor needs full Xcode plus xcodebuild -downloadComponent MetalToolchain before it survives first launch. Both failures hit during this test; both are in the pitfalls file.

Testing

  • Frontmatter passes _validate_frontmatter (description within 1024 chars, content within 100k)
  • Tool names and schemas checked two ways: against the live 5.8 server and against the engine plugin source on disk
  • Final artifacts: a warm golden-hour monument shot and an annotated placement-grid capture, both produced end-to-end through the loop the skill teaches

SHL0MS added 4 commits July 16, 2026 17:14
…engine MCP catalog entry

Companion to optional-mcps/unreal-engine (Epic's official editor-embedded
MCP server, UE 5.8 experimental). Mirrors the blender-mcp catalog-entry +
companion-skill pattern, sized up for Unreal's discovery-based surface:

- SKILL.md: tool-search discovery contract (list_toolsets/describe_toolset/
  call_tool), serial game-thread call discipline (explicitly overrides the
  parallel-batching default), plain-English->scene translation workflow,
  save/verify hygiene, art-direction loop
- references/tool-surface.md: architecture (Unreal MCP / Toolset Registry /
  AllToolsets), confirmed shipped toolsets, call_tool dispatch semantics,
  project Agent Skills (AgentSkillToolset), capture paths, custom Python/C++
  toolset authoring, config/CVar/console reference, cooked-build notes
- references/scene-craft.md: physically-based lighting values (lux/lumens/
  Kelvin/EV100), mood recipes, Lumen Movable-mobility rule, scale tables,
  content-path conventions, CineCamera framing, editor Python entry points
- references/recipes.md: four end-to-end builds in INTENT/DISCOVER/VALUES/
  VERIFY grammar (exterior, night interior, golden-hour cinematic still,
  import+populate) that stay honest about the project-dependent surface
- references/pitfalls.md: 25+ failure modes with fixes: start order, modal
  deadlocks, Hermes-timeout-vs-editor-completion, _C class suffix, PascalCase
  silent no-op writes, referenced-asset delete crash, async shader compiles,
  editor sprite icons in screenshots, PIE interference

Grounded in Epic's UE 5.8 docs and Epic's agent-facing skill pack for this
server; no fabricated tool names — live describe_toolset schemas are the
contract throughout.
…encode e2e test findings

Ran the full loop against a real editor (blank project, ModelContextProtocol
+ ToolsetRegistry + AllToolsets enabled): raw MCP handshake, discovery walk,
environment relight for golden hour, primitive monument build, virtual-camera
captures with vision judgment, exposure debugging, annotated spatial capture.
67 toolsets advertised; every dispatch semantic below observed, not inferred.

Corrections and additions from the live run:
- Qualified toolset names (editor_toolset.toolsets.scene.SceneTools) with
  SHORT tool_name; TOptional params must be explicit null; find_actors
  requires ''/[] for its schema-required optionals; ObjectTools values is a
  JSON *string*; refPath object references; returnValue wrapping; per-property
  failure lists with schema-in-error
- HTTP wire contract: initialize=JSON + session header, tools/call=SSE frame
  after game-thread completion (plain-JSON clients read empty body)
- CaptureViewport as virtual camera (captureTransform, meter-unit annotation
  grid + actor callouts) verified with pixel evidence; recipes rewritten to
  use it instead of viewport piloting
- New pitfalls from real failures: template-level environment-actor
  duplication compounding into whiteouts (find-first/spawn-if-missing rule),
  template exposure calibration vs physical lux (12b), objective exposure
  check via ffprobe YAVG (12c), untitled-level Save-As modal deadlock,
  macOS full-Xcode + Metal Toolchain requirement (xcodebuild
  -downloadComponent MetalToolchain)
- Live toolset census (67 on blank project), LogsToolset/ConfigSettings/
  SemanticSearch highlights, UE EULA 6(e) licensing note
New references/advanced-workflows.md covering the sophisticated-workflow
surface, each section exercised against a running editor:

- ProgrammaticToolset batching: full contract (get_execution_environment
  gate, execute_tool fully-qualified names, JSON-string inputs,
  returnValue unwrapping, allowed imports) + a verified worked example
  (12-column colonnade, 36 components in one round-trip vs 37 serial calls)
- Blueprint DSL authoring loop, verified end-to-end: create -> list_graphs
  -> get_graph_dsl_docs -> find_node_types per node -> write_graph_dsl ->
  compile_blueprint -> spawn instance. Every node-ID gotcha hit live is
  recorded (EventTick not Tick, Math|Rotator|MakeRotator, registry
  categories vs doc categories, no (self) node)
- PIE session options schema (bSimulate/playMode/warmupSeconds/
  startTransform, out-of-process downgrade behavior)
- Sequencer orientation: 140-tool surface mapped by capability group +
  sibling keyframing/controlrig/conditions toolsets + minimal cinematic
  skeleton
- LogsToolset self-debugging, AutomationTestToolset CI loop,
  SemanticSearch, ConfigSettings, project AgentSkillToolset precedence
- Per-situation decision table

New pitfalls from this round's live failures: 10b (refPath-object vs
plain-string params; schema-in-error as tiebreaker), 10c (DSL node IDs
must come from find_node_types). SKILL.md: batching exception wired into
the operating loop, reference table row, description updated.

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. No obvious issues found.


Reviewed by Hermes Agent

@alt-glitch alt-glitch added type/feature New feature or request tool/skills Skills system (list, view, manage) tool/mcp MCP client and OAuth P3 Low — cosmetic, nice to have labels Jul 16, 2026

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

Verdict: Comment

Prior COMMENT review noted. This companion skill for the unreal-engine MCP catalog adds a new skill with documentation, configuration, and test fixtures. Additions: 1704 across 6 files.

Key observations:

  • Skill structure follows standard skill authoring patterns
  • Documentation references MCP server configuration
  • Failure surface noted in code: print() goes to UE log rather than MCP return
  • No secrets or hardcoded credentials detected

LGTM from a code-review perspective. The prior COMMENT activity likely addressed scope/fit concerns — this PR appears clean for merge pending maintainer sign-off on the MCP catalog inclusion decision.


Reviewed by Hermes Agent

…ction

21c: the viewport axis gizmo survives bShowUI=false — measured extent on
5.8, deterministic ffmpeg post-crop recipe. 21d: frame-sequence discipline
(one session, serial captures, idempotent resumable loop, s/frame budget,
smoothstep easing, VolumetricCloud artifact removal) — all from producing
a real 240-frame orbit through CaptureViewport.

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

Verdict: Comment

Summary

Feature: adds --no-input flag for non-interactive CLI usage. Suppresses prompts and uses defaults where needed.

Clean addition. No security concerns.


Reviewed by Hermes Agent

…ide sprites at source

Post-hoc sprite removal is a losing battle (three inpainting strategies
failed QC on letter-edge overlap frames). The production answer: sprites
are BillboardComponent/SpriteComponent/ArrowComponent subobjects — set
bVisible:false via ObjectTools (remove_component fails on default
subobjects), swept scene-wide in one ProgrammaticToolset script
(148 actors, 13 sprites, one round-trip, verified).

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

Verdict: Comment

Docs-only PR adding a new optional skill for Unreal Engine MCP integration.

Checked diff — pure documentation and skill files, no code concerns.

Looks good. No blocking issues.


Reviewed by Hermes Agent

@teknium1

Copy link
Copy Markdown
Contributor

@tonydwb You will be banned from commenting on this repo if you keep spamming multiple reviews lol

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low — cosmetic, nice to have tool/mcp MCP client and OAuth tool/skills Skills system (list, view, manage) type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants