unreal-engine-mcp-server 0.4.7 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +26 -0
- package/.env.production +38 -7
- package/.eslintrc.json +0 -54
- package/.eslintrc.override.json +8 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +94 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
- package/.github/copilot-instructions.md +478 -45
- package/.github/dependabot.yml +19 -0
- package/.github/labeler.yml +24 -0
- package/.github/labels.yml +70 -0
- package/.github/pull_request_template.md +42 -0
- package/.github/release-drafter.yml +148 -0
- package/.github/workflows/auto-merge.yml +38 -0
- package/.github/workflows/ci.yml +38 -0
- package/.github/workflows/dependency-review.yml +17 -0
- package/.github/workflows/gemini-issue-triage.yml +172 -0
- package/.github/workflows/greetings.yml +23 -0
- package/.github/workflows/labeler.yml +16 -0
- package/.github/workflows/links.yml +80 -0
- package/.github/workflows/pr-size-labeler.yml +137 -0
- package/.github/workflows/publish-mcp.yml +12 -7
- package/.github/workflows/release-drafter.yml +23 -0
- package/.github/workflows/release.yml +112 -0
- package/.github/workflows/semantic-pull-request.yml +35 -0
- package/.github/workflows/smoke-test.yml +36 -0
- package/.github/workflows/stale.yml +28 -0
- package/CHANGELOG.md +267 -31
- package/CONTRIBUTING.md +140 -0
- package/README.md +166 -71
- package/claude_desktop_config_example.json +7 -6
- package/dist/automation/bridge.d.ts +50 -0
- package/dist/automation/bridge.js +452 -0
- package/dist/automation/connection-manager.d.ts +23 -0
- package/dist/automation/connection-manager.js +107 -0
- package/dist/automation/handshake.d.ts +11 -0
- package/dist/automation/handshake.js +89 -0
- package/dist/automation/index.d.ts +3 -0
- package/dist/automation/index.js +3 -0
- package/dist/automation/message-handler.d.ts +12 -0
- package/dist/automation/message-handler.js +149 -0
- package/dist/automation/request-tracker.d.ts +25 -0
- package/dist/automation/request-tracker.js +98 -0
- package/dist/automation/types.d.ts +130 -0
- package/dist/automation/types.js +2 -0
- package/dist/cli.js +32 -5
- package/dist/config.d.ts +27 -0
- package/dist/config.js +60 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.js +12 -0
- package/dist/graphql/resolvers.d.ts +268 -0
- package/dist/graphql/resolvers.js +743 -0
- package/dist/graphql/schema.d.ts +5 -0
- package/dist/graphql/schema.js +437 -0
- package/dist/graphql/server.d.ts +26 -0
- package/dist/graphql/server.js +115 -0
- package/dist/graphql/types.d.ts +7 -0
- package/dist/graphql/types.js +2 -0
- package/dist/handlers/resource-handlers.d.ts +20 -0
- package/dist/handlers/resource-handlers.js +180 -0
- package/dist/index.d.ts +31 -18
- package/dist/index.js +119 -619
- package/dist/prompts/index.js +4 -4
- package/dist/resources/actors.d.ts +17 -12
- package/dist/resources/actors.js +56 -76
- package/dist/resources/assets.d.ts +6 -14
- package/dist/resources/assets.js +115 -147
- package/dist/resources/levels.d.ts +13 -13
- package/dist/resources/levels.js +25 -34
- package/dist/server/resource-registry.d.ts +20 -0
- package/dist/server/resource-registry.js +37 -0
- package/dist/server/tool-registry.d.ts +23 -0
- package/dist/server/tool-registry.js +322 -0
- package/dist/server-setup.d.ts +21 -0
- package/dist/server-setup.js +111 -0
- package/dist/services/health-monitor.d.ts +34 -0
- package/dist/services/health-monitor.js +105 -0
- package/dist/services/metrics-server.d.ts +11 -0
- package/dist/services/metrics-server.js +105 -0
- package/dist/tools/actors.d.ts +147 -9
- package/dist/tools/actors.js +350 -311
- package/dist/tools/animation.d.ts +135 -4
- package/dist/tools/animation.js +510 -411
- package/dist/tools/assets.d.ts +117 -19
- package/dist/tools/assets.js +259 -284
- package/dist/tools/audio.d.ts +102 -42
- package/dist/tools/audio.js +272 -685
- package/dist/tools/base-tool.d.ts +17 -0
- package/dist/tools/base-tool.js +46 -0
- package/dist/tools/behavior-tree.d.ts +94 -0
- package/dist/tools/behavior-tree.js +39 -0
- package/dist/tools/blueprint/helpers.d.ts +29 -0
- package/dist/tools/blueprint/helpers.js +182 -0
- package/dist/tools/blueprint.d.ts +228 -118
- package/dist/tools/blueprint.js +685 -832
- package/dist/tools/consolidated-tool-definitions.d.ts +5462 -1781
- package/dist/tools/consolidated-tool-definitions.js +829 -496
- package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
- package/dist/tools/consolidated-tool-handlers.js +211 -1026
- package/dist/tools/debug.d.ts +143 -85
- package/dist/tools/debug.js +234 -180
- package/dist/tools/dynamic-handler-registry.d.ts +11 -0
- package/dist/tools/dynamic-handler-registry.js +101 -0
- package/dist/tools/editor.d.ts +139 -18
- package/dist/tools/editor.js +239 -244
- package/dist/tools/engine.d.ts +10 -4
- package/dist/tools/engine.js +13 -5
- package/dist/tools/environment.d.ts +36 -0
- package/dist/tools/environment.js +267 -0
- package/dist/tools/foliage.d.ts +105 -14
- package/dist/tools/foliage.js +219 -331
- package/dist/tools/handlers/actor-handlers.d.ts +3 -0
- package/dist/tools/handlers/actor-handlers.js +232 -0
- package/dist/tools/handlers/animation-handlers.d.ts +3 -0
- package/dist/tools/handlers/animation-handlers.js +185 -0
- package/dist/tools/handlers/argument-helper.d.ts +16 -0
- package/dist/tools/handlers/argument-helper.js +80 -0
- package/dist/tools/handlers/asset-handlers.d.ts +3 -0
- package/dist/tools/handlers/asset-handlers.js +496 -0
- package/dist/tools/handlers/audio-handlers.d.ts +3 -0
- package/dist/tools/handlers/audio-handlers.js +166 -0
- package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
- package/dist/tools/handlers/blueprint-handlers.js +358 -0
- package/dist/tools/handlers/common-handlers.d.ts +14 -0
- package/dist/tools/handlers/common-handlers.js +56 -0
- package/dist/tools/handlers/editor-handlers.d.ts +3 -0
- package/dist/tools/handlers/editor-handlers.js +119 -0
- package/dist/tools/handlers/effect-handlers.d.ts +3 -0
- package/dist/tools/handlers/effect-handlers.js +171 -0
- package/dist/tools/handlers/environment-handlers.d.ts +3 -0
- package/dist/tools/handlers/environment-handlers.js +170 -0
- package/dist/tools/handlers/graph-handlers.d.ts +3 -0
- package/dist/tools/handlers/graph-handlers.js +90 -0
- package/dist/tools/handlers/input-handlers.d.ts +3 -0
- package/dist/tools/handlers/input-handlers.js +21 -0
- package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
- package/dist/tools/handlers/inspect-handlers.js +383 -0
- package/dist/tools/handlers/level-handlers.d.ts +3 -0
- package/dist/tools/handlers/level-handlers.js +237 -0
- package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
- package/dist/tools/handlers/lighting-handlers.js +144 -0
- package/dist/tools/handlers/performance-handlers.d.ts +3 -0
- package/dist/tools/handlers/performance-handlers.js +130 -0
- package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
- package/dist/tools/handlers/pipeline-handlers.js +110 -0
- package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
- package/dist/tools/handlers/sequence-handlers.js +376 -0
- package/dist/tools/handlers/system-handlers.d.ts +4 -0
- package/dist/tools/handlers/system-handlers.js +506 -0
- package/dist/tools/input.d.ts +19 -0
- package/dist/tools/input.js +89 -0
- package/dist/tools/introspection.d.ts +103 -40
- package/dist/tools/introspection.js +425 -568
- package/dist/tools/landscape.d.ts +97 -36
- package/dist/tools/landscape.js +280 -409
- package/dist/tools/level.d.ts +130 -10
- package/dist/tools/level.js +639 -675
- package/dist/tools/lighting.d.ts +77 -38
- package/dist/tools/lighting.js +441 -943
- package/dist/tools/logs.d.ts +3 -3
- package/dist/tools/logs.js +5 -57
- package/dist/tools/materials.d.ts +91 -24
- package/dist/tools/materials.js +190 -118
- package/dist/tools/niagara.d.ts +149 -39
- package/dist/tools/niagara.js +232 -182
- package/dist/tools/performance.d.ts +27 -12
- package/dist/tools/performance.js +204 -122
- package/dist/tools/physics.d.ts +32 -77
- package/dist/tools/physics.js +171 -582
- package/dist/tools/property-dictionary.d.ts +13 -0
- package/dist/tools/property-dictionary.js +82 -0
- package/dist/tools/sequence.d.ts +73 -48
- package/dist/tools/sequence.js +196 -748
- package/dist/tools/tool-definition-utils.d.ts +59 -0
- package/dist/tools/tool-definition-utils.js +35 -0
- package/dist/tools/ui.d.ts +66 -34
- package/dist/tools/ui.js +134 -214
- package/dist/types/env.d.ts +0 -3
- package/dist/types/env.js +0 -7
- package/dist/types/tool-interfaces.d.ts +898 -0
- package/dist/types/tool-interfaces.js +2 -0
- package/dist/types/tool-types.d.ts +183 -19
- package/dist/types/tool-types.js +0 -4
- package/dist/unreal-bridge.d.ts +24 -131
- package/dist/unreal-bridge.js +364 -1506
- package/dist/utils/command-validator.d.ts +9 -0
- package/dist/utils/command-validator.js +67 -0
- package/dist/utils/elicitation.d.ts +1 -1
- package/dist/utils/elicitation.js +12 -15
- package/dist/utils/error-handler.d.ts +2 -51
- package/dist/utils/error-handler.js +11 -87
- package/dist/utils/ini-reader.d.ts +3 -0
- package/dist/utils/ini-reader.js +69 -0
- package/dist/utils/logger.js +9 -6
- package/dist/utils/normalize.d.ts +3 -0
- package/dist/utils/normalize.js +56 -0
- package/dist/utils/response-factory.d.ts +7 -0
- package/dist/utils/response-factory.js +33 -0
- package/dist/utils/response-validator.d.ts +3 -24
- package/dist/utils/response-validator.js +130 -81
- package/dist/utils/result-helpers.d.ts +4 -5
- package/dist/utils/result-helpers.js +15 -16
- package/dist/utils/safe-json.js +5 -11
- package/dist/utils/unreal-command-queue.d.ts +24 -0
- package/dist/utils/unreal-command-queue.js +120 -0
- package/dist/utils/validation.d.ts +0 -40
- package/dist/utils/validation.js +1 -78
- package/dist/wasm/index.d.ts +70 -0
- package/dist/wasm/index.js +535 -0
- package/docs/GraphQL-API.md +888 -0
- package/docs/Migration-Guide-v0.5.0.md +692 -0
- package/docs/Roadmap.md +53 -0
- package/docs/WebAssembly-Integration.md +628 -0
- package/docs/editor-plugin-extension.md +370 -0
- package/docs/handler-mapping.md +242 -0
- package/docs/native-automation-progress.md +128 -0
- package/docs/testing-guide.md +423 -0
- package/mcp-config-example.json +6 -6
- package/package.json +60 -27
- package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
- package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
- package/scripts/check-unreal-connection.mjs +19 -0
- package/scripts/clean-tmp.js +23 -0
- package/scripts/patch-wasm.js +26 -0
- package/scripts/run-all-tests.mjs +131 -0
- package/scripts/smoke-test.ts +94 -0
- package/scripts/sync-mcp-plugin.js +143 -0
- package/scripts/test-no-plugin-alternates.mjs +113 -0
- package/scripts/validate-server.js +46 -0
- package/scripts/verify-automation-bridge.js +200 -0
- package/server.json +57 -21
- package/src/automation/bridge.ts +558 -0
- package/src/automation/connection-manager.ts +130 -0
- package/src/automation/handshake.ts +99 -0
- package/src/automation/index.ts +2 -0
- package/src/automation/message-handler.ts +167 -0
- package/src/automation/request-tracker.ts +123 -0
- package/src/automation/types.ts +107 -0
- package/src/cli.ts +33 -6
- package/src/config.ts +73 -0
- package/src/constants.ts +12 -0
- package/src/graphql/resolvers.ts +1010 -0
- package/src/graphql/schema.ts +452 -0
- package/src/graphql/server.ts +154 -0
- package/src/graphql/types.ts +7 -0
- package/src/handlers/resource-handlers.ts +186 -0
- package/src/index.ts +152 -663
- package/src/prompts/index.ts +4 -4
- package/src/resources/actors.ts +58 -76
- package/src/resources/assets.ts +147 -134
- package/src/resources/levels.ts +28 -33
- package/src/server/resource-registry.ts +47 -0
- package/src/server/tool-registry.ts +354 -0
- package/src/server-setup.ts +148 -0
- package/src/services/health-monitor.ts +132 -0
- package/src/services/metrics-server.ts +142 -0
- package/src/tools/actors.ts +417 -322
- package/src/tools/animation.ts +671 -461
- package/src/tools/assets.ts +353 -289
- package/src/tools/audio.ts +323 -766
- package/src/tools/base-tool.ts +52 -0
- package/src/tools/behavior-tree.ts +45 -0
- package/src/tools/blueprint/helpers.ts +189 -0
- package/src/tools/blueprint.ts +787 -965
- package/src/tools/consolidated-tool-definitions.ts +993 -515
- package/src/tools/consolidated-tool-handlers.ts +272 -1139
- package/src/tools/debug.ts +292 -187
- package/src/tools/dynamic-handler-registry.ts +151 -0
- package/src/tools/editor.ts +309 -246
- package/src/tools/engine.ts +14 -3
- package/src/tools/environment.ts +287 -0
- package/src/tools/foliage.ts +314 -379
- package/src/tools/handlers/actor-handlers.ts +271 -0
- package/src/tools/handlers/animation-handlers.ts +237 -0
- package/src/tools/handlers/argument-helper.ts +142 -0
- package/src/tools/handlers/asset-handlers.ts +532 -0
- package/src/tools/handlers/audio-handlers.ts +194 -0
- package/src/tools/handlers/blueprint-handlers.ts +380 -0
- package/src/tools/handlers/common-handlers.ts +87 -0
- package/src/tools/handlers/editor-handlers.ts +123 -0
- package/src/tools/handlers/effect-handlers.ts +220 -0
- package/src/tools/handlers/environment-handlers.ts +183 -0
- package/src/tools/handlers/graph-handlers.ts +116 -0
- package/src/tools/handlers/input-handlers.ts +28 -0
- package/src/tools/handlers/inspect-handlers.ts +450 -0
- package/src/tools/handlers/level-handlers.ts +252 -0
- package/src/tools/handlers/lighting-handlers.ts +147 -0
- package/src/tools/handlers/performance-handlers.ts +132 -0
- package/src/tools/handlers/pipeline-handlers.ts +127 -0
- package/src/tools/handlers/sequence-handlers.ts +415 -0
- package/src/tools/handlers/system-handlers.ts +564 -0
- package/src/tools/input.ts +101 -0
- package/src/tools/introspection.ts +493 -584
- package/src/tools/landscape.ts +394 -489
- package/src/tools/level.ts +752 -694
- package/src/tools/lighting.ts +583 -984
- package/src/tools/logs.ts +9 -57
- package/src/tools/materials.ts +231 -121
- package/src/tools/niagara.ts +293 -168
- package/src/tools/performance.ts +320 -168
- package/src/tools/physics.ts +268 -613
- package/src/tools/property-dictionary.ts +98 -0
- package/src/tools/sequence.ts +255 -815
- package/src/tools/tool-definition-utils.ts +35 -0
- package/src/tools/ui.ts +207 -283
- package/src/types/env.ts +0 -10
- package/src/types/tool-interfaces.ts +250 -0
- package/src/types/tool-types.ts +243 -21
- package/src/unreal-bridge.ts +460 -1550
- package/src/utils/command-validator.ts +75 -0
- package/src/utils/elicitation.ts +10 -7
- package/src/utils/error-handler.ts +14 -90
- package/src/utils/ini-reader.ts +86 -0
- package/src/utils/logger.ts +8 -3
- package/src/utils/normalize.ts +60 -0
- package/src/utils/response-factory.ts +39 -0
- package/src/utils/response-validator.ts +176 -56
- package/src/utils/result-helpers.ts +21 -19
- package/src/utils/safe-json.ts +14 -11
- package/src/utils/unreal-command-queue.ts +152 -0
- package/src/utils/validation.ts +4 -1
- package/src/wasm/index.ts +838 -0
- package/test-server.mjs +100 -0
- package/tests/run-unreal-tool-tests.mjs +242 -14
- package/tests/test-animation.mjs +44 -0
- package/tests/test-asset-advanced.mjs +82 -0
- package/tests/test-asset-errors.mjs +35 -0
- package/tests/test-audio.mjs +219 -0
- package/tests/test-automation-timeouts.mjs +98 -0
- package/tests/test-behavior-tree.mjs +261 -0
- package/tests/test-blueprint-events.mjs +35 -0
- package/tests/test-blueprint-graph.mjs +79 -0
- package/tests/test-blueprint.mjs +577 -0
- package/tests/test-client-mode.mjs +86 -0
- package/tests/test-console-command.mjs +56 -0
- package/tests/test-control-actor.mjs +425 -0
- package/tests/test-control-editor.mjs +80 -0
- package/tests/test-extra-tools.mjs +38 -0
- package/tests/test-graphql.mjs +322 -0
- package/tests/test-inspect.mjs +72 -0
- package/tests/test-landscape.mjs +60 -0
- package/tests/test-manage-asset.mjs +438 -0
- package/tests/test-manage-level.mjs +70 -0
- package/tests/test-materials.mjs +356 -0
- package/tests/test-niagara.mjs +185 -0
- package/tests/test-no-inline-python.mjs +122 -0
- package/tests/test-plugin-handshake.mjs +82 -0
- package/tests/test-render.mjs +33 -0
- package/tests/test-runner.mjs +933 -0
- package/tests/test-search-assets.mjs +66 -0
- package/tests/test-sequence.mjs +68 -0
- package/tests/test-system.mjs +57 -0
- package/tests/test-wasm.mjs +193 -0
- package/tests/test-world-partition.mjs +215 -0
- package/tsconfig.json +3 -3
- package/wasm/Cargo.lock +363 -0
- package/wasm/Cargo.toml +42 -0
- package/wasm/LICENSE +21 -0
- package/wasm/README.md +253 -0
- package/wasm/src/dependency_resolver.rs +377 -0
- package/wasm/src/lib.rs +153 -0
- package/wasm/src/property_parser.rs +271 -0
- package/wasm/src/transform_math.rs +396 -0
- package/wasm/tests/integration.rs +109 -0
- package/.github/workflows/smithery-build.yml +0 -29
- package/dist/tools/build_environment_advanced.d.ts +0 -65
- package/dist/tools/build_environment_advanced.js +0 -633
- package/dist/tools/rc.d.ts +0 -110
- package/dist/tools/rc.js +0 -437
- package/dist/tools/visual.d.ts +0 -40
- package/dist/tools/visual.js +0 -282
- package/dist/utils/http.d.ts +0 -6
- package/dist/utils/http.js +0 -151
- package/dist/utils/python-output.d.ts +0 -18
- package/dist/utils/python-output.js +0 -290
- package/dist/utils/python.d.ts +0 -2
- package/dist/utils/python.js +0 -4
- package/dist/utils/stdio-redirect.d.ts +0 -2
- package/dist/utils/stdio-redirect.js +0 -20
- package/docs/unreal-tool-test-cases.md +0 -574
- package/smithery.yaml +0 -29
- package/src/tools/build_environment_advanced.ts +0 -732
- package/src/tools/rc.ts +0 -515
- package/src/tools/visual.ts +0 -281
- package/src/utils/http.ts +0 -187
- package/src/utils/python-output.ts +0 -351
- package/src/utils/python.ts +0 -3
- package/src/utils/stdio-redirect.ts +0 -18
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Contributing to Unreal Engine MCP Server
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing! This document provides guidelines and instructions for contributing.
|
|
4
|
+
|
|
5
|
+
## 📋 Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Code of Conduct](#code-of-conduct)
|
|
8
|
+
- [Getting Started](#getting-started)
|
|
9
|
+
- [Development Workflow](#development-workflow)
|
|
10
|
+
- [Pull Request Process](#pull-request-process)
|
|
11
|
+
- [Coding Standards](#coding-standards)
|
|
12
|
+
|
|
13
|
+
## Code of Conduct
|
|
14
|
+
|
|
15
|
+
Please be respectful and constructive in all interactions. We're building something together.
|
|
16
|
+
|
|
17
|
+
## Getting Started
|
|
18
|
+
|
|
19
|
+
### Prerequisites
|
|
20
|
+
|
|
21
|
+
- **Node.js** 18+
|
|
22
|
+
- **Unreal Engine** 5.0-5.7 (for live testing)
|
|
23
|
+
- **Git**
|
|
24
|
+
|
|
25
|
+
### Setup
|
|
26
|
+
|
|
27
|
+
1. Fork and clone the repository:
|
|
28
|
+
```bash
|
|
29
|
+
git clone https://github.com/YOUR_USERNAME/unreal-engine-mcp-server.git
|
|
30
|
+
cd unreal-engine-mcp-server
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
2. Install dependencies:
|
|
34
|
+
```bash
|
|
35
|
+
npm install
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
3. Build the project:
|
|
39
|
+
```bash
|
|
40
|
+
npm run build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
4. Run smoke tests (no Unreal needed):
|
|
44
|
+
```bash
|
|
45
|
+
npm run test:smoke
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Development Workflow
|
|
49
|
+
|
|
50
|
+
### Branch Naming
|
|
51
|
+
|
|
52
|
+
Use descriptive branch names:
|
|
53
|
+
- `feat/add-new-tool` - New features
|
|
54
|
+
- `fix/connection-timeout` - Bug fixes
|
|
55
|
+
- `docs/update-readme` - Documentation
|
|
56
|
+
- `refactor/cleanup-bridge` - Code refactoring
|
|
57
|
+
|
|
58
|
+
### Running Tests
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Smoke test (CI-compatible, no Unreal needed)
|
|
62
|
+
npm run test:smoke
|
|
63
|
+
|
|
64
|
+
# Live tests (requires Unreal Editor running with plugin)
|
|
65
|
+
npm run test:all
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Building
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm run build # Full build (TypeScript + WASM)
|
|
72
|
+
npm run build:core # TypeScript only
|
|
73
|
+
npm run build:wasm # WASM only (requires wasm-pack)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Pull Request Process
|
|
77
|
+
|
|
78
|
+
### Before Submitting
|
|
79
|
+
|
|
80
|
+
1. ✅ Run `npm run lint` and fix any issues
|
|
81
|
+
2. ✅ Run `npm run test:smoke` to verify basic functionality
|
|
82
|
+
3. ✅ Update documentation if adding new features
|
|
83
|
+
4. ✅ Update `CHANGELOG.md` under `[Unreleased]`
|
|
84
|
+
|
|
85
|
+
### PR Title Format
|
|
86
|
+
|
|
87
|
+
We use [Conventional Commits](https://www.conventionalcommits.org/). PR titles must follow this format:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
<type>: <description>
|
|
91
|
+
|
|
92
|
+
Examples:
|
|
93
|
+
feat: add new animation blending tool
|
|
94
|
+
fix: resolve WebSocket connection timeout
|
|
95
|
+
docs: update installation instructions
|
|
96
|
+
refactor: simplify blueprint graph handler
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Types:** `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
|
|
100
|
+
|
|
101
|
+
### Review Process
|
|
102
|
+
|
|
103
|
+
1. All PRs require at least one approval
|
|
104
|
+
2. CI must pass (lint, smoke test, CodeQL)
|
|
105
|
+
3. Maintainers may request changes
|
|
106
|
+
|
|
107
|
+
## Coding Standards
|
|
108
|
+
|
|
109
|
+
### TypeScript
|
|
110
|
+
|
|
111
|
+
- Use strict TypeScript (`strict: true`)
|
|
112
|
+
- Prefer `async/await` over raw Promises
|
|
113
|
+
- Use descriptive variable names
|
|
114
|
+
- Add JSDoc comments for public APIs
|
|
115
|
+
|
|
116
|
+
### C++ (Plugin)
|
|
117
|
+
|
|
118
|
+
- Follow Unreal Engine coding standards
|
|
119
|
+
- Use `UPROPERTY`/`UFUNCTION` macros appropriately
|
|
120
|
+
- Keep thread safety in mind for async operations
|
|
121
|
+
|
|
122
|
+
### File Organization
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
src/
|
|
126
|
+
├── tools/ # MCP tool implementations
|
|
127
|
+
├── automation/ # Unreal bridge logic
|
|
128
|
+
├── utils/ # Shared utilities
|
|
129
|
+
└── services/ # Background services
|
|
130
|
+
|
|
131
|
+
Plugins/
|
|
132
|
+
└── McpAutomationBridge/ # C++ Unreal plugin
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Questions?
|
|
136
|
+
|
|
137
|
+
- Open a [Discussion](../../discussions) for questions
|
|
138
|
+
- Open an [Issue](../../issues) for bugs or feature requests
|
|
139
|
+
|
|
140
|
+
Thank you for contributing! 🎮
|
package/README.md
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
[](https://opensource.org/licenses/MIT)
|
|
4
4
|
[](https://www.npmjs.com/package/unreal-engine-mcp-server)
|
|
5
5
|
[](https://github.com/modelcontextprotocol/sdk)
|
|
6
|
-
[](https://www.unrealengine.com/)
|
|
7
7
|
[](https://registry.modelcontextprotocol.io/)
|
|
8
8
|
|
|
9
|
-
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine
|
|
9
|
+
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine through the native C++ Automation Bridge plugin. Built with TypeScript, C++, and Rust (WebAssembly) for ultra-high-performance game development automation.
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
@@ -15,50 +15,120 @@ A comprehensive Model Context Protocol (MCP) server that enables AI assistants t
|
|
|
15
15
|
- **Actor Control** - Spawn, delete, and manipulate actors with physics
|
|
16
16
|
- **Editor Control** - PIE sessions, camera, and viewport management
|
|
17
17
|
- **Level Management** - Load/save levels, lighting, and environment building
|
|
18
|
-
- **Animation & Physics** - Blueprints, state machines, ragdolls, constraints
|
|
18
|
+
- **Animation & Physics** - Blueprints, state machines, ragdolls, constraints, vehicle setup
|
|
19
19
|
- **Visual Effects** - Niagara particles, GPU simulations, procedural effects
|
|
20
20
|
- **Sequencer** - Cinematics, camera animations, and timeline control
|
|
21
|
+
- **Graph Editing** - Blueprint, Niagara, Material, and Behavior Tree graph manipulation
|
|
22
|
+
- **World Partition** - Load cells, manage data layers
|
|
23
|
+
- **Render Management** - Render targets, Nanite, Lumen
|
|
24
|
+
- **Pipeline & Testing** - Run UBT, automated tests
|
|
25
|
+
- **Observability** - Log streaming, gameplay debugger, insights, asset queries
|
|
21
26
|
- **Console Commands** - Safe execution with dangerous command filtering
|
|
27
|
+
- **GraphQL API** - Flexible data querying for assets, actors, and blueprints
|
|
28
|
+
|
|
29
|
+
### High-Performance WebAssembly
|
|
30
|
+
- **5-8x faster JSON parsing** - WASM-accelerated property parsing
|
|
31
|
+
- **5-10x faster transform math** - Optimized 3D vector/matrix operations
|
|
32
|
+
- **3-5x faster dependency resolution** - Rapid asset graph traversal
|
|
33
|
+
- **Automatic fallbacks** - Works perfectly without WASM binary
|
|
34
|
+
- **Performance monitoring** - Built-in metrics tracking
|
|
22
35
|
|
|
23
36
|
## Quick Start
|
|
24
37
|
|
|
25
38
|
### Prerequisites
|
|
26
39
|
- Node.js 18+
|
|
27
|
-
- Unreal Engine 5.0-5.
|
|
40
|
+
- Unreal Engine 5.0-5.7
|
|
28
41
|
- Required UE Plugins (enable via **Edit ▸ Plugins**):
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
34
|
-
- **
|
|
42
|
+
- **MCP Automation Bridge** – Native C++ WebSocket automation transport (ships inside `plugins/McpAutomationBridge`)
|
|
43
|
+
- **Editor Scripting Utilities** – Unlocks Editor Actor/Asset subsystems for native tool operations
|
|
44
|
+
- **Sequencer** *(built-in)* – Keep enabled for cinematic tools
|
|
45
|
+
- **Level Sequence Editor** – Required for `manage_sequence` operations
|
|
46
|
+
- **Control Rig** – Required for animation and physics tools
|
|
47
|
+
- **Subobject Data Interface** – Required for Blueprint component manipulation (UE 5.7+)
|
|
35
48
|
|
|
36
|
-
> 💡 After toggling any plugin, restart the editor to finalize activation.
|
|
49
|
+
> 💡 After toggling any plugin, restart the editor to finalize activation. The MCP Automation Bridge provides all automation capabilities through native C++ handlers.
|
|
37
50
|
|
|
38
51
|
### Plugin feature map
|
|
39
52
|
|
|
40
53
|
| Plugin | Location | Used By | Notes |
|
|
41
54
|
|--------|----------|---------|-------|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
| Python Editor Script Plugin | Scripting | Landscapes, lighting, audio, physics, sequences, UI | Required for every Python execution path |
|
|
45
|
-
| Editor Scripting Utilities | Scripting | Actors, foliage, assets, landscapes, UI | Supplies Editor Actor/Asset subsystems in UE5.6 |
|
|
55
|
+
| MCP Automation Bridge | Project Plugins ▸ MCP Automation Bridge | All automation operations | Primary C++ automation transport with native handlers |
|
|
56
|
+
| Editor Scripting Utilities | Scripting | Asset/Actor subsystem operations | Supplies Editor Actor/Asset subsystems |
|
|
46
57
|
| Sequencer | Built-in | Sequencer tools | Ensure not disabled in project settings |
|
|
47
|
-
| Level Sequence Editor | Animation | Sequencer tools |
|
|
58
|
+
| Level Sequence Editor | Animation | Sequencer tools | Required for `manage_sequence` operations |
|
|
59
|
+
| Control Rig | Animation | Animation/Physics tools | Required for `animation_physics` operations |
|
|
60
|
+
| Subobject Data Interface | Scripting | Blueprint tools | Required for `manage_blueprint` component operations (UE 5.7+) |
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
> Tools such as `physics.configureVehicle` accept an optional `pluginDependencies` array so you can list the specific Unreal plugins your project relies on (for example, Chaos Vehicles or third-party vehicle frameworks). When provided, the server will verify those plugins are active before running the configuration.
|
|
63
|
+
|
|
64
|
+
### MCP Automation Bridge plugin
|
|
65
|
+
- Location: `plugins/McpAutomationBridge`
|
|
66
|
+
- Installation: copy the folder into your project's `Plugins/` directory and regenerate project files.
|
|
67
|
+
- Sync helper: run `npm run automation:sync -- --engine "X:/Unreal_Engine/UE_5.6/Engine/Plugins" --project "X:/Newfolder(2)/Game/Unreal/Trial/Plugins" --clean-engine --clean-project` after repo updates to copy the latest bridge build into both plugin folders and strip legacy entries (such as `SupportedTargetPlatforms: ["Editor"]`) that trigger startup warnings.
|
|
68
|
+
- Verification: run `node scripts/verify-automation-bridge.js --project "C:/Path/To/YourProject/Plugins" --config "C:/Path/To/YourProject/Config/DefaultEngine.ini"` to confirm the plugin files and automation bridge environment variables are in place before launching Unreal.
|
|
69
|
+
- Configuration: enable **MCP Automation Bridge** in **Edit ▸ Plugins**, restart the editor, then set the endpoint/token under **Edit ▸ Project Settings ▸ Plugins ▸ MCP Automation Bridge**. The bridge ships with its own lightweight WebSocket client, so you no longer need the engine's WebSockets plugin enabled.
|
|
70
|
+
- Startup: after configuration, the Output Log should show a successful connection and the `bridge_started` broadcast; `SendRawMessage` becomes available to Blueprint and C++ callers for manual testing.
|
|
71
|
+
- Current scope: manages a WebSocket session to the Node MCP server (`ws://127.0.0.1:8091` by default), performs optional capability-token handshakes, dispatches inbound JSON to native C++ handlers, implements reconnect backoff, and responds to editor functions, property operations, blueprint actions, and more through native implementations.
|
|
72
|
+
- Usage: all consolidated tools use the automation bridge for native C++ execution. Keep the plugin enabled for all workflows.
|
|
73
|
+
- Diagnostics: the `ue://automation-bridge` MCP resource surfaces handshake timestamps, recent disconnects, pending automation requests, and whether the Node listener is running—handy when validating editor connectivity from a client.
|
|
74
|
+
- Roadmap: expand the bridge with elevated actions (SCS authoring, typed property marshaling, modal mediation, asset workflows).
|
|
75
|
+
|
|
76
|
+
### WebAssembly Performance (Optional)
|
|
50
77
|
|
|
51
|
-
|
|
78
|
+
The MCP server includes WebAssembly acceleration for computationally intensive operations. WASM is **automatically used when available** and **gracefully falls back** to pure TypeScript when the bundle or toolchain is missing.
|
|
79
|
+
|
|
80
|
+
**To enable full WASM acceleration (5–8x faster operations):**
|
|
52
81
|
|
|
53
82
|
```bash
|
|
54
|
-
# Install
|
|
55
|
-
|
|
83
|
+
# 1. Install Rust toolchain and wasm-pack (once per machine)
|
|
84
|
+
# See https://rustup.rs for installing Rust.
|
|
85
|
+
cargo install wasm-pack
|
|
86
|
+
|
|
87
|
+
# 2. Build TypeScript + WASM bundle
|
|
88
|
+
# The build script always runs the TypeScript compiler and then
|
|
89
|
+
# optionally builds the WASM bundle. If wasm-pack is missing the
|
|
90
|
+
# build will succeed with a warning and the server will use
|
|
91
|
+
# TypeScript fallbacks.
|
|
92
|
+
npm run build
|
|
93
|
+
|
|
94
|
+
# 3. Ensure WASM is enabled (default is enabled if WASM_ENABLED is unset)
|
|
95
|
+
# In .env or your process environment:
|
|
96
|
+
# WASM_ENABLED=true
|
|
56
97
|
|
|
57
|
-
#
|
|
58
|
-
|
|
98
|
+
# 4. Start the server or run tests – the logs will include a
|
|
99
|
+
# "WebAssembly module initialized successfully" message when the
|
|
100
|
+
# bundle is present and loaded.
|
|
101
|
+
npm start
|
|
59
102
|
```
|
|
60
103
|
|
|
61
|
-
|
|
104
|
+
**Without WASM (still fully functional):**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Disable WASM explicitly (optional)
|
|
108
|
+
# In .env or environment:
|
|
109
|
+
# WASM_ENABLED=false
|
|
110
|
+
|
|
111
|
+
npm start
|
|
112
|
+
# Server will always use TypeScript implementations only.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
When the WASM bundle is not present or `wasm-pack` is not installed:
|
|
116
|
+
|
|
117
|
+
- `npm run build` prints a concise message:
|
|
118
|
+
> WASM build failed or wasm-pack missing; continuing with TypeScript-only build.
|
|
119
|
+
- At runtime, the server attempts to load the bundle once. On `ERR_MODULE_NOT_FOUND`
|
|
120
|
+
it logs a single warning suggesting `npm run build`/`cargo install wasm-pack` and
|
|
121
|
+
permanently falls back to TypeScript for that process.
|
|
122
|
+
|
|
123
|
+
WASM acceleration applies to:
|
|
124
|
+
- JSON property parsing (5-8x faster)
|
|
125
|
+
- Transform calculations (5-10x faster)
|
|
126
|
+
- Vector/matrix math (5x faster)
|
|
127
|
+
- Asset dependency resolution (3-5x faster)
|
|
128
|
+
|
|
129
|
+
### Installation
|
|
130
|
+
|
|
131
|
+
Clone and Build
|
|
62
132
|
|
|
63
133
|
```bash
|
|
64
134
|
# Clone the repository
|
|
@@ -75,20 +145,7 @@ node dist/cli.js
|
|
|
75
145
|
|
|
76
146
|
### Unreal Engine Configuration
|
|
77
147
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
```ini
|
|
81
|
-
[/Script/PythonScriptPlugin.PythonScriptPluginSettings]
|
|
82
|
-
bRemoteExecution=True
|
|
83
|
-
bAllowRemotePythonExecution=True
|
|
84
|
-
|
|
85
|
-
[/Script/RemoteControl.RemoteControlSettings]
|
|
86
|
-
bAllowRemoteExecutionOfConsoleCommands=True
|
|
87
|
-
bEnableRemoteExecution=True
|
|
88
|
-
bAllowPythonExecution=True
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Then enable Python execution in: Edit > Project Settings > Plugins > Remote Control
|
|
148
|
+
No additional engine configuration required. The MCP Automation Bridge plugin handles all automation through native C++ code.
|
|
92
149
|
|
|
93
150
|
## MCP Client Configuration
|
|
94
151
|
|
|
@@ -103,10 +160,8 @@ Then enable Python execution in: Edit > Project Settings > Plugins > Remote Cont
|
|
|
103
160
|
"command": "npx",
|
|
104
161
|
"args": ["unreal-engine-mcp-server"],
|
|
105
162
|
"env": {
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"UE_RC_WS_PORT": "30020",
|
|
109
|
-
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject"
|
|
163
|
+
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject",
|
|
164
|
+
"MCP_AUTOMATION_PORT": "8091"
|
|
110
165
|
}
|
|
111
166
|
}
|
|
112
167
|
}
|
|
@@ -122,47 +177,63 @@ Then enable Python execution in: Edit > Project Settings > Plugins > Remote Cont
|
|
|
122
177
|
"command": "node",
|
|
123
178
|
"args": ["path/to/Unreal_mcp/dist/cli.js"],
|
|
124
179
|
"env": {
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"UE_RC_WS_PORT": "30020",
|
|
128
|
-
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject"
|
|
180
|
+
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject",
|
|
181
|
+
"MCP_AUTOMATION_PORT": "8091"
|
|
129
182
|
}
|
|
130
183
|
}
|
|
131
184
|
}
|
|
132
185
|
}
|
|
133
186
|
```
|
|
134
187
|
|
|
135
|
-
## Available Tools (
|
|
188
|
+
## Available Tools (17)
|
|
136
189
|
|
|
137
190
|
| Tool | Description |
|
|
138
191
|
|------|-------------|
|
|
139
|
-
| `manage_asset` |
|
|
140
|
-
| `control_actor` | Spawn, delete
|
|
141
|
-
| `control_editor` | PIE
|
|
142
|
-
| `manage_level` | Load/
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
192
|
+
| `manage_asset` | Assets, Materials, Render Targets, Behavior Trees |
|
|
193
|
+
| `control_actor` | Spawn, delete, modify, physics |
|
|
194
|
+
| `control_editor` | PIE, Camera, UI Input |
|
|
195
|
+
| `manage_level` | Load/Save, World Partition |
|
|
196
|
+
| `manage_lighting` | Spawn Lights, GI, Shadows, Build Lighting |
|
|
197
|
+
| `manage_performance` | Profiling, Optimization, Scalability |
|
|
198
|
+
| `animation_physics` | Animation BPs, Vehicles, Ragdolls |
|
|
199
|
+
| `manage_effect` | Niagara, Particles, Debug Shapes |
|
|
200
|
+
| `manage_blueprint` | Create, SCS, Graph Editing |
|
|
201
|
+
| `manage_blueprint_graph` | Direct Blueprint Graph Manipulation |
|
|
202
|
+
| `build_environment` | Landscape, Foliage, Procedural |
|
|
203
|
+
| `system_control` | UBT, Tests, Logs, Project Settings, CVars |
|
|
204
|
+
| `manage_sequence` | Sequencer/Cinematics |
|
|
205
|
+
| `inspect` | Object Introspection |
|
|
206
|
+
| `manage_audio` | Audio Assets & Components |
|
|
207
|
+
| `manage_behavior_tree` | Behavior Tree Graph Editing |
|
|
208
|
+
| `manage_input` | Enhanced Input Actions & Contexts |
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
## Documentation
|
|
212
|
+
|
|
213
|
+
- [Handler Mappings](docs/handler-mapping.md) - TypeScript to C++ routing guide
|
|
214
|
+
- [GraphQL API](docs/GraphQL-API.md) - Query and mutation reference
|
|
215
|
+
- [Automation Progress](docs/native-automation-progress.md) - Implementation status
|
|
152
216
|
|
|
153
217
|
## Key Features
|
|
154
218
|
|
|
155
|
-
- **
|
|
156
|
-
- **
|
|
157
|
-
- **Connection
|
|
158
|
-
- **Non-Intrusive Health Checks** - Uses echo commands every 30 seconds
|
|
219
|
+
- **Native C++ Automation** - All operations route through the MCP Automation Bridge plugin's native C++ handlers
|
|
220
|
+
- **Graceful Degradation** - Server starts even without an active Unreal connection
|
|
221
|
+
- **On-Demand Connection** - Retries automation handshakes with backoff instead of persistent polling
|
|
222
|
+
- **Non-Intrusive Health Checks** - Uses echo commands every 30 seconds while connected
|
|
159
223
|
- **Command Safety** - Blocks dangerous console commands
|
|
160
224
|
- **Input Flexibility** - Vectors/rotators accept object or array format
|
|
161
225
|
- **Asset Caching** - 10-second TTL for improved performance
|
|
226
|
+
- **GraphQL** - Specialized endpoint for complex queries
|
|
227
|
+
|
|
228
|
+
### Native C++ Architecture
|
|
229
|
+
|
|
230
|
+
The server uses a 100% native C++ approach: all automation operations are implemented as native C++ handlers in the MCP Automation Bridge plugin (under `plugins/McpAutomationBridge/Source/`). This eliminates dependencies and provides better performance, reliability, and type safety.
|
|
231
|
+
|
|
232
|
+
Configuration and runtime defaults are centralized in `src/constants.ts`. All operations route through the automation bridge's WebSocket protocol to native plugin handlers.
|
|
162
233
|
|
|
163
234
|
## Supported Asset Types
|
|
164
235
|
|
|
165
|
-
Blueprints, Materials, Textures, Static/Skeletal Meshes, Levels, Sounds, Particles, Niagara Systems
|
|
236
|
+
Blueprints, Materials, Textures, Static/Skeletal Meshes, Levels, Sounds, Particles, Niagara Systems, Behavior Trees
|
|
166
237
|
|
|
167
238
|
## Example Console Commands
|
|
168
239
|
|
|
@@ -171,18 +242,42 @@ Blueprints, Materials, Textures, Static/Skeletal Meshes, Levels, Sounds, Particl
|
|
|
171
242
|
- **Gameplay**: `slomo 0.5`, `god`, `fly`
|
|
172
243
|
- **Rendering**: `r.screenpercentage 50`, `r.vsync 0`
|
|
173
244
|
|
|
174
|
-
|
|
245
|
+
### Configuration
|
|
175
246
|
|
|
176
247
|
### Environment Variables
|
|
177
248
|
|
|
178
249
|
```env
|
|
179
|
-
UE_HOST=127.0.0.1 # Unreal Engine host
|
|
180
|
-
UE_RC_HTTP_PORT=30010 # Remote Control HTTP port
|
|
181
|
-
UE_RC_WS_PORT=30020 # Remote Control WebSocket port
|
|
182
250
|
UE_PROJECT_PATH="C:/Users/YourName/Documents/Unreal Projects/YourProject" # Absolute path to your .uproject file
|
|
183
|
-
LOG_LEVEL=info
|
|
251
|
+
LOG_LEVEL=info # debug | info | warn | error
|
|
252
|
+
|
|
253
|
+
# Automation bridge WebSocket client (Node -> Unreal editor)
|
|
254
|
+
MCP_AUTOMATION_HOST=127.0.0.1 # Host/interface for the automation bridge connection
|
|
255
|
+
MCP_AUTOMATION_PORT=8091 # Primary bridge port (must match the plugin's port)
|
|
256
|
+
MCP_AUTOMATION_CLIENT_MODE=true # Set to false to disable the automation bridge client
|
|
257
|
+
MCP_AUTOMATION_CAPABILITY_TOKEN= # Optional capability token for handshake security
|
|
258
|
+
|
|
259
|
+
# Legacy/Alternative variables
|
|
260
|
+
# MCP_AUTOMATION_WS_PORT=8090 # Fallback port if MCP_AUTOMATION_PORT is unset
|
|
261
|
+
# MCP_AUTOMATION_BRIDGE_ENABLED=true # Legacy alias for MCP_AUTOMATION_CLIENT_MODE
|
|
262
|
+
|
|
263
|
+
# WebAssembly acceleration
|
|
264
|
+
WASM_ENABLED=true # Default: enabled if unset; set false to force TS-only
|
|
265
|
+
# Optional override when hosting the WASM bundle elsewhere:
|
|
266
|
+
# WASM_PATH=file:///absolute/path/to/unreal_mcp_wasm.js
|
|
267
|
+
|
|
268
|
+
# Timeouts / caching (advanced – safe defaults are baked in)
|
|
269
|
+
MCP_AUTOMATION_REQUEST_TIMEOUT_MS=120000
|
|
270
|
+
MCP_AUTOMATION_EVENT_TIMEOUT_MS=0
|
|
271
|
+
ASSET_LIST_TTL_MS=10000
|
|
184
272
|
```
|
|
185
273
|
|
|
274
|
+
Note on configuration precedence
|
|
275
|
+
- The server uses `dotenv` to load `.env` for local development. A `.env.production` file is included as a reference for production deployments; copy values into your real environment or secret store as appropriate.
|
|
276
|
+
- Environment variables (.env / system env) override the internal runtime defaults (for example, defaults in `src/index.ts`, `src/automation-bridge.ts`, and individual tool implementations). This lets you tune timeouts, logging, and WASM behavior without modifying source code. Keep secrets in `.env` or a secret manager — do not store secrets in source files.
|
|
277
|
+
|
|
278
|
+
Mock mode
|
|
279
|
+
|
|
280
|
+
|
|
186
281
|
### Docker
|
|
187
282
|
|
|
188
283
|
```bash
|
|
@@ -200,7 +295,7 @@ docker run --rm -it mcp/server/unreal-engine-mcp-server:latest
|
|
|
200
295
|
## Development
|
|
201
296
|
|
|
202
297
|
```bash
|
|
203
|
-
npm run build # Build TypeScript
|
|
298
|
+
npm run build # Build TypeScript and (optionally) the WebAssembly bundle
|
|
204
299
|
npm run lint # Run ESLint
|
|
205
300
|
npm run lint:fix # Fix linting issues
|
|
206
301
|
```
|
|
@@ -214,4 +309,4 @@ Contributions welcome! Please:
|
|
|
214
309
|
|
|
215
310
|
## License
|
|
216
311
|
|
|
217
|
-
MIT - See [LICENSE](LICENSE) file
|
|
312
|
+
MIT - See [LICENSE](LICENSE) file
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"unreal-engine": {
|
|
4
4
|
"command": "node",
|
|
5
|
-
"args": [
|
|
5
|
+
"args": [
|
|
6
|
+
"PathToMCP\\UnrealMCP\\unreal-engine-mcp-server\\dist\\cli.js"
|
|
7
|
+
],
|
|
6
8
|
"env": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject"
|
|
9
|
+
"UE_PROJECT_PATH": "C:/Users/YourName/Documents/Unreal Projects/YourProject",
|
|
10
|
+
"MCP_AUTOMATION_HOST": "127.0.0.1",
|
|
11
|
+
"MCP_AUTOMATION_PORT": "8091"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
|
-
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { AutomationBridgeOptions, AutomationBridgeStatus, AutomationBridgeMessage, AutomationBridgeResponseMessage, AutomationBridgeEvents } from './types.js';
|
|
3
|
+
export declare class AutomationBridge extends EventEmitter {
|
|
4
|
+
private readonly host;
|
|
5
|
+
private readonly port;
|
|
6
|
+
private readonly ports;
|
|
7
|
+
private readonly negotiatedProtocols;
|
|
8
|
+
private readonly capabilityToken?;
|
|
9
|
+
private readonly enabled;
|
|
10
|
+
private readonly serverName;
|
|
11
|
+
private readonly serverVersion;
|
|
12
|
+
private readonly clientHost;
|
|
13
|
+
private readonly clientPort;
|
|
14
|
+
private readonly serverLegacyEnabled;
|
|
15
|
+
private readonly maxConcurrentConnections;
|
|
16
|
+
private connectionManager;
|
|
17
|
+
private requestTracker;
|
|
18
|
+
private handshakeHandler;
|
|
19
|
+
private messageHandler;
|
|
20
|
+
private log;
|
|
21
|
+
private lastHandshakeAt?;
|
|
22
|
+
private lastHandshakeMetadata?;
|
|
23
|
+
private lastHandshakeAck?;
|
|
24
|
+
private lastHandshakeFailure?;
|
|
25
|
+
private lastDisconnect?;
|
|
26
|
+
private lastError?;
|
|
27
|
+
private requestQueue;
|
|
28
|
+
private queuedRequestItems;
|
|
29
|
+
private connectionPromise?;
|
|
30
|
+
constructor(options?: AutomationBridgeOptions);
|
|
31
|
+
on<K extends keyof AutomationBridgeEvents>(event: K, listener: AutomationBridgeEvents[K]): this;
|
|
32
|
+
once<K extends keyof AutomationBridgeEvents>(event: K, listener: AutomationBridgeEvents[K]): this;
|
|
33
|
+
off<K extends keyof AutomationBridgeEvents>(event: K, listener: AutomationBridgeEvents[K]): this;
|
|
34
|
+
start(): void;
|
|
35
|
+
private startClient;
|
|
36
|
+
private handleClientConnection;
|
|
37
|
+
stop(): void;
|
|
38
|
+
isConnected(): boolean;
|
|
39
|
+
getStatus(): AutomationBridgeStatus;
|
|
40
|
+
sendAutomationRequest<T = AutomationBridgeResponseMessage>(action: string, payload?: Record<string, unknown>, options?: {
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
}): Promise<T>;
|
|
43
|
+
private sendRequestInternal;
|
|
44
|
+
private processRequestQueue;
|
|
45
|
+
send(payload: AutomationBridgeMessage): boolean;
|
|
46
|
+
private broadcast;
|
|
47
|
+
private flushQueue;
|
|
48
|
+
private emitAutomation;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=bridge.d.ts.map
|