unreal-engine-mcp-server 0.4.7 → 0.5.1
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-config.yml +51 -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 +27 -0
- package/.github/workflows/labeler.yml +17 -0
- package/.github/workflows/links.yml +80 -0
- package/.github/workflows/pr-size-labeler.yml +137 -0
- package/.github/workflows/publish-mcp.yml +13 -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 +338 -31
- package/CONTRIBUTING.md +140 -0
- package/GEMINI.md +115 -0
- package/Public/Plugin_setup_guide.mp4 +0 -0
- package/README.md +189 -128
- 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 +26 -0
- package/dist/config.js +59 -0
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +16 -0
- package/dist/graphql/loaders.d.ts +64 -0
- package/dist/graphql/loaders.js +117 -0
- package/dist/graphql/resolvers.d.ts +268 -0
- package/dist/graphql/resolvers.js +746 -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 +117 -0
- package/dist/graphql/types.d.ts +9 -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 +33 -18
- package/dist/index.js +130 -619
- 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 +20 -0
- package/dist/server-setup.js +71 -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 +163 -9
- package/dist/tools/actors.js +356 -311
- package/dist/tools/animation.d.ts +135 -4
- package/dist/tools/animation.js +510 -411
- package/dist/tools/assets.d.ts +75 -29
- package/dist/tools/assets.js +265 -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.d.ts +208 -126
- 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 +198 -1027
- package/dist/tools/debug.d.ts +143 -85
- package/dist/tools/debug.js +234 -180
- package/dist/tools/dynamic-handler-registry.d.ts +13 -0
- package/dist/tools/dynamic-handler-registry.js +23 -0
- package/dist/tools/editor.d.ts +30 -83
- package/dist/tools/editor.js +247 -244
- package/dist/tools/engine.d.ts +10 -4
- package/dist/tools/engine.js +13 -5
- package/dist/tools/environment.d.ts +30 -0
- package/dist/tools/environment.js +267 -0
- package/dist/tools/foliage.d.ts +65 -99
- package/dist/tools/foliage.js +221 -331
- package/dist/tools/handlers/actor-handlers.d.ts +3 -0
- package/dist/tools/handlers/actor-handlers.js +227 -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 +54 -93
- package/dist/tools/landscape.js +284 -409
- package/dist/tools/level.d.ts +66 -27
- package/dist/tools/level.js +647 -675
- package/dist/tools/lighting.d.ts +77 -38
- package/dist/tools/lighting.js +445 -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 +194 -118
- package/dist/tools/niagara.d.ts +149 -39
- package/dist/tools/niagara.js +267 -182
- package/dist/tools/performance.d.ts +27 -13
- package/dist/tools/performance.js +203 -122
- package/dist/tools/physics.d.ts +32 -77
- package/dist/tools/physics.js +175 -582
- package/dist/tools/property-dictionary.d.ts +13 -0
- package/dist/tools/property-dictionary.js +82 -0
- package/dist/tools/sequence.d.ts +85 -60
- package/dist/tools/sequence.js +208 -747
- 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 +64 -34
- package/dist/tools/ui.js +134 -214
- package/dist/types/automation-responses.d.ts +115 -0
- package/dist/types/automation-responses.js +2 -0
- package/dist/types/env.d.ts +0 -3
- package/dist/types/env.js +0 -7
- package/dist/types/responses.d.ts +249 -0
- package/dist/types/responses.js +2 -0
- 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 +68 -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/path-security.d.ts +2 -0
- package/dist/utils/path-security.js +24 -0
- package/dist/utils/response-factory.d.ts +7 -0
- package/dist/utils/response-factory.js +27 -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 +684 -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 +67 -28
- 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 +136 -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 +58 -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 +19 -0
- package/src/graphql/loaders.ts +244 -0
- package/src/graphql/resolvers.ts +1008 -0
- package/src/graphql/schema.ts +452 -0
- package/src/graphql/server.ts +156 -0
- package/src/graphql/types.ts +10 -0
- package/src/handlers/resource-handlers.ts +186 -0
- package/src/index.ts +166 -664
- package/src/resources/actors.ts +58 -76
- package/src/resources/assets.ts +148 -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 +114 -0
- package/src/services/health-monitor.ts +132 -0
- package/src/services/metrics-server.ts +142 -0
- package/src/tools/actors.ts +426 -323
- package/src/tools/animation.ts +672 -461
- package/src/tools/assets.ts +364 -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.ts +792 -970
- package/src/tools/consolidated-tool-definitions.ts +993 -515
- package/src/tools/consolidated-tool-handlers.ts +258 -1146
- package/src/tools/debug.ts +292 -187
- package/src/tools/dynamic-handler-registry.ts +33 -0
- package/src/tools/editor.ts +329 -253
- package/src/tools/engine.ts +14 -3
- package/src/tools/environment.ts +281 -0
- package/src/tools/foliage.ts +330 -392
- package/src/tools/handlers/actor-handlers.ts +265 -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 +418 -507
- package/src/tools/level.ts +786 -708
- package/src/tools/lighting.ts +588 -984
- package/src/tools/logs.ts +9 -57
- package/src/tools/materials.ts +237 -121
- package/src/tools/niagara.ts +335 -168
- package/src/tools/performance.ts +320 -169
- package/src/tools/physics.ts +274 -613
- package/src/tools/property-dictionary.ts +98 -0
- package/src/tools/sequence.ts +276 -820
- package/src/tools/tool-definition-utils.ts +35 -0
- package/src/tools/ui.ts +205 -283
- package/src/types/automation-responses.ts +119 -0
- package/src/types/env.ts +0 -10
- package/src/types/responses.ts +355 -0
- 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 +76 -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.test.ts +162 -0
- package/src/utils/normalize.ts +60 -0
- package/src/utils/path-security.ts +43 -0
- package/src/utils/response-factory.ts +44 -0
- package/src/utils/response-validator.ts +176 -56
- package/src/utils/result-helpers.ts +21 -19
- package/src/utils/safe-json.test.ts +90 -0
- package/src/utils/safe-json.ts +14 -11
- package/src/utils/unreal-command-queue.ts +152 -0
- package/src/utils/validation.test.ts +184 -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 +369 -0
- package/tests/test-asset-advanced.mjs +82 -0
- package/tests/test-asset-errors.mjs +35 -0
- package/tests/test-asset-graph.mjs +311 -0
- package/tests/test-audio.mjs +417 -0
- package/tests/test-automation-timeouts.mjs +98 -0
- package/tests/test-behavior-tree.mjs +444 -0
- package/tests/test-blueprint-graph.mjs +410 -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 +112 -0
- package/tests/test-graphql.mjs +372 -0
- package/tests/test-input.mjs +349 -0
- package/tests/test-inspect.mjs +302 -0
- package/tests/test-landscape.mjs +316 -0
- package/tests/test-lighting.mjs +428 -0
- package/tests/test-manage-asset.mjs +438 -0
- package/tests/test-manage-level.mjs +89 -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-performance.mjs +539 -0
- package/tests/test-plugin-handshake.mjs +82 -0
- package/tests/test-runner.mjs +933 -0
- package/tests/test-sequence.mjs +104 -0
- package/tests/test-system.mjs +96 -0
- package/tests/test-wasm.mjs +283 -0
- package/tests/test-world-partition.mjs +215 -0
- package/tsconfig.json +3 -3
- package/vitest.config.ts +35 -0
- 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/prompts/index.d.ts +0 -21
- package/dist/prompts/index.js +0 -217
- 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/prompts/index.ts +0 -249
- 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/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unreal-engine-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"mcpName": "io.github.ChiR24/unreal-engine-mcp",
|
|
5
|
-
"description": "A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via
|
|
5
|
+
"description": "A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via native automation bridge. Built with TypeScript and designed for game development automation.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"module": "src/index.ts",
|
|
8
8
|
"main": "dist/index.js",
|
|
@@ -11,20 +11,56 @@
|
|
|
11
11
|
"unreal-engine-mcp-server": "dist/cli.js"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc -p tsconfig.json",
|
|
14
|
+
"build:core": "tsc -p tsconfig.json",
|
|
15
|
+
"build": "npm run build:core && (npm run build:wasm || echo \"WASM build failed or wasm-pack missing; continuing with TypeScript-only build. To enable WASM, install wasm-pack and re-run npm run build.\")",
|
|
15
16
|
"build:watch": "tsc -p tsconfig.json --watch",
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"smithery:ci": "npm run build && npx @smithery/cli build",
|
|
20
|
-
"dev": "ts-node-esm src/cli.ts",
|
|
21
|
-
"lint": "eslint . --ext .ts",
|
|
17
|
+
"start": "node dist/cli.js",
|
|
18
|
+
"dev": "ts-node-esm src/cli.ts",
|
|
19
|
+
"lint": "echo \"Lint: typescript/javascript, C, C++, C#\" && eslint . --ext .ts",
|
|
22
20
|
"lint:fix": "eslint . --ext .ts --fix",
|
|
21
|
+
"lint:cpp": "echo \"Running C/C++ lint (cpplint)\" && (python -m cpplint --recursive plugins || echo 'cpplint not found; skipping C/C++ lint')",
|
|
22
|
+
"lint:c": "echo \"Running C lint (cpplint)\" && (python -m cpplint --recursive plugins || echo 'cpplint not found; skipping C lint')",
|
|
23
|
+
"lint:csharp": "echo \"Running C# lint (dotnet format)\" && (dotnet tool run dotnet-format --verify-no-changes || echo 'dotnet-format not available or formatting required; skipping C# lint')",
|
|
23
24
|
"clean": "rimraf dist",
|
|
24
25
|
"prepare": "npm run build",
|
|
25
|
-
"
|
|
26
|
+
"automation:sync": "node scripts/sync-mcp-plugin.js",
|
|
27
|
+
"clean:tmp": "node scripts/clean-tmp.js",
|
|
28
|
+
"test": "node scripts/run-all-tests.mjs",
|
|
29
|
+
"test:unit": "vitest run",
|
|
30
|
+
"test:unit:watch": "vitest",
|
|
31
|
+
"test:unit:coverage": "vitest run --coverage",
|
|
32
|
+
"test:all": "node scripts/run-all-tests.mjs",
|
|
33
|
+
"test:manage_asset": "node tests/test-manage-asset.mjs",
|
|
34
|
+
"test:plugin-handshake": "node tests/test-plugin-handshake.mjs",
|
|
35
|
+
"test:control_actor": "node tests/test-control-actor.mjs",
|
|
36
|
+
"test:control_editor": "node tests/test-control-editor.mjs",
|
|
37
|
+
"test:manage_level": "node tests/test-manage-level.mjs",
|
|
38
|
+
"test:animation": "node tests/test-animation.mjs",
|
|
39
|
+
"test:blueprint": "node tests/test-blueprint.mjs",
|
|
40
|
+
"test:blueprint_graph": "node tests/test-blueprint-graph.mjs",
|
|
41
|
+
"test:materials": "node tests/test-materials.mjs",
|
|
42
|
+
"test:niagara": "node tests/test-niagara.mjs",
|
|
43
|
+
"test:landscape": "node tests/test-landscape.mjs",
|
|
44
|
+
"test:sequence": "node tests/test-sequence.mjs",
|
|
45
|
+
"test:system": "node tests/test-system.mjs",
|
|
46
|
+
"test:console_command": "node tests/test-console-command.mjs",
|
|
47
|
+
"test:inspect": "node tests/test-inspect.mjs",
|
|
48
|
+
"test:asset_advanced": "node tests/test-asset-advanced.mjs",
|
|
49
|
+
"test:world_partition": "node tests/test-world-partition.mjs",
|
|
50
|
+
"test:no-inline-python": "node tests/test-no-inline-python.mjs",
|
|
51
|
+
"test:graphql": "node tests/test-graphql.mjs",
|
|
52
|
+
"test:audio": "node tests/test-audio.mjs",
|
|
53
|
+
"test:behavior_tree": "node tests/test-behavior-tree.mjs",
|
|
54
|
+
"test:lighting": "node tests/test-lighting.mjs",
|
|
55
|
+
"test:performance": "node tests/test-performance.mjs",
|
|
56
|
+
"test:input": "node tests/test-input.mjs",
|
|
57
|
+
"test:asset_graph": "node tests/test-asset-graph.mjs",
|
|
58
|
+
"test:wasm": "node tests/test-wasm.mjs",
|
|
59
|
+
"build:wasm": "echo 'Building WebAssembly module...' && cd wasm && wasm-pack build --target web --out-dir ../src/wasm/pkg && cd .. && node scripts/patch-wasm.js",
|
|
60
|
+
"test:wasm:all": "npm run build:core && npm run build:wasm && node tests/test-wasm.mjs",
|
|
61
|
+
"test:smoke": "node --loader ts-node/esm scripts/smoke-test.ts",
|
|
26
62
|
"type-check": "tsc --noEmit",
|
|
27
|
-
"prebuild": "npm run clean"
|
|
63
|
+
"prebuild": "npm run lint && npm run clean"
|
|
28
64
|
},
|
|
29
65
|
"engines": {
|
|
30
66
|
"node": ">=18"
|
|
@@ -42,25 +78,28 @@
|
|
|
42
78
|
"author": "Unreal Engine MCP Team",
|
|
43
79
|
"license": "MIT",
|
|
44
80
|
"dependencies": {
|
|
45
|
-
"@
|
|
46
|
-
"
|
|
81
|
+
"@graphql-tools/schema": "^10.0.30",
|
|
82
|
+
"@graphql-tools/utils": "^10.11.0",
|
|
83
|
+
"@modelcontextprotocol/sdk": "^1.25.0",
|
|
47
84
|
"ajv": "^8.17.1",
|
|
48
|
-
"
|
|
49
|
-
"dotenv": "^
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
85
|
+
"dataloader": "^2.2.3",
|
|
86
|
+
"dotenv": "^17.2.3",
|
|
87
|
+
"graphql": "^16.12.0",
|
|
88
|
+
"graphql-yoga": "^5.17.1",
|
|
89
|
+
"ws": "^8.18.3",
|
|
90
|
+
"zod": "^4.2.1"
|
|
53
91
|
},
|
|
54
92
|
"devDependencies": {
|
|
55
|
-
"@types/json5": "^
|
|
56
|
-
"@types/node": "^
|
|
57
|
-
"@types/ws": "^8.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"rimraf": "^6.
|
|
93
|
+
"@types/json5": "^2.2.0",
|
|
94
|
+
"@types/node": "^25.0.2",
|
|
95
|
+
"@types/ws": "^8.18.1",
|
|
96
|
+
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
|
97
|
+
"@typescript-eslint/parser": "^8.49.0",
|
|
98
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
99
|
+
"eslint": "^9.39.2",
|
|
100
|
+
"rimraf": "^6.1.2",
|
|
63
101
|
"ts-node": "^10.9.2",
|
|
64
|
-
"typescript": "^5.
|
|
102
|
+
"typescript": "^5.9.3",
|
|
103
|
+
"vitest": "^4.0.16"
|
|
65
104
|
}
|
|
66
|
-
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
[FilterPlugin]
|
|
2
|
+
; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and
|
|
3
|
+
; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively.
|
|
4
|
+
;
|
|
5
|
+
; Examples:
|
|
6
|
+
; /README.txt
|
|
7
|
+
; /Extras/...
|
|
8
|
+
; /Binaries/ThirdParty/*.dll
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"FileVersion": 3,
|
|
3
|
+
"Version": 1,
|
|
4
|
+
"VersionName": "0.1.0",
|
|
5
|
+
"FriendlyName": "MCP Automation Bridge",
|
|
6
|
+
"Description": "Editor-side bridge that accepts elevated automation requests from the Unreal MCP server.",
|
|
7
|
+
"Category": "Automation",
|
|
8
|
+
"CreatedBy": "unreal-engine-mcp-server",
|
|
9
|
+
"CreatedByURL": "https://github.com/ChiR24/Unreal_mcp",
|
|
10
|
+
"DocsURL": "",
|
|
11
|
+
"MarketplaceURL": "",
|
|
12
|
+
"SupportURL": "",
|
|
13
|
+
"CanContainContent": false,
|
|
14
|
+
"IsBetaVersion": true,
|
|
15
|
+
"IsExperimentalVersion": true,
|
|
16
|
+
"EnabledByDefault": true,
|
|
17
|
+
"SupportsUEBuildSystem": true,
|
|
18
|
+
"Modules": [
|
|
19
|
+
{
|
|
20
|
+
"Name": "McpAutomationBridge",
|
|
21
|
+
"Type": "Editor",
|
|
22
|
+
"LoadingPhase": "Default"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"BlacklistPlatforms": [],
|
|
26
|
+
"Plugins": [
|
|
27
|
+
{
|
|
28
|
+
"Name": "EditorScriptingUtilities",
|
|
29
|
+
"Enabled": true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"Name": "LevelSequenceEditor",
|
|
33
|
+
"Enabled": true
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"Name": "Niagara",
|
|
37
|
+
"Enabled": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"Name": "ControlRig",
|
|
41
|
+
"Enabled": true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"Name": "ProceduralMeshComponent",
|
|
45
|
+
"Enabled": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"Name": "Interchange",
|
|
49
|
+
"Enabled": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"Name": "InterchangeOpenUSD",
|
|
53
|
+
"Enabled": true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"Name": "DataValidation",
|
|
57
|
+
"Enabled": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"Name": "EnhancedInput",
|
|
61
|
+
"Enabled": true
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
using UnrealBuildTool;
|
|
2
|
+
using System;
|
|
3
|
+
using System.IO;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
|
|
6
|
+
public class McpAutomationBridge : ModuleRules
|
|
7
|
+
{
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Configures build rules, dependencies, and compile-time feature definitions for the McpAutomationBridge module based on the provided build target.
|
|
10
|
+
/// </summary>
|
|
11
|
+
/// <param name="Target">Build target settings used to determine platform, configuration, and whether editor-only dependencies and feature flags should be enabled.</param>
|
|
12
|
+
public McpAutomationBridge(ReadOnlyTargetRules Target) : base(Target)
|
|
13
|
+
{
|
|
14
|
+
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
|
15
|
+
|
|
16
|
+
PublicDependencyModuleNames.AddRange(new string[]
|
|
17
|
+
{
|
|
18
|
+
"Core","CoreUObject","Engine","Json","JsonUtilities",
|
|
19
|
+
"LevelSequence", "MovieScene", "MovieSceneTracks"
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
if (Target.bBuildEditor)
|
|
23
|
+
{
|
|
24
|
+
// Editor-only Public Dependencies
|
|
25
|
+
PublicDependencyModuleNames.AddRange(new string[]
|
|
26
|
+
{
|
|
27
|
+
"LevelSequenceEditor", "Sequencer", "MovieSceneTools", "Niagara", "NiagaraEditor", "UnrealEd",
|
|
28
|
+
"WorldPartitionEditor", "DataLayerEditor", "EnhancedInput", "InputEditor"
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
PrivateDependencyModuleNames.AddRange(new string[]
|
|
32
|
+
{
|
|
33
|
+
"ApplicationCore","Slate","SlateCore","Projects","InputCore","DeveloperSettings","Settings","EngineSettings",
|
|
34
|
+
"Sockets","Networking","EditorSubsystem","EditorScriptingUtilities","BlueprintGraph",
|
|
35
|
+
"Kismet","KismetCompiler","AssetRegistry","AssetTools","MaterialEditor","SourceControl",
|
|
36
|
+
"AudioEditor", "DataValidation", "NiagaraEditor"
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
PrivateDependencyModuleNames.AddRange(new string[]
|
|
40
|
+
{
|
|
41
|
+
"Landscape","LandscapeEditor","LandscapeEditorUtilities","Foliage","FoliageEdit",
|
|
42
|
+
"AnimGraph","AnimationBlueprintLibrary","Persona","ToolMenus","EditorWidgets","PropertyEditor","LevelEditor",
|
|
43
|
+
"ControlRig","ControlRigDeveloper","ControlRigEditor","UMG","UMGEditor","ProceduralMeshComponent","MergeActors",
|
|
44
|
+
"BehaviorTreeEditor", "RenderCore", "RHI", "AutomationController", "GameplayDebugger", "TraceLog", "TraceAnalysis", "AIModule", "AIGraph",
|
|
45
|
+
"MeshUtilities", "MaterialUtilities"
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Ensure editor builds expose full Blueprint graph editing APIs.
|
|
49
|
+
PublicDefinitions.Add("MCP_HAS_K2NODE_HEADERS=1");
|
|
50
|
+
PublicDefinitions.Add("MCP_HAS_EDGRAPH_SCHEMA_K2=1");
|
|
51
|
+
|
|
52
|
+
// --- Feature Detection Logic ---
|
|
53
|
+
|
|
54
|
+
string EngineDir = Path.GetFullPath(Target.RelativeEnginePath);
|
|
55
|
+
|
|
56
|
+
// 1. SubobjectData Detection
|
|
57
|
+
// UE 5.7 renamed/moved this to SubobjectDataInterface in Editor/
|
|
58
|
+
bool bHasSubobjectDataInterface = Directory.Exists(Path.Combine(EngineDir, "Source", "Editor", "SubobjectDataInterface"));
|
|
59
|
+
|
|
60
|
+
if (bHasSubobjectDataInterface)
|
|
61
|
+
{
|
|
62
|
+
PrivateDependencyModuleNames.Add("SubobjectDataInterface");
|
|
63
|
+
PublicDefinitions.Add("MCP_HAS_SUBOBJECT_DATA_SUBSYSTEM=1");
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
{
|
|
67
|
+
// Fallback for older versions
|
|
68
|
+
if (!PrivateDependencyModuleNames.Contains("SubobjectData"))
|
|
69
|
+
{
|
|
70
|
+
PrivateDependencyModuleNames.Add("SubobjectData");
|
|
71
|
+
}
|
|
72
|
+
PublicDefinitions.Add("MCP_HAS_SUBOBJECT_DATA_SUBSYSTEM=1");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// 2. WorldPartition Support Detection
|
|
76
|
+
// Detect whether UWorldPartition supports ForEachDataLayerInstance
|
|
77
|
+
bool bHasWPForEach = false;
|
|
78
|
+
try
|
|
79
|
+
{
|
|
80
|
+
// In UE 5.7, ForEachDataLayerInstance moved to DataLayerManager.h
|
|
81
|
+
string WPHeader = Path.Combine(EngineDir, "Source", "Runtime", "Engine", "Public", "WorldPartition", "DataLayer", "DataLayerManager.h");
|
|
82
|
+
if (!File.Exists(WPHeader))
|
|
83
|
+
{
|
|
84
|
+
// Fallback to old location for older engines
|
|
85
|
+
WPHeader = Path.Combine(EngineDir, "Source", "Runtime", "Engine", "Public", "WorldPartition", "WorldPartition.h");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (File.Exists(WPHeader))
|
|
89
|
+
{
|
|
90
|
+
string Content = File.ReadAllText(WPHeader);
|
|
91
|
+
if (Content.Contains("ForEachDataLayerInstance("))
|
|
92
|
+
{
|
|
93
|
+
bHasWPForEach = true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {}
|
|
98
|
+
|
|
99
|
+
PublicDefinitions.Add(bHasWPForEach ? "MCP_HAS_WP_FOR_EACH_DATALAYER=1" : "MCP_HAS_WP_FOR_EACH_DATALAYER=0");
|
|
100
|
+
|
|
101
|
+
// Ensure Win64 debug builds emit Edit-and-Continue friendly debug info
|
|
102
|
+
if (Target.Platform == UnrealTargetPlatform.Win64 && Target.Configuration == UnrealTargetConfiguration.Debug)
|
|
103
|
+
{
|
|
104
|
+
PublicDefinitions.Add("MCP_ENABLE_EDIT_AND_CONTINUE=1");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Control Rig Factory Support
|
|
108
|
+
PublicDefinitions.Add("MCP_HAS_CONTROLRIG_FACTORY=1");
|
|
109
|
+
}
|
|
110
|
+
else
|
|
111
|
+
{
|
|
112
|
+
// Non-editor builds cannot rely on editor-only headers.
|
|
113
|
+
PublicDefinitions.Add("MCP_HAS_K2NODE_HEADERS=0");
|
|
114
|
+
PublicDefinitions.Add("MCP_HAS_EDGRAPH_SCHEMA_K2=0");
|
|
115
|
+
PublicDefinitions.Add("MCP_HAS_SUBOBJECT_DATA_SUBSYSTEM=0");
|
|
116
|
+
PublicDefinitions.Add("MCP_HAS_WP_FOR_EACH_DATALAYER=0");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// <summary>
|
|
121
|
+
/// Determines whether a SubobjectData module or plugin exists under the given engine directory.
|
|
122
|
+
/// </summary>
|
|
123
|
+
/// <param name="EngineDir">Absolute path to the engine root directory to inspect.</param>
|
|
124
|
+
/// <returns>`true` if a SubobjectData directory is found in EngineDir/Source/Runtime/SubobjectData or anywhere under EngineDir/Plugins/Runtime; `false` if not found or if an error occurs.</returns>
|
|
125
|
+
private bool IsSubobjectDataAvailable(string EngineDir)
|
|
126
|
+
{
|
|
127
|
+
try
|
|
128
|
+
{
|
|
129
|
+
if (string.IsNullOrEmpty(EngineDir)) return false;
|
|
130
|
+
|
|
131
|
+
// Check Runtime module
|
|
132
|
+
string RuntimeDir = Path.Combine(EngineDir, "Source", "Runtime", "SubobjectData");
|
|
133
|
+
if (Directory.Exists(RuntimeDir)) return true;
|
|
134
|
+
|
|
135
|
+
// Check Plugins
|
|
136
|
+
string PluginsDir = Path.Combine(EngineDir, "Plugins");
|
|
137
|
+
if (Directory.Exists(PluginsDir))
|
|
138
|
+
{
|
|
139
|
+
// Simple check for the folder in Runtime plugins
|
|
140
|
+
// A full recursive search might be slow, but we can check common locations or do a search
|
|
141
|
+
// The original code did a recursive search in Plugins/Runtime
|
|
142
|
+
string PluginsRuntime = Path.Combine(PluginsDir, "Runtime");
|
|
143
|
+
if (Directory.Exists(PluginsRuntime))
|
|
144
|
+
{
|
|
145
|
+
var Found = Directory.GetDirectories(PluginsRuntime, "SubobjectData", SearchOption.AllDirectories);
|
|
146
|
+
if (Found.Length > 0) return true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/// <summary>
|
|
155
|
+
/// Determines whether the current project contains a "SubobjectData" directory inside its Plugins folder by searching upward from the provided module directory for the project root (.uproject).
|
|
156
|
+
/// </summary>
|
|
157
|
+
/// <param name="ModuleDir">Path to the module directory used as the starting point to locate the project root.</param>
|
|
158
|
+
/// <returns>`true` if a "SubobjectData" directory is found under the project's Plugins directory, `false` otherwise.</returns>
|
|
159
|
+
private bool IsSubobjectDataInProject(string ModuleDir)
|
|
160
|
+
{
|
|
161
|
+
try
|
|
162
|
+
{
|
|
163
|
+
// Find project root by looking for .uproject
|
|
164
|
+
string ProjectRoot = null;
|
|
165
|
+
DirectoryInfo Dir = new DirectoryInfo(ModuleDir);
|
|
166
|
+
while (Dir != null)
|
|
167
|
+
{
|
|
168
|
+
if (Dir.GetFiles("*.uproject").Length > 0)
|
|
169
|
+
{
|
|
170
|
+
ProjectRoot = Dir.FullName;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
Dir = Dir.Parent;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (!string.IsNullOrEmpty(ProjectRoot))
|
|
177
|
+
{
|
|
178
|
+
string ProjPlugins = Path.Combine(ProjectRoot, "Plugins");
|
|
179
|
+
if (Directory.Exists(ProjPlugins))
|
|
180
|
+
{
|
|
181
|
+
var Found = Directory.GetDirectories(ProjPlugins, "SubobjectData", SearchOption.AllDirectories);
|
|
182
|
+
if (Found.Length > 0) return true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch {}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include "McpAutomationBridgeGlobals.h"
|
|
2
|
+
|
|
3
|
+
TMap<FString, TArray<TPair<FString, TSharedPtr<FMcpBridgeWebSocket>>>>
|
|
4
|
+
GBlueprintExistsInflight;
|
|
5
|
+
TMap<FString, TArray<TPair<FString, TSharedPtr<FMcpBridgeWebSocket>>>>
|
|
6
|
+
GBlueprintCreateInflight;
|
|
7
|
+
TMap<FString, double> GBlueprintCreateInflightTs;
|
|
8
|
+
FCriticalSection GBlueprintCreateMutex;
|
|
9
|
+
double GBlueprintCreateStaleTimeoutSec = 60.0;
|
|
10
|
+
TSet<FString> GBlueprintBusySet;
|
|
11
|
+
TMap<FString, TSharedPtr<FJsonObject>> GBlueprintRegistry;
|
|
12
|
+
|
|
13
|
+
TMap<FString, TSharedPtr<FJsonObject>> GSequenceRegistry;
|
|
14
|
+
FString GCurrentSequencePath;
|
|
15
|
+
|
|
16
|
+
TMap<FString, TSharedPtr<FJsonObject>> GNiagaraRegistry;
|
|
17
|
+
|
|
18
|
+
// Recent asset save tracking (throttle across plugin to avoid frequent
|
|
19
|
+
// SavePackage calls)
|
|
20
|
+
TMap<FString, double> GRecentAssetSaveTs;
|
|
21
|
+
FCriticalSection GRecentAssetSaveMutex;
|
|
22
|
+
double GRecentAssetSaveThrottleSeconds = 0.5;
|
package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Shared globals for McpAutomationBridge plugin
|
|
2
|
+
#pragma once
|
|
3
|
+
|
|
4
|
+
#include "CoreMinimal.h"
|
|
5
|
+
#include "HAL/CriticalSection.h"
|
|
6
|
+
|
|
7
|
+
extern TMap<FString,
|
|
8
|
+
TArray<TPair<FString, TSharedPtr<class FMcpBridgeWebSocket>>>>
|
|
9
|
+
GBlueprintExistsInflight;
|
|
10
|
+
extern TMap<FString,
|
|
11
|
+
TArray<TPair<FString, TSharedPtr<class FMcpBridgeWebSocket>>>>
|
|
12
|
+
GBlueprintCreateInflight;
|
|
13
|
+
extern TMap<FString, double> GBlueprintCreateInflightTs;
|
|
14
|
+
extern FCriticalSection GBlueprintCreateMutex;
|
|
15
|
+
extern double GBlueprintCreateStaleTimeoutSec;
|
|
16
|
+
extern TSet<FString> GBlueprintBusySet;
|
|
17
|
+
extern TMap<FString, TSharedPtr<FJsonObject>> GBlueprintRegistry;
|
|
18
|
+
|
|
19
|
+
extern TMap<FString, TSharedPtr<FJsonObject>> GSequenceRegistry;
|
|
20
|
+
extern FString GCurrentSequencePath;
|
|
21
|
+
|
|
22
|
+
// Lightweight registry used for created Niagara systems when running in
|
|
23
|
+
// fast-mode or when native Niagara factories are not available. Tests and
|
|
24
|
+
// higher-level tooling may rely on a plugin-side record of created
|
|
25
|
+
// Niagara assets even when on-disk creation is not possible.
|
|
26
|
+
extern TMap<FString, TSharedPtr<FJsonObject>> GNiagaraRegistry;
|
|
27
|
+
|
|
28
|
+
extern TMap<FString, double> GRecentAssetSaveTs;
|
|
29
|
+
extern FCriticalSection GRecentAssetSaveMutex;
|
|
30
|
+
extern double GRecentAssetSaveThrottleSeconds;
|