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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Native Automation Completion Log
|
|
2
|
+
|
|
3
|
+
This document tracks ongoing work to replace stubbed or registry-based fallbacks with full native editor implementations across the MCP Automation Bridge plugin.
|
|
4
|
+
|
|
5
|
+
## Asset Workflow & Source Control
|
|
6
|
+
|
|
7
|
+
| Action | Current State | Needed Work |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `get_source_control_state` | Implemented (checkout status, user). | ✅ Done |
|
|
10
|
+
| `analyze_graph` | Implemented (recursive dependencies + WASM analysis). | ✅ Done |
|
|
11
|
+
| `create_thumbnail` | Implemented (supports width/height params). | ✅ Done |
|
|
12
|
+
| `import` / `export` | Native AssetTools implementation. | ✅ Done |
|
|
13
|
+
|
|
14
|
+
## Sequence Handlers
|
|
15
|
+
|
|
16
|
+
| Action | Current State | Needed Work |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| `sequence_create` | Uses native asset creation when WITH_EDITOR. | ✅ Done |
|
|
19
|
+
| `sequence_open` | Opens the asset in an editor window. | ✅ Done |
|
|
20
|
+
| `sequence_add_camera` | Spawns camera and adds to level sequence. | ✅ Done |
|
|
21
|
+
| `sequence_play` / `sequence_pause` / `sequence_stop` | Native editor playback control. | ✅ Done |
|
|
22
|
+
| `sequence_add_actor` / `sequence_add_actors` | Native binding creation (Possessables). | ✅ Done |
|
|
23
|
+
| `sequence_add_spawnable_from_class` | Native spawnable creation and track binding. | ✅ Done |
|
|
24
|
+
| `sequence_remove_actors` | Removes bindings and tracks. | ✅ Done |
|
|
25
|
+
| `sequence_get_bindings` | Lists bindings from MovieScene. | ✅ Done |
|
|
26
|
+
| `sequence_get_properties` | Returns frame rate + playback range. | ✅ Done |
|
|
27
|
+
| `sequence_set_playback_speed` | Sets playback speed via Sequencer. | ✅ Done |
|
|
28
|
+
| `sequence_cleanup` | Removes actors by prefix. | ✅ Done |
|
|
29
|
+
|
|
30
|
+
## Graph Actions (Consolidated)
|
|
31
|
+
|
|
32
|
+
| Action | Current State | Needed Work |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| `manage_blueprint` (graph) | Implemented (nodes, pins, properties). | Refine `Literal` node creation. |
|
|
35
|
+
| `manage_blueprint` (add_component) | Implemented (UE 5.7+ SubobjectDataInterface support added). | ✅ Done |
|
|
36
|
+
| `manage_effect` (graph) | Implemented (modules, removal, emitters, params). | ✅ Done |
|
|
37
|
+
| `manage_asset` (material graph) | Implemented (nodes, removal, details, connections). | ✅ Done |
|
|
38
|
+
| `manage_asset` (behavior tree) | Implemented (nodes, removal, connections, properties). | ✅ Done |
|
|
39
|
+
|
|
40
|
+
## World Partition & Level Composition
|
|
41
|
+
|
|
42
|
+
| Action | Current State | Needed Work |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| `manage_level` (world partition) | Implemented (`load_cells`, `set_datalayer`). | ✅ Done (UE 5.7+ support added) |
|
|
45
|
+
|
|
46
|
+
## Input System
|
|
47
|
+
|
|
48
|
+
| Action | Current State | Needed Work |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `manage_input` | Implemented (Input Actions, Mapping Contexts, Bindings). | ✅ Done |
|
|
51
|
+
|
|
52
|
+
## System, Render & Pipeline
|
|
53
|
+
|
|
54
|
+
| Action | Current State | Needed Work |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| `manage_asset` (render target) | Implemented (`create_render_target`). | Implement `nanite_rebuild_mesh`. |
|
|
57
|
+
| `system_control` (lumen) | Implemented (`lumen_update_scene`). | |
|
|
58
|
+
| `system_control` (pipeline) | Implemented (`run_ubt`). | ✅ Done (Streamed via Node) |
|
|
59
|
+
| `system_control` (tests) | Implemented (`run_tests`). | Add result streaming. |
|
|
60
|
+
| `system_control` (settings) | Implemented (`set_project_setting`). | ✅ Done |
|
|
61
|
+
| `manage_blueprint` (events) | Implemented (`add_event` for Custom/Standard). | ✅ Done |
|
|
62
|
+
|
|
63
|
+
## Observability
|
|
64
|
+
|
|
65
|
+
| Action | Current State | Needed Work |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `system_control` (logs) | Implemented (`subscribe`). | Add real-time streaming. |
|
|
68
|
+
| `system_control` (debug) | Implemented (`spawn_category`). | Add GGameplayDebugger integration. |
|
|
69
|
+
| `system_control` (insights) | Implemented (`start_session`). | Add FTraceAuxiliary integration. |
|
|
70
|
+
| `control_editor` (ui) | Implemented (`simulate_input`). | Add FSlateApplication integration. |
|
|
71
|
+
|
|
72
|
+
## SCS (Simple Construction Script) Helpers
|
|
73
|
+
|
|
74
|
+
| Action | Current State | Needed Work |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| `get_blueprint` | Requires editor build; returns serialized component tree. | ✅ Done |
|
|
77
|
+
| `modify_scs` | Full editor implementation (add/remove/attach). | ✅ Done |
|
|
78
|
+
| `add_scs_component` / `remove_scs_component` | Editor-only; fail fast when unavailable. | ✅ Done |
|
|
79
|
+
|
|
80
|
+
## Security & Hardening
|
|
81
|
+
|
|
82
|
+
| Feature | Status | Details |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| **Path Sanitization** | ✅ Implemented | Enforces project-relative paths (`/Game`, `/Engine`, `/Script`) and rejects traversal (`..`) in `import`, `create_folder`, etc. |
|
|
85
|
+
| **Pointer Safety** | ✅ Verified | Robust `nullptr` checks and weak pointers in C++ handlers. |
|
|
86
|
+
| **Concurrency** | ✅ Verified | Thread-safe queue and GameThread dispatching for all automation requests. |
|
|
87
|
+
|
|
88
|
+
## Blueprint Authoring (Recap)
|
|
89
|
+
|
|
90
|
+
All `blueprint_*` authoring commands now require editor support and execute natively. Remaining polish:
|
|
91
|
+
|
|
92
|
+
- Expand `blueprint_add_node` to cover additional K2 nodes safely.
|
|
93
|
+
- Provide higher-level helpers once Sequencer bindings are in place (e.g., node creation shortcuts tied to bindings).
|
|
94
|
+
- Registry fallbacks have been removed for `blueprint_set_default` and `blueprint_compile`; these actions now fail fast when the editor build is unavailable.
|
|
95
|
+
- `ensure_exists` and `get_blueprint` now return `NOT_AVAILABLE` when the editor runtime is missing instead of consulting cached registry data.
|
|
96
|
+
|
|
97
|
+
## Niagara & Effect Handlers
|
|
98
|
+
|
|
99
|
+
| Action | Current State | Needed Work |
|
|
100
|
+
| --- | --- | --- |
|
|
101
|
+
| `spawn_niagara` | Spawns Niagara actors. | Support attachment targets, optional lifespan, undo stack. |
|
|
102
|
+
| `set_niagara_parameter` | Supports float/vector/color/bool/int params. | ✅ Done |
|
|
103
|
+
| `create_niagara_ribbon` | Implemented (spawns actor, sets user params). | ✅ Done |
|
|
104
|
+
| `manage_effect` (legacy actions) | Stubbed (`NOT_IMPLEMENTED`). | Define expected presets and implement spawn routines + cleanup. |
|
|
105
|
+
| `create_dynamic_light` | Spawns lights, sets intensity/color; no undo/pulse logic. | Add transactions, pulse animation, optional mobility + cleanup helpers. |
|
|
106
|
+
|
|
107
|
+
## UI Handlers
|
|
108
|
+
|
|
109
|
+
| Action | Current State | Needed Work |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| `create_hud` | Implemented (creates widget + adds to viewport). | ✅ Done |
|
|
112
|
+
| `set_widget_text` | Implemented (finds widget + sets text). | ✅ Done |
|
|
113
|
+
| `set_widget_image` | Implemented (loads texture + sets image). | ✅ Done |
|
|
114
|
+
| `set_widget_visibility` | Implemented (finds widget + sets visibility). | ✅ Done |
|
|
115
|
+
| `remove_widget_from_viewport` | Implemented (removes widget). | ✅ Done |
|
|
116
|
+
|
|
117
|
+
## Editor Function Helpers
|
|
118
|
+
|
|
119
|
+
- `execute_editor_function` routes many editor actions.
|
|
120
|
+
- `CALL_SUBSYSTEM` added for generic subsystem access.
|
|
121
|
+
- `ADD_WIDGET_TO_VIEWPORT` implemented.
|
|
122
|
+
|
|
123
|
+
## Next Steps
|
|
124
|
+
|
|
125
|
+
1. Refine `manage_render` logic (now split).
|
|
126
|
+
2. Enhance test running with real-time result streaming.
|
|
127
|
+
3. Polish dynamic lighting utilities (undo, mobility, pulse, removal).
|
|
128
|
+
4. Extend log subscription for real-time streaming.
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
# Unreal MCP Server - Individual Tool Testing Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Each MCP tool now has its own dedicated test file with focused test cases. This allows you to test one tool at a time for faster iteration and debugging.
|
|
5
|
+
|
|
6
|
+
## Test Structure
|
|
7
|
+
|
|
8
|
+
### Individual Test Files
|
|
9
|
+
Each tool has a dedicated test file in `tests/`:
|
|
10
|
+
|
|
11
|
+
- **test-manage-asset.mjs** - Asset management (import, delete, rename, duplicate, list, get info)
|
|
12
|
+
- **test-control-actor.mjs** - Actor operations (spawn, delete, transform, properties)
|
|
13
|
+
- **test-control-editor.mjs** - Editor control (PIE, camera, screenshots, console commands)
|
|
14
|
+
- **test-manage-level.mjs** - Level management (load, save, create, stream)
|
|
15
|
+
- **test-animation.mjs** - Animation tools (play, stop, speed, state)
|
|
16
|
+
- **test-blueprint.mjs** - Blueprint operations (execute function, get/set variables)
|
|
17
|
+
- **test-materials.mjs** - Material tools (create instance, set parameters, apply)
|
|
18
|
+
- **test-niagara.mjs** - Niagara VFX (spawn system, set parameters, stop)
|
|
19
|
+
- **test-render.mjs** - Rendering tools (render targets, Lumen, lighting)
|
|
20
|
+
- **test-landscape.mjs** - Landscape tools (create, sculpt, paint, get info)
|
|
21
|
+
- **test-sequence.mjs** - Sequencer (create sequence, add tracks, keyframes, play, export)
|
|
22
|
+
- **test-system.mjs** - System control (engine info, settings, plugins, Python execution)
|
|
23
|
+
- **test-behavior-tree.mjs** - Behavior Tree editing (add nodes, connect, properties)
|
|
24
|
+
- **test-audio.mjs** - Audio management (sound cues, play sounds, audio components)
|
|
25
|
+
- **test-inspect.mjs** - Object introspection (get/set properties, components)
|
|
26
|
+
- **test-console-command.mjs** - Console command execution
|
|
27
|
+
- **test-asset-advanced.mjs** - Advanced asset operations (dependencies, etc.)
|
|
28
|
+
- **test-world-partition.mjs** - World Partition management
|
|
29
|
+
- **test-graphql.mjs** - GraphQL API testing
|
|
30
|
+
- **test-wasm.mjs** - WebAssembly module testing
|
|
31
|
+
|
|
32
|
+
### Shared Test Runner
|
|
33
|
+
All test files use `test-runner.mjs` which provides:
|
|
34
|
+
- MCP client initialization
|
|
35
|
+
- Test execution and timing
|
|
36
|
+
- Result evaluation with proper error handling
|
|
37
|
+
- JSON report generation
|
|
38
|
+
- Summary statistics
|
|
39
|
+
|
|
40
|
+
## Running Tests
|
|
41
|
+
|
|
42
|
+
### Run a Specific Tool Test
|
|
43
|
+
```bash
|
|
44
|
+
npm run test:manage_asset # Test asset management
|
|
45
|
+
npm run test:control_actor # Test actor operations
|
|
46
|
+
npm run test:control_editor # Test editor controls
|
|
47
|
+
npm run test:manage_level # Test level management
|
|
48
|
+
npm run test:animation # Test animation tools
|
|
49
|
+
npm run test:blueprint # Test blueprint operations
|
|
50
|
+
npm run test:materials # Test material tools
|
|
51
|
+
npm run test:niagara # Test Niagara VFX
|
|
52
|
+
npm run test:render # Test rendering tools
|
|
53
|
+
npm run test:landscape # Test landscape tools
|
|
54
|
+
npm run test:sequence # Test sequencer
|
|
55
|
+
npm run test:system # Test system control
|
|
56
|
+
npm run test:behavior_tree # Test behavior tree editing
|
|
57
|
+
npm run test:audio # Test audio management
|
|
58
|
+
npm run test:inspect # Test object introspection
|
|
59
|
+
npm run test:console_command # Test console commands
|
|
60
|
+
npm run test:asset_advanced # Test advanced asset tools
|
|
61
|
+
npm run test:world_partition # Test World Partition
|
|
62
|
+
npm run test:graphql # Test GraphQL API
|
|
63
|
+
npm run test:wasm # Test WebAssembly
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Run Tests Directly
|
|
67
|
+
```bash
|
|
68
|
+
node tests/test-manage-asset.mjs
|
|
69
|
+
node tests/test-control-actor.mjs
|
|
70
|
+
# etc...
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Prerequisites
|
|
74
|
+
|
|
75
|
+
### Unreal Engine Setup
|
|
76
|
+
1. **Unreal Engine 5.0-5.7** must be running
|
|
77
|
+
2. **Required plugins enabled:**
|
|
78
|
+
- Native Automation Bridge
|
|
79
|
+
- Python Editor Script Plugin
|
|
80
|
+
- Editor Scripting Utilities
|
|
81
|
+
- Sequencer
|
|
82
|
+
- Level Sequence Editor
|
|
83
|
+
- Control Rig
|
|
84
|
+
- Subobject Data Interface (UE 5.7+)
|
|
85
|
+
|
|
86
|
+
### Configuration
|
|
87
|
+
**DefaultEngine.ini:**
|
|
88
|
+
```ini
|
|
89
|
+
[HTTPServer.Listeners]
|
|
90
|
+
DefaultBindAddress=0.0.0.0
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Environment Variables (optional):**
|
|
95
|
+
```bash
|
|
96
|
+
UE_HOST=127.0.0.1
|
|
97
|
+
MCP_AUTOMATION_PORT=8091
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Test Output
|
|
101
|
+
|
|
102
|
+
### Console Output
|
|
103
|
+
Each test displays:
|
|
104
|
+
- Test scenario description
|
|
105
|
+
- Pass/Fail status with ✅/❌
|
|
106
|
+
- Execution time in milliseconds
|
|
107
|
+
- Error details for failed tests
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
```text
|
|
111
|
+
============================================================
|
|
112
|
+
Starting Asset Management Tests
|
|
113
|
+
Total test cases: 10
|
|
114
|
+
============================================================
|
|
115
|
+
|
|
116
|
+
✅ Connected to Unreal MCP Server
|
|
117
|
+
|
|
118
|
+
[PASSED] Import FBX model into /Game/Meshes (1234.5 ms)
|
|
119
|
+
[PASSED] List all assets in /Game/Meshes (456.7 ms)
|
|
120
|
+
[FAILED] Delete non-existent asset (234.1 ms) => {"success":false,"error":"ASSET_NOT_FOUND"}
|
|
121
|
+
|
|
122
|
+
============================================================
|
|
123
|
+
Asset Management Test Summary
|
|
124
|
+
============================================================
|
|
125
|
+
Total cases: 10
|
|
126
|
+
✅ Passed: 8
|
|
127
|
+
❌ Failed: 2
|
|
128
|
+
⏭️ Skipped: 0
|
|
129
|
+
Pass rate: 80.0%
|
|
130
|
+
Results saved to: tests/reports/asset-management-test-results-2025-10-07T12-34-56.789Z.json
|
|
131
|
+
============================================================
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### JSON Reports
|
|
135
|
+
Reports are saved to `tests/reports/` with format:
|
|
136
|
+
```
|
|
137
|
+
<toolname>-test-results-<timestamp>.json
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Report structure:
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"generatedAt": "2025-10-07T12:34:56.789Z",
|
|
144
|
+
"toolName": "asset-management",
|
|
145
|
+
"results": [
|
|
146
|
+
{
|
|
147
|
+
"scenario": "Import FBX model into /Game/Meshes",
|
|
148
|
+
"toolName": "manage_asset",
|
|
149
|
+
"arguments": { "action": "import_asset", ... },
|
|
150
|
+
"status": "passed",
|
|
151
|
+
"durationMs": 1234.5,
|
|
152
|
+
"detail": "{\"success\":true,\"message\":\"Asset imported\"}"
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Test Case Structure
|
|
159
|
+
|
|
160
|
+
Each test file contains an array of test cases with:
|
|
161
|
+
- **scenario**: Human-readable description
|
|
162
|
+
- **toolName**: MCP tool name to call
|
|
163
|
+
- **arguments**: Tool arguments (action + parameters)
|
|
164
|
+
- **expected**: Expected outcome (success/error keywords)
|
|
165
|
+
|
|
166
|
+
Example:
|
|
167
|
+
```javascript
|
|
168
|
+
{
|
|
169
|
+
scenario: 'Spawn a cube at origin',
|
|
170
|
+
toolName: 'control_actor',
|
|
171
|
+
arguments: {
|
|
172
|
+
action: 'spawn_actor',
|
|
173
|
+
class_path: '/Script/Engine.StaticMeshActor',
|
|
174
|
+
location: { x: 0, y: 0, z: 100 },
|
|
175
|
+
actor_label: 'TestCube'
|
|
176
|
+
},
|
|
177
|
+
expected: 'success - actor spawned'
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Adding New Tests
|
|
182
|
+
|
|
183
|
+
### 1. Open the relevant test file
|
|
184
|
+
```bash
|
|
185
|
+
code tests/test-manage-asset.mjs
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 2. Add test case to the array
|
|
189
|
+
```javascript
|
|
190
|
+
{
|
|
191
|
+
scenario: 'Your test description',
|
|
192
|
+
toolName: 'manage_asset',
|
|
193
|
+
arguments: {
|
|
194
|
+
action: 'import_asset',
|
|
195
|
+
source_path: 'C:\\path\\to\\asset.fbx',
|
|
196
|
+
destination_path: '/Game/MyFolder'
|
|
197
|
+
},
|
|
198
|
+
expected: 'success - asset imported'
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 3. Run the updated test
|
|
203
|
+
```bash
|
|
204
|
+
npm run test:manage_asset
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Test Evaluation Logic
|
|
208
|
+
|
|
209
|
+
### Success Tests
|
|
210
|
+
Test passes when:
|
|
211
|
+
- Response has `success: true`
|
|
212
|
+
- Expected outcome contains success keywords: `success`, `returns`, `created`, `applied`, etc.
|
|
213
|
+
|
|
214
|
+
### Error Tests
|
|
215
|
+
Test passes when:
|
|
216
|
+
- Response has `success: false` with expected error type
|
|
217
|
+
- Expected outcome contains failure keywords: `error`, `not found`, `invalid`, `missing`
|
|
218
|
+
- Actual error matches expected error type
|
|
219
|
+
|
|
220
|
+
### Connection Failures
|
|
221
|
+
Tests **always fail** if:
|
|
222
|
+
- Unreal Engine is not connected (`UE_NOT_CONNECTED`)
|
|
223
|
+
- Unless test explicitly expects disconnection
|
|
224
|
+
|
|
225
|
+
This prevents false positives from connection errors.
|
|
226
|
+
|
|
227
|
+
## Troubleshooting
|
|
228
|
+
|
|
229
|
+
### All Tests Fail with UE_NOT_CONNECTED
|
|
230
|
+
**Problem**: Unreal Engine is not running or not accessible
|
|
231
|
+
|
|
232
|
+
**Solutions**:
|
|
233
|
+
1. Launch Unreal Engine 5.6
|
|
234
|
+
2. Open your project
|
|
235
|
+
3. Verify Unreal Engine is running with the MCP plugin enabled
|
|
236
|
+
4. Check `DefaultEngine.ini` configuration
|
|
237
|
+
5. Test connection: `npm run test:system`
|
|
238
|
+
|
|
239
|
+
### Specific Tests Fail
|
|
240
|
+
**Problem**: Missing Unreal setup or incorrect test expectations
|
|
241
|
+
|
|
242
|
+
**Solutions**:
|
|
243
|
+
1. Check Unreal Output Log for Python errors
|
|
244
|
+
2. Verify required plugins for that tool category
|
|
245
|
+
3. Review test arguments for correctness
|
|
246
|
+
4. Check asset paths exist in your project
|
|
247
|
+
|
|
248
|
+
### Test Times Out
|
|
249
|
+
**Problem**: Operation takes too long or hangs
|
|
250
|
+
|
|
251
|
+
**Solutions**:
|
|
252
|
+
1. Check Unreal is responsive (not frozen)
|
|
253
|
+
2. Simplify test case (smaller assets, fewer operations)
|
|
254
|
+
3. Check Python Script Plugin is enabled
|
|
255
|
+
4. Review Unreal Output Log for errors
|
|
256
|
+
|
|
257
|
+
### Import Tests Fail
|
|
258
|
+
**Problem**: File paths don't exist
|
|
259
|
+
|
|
260
|
+
**Solutions**:
|
|
261
|
+
1. Update file paths in test cases to valid locations
|
|
262
|
+
2. Set environment variable: `UNREAL_MCP_FBX_FILE=C:\path\to\your\test.fbx`
|
|
263
|
+
3. Use absolute Windows paths with double backslashes
|
|
264
|
+
|
|
265
|
+
## Best Practices
|
|
266
|
+
|
|
267
|
+
### 1. Test Incrementally
|
|
268
|
+
Start with basic operations, then add complex scenarios:
|
|
269
|
+
```bash
|
|
270
|
+
npm run test:control_actor # Basic actor operations
|
|
271
|
+
npm run test:control_editor # Editor controls
|
|
272
|
+
npm run test:manage_level # Level management
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 2. Isolate Failures
|
|
276
|
+
When a test fails:
|
|
277
|
+
1. Run only that tool's tests: `npm run test:<toolname>`
|
|
278
|
+
2. Check the JSON report for details
|
|
279
|
+
3. Review Unreal Output Log
|
|
280
|
+
4. Manually verify in Unreal if needed
|
|
281
|
+
|
|
282
|
+
### 3. Clean State
|
|
283
|
+
Between test runs:
|
|
284
|
+
- Delete test actors/assets created
|
|
285
|
+
- Reset to known level state
|
|
286
|
+
- Clear console output
|
|
287
|
+
|
|
288
|
+
### 4. Update Paths
|
|
289
|
+
Customize test cases for your project:
|
|
290
|
+
```javascript
|
|
291
|
+
// Update asset paths
|
|
292
|
+
asset_path: '/Game/YourProject/Meshes/YourAsset'
|
|
293
|
+
|
|
294
|
+
// Update file system paths
|
|
295
|
+
source_path: 'C:\\YourPath\\YourFile.fbx'
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Performance Notes
|
|
299
|
+
|
|
300
|
+
### Typical Test Durations
|
|
301
|
+
- **Asset operations**: 500-2000ms (depends on asset size)
|
|
302
|
+
- **Actor spawning**: 100-500ms
|
|
303
|
+
- **Editor commands**: 50-200ms
|
|
304
|
+
- **Python scripts**: 200-1000ms
|
|
305
|
+
- **Material operations**: 300-800ms
|
|
306
|
+
- **Sequence operations**: 400-1200ms
|
|
307
|
+
|
|
308
|
+
### Optimization Tips
|
|
309
|
+
- Run tests on smaller assets first
|
|
310
|
+
- Use Preview quality for lighting builds
|
|
311
|
+
- Minimize PIE sessions during testing
|
|
312
|
+
- Close unnecessary Unreal Editor windows
|
|
313
|
+
|
|
314
|
+
## Tool-Specific Notes
|
|
315
|
+
|
|
316
|
+
### Asset Management Tests
|
|
317
|
+
- Requires valid file paths on your system
|
|
318
|
+
- Import times vary by asset size
|
|
319
|
+
- Some operations may prompt for user confirmation
|
|
320
|
+
|
|
321
|
+
### Actor Tests
|
|
322
|
+
- Creates actors in current level
|
|
323
|
+
- Remember to clean up test actors
|
|
324
|
+
- Use unique actor labels to avoid conflicts
|
|
325
|
+
|
|
326
|
+
### Editor Tests
|
|
327
|
+
- PIE state affects other tests
|
|
328
|
+
- Screenshots save to project's Saved folder
|
|
329
|
+
- Console commands persist between tests
|
|
330
|
+
|
|
331
|
+
### Level Tests
|
|
332
|
+
- Save prompt may block tests
|
|
333
|
+
- Streaming requires sub-levels to exist
|
|
334
|
+
- Level paths must be valid package paths
|
|
335
|
+
|
|
336
|
+
### Animation Tests
|
|
337
|
+
- Requires SkeletalMeshActor in scene
|
|
338
|
+
- Animation assets must exist in project
|
|
339
|
+
- Skeletal mesh must have animation support
|
|
340
|
+
|
|
341
|
+
### Blueprint Tests
|
|
342
|
+
- Requires Blueprint actors in scene
|
|
343
|
+
- Functions must be callable from editor
|
|
344
|
+
- Variables must be exposed/public
|
|
345
|
+
|
|
346
|
+
### Sequence Tests
|
|
347
|
+
- Creates sequences in Content Browser
|
|
348
|
+
- Export requires Movie Render Queue plugin
|
|
349
|
+
- Keyframes stored in sequence asset
|
|
350
|
+
|
|
351
|
+
### Performance Tests
|
|
352
|
+
- Results vary by hardware
|
|
353
|
+
- Some stats require specific console commands
|
|
354
|
+
- Profiling may impact frame rate
|
|
355
|
+
|
|
356
|
+
## Exit Codes
|
|
357
|
+
|
|
358
|
+
- **0**: All tests passed
|
|
359
|
+
- **1**: One or more tests failed or connection error
|
|
360
|
+
|
|
361
|
+
Use exit codes in CI/CD pipelines:
|
|
362
|
+
```bash
|
|
363
|
+
npm run test:manage_asset && npm run test:control_actor && npm run test:control_editor
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Contributing
|
|
367
|
+
|
|
368
|
+
### Adding a New Tool Test File
|
|
369
|
+
|
|
370
|
+
1. **Create test file**: `tests/test-newtool.mjs`
|
|
371
|
+
```javascript
|
|
372
|
+
#!/usr/bin/env node
|
|
373
|
+
import { runToolTests } from './test-runner.mjs';
|
|
374
|
+
|
|
375
|
+
const testCases = [
|
|
376
|
+
// Your test cases here
|
|
377
|
+
];
|
|
378
|
+
|
|
379
|
+
await runToolTests('New Tool', testCases);
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
2. **Add npm script**: In `package.json`
|
|
383
|
+
```json
|
|
384
|
+
"test:newtool": "node tests/test-newtool.mjs"
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
3. **Update this guide**: Add tool to the list above
|
|
388
|
+
|
|
389
|
+
## FAQ
|
|
390
|
+
|
|
391
|
+
**Q: Can I run all tests at once?**
|
|
392
|
+
A: Not recommended. Run individual tools for focused testing. If needed, create a script that runs them sequentially.
|
|
393
|
+
|
|
394
|
+
**Q: How do I skip a test?**
|
|
395
|
+
A: Comment out the test case or remove it from the array temporarily.
|
|
396
|
+
|
|
397
|
+
**Q: Can I run tests without Unreal running?**
|
|
398
|
+
A: No, tests require active Unreal Engine connection. They will fail with `UE_NOT_CONNECTED` error.
|
|
399
|
+
|
|
400
|
+
**Q: How do I test custom tools?**
|
|
401
|
+
A: Create a new test file following the structure, add test cases with your tool's name and actions.
|
|
402
|
+
|
|
403
|
+
**Q: Are tests destructive?**
|
|
404
|
+
A: Some tests create/delete assets and actors. Use a test project or backup your work.
|
|
405
|
+
|
|
406
|
+
**Q: Can I run tests in CI/CD?**
|
|
407
|
+
A: Yes, if you can run Unreal Engine headless with the MCP plugin enabled. Most tests require active editor.
|
|
408
|
+
|
|
409
|
+
## Support
|
|
410
|
+
|
|
411
|
+
For issues with:
|
|
412
|
+
- **MCP Server**: Check server logs, ensure plugins enabled
|
|
413
|
+
- **Test Framework**: Review test-runner.mjs and test file structure
|
|
414
|
+
- **Specific Tool**: Check tool implementation in `src/tools/<toolname>.ts`
|
|
415
|
+
- **Unreal Integration**: Review MCP plugin logs in Unreal Output Log
|
|
416
|
+
|
|
417
|
+
## Next Steps
|
|
418
|
+
|
|
419
|
+
1. **Build the server**: `npm run build`
|
|
420
|
+
2. **Start Unreal Engine 5.6**
|
|
421
|
+
3. **Run your first test**: `npm run test:system`
|
|
422
|
+
4. **Review the report**: Check `tests/reports/` folder
|
|
423
|
+
5. **Test other tools**: Run `npm run test:<toolname>` for each tool you use
|
package/mcp-config-example.json
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"unreal-engine": {
|
|
4
4
|
"command": "node",
|
|
5
|
-
"args": [
|
|
5
|
+
"args": [
|
|
6
|
+
"PATH_TO/unreal-engine-mcp-server/dist/cli.js"
|
|
7
|
+
],
|
|
6
8
|
"env": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"UE_RC_WS_PORT": "30020",
|
|
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_PORT": "8091"
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
}
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unreal-engine-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
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,50 @@
|
|
|
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:all": "node scripts/run-all-tests.mjs",
|
|
30
|
+
"test:manage_asset": "node tests/test-manage-asset.mjs",
|
|
31
|
+
"test:plugin-handshake": "node tests/test-plugin-handshake.mjs",
|
|
32
|
+
"test:control_actor": "node tests/test-control-actor.mjs",
|
|
33
|
+
"test:control_editor": "node tests/test-control-editor.mjs",
|
|
34
|
+
"test:manage_level": "node tests/test-manage-level.mjs",
|
|
35
|
+
"test:animation": "node tests/test-animation.mjs",
|
|
36
|
+
"test:blueprint": "node tests/test-blueprint.mjs",
|
|
37
|
+
"test:blueprint_graph": "node tests/test-blueprint-graph.mjs",
|
|
38
|
+
"test:materials": "node tests/test-materials.mjs",
|
|
39
|
+
"test:niagara": "node tests/test-niagara.mjs",
|
|
40
|
+
"test:landscape": "node tests/test-landscape.mjs",
|
|
41
|
+
"test:sequence": "node tests/test-sequence.mjs",
|
|
42
|
+
"test:system": "node tests/test-system.mjs",
|
|
43
|
+
"test:console_command": "node tests/test-console-command.mjs",
|
|
44
|
+
"test:inspect": "node tests/test-inspect.mjs",
|
|
45
|
+
"test:asset_advanced": "node tests/test-asset-advanced.mjs",
|
|
46
|
+
"test:render": "node tests/test-render.mjs",
|
|
47
|
+
"test:world_partition": "node tests/test-world-partition.mjs",
|
|
48
|
+
"test:no-inline-python": "node tests/test-no-inline-python.mjs",
|
|
49
|
+
"test:graphql": "node tests/test-graphql.mjs",
|
|
50
|
+
"test:audio": "node tests/test-audio.mjs",
|
|
51
|
+
"test:behavior_tree": "node tests/test-behavior-tree.mjs",
|
|
52
|
+
"test:wasm": "node tests/test-wasm.mjs",
|
|
53
|
+
"build:wasm": "echo 'Building WebAssembly module...' && cd wasm && wasm-pack build --target web --out-dir ../src/wasm/pkg && cd .. && node scripts/patch-wasm.js",
|
|
54
|
+
"test:wasm:all": "npm run build:core && npm run build:wasm && node tests/test-wasm.mjs",
|
|
55
|
+
"test:smoke": "node --loader ts-node/esm scripts/smoke-test.ts",
|
|
26
56
|
"type-check": "tsc --noEmit",
|
|
27
|
-
"prebuild": "npm run clean"
|
|
57
|
+
"prebuild": "npm run lint && npm run clean"
|
|
28
58
|
},
|
|
29
59
|
"engines": {
|
|
30
60
|
"node": ">=18"
|
|
@@ -42,25 +72,28 @@
|
|
|
42
72
|
"author": "Unreal Engine MCP Team",
|
|
43
73
|
"license": "MIT",
|
|
44
74
|
"dependencies": {
|
|
45
|
-
"@
|
|
46
|
-
"
|
|
75
|
+
"@graphql-tools/schema": "^10.0.30",
|
|
76
|
+
"@graphql-tools/utils": "^10.11.0",
|
|
77
|
+
"@modelcontextprotocol/sdk": "^1.25.0",
|
|
47
78
|
"ajv": "^8.17.1",
|
|
48
|
-
"axios": "^1.
|
|
49
|
-
"dotenv": "^
|
|
79
|
+
"axios": "^1.13.2",
|
|
80
|
+
"dotenv": "^17.2.3",
|
|
81
|
+
"graphql": "^16.12.0",
|
|
82
|
+
"graphql-yoga": "^5.17.1",
|
|
50
83
|
"json5": "^2.2.3",
|
|
51
|
-
"ws": "^8.18.
|
|
52
|
-
"yargs": "^
|
|
84
|
+
"ws": "^8.18.3",
|
|
85
|
+
"yargs": "^18.0.0",
|
|
86
|
+
"zod": "^4.2.1"
|
|
53
87
|
},
|
|
54
88
|
"devDependencies": {
|
|
55
|
-
"@types/json5": "^
|
|
56
|
-
"@types/node": "^
|
|
57
|
-
"@types/ws": "^8.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"eslint": "^9.
|
|
61
|
-
"
|
|
62
|
-
"rimraf": "^6.0.1",
|
|
89
|
+
"@types/json5": "^2.2.0",
|
|
90
|
+
"@types/node": "^25.0.2",
|
|
91
|
+
"@types/ws": "^8.18.1",
|
|
92
|
+
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
|
93
|
+
"@typescript-eslint/parser": "^8.49.0",
|
|
94
|
+
"eslint": "^9.39.2",
|
|
95
|
+
"rimraf": "^6.1.2",
|
|
63
96
|
"ts-node": "^10.9.2",
|
|
64
|
-
"typescript": "^5.
|
|
97
|
+
"typescript": "^5.9.3"
|
|
65
98
|
}
|
|
66
|
-
}
|
|
99
|
+
}
|