The MCP Automation Bridge is a production-ready Unreal Editor plugin that enables direct communication between the MCP server and Unreal Engine, providing 100% native C++ implementations for all automation tasks. This document describes the current implementation and future roadmap.
- Direct SCS Access – expose Blueprint SimpleConstructionScript mutations through a curated C++ API that the MCP server can call.
- Typed Property Marshaling – relay incoming JSON payloads through Unreal's
FPropertysystem so class/enum/soft object references resolve without manual string coercion. - Asset Lifecycle Helpers – wrap save/move/delete flows with redirector fix-up, source control hooks, and safety prompts suppressed via automation policies.
- Modal Dialog Mediation – surface blocking dialogs to the MCP server with explicit continue/cancel channels instead of stalling automation.
- Native-Only Architecture – all operations implemented in C++ without Python dependencies for maximum reliability and performance.
- Editor plugin registers a
UMcpAutomationBridgesubsystem. - Subsystem subscribes to a local WebSocket or named pipe opened by the Node MCP server when it needs elevated actions.
- Each elevated command includes a capability token so the plugin can enforce an allow-list (exposed through project settings) and fail gracefully if disabled.
- Results are serialized back to the MCP server with structured warnings so the client can still prompt the user when manual intervention is required.
- Plugin Location:
plugins/McpAutomationBridge/(source) andPublic/McpAutomationBridge/(distribution) - Module Type: Editor-only subsystem (
UEditorSubsystem) - Main Class:
UMcpAutomationBridgeSubsystem- manages WebSocket connections, request routing, and automation execution - WebSocket Implementation:
FMcpBridgeWebSocket- custom lightweight WebSocket client (no external dependencies) - Settings:
UMcpAutomationBridgeSettings- configurable via Project Settings ▸ Plugins ▸ MCP Automation Bridge
- WebSocket Server Mode: Plugin connects TO the MCP server's WebSocket listener (default:
ws://127.0.0.1:8091) - Handshake Protocol:
bridge_hello→ capability token validation →bridge_ack - Reconnection: Automatic with exponential backoff (configurable delay, 5s default)
- Heartbeat: Optional heartbeat tracking for connection health monitoring
- Capability Token: Optional security layer for authentication
- Multi-Port Support: Can connect to multiple server ports simultaneously
- Thread-Safe Queue: Incoming requests queued and processed sequentially on game thread
- Telemetry: Tracks success/failure rates, execution times, and action statistics
- Error Handling: Structured error responses with error codes and retry flags
- Timeout Management: Configurable timeouts for long-running operations
src/automation-bridge.tsspins up a lightweight WebSocket server (defaultws://127.0.0.1:8091) guarded by an optional capability token.- Handshake flow: editor sends
bridge_hello→ server validates capability token → server responds withbridge_ackand caches the socket for future elevated commands. - Environment flags:
MCP_AUTOMATION_HOST,MCP_AUTOMATION_PORT,MCP_AUTOMATION_CAPABILITY_TOKEN, andMCP_AUTOMATION_CLIENT_MODEallow operators to relocate or disable the listener without code changes. - Health endpoint (
ue://health) now surfaces bridge connectivity status so MCP clients can confirm when the plugin is online.
✅ Fully Implemented - Native C++ using UE Asset Tools
import_asset_deferred- NativeUAssetImportTaskwith FBX/texture supportcreate_material-UMaterialFactoryNewfor material creationcreate_material_instance- Material instance creation with parameter overridesduplicate_asset- Asset duplication with overwrite controlrename_asset- Asset renaming with conflict detectionmove_asset- Asset moving with optional redirector fixupdelete_assets- Bulk asset deletion with dependency handlinglist- Asset Registry directory listing with filteringcreate_folder- Content folder creationget_dependencies- Asset dependency graph traversalcreate_thumbnail- Thumbnail generationset_tags- Asset metadata tagginggenerate_report- Asset reportsvalidate- Asset existence validationget_source_control_state- Check checkout/revision statusanalyze_graph- Deep dependency analysis
✅ Fully Implemented - Native subsystem operations
execute_console_command- DirectGEditor->Exec()console command executionGET_ALL_ACTORS-UEditorActorSubsystem::GetAllLevelActors()SPAWN_ACTOR-UEditorActorSubsystem::SpawnActorFromClass()DELETE_ACTOR-UEditorActorSubsystem::DestroyActor()ASSET_EXISTS-UEditorAssetLibrary::DoesAssetExist()SET_VIEWPORT_CAMERA-UUnrealEditorSubsystem::SetLevelViewportCameraInfo()CREATE_LEVEL- Level creation via subsystemLOAD_LEVEL- Level loadingSAVE_LEVEL- Level savingBUILD_LIGHTING-ULevelEditorSubsystem::BuildLightMaps()LIST_ACTOR_COMPONENTS- Enumerate components for any editor actor viaUEditorActorSubsystemRESOLVE_OBJECT- Resolve assets or classes and surface best-effort metadata for inspection toolsSAVE_DIRTY_PACKAGES/SAVE_ALL_DIRTY_PACKAGES- Trigger native dirty-package saves throughUEditorLoadingAndSavingUtilsSAVE_ASSET- Persist a specific asset path using throttledUEditorAssetLibraryhelpersSET_BLUEPRINT_DEFAULT- Routes to native blueprint default editing without Python fallbacks
✅ Fully Implemented - Typed FProperty marshaling
- set_object_property - JSON →
FPropertyconversion with type safety - get_object_property -
FProperty→ JSON serialization - Array Operations: append, remove, insert, get_element, set_element, clear
- Map Operations: set_value, get_value, remove_key, has_key, get_keys, clear
- Set Operations: add, remove, contains, clear
- Supported Types: primitives, enums, objects, soft object paths, structs (Vector/Rotator), arrays, maps, sets
- Blueprint asset creation ✅
- SimpleConstructionScript (SCS) node manipulation
⚠️ - Component addition to blueprints
⚠️ - Blueprint compilation and saving ✅
- CDO (Class Default Object) property modification ✅
- Blueprint default overrides via
SET_BLUEPRINT_DEFAULTrequests ✅
✅ Fully Implemented - Level Sequence Editor integration
- HandleSequenceAction - Sequence creation and management
- HandleAddSequencerKeyframe - Keyframe operations
- HandleManageSequencerTrack - Track management
- HandleAddCameraTrack - Camera track addition
- HandleAddAnimationTrack - Animation track addition
- HandleAddTransformTrack - Transform track addition
✅ Fully Implemented - Niagara and debug visualization
- Niagara system creation (
UNiagaraSystemFactoryNew) - Niagara emitter creation
- Spawn Niagara actors in level
- Modify Niagara user parameters
- Debug shape drawing (lines, boxes, spheres, arrows)
- Dynamic light spawning
- Effect cleanup operations
✅ Fully Implemented - Animation blueprint and physics setup
- HandleCreateAnimBlueprint - Animation blueprint creation
- HandlePlayAnimMontage - Montage playback control
- HandleSetupRagdoll - Ragdoll physics configuration
- Physics asset manipulation
- Skeletal mesh animation control
✅ Fully Implemented - Landscape and foliage tools
- HandleCreateLandscape - Landscape actor creation
- HandleEditLandscape - Landscape editing dispatcher
- HandleModifyHeightmap - Heightmap sculpting
- HandlePaintLandscapeLayer - Layer painting
- HandlePaintFoliage - Foliage painting with density control
- HandleRemoveFoliage - Foliage removal
- HandleGetFoliageInstances - Foliage instance queries
✅ Fully Implemented - Material editor graph manipulation
- HandleAddMaterialTextureSample - Add texture sample nodes
- HandleAddMaterialExpression - Add material expression nodes
- Material graph node connections
- Material parameter setup
✅ Fully Implemented - Production asset pipeline support
- HandleSourceControlCheckout - Perforce/SVN checkout
- HandleSourceControlSubmit - Perforce/SVN submit
- HandleFixupRedirectors - Redirector cleanup after moves
- HandleBulkRenameAssets - Batch asset renaming
- HandleBulkDeleteAssets - Batch asset deletion
- HandleGenerateThumbnail - Thumbnail generation
✅ Fully Implemented - Viewport and actor manipulation
- PIE (Play In Editor) control -
ULevelEditorSubsystem::EditorPlaySimulate() - Camera positioning and rotation -
UUnrealEditorSubsystem::SetLevelViewportCameraInfo() - View mode changes - Native
GEditor->Exec()with safety validation - Actor spawning with class resolution
- Actor deletion with label matching
- Actor property modification
❌ REMOVED - Python execution is no longer supported
- All automation is now implemented natively in C++
execute_editor_pythonaction returns error: "Python execution is no longer supported"- Improves security, reliability, and performance
- Migration: Use native automation actions instead
| Consolidated Tool | Actions | Bridge Status | Notes |
|---|---|---|---|
| manage_asset | list |
✅ Native | Asset Registry native listing |
import |
✅ Native | UAssetImportTask FBX/texture import |
|
create_material |
✅ Native | UMaterialFactoryNew native creation |
|
create_material_instance |
✅ Native | Native material instance factory | |
duplicate / rename / move |
✅ Native | UEditorAssetLibrary + AssetTools |
|
delete |
✅ Native | Bulk deletion with dependency handling | |
| control_actor | spawn |
✅ Native | UEditorActorSubsystem::SpawnActorFromClass() |
delete |
✅ Native | UEditorActorSubsystem::DestroyActor() |
|
apply_force |
🔧 Planned | Physics forces native implementation pending | |
| control_editor | play / stop / pause |
✅ Native | ULevelEditorSubsystem PIE control |
set_camera |
✅ Native | UUnrealEditorSubsystem::SetLevelViewportCameraInfo() |
|
set_view_mode |
✅ Native | Safe viewmode validation + GEditor->Exec() |
|
console_command |
✅ Native | GEditor->Exec() direct execution |
|
| manage_level | load / save / stream |
✅ Native | Editor function handlers for level ops |
create_level |
✅ Native | Native CREATE_LEVEL function |
|
create_light |
✅ Native | SPAWN_ACTOR with light class |
|
build_lighting |
✅ Native | ULevelEditorSubsystem::BuildLightMaps() |
|
| animation_physics | create_animation_bp |
✅ Native | Animation blueprint factory |
play_montage |
✅ Native | Native montage playback control | |
setup_ragdoll |
✅ Native | Ragdoll physics configuration | |
configure_vehicle |
Complex vehicle setup in progress | ||
| create_effect | niagara |
✅ Native | UNiagaraSystemFactoryNew native creation |
spawn_niagara |
✅ Native | Native Niagara actor spawning | |
debug_shape |
✅ Native | Debug line/box/sphere drawing | |
dynamic_light |
✅ Native | Dynamic light spawning | |
| manage_blueprint | create |
✅ Native | Blueprint asset creation |
add_component |
✅ Native | SCS manipulation via native APIs; UE 5.7+ SubobjectDataInterface support added | |
edit_defaults |
✅ Native | CDO property modification | |
| build_environment | create_landscape |
✅ Native | Landscape actor creation |
sculpt / paint |
✅ Native | Heightmap/layer editing | |
add_foliage |
✅ Native | Foliage painting with density control | |
| system_control | profile / show_fps |
✅ Native | Console command execution |
set_quality |
✅ Native | Quality settings via console | |
screenshot |
✅ Native | Screenshot capture commands | |
| console_command | (all) | ✅ Native | Direct GEditor->Exec() with safety filtering |
| execute_python | (all) | ❌ Removed | Python execution removed; use native actions |
| manage_sequence | create / add_track |
✅ Native | Level Sequence Editor native operations |
keyframe |
✅ Native | Native keyframe manipulation | |
| inspect | get_property |
✅ Native | FProperty → JSON serialization |
set_property |
✅ Native | JSON → FProperty typed marshaling |
|
list |
✅ Native | Actor/asset listing via subsystems | |
| manage_audio | create_sound_cue |
✅ Native | Sound Cue asset creation |
play_sound_at_location |
✅ Native | 3D spatial sound playback | |
create_audio_component |
✅ Native | Audio component creation | |
| manage_behavior_tree | add_node |
✅ Native | Behavior Tree node creation |
connect_nodes |
✅ Native | Node connection management | |
set_node_properties |
✅ Native | Node property editing |
Legend:
- ✅ Native = Fully implemented in C++ plugin
⚠️ Partial = Some operations implemented; work in progress- 🔧 Planned = Designed but not yet implemented
- ❌ Removed = Feature removed (Python execution)
- ✔️ WebSocket Transport - Custom lightweight WebSocket client with no external dependencies
- ✔️ Asset Operations - Complete native asset pipeline (import, create, modify, delete)
- ✔️ Property Marshaling - Full
FPropertysystem integration with type safety - ✔️ Editor Functions - Native implementations of common editor operations
- ✔️ Sequence/Animation - Level Sequence Editor and animation blueprint integration
- ✔️ Environment Tools - Landscape and foliage manipulation
- ✔️ Material Graph - Material node creation and editing
- ✔️ Source Control - Perforce/SVN integration
- ✔️ Telemetry - Request tracking and performance metrics
- ✔️ Security - Capability token authentication
- ✔️ Camera Control - Native viewport camera positioning via
SetLevelViewportCameraInfo() - ✔️ Python-Free Architecture - 100% native C++ implementation
- Blueprint SCS Enhancements - Improving UE 5.6+ SubobjectData subsystem compatibility
- Native component addition and modification (UE 5.7+ supported)
- Full SCS tree manipulation
- Modal Dialog Interception - Handling blocking editor dialogs
- Asset save prompts
- Package checkout dialogs
-
Complete Blueprint SCS API - Finalize SimpleConstructionScript manipulation for UE 5.6+
- Leverage
SubobjectDatasubsystem when available - Fallback to legacy reflection-based approach for older engines
- Native component property editing
- Leverage
-
Physics System Integration - Native physics force application
UPrimitiveComponent::AddForce()wrappers- Physics constraint manipulation
- Impulse and torque application
- Vehicle physics configuration
-
Modal Dialog Mediation - Intercept blocking dialogs
- Asset save prompts
- Package checkout dialogs
- Build lighting confirmation
- Timeout-based fallback responses
-
Hot Reload Support - Update plugin without editor restart
- Dynamic handler registration
- State preservation across reloads
-
Enhanced Telemetry - Expanded metrics and diagnostics
- Per-action success/failure rates
- Performance profiling data
- Connection health history
-
Batch Operations - Multi-operation transactions
- Transactional asset workflows
- Undo/redo support
- Rollback on failure
-
Advanced Security - Enhanced authentication
- Session token support
- Per-action capability tokens
- Client certificate validation
-
Marketplace Distribution - Packaged plugin distribution
- Pre-compiled binaries for multiple UE versions
- Simplified installation process
- Documentation and samples
-
Blueprint Visual Editing - Direct Blueprint graph manipulation
- Node creation and connection
- Function/macro creation
- Event graph editing
- Core - Base engine functionality
- CoreUObject - UObject system
- Engine - Runtime engine
- UnrealEd - Editor subsystems
- EditorScriptingUtilities - Editor scripting APIs
- AssetTools - Asset manipulation
- AssetRegistry - Asset database
- LevelEditor - Level editing subsystems
- BlueprintGraph - Blueprint editing
- LevelSequence / LevelSequenceEditor - Sequencer
- Landscape / LandscapeEditor - Terrain tools
- Niagara / NiagaraEditor - VFX system
- MaterialEditor - Material editing
- SubobjectDataInterface - UE 5.7+ Blueprint SCS subsystem
- ControlRig - Animation and physics tools
- SourceControl - Version control integration
- Copy
Public/McpAutomationBridge/to your project'sPlugins/directory - Regenerate project files
- Enable plugin via Edit ▸ Plugins ▸ MCP Automation Bridge
- Restart editor
- Server Host: MCP server address (default:
127.0.0.1) - Server Port: WebSocket port (default:
8091) - Capability Token: Optional security token
- Reconnect Enabled: Auto-reconnect on disconnect
- Reconnect Delay: Delay between reconnection attempts (default: 5s)
- Heartbeat Timeout: Connection health timeout
- Ticker Interval: Subsystem tick frequency (default: 0.25s)
MCP_AUTOMATION_HOST- Server host overrideMCP_AUTOMATION_PORT- Server port overrideMCP_AUTOMATION_CAPABILITY_TOKEN- Security tokenMCP_IGNORE_SUBOBJECTDATA- Disable SubobjectData detectionMCP_FORCE_SUBOBJECTDATA- Force SubobjectData module linkage
- Python execution has been removedMCP_ALLOW_PYTHON_FALLBACKS- Setting removed from project settingsAllow Python Fallbacks- Configuration property removedbAllowPythonFallbacks- Configuration property removedbAllowAllPythonFallbacks
Contributions welcome! Please open an issue or discussion before starting major work to ensure alignment with the roadmap.
- Follow Unreal Engine C++ coding standards
- Add handler functions to appropriate
McpAutomationBridge_*Handlers.cppfiles - Register new handlers in
ProcessAutomationRequest() - Update
McpAutomationBridgeSubsystem.hwith handler declarations - Add comprehensive error handling with structured error codes
- Test across multiple UE versions (5.0-5.7)
- Document new actions in this file
- No Python dependencies - All new features must be native C++