A "MCP" combo button in the top toolbar (LevelEditor.LevelEditorToolBar.User)
opens a dropdown with:
- Status: live Remote Control reachability (:30010, green/red) + re-check, and a
"Start Remote Control server" action.
- Active tools (N): submenu listing the catalogue from tools.json (name + desc).
- Settings: opens the Setup Wizard tab.
The bridge ping is refactored into PingRc(bool) so it can update a cached status
silently (menu open) or with the startup notification.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
FFileHelper::SaveStringToFile defaults to an encoding Node can't always parse;
force UTF-8 without BOM for auth.env and integrations.json so the gateway reads
them correctly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Native UE editor tab (SMCPWizard) so setup happens inside Unreal, not just the
Node CLI. Three sections:
- Remote Control: live status of the :30010 bridge + a button to start it
(WebControl.StartServer + EnableServerOnStartup).
- API keys: paste/save the agent-gateway Anthropic token (auth.env) and
ElevenLabs key (integrations.json) — both git-ignored.
- MCP tools: lists the catalogue from tools.json.
Wiring:
- UEBlueprintMCPEditor module registers a nomad tab + a Tools-menu entry.
- Build.cs gains the Projects module (IPluginManager).
- server.js exports TOOLS and only launches the stdio server when run directly
(isMain), so src/dumpTools.mjs can generate tools.json. `npm run dump-tools`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The editor probe wrote to a project-relative path and assumed the Remote Control
editor was the same project the server resolved from disk. When they differ (a
different editor is the live RC target), the probe file never matched and the
doctor wrongly reported "enable the Python plugin".
Now the probe writes to a machine-local temp path (RC is always localhost) and
reports the editor's own project, so the doctor:
- correctly confirms Python + C++ regardless of which project is resolved
- flags a clear "Editor ↔ project" warning when the live editor differs
Also use process.exitCode instead of process.exit() in the CLI to avoid a
Windows libuv teardown assertion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New users hit predictable friction (no npm install, Remote Control / Python
plugin not enabled, C++ not built). This makes onboarding self-service:
- src/doctor.js — shared diagnostics (project & engine detection, Node deps,
Remote Control reachability, Python plugin, C++ module built, optional Voxel).
Zero-dependency top-level imports so it runs before `npm install`. Runnable as
`npm run doctor`, reused by the wizard and the server first-run hook.
- src/setup.js — interactive `npm run setup` wizard: offers to install deps,
confirms/pins project & engine (and RC URL) overrides, re-checks the editor
until reachable, then prints the MCP-client config snippet.
- projectPaths.js — persisted config (mcp.config.json, git-ignored) with
precedence env > config > auto-detect; remoteControlUrl(); first-run marker
helpers (isFirstRun/markRun under Saved/).
- server.js — `doctor` MCP tool (so a client/assistant can run the checks in a
session) + a one-time first-run diagnostic printed to stderr pointing at
`npm run setup`.
- ueBridge.js honors the config-driven Remote Control URL.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Merge of the two project copies into one self-contained plugin (the superset:
variable_op + variables.py, full pcg_op runtime/declarative/preset ops, the
CreateWidgetFloatAnimation widget tool, and full Voxel graph authoring).
Made fully project- and machine-agnostic — no hardcoded paths:
- New src/projectPaths.js auto-detects the host .uproject (walk-up), project
name, Editor build target, log file, and engine install (EngineAssociation
via launcher manifest/registry, else installed-engine scan). All overridable
via UE_* env vars.
- Rewired buildOrchestrator/insights/launcher/insightsExporter/server.js and the
Python workers (cpp_scaffold, live_coding, apply_graph, console) off the old
C:/Github/ihy, IHY*, E:/UE_Versions and UE_5.7 literals onto the resolver.
- Voxel made optional: Build.cs auto-detects the Voxel plugin (env
UE_MCP_WITH_VOXEL override) and the C++ compiles to stubs under WITH_MCP_VOXEL,
so the module builds in projects without Voxel; .uplugin marks Voxel optional.
- De-branded the agent-gateway and docs; scrubbed a leaked API key; excluded
node_modules/Binaries/Intermediate/__pycache__/secrets from the repo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>