Important
🚀 Native MCP & Code-Backed Tool Parity Release
This release covers the v0.5.21 to 0.5.30 release diff, including the TypeScript MCP server, native bridge plugin, tests, scripts, docs, workflows, and dependency manifests. The summary below is based on code and test changes, not commit subjects alone.
✨ Added
- Native MCP Streamable HTTP endpoint — added an opt-in in-plugin
/mcpserver with JSON-RPC 2.0 initialize/tools/list/tools/call handling, POST/GET/DELETE routing,Mcp-Session-Idsession tracking, SSE tool-result streaming, progress notifications, persistent notification streams,notifications/tools/list_changedbroadcasts, CORS handling, loopback-first binding, capability-token checks, and an editor status-bar indicator. - Self-describing native MCP tools — added C++
FMcpToolRegistry,FMcpSchemaBuilder,MCP_REGISTER_TOOL, canonical native tool filtering, cached schema generation, and native dynamic tool/category enablement for the 23 canonical parent tools. - PCG automation — added
manage_pcgTypeScript/native schemas and handlers for graph/subgraph creation, PCG node aliases, pin connections, reflected node settings, component/world execution, partition grid configuration, save/overwrite behavior, and PCG plugin availability errors. - Environment systems automation — added build-environment coverage for heightmap import/export, landscape layer info/material/splines/LOD/streaming proxies, foliage type configuration/paint/remove flows, sky and volumetric-cloud setup, weather/wind/time-of-day systems, water bodies, water waves/material/collision, and buoyancy components.
- Behavior Tree authoring and introspection — added
add_subnode, root-sentinel decorators, decorator/service validation, subnode-aware lookup,FBlackboardKeySelectorassignment, andget_treeruntime hierarchy serialization with root decorators, edge decorators, decorator ops, services, key properties, subtree references, and a success-with-null-root contract for graphless trees. - Blueprint, property, and inspection tools — added
inspect_cdo, Class Default Object component/property export, SCS and inherited SCS component classification, typed Blueprint custom-event pins, Enhanced Input graph nodes, inherited variable/member-class graph node lookup, and property access for Blueprint-added SCS component templates. - Editor, world, and input capabilities — added full editor-window screenshots, game viewport screenshot routing, image content responses, simulated keyboard/mouse input aliases, active camera reporting, PIE runtime inspection, native
get_current_level, actor material/view-target native actions, spawn scale support, and create-plane height handling. - Material, audio, animation, and system actions — added Material Function creation/editing/calls/info, FunctionInput/FunctionOutput graph support, source-effect chains and source-effect presets,
force_rebuild_blend_space, legacy/per-key input mapping edits, project setting writes, native asset validation, andexecute_pythonfor inline or project-local Python files.
🛡️ Security
- GraphQL attack surface removed — deleted the GraphQL server, schema/resolver/loaders, GraphQL docs, GraphQL unit tests, and direct GraphQL runtime dependencies.
- Native MCP exposure controls — default native MCP binding stays loopback-only unless explicitly allowed; non-loopback hosts warn, sessions are validated, stale requests/streams are cleaned up, and native HTTP requests use explicit request-origin routing instead of socket inference.
- Capability-token and dynamic-tool protections — native MCP validates
X-MCP-Capability-Tokenwhen required, while both TypeScript and native dynamic tool managers protectmanage_tools/inspectand protected categories from accidental disablement. - Python execution hardening —
execute_pythonenforces code/file exclusivity, a 1 MB inline code limit, project-root path normalization, symlink escape checks,__file__setup for file execution, temp-file cleanup, and directPythonScriptPluginexecution. - Path, command, log, and workflow hardening — tightened UE path normalization, console-command validation, snapshot/log path handling, level save/load flows, image/log redaction, safe
tmp/cleanup, sync-script argument parsing, and GitHub Actions interpolation by moving untrusted values into environment variables.
🔧 Changed
- Release metadata — updated
package.json,package-lock.json,server.json, thesrc/index.tsfallback, andMcpAutomationBridge.upluginto0.5.30. - Canonical TypeScript tool surface — kept the 23 parent tools but moved action lists into shared constants, grouped tools into
core,world,gameplay, andutility, merged nestedparamsinto top-level arguments for constrained clients, centralized handler routing, and removed legacy per-domain tool files. - Dynamic tool listing —
tools/listnow checks known client support fortools.listChanged; dynamic clients can receive category-filtered tools, while clients without dynamic loading still see the full compatible tool surface. - Automation bridge lifecycle — refactored host/port parsing, multi-port WebSocket connection attempts, handshake metadata, request queueing, progress timeout extension, stale-progress detection, absolute timeout caps, rate/message-size boundaries, disconnect/error tracking, and image-payload redaction.
- Native bridge runtime — split request dispatch out of the subsystem, added explicit
ERequestOrigin, queued requests through the game thread, converted captured engine errors into failed responses, pumped GameThread tasks during native transport shutdown, and exposed native transport session/tool counts to UI. - Response and schema handling — improved response validation, summary text generation, image response content, scalar result promotion, safe JSON cleanup, schema reuse, action-specific parameter descriptions, and stricter error context on tool failures.
- Plugin compatibility — updated bridge metadata for UE 5.8 Preview and added PythonScriptPlugin, StructUtils, Synthesis, and PCG plugin declarations where the new handlers need them.
- Scripts and workflows — made smoke tests run through SDK
InMemoryTransport, added native parity/parameter audit npm scripts, changedcleanto removetsconfig.tsbuildinfo, added Linux/macOS/Windows plugin packaging scripts, strengthened sync/cleanup scripts, and made CI/publish/release gates stricter.
🛠️ Fixed
Routing & Native Tool Parity
- Fixed native/consolidated action routing for validation, audio creation, material graph pins, editor simulation,
add_widget_child,get_current_level, AnimBP graph discovery, lighting, SCS edits, native actor/editor actions, exact action matching, and nestedparamspayloads.
Blueprint, Graph & Property Handling
- Fixed inherited UPROPERTY lookup for VariableGet/VariableSet with
memberClass, staleK2Node_EnhancedInputActiontitle cache refresh, Blueprint SCS component introspection, SCS template get/set paths, typed custom-event pin reconstruction, transaction ordering, null pin checks, case-insensitive pin connections, graph allocation fallback, and Blueprint busy-state cleanup.
Editor, World & Gameplay Behavior
- Fixed PIE/game viewport screenshots, full editor screenshot capture, simulated input dispatch, active camera view-state reporting, PIE runtime inspection, spawn scale application, plane height fields, landscape bounds fallback, prompt-save return codes, actor list response handling, editor/world handler stability, and native actor/editor contract alignment.
Asset, Level, Animation, Niagara & Audio
- Fixed unloaded level info via AssetRegistry fallback, classNames-only recursive asset search, normalized level path validation, source audio persistence, source-effect routing, audio authoring saves, material expression aliases, material pin routing to main inputs, UMaterialFunction graph details, animation notify validation, BlendSpace grid rebuilds, Niagara crash paths, hollow getters, parameter aliases, FText and FText-array property serialization, and
execute_pythonfile mode/output capture.
Plugin Stability & Compatibility
- Fixed native plugin compatibility across UE versions, macOS Clang audio literal builds, plugin package output detection, bridge socket/runtime handling, JSON key normalization, request telemetry, native MCP session validation, safe operations includes, handler review findings, and optional module/plugin availability paths.
🧪 Tests
- Added/expanded Vitest coverage for automation bridge connection, handshake, message schema, request tracking, config defaults, resources, health/metrics services, response validation, command validation, log reading/redaction, safe JSON, type coercion, normalization, queues, elicitation, and consolidated handler routing.
- Expanded MCP integration suites across core/world/gameplay/utility tools, including PCG, Behavior Tree subnodes/get-tree, networking/sessions/input, control-editor screenshots/input, actor list handling, audio/source effects, assets/material functions, Blueprints/SCS, levels, geometry, GAS, combat, inventory, interaction, sequence, environment, and system-control Python/project-setting flows.
- Added static native MCP action parity auditing and strict parameter-combination auditing that compare TypeScript schemas, native C++ tool definitions, native canonical registration, and test coverage.
- Hardened the custom test runner with richer assertions, captured variables, live/static reports, fake-success detection, progress output, expectation utilities, and deterministic parameter audit behavior.
🧰 Maintenance
- Refreshed AGENTS/project guidance, README/setup content, handler maps, testing guide, native automation progress notes, Roadmap, MCP coverage notes, UE 5.8 support notes, native audio routing notes, plugin READMEs, issue templates, labels, gitignore rules, production env defaults, Context7 config, and release metadata.
- Removed obsolete GraphQL API docs and GraphQL security tests with the GraphQL implementation.
- Trimmed unused plugin helpers/includes, streamlined bridge build settings, normalized Node built-in imports, simplified startup cleanup, optimized server utilities/build caching, and improved package/sync/cleanup script safety.
🔄 Dependencies
- Removed direct runtime dependencies for
@graphql-tools/schema,dataloader,graphql, andgraphql-yoga. - Refreshed the lockfile across npm dependency groups, including security/maintenance updates for transitive runtime and dev packages.
- Updated pinned GitHub Actions used by checkout, setup-node, CodeQL, Release Drafter, github-script, action-gh-release, stale, labeler, and dependency-review workflows.
📚 Documentation
- Refreshed root and plugin README content, MCP/native transport setup, handler mapping, editor plugin extension notes, Roadmap, testing guide, native automation progress, MCP coverage notes, UE 5.8 support, and native audio routing notes.
- Added and updated repository guidance files for root, TypeScript server/tools/handlers/automation/utils/tests, native MCP internals, and McpAutomationBridge areas.
- Removed obsolete GraphQL API documentation.
👥 Contributors
Special thanks to the contributors in this release window, with obvious author aliases collapsed.
- GitHub Actions command-injection hardening: @google-labs-jules[bot]
- Dependency and workflow version updates: @dependabot[bot]
- Editor/runtime behavior fixes: @xqdd for native
get_current_levelrouting, spawn scale, create-plane height, lighting routing, Blueprint SCS verification, PIE runtime reporting, active camera state, per-key input mapping edits, and prompt-save return handling. - Behavior Tree and Blueprint introspection: @kalihman for
get_tree, decorator/service subnodes, Blackboard key selector assignment, inherited Blueprint/SCS introspection, and classNames-only asset search behavior. - Blueprint graph and animation reliability: @VictorZhang01 for inherited UPROPERTY graph nodes, stale K2 node title refresh, AnimBP graph routing, and
force_rebuild_blend_space. - Material and Blueprint component support: @nekwo for Material Function authoring support and Blueprint-added component template property get/set coverage.
- Plugin packaging and inspection: @azwjp for Windows plugin packaging fixes, and @6r0m for
inspect_cdoBlueprint CDO inspection. - Platform/build and routing fixes: @jenniferied for macOS Clang audio-handler build fixes, @Miriam-R-coder for exact Blueprint action routing, and @spencer-zaid for screenshot, Niagara, hollow getter, and parameter-alias fixes.
- Python and level metadata fixes: @zmarx for
execute_pythonfile-mode handling and Python plugin initialization guards, and @codeman101 for unloadedget_level_infoAssetRegistry fallback.
📊 Release Statistics
| Metric | Count |
|---|---|
| Release diff | v0.5.21..0.5.30 |
| Files changed | 406 |
| Insertions | 61,393 |
| Deletions | 30,957 |
| TypeScript canonical tools | 23 |
| Native canonical tools | 23 |
| Native action parity mismatches | 0 |