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/smithery.yaml
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
name: "Unreal Engine MCP"
|
|
2
|
-
description: "A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via Remote Control API. Built with TypeScript and designed for game development automation."
|
|
3
|
-
runtime: "typescript"
|
|
4
|
-
env:
|
|
5
|
-
NODE_ENV: "production"
|
|
6
|
-
LOG_LEVEL: "info"
|
|
7
|
-
UE_PROJECT_PATH: "C:/Users/YourName/Documents/Unreal Projects/YourProject"
|
|
8
|
-
# Session configuration hints (served by the exported Zod configSchema in src/index.ts)
|
|
9
|
-
sessionConfig:
|
|
10
|
-
ueHost:
|
|
11
|
-
type: string
|
|
12
|
-
description: "Unreal Engine host (e.g., 127.0.0.1)"
|
|
13
|
-
default: "127.0.0.1"
|
|
14
|
-
ueHttpPort:
|
|
15
|
-
type: number
|
|
16
|
-
description: "Remote Control HTTP port"
|
|
17
|
-
default: 30010
|
|
18
|
-
ueWsPort:
|
|
19
|
-
type: number
|
|
20
|
-
description: "Remote Control WS port"
|
|
21
|
-
default: 30011
|
|
22
|
-
logLevel:
|
|
23
|
-
type: string
|
|
24
|
-
description: "Server log verbosity"
|
|
25
|
-
default: "info"
|
|
26
|
-
projectPath:
|
|
27
|
-
type: string
|
|
28
|
-
description: "Absolute path to your .uproject file"
|
|
29
|
-
default: "C:/Users/YourName/Documents/Unreal Projects/YourProject"
|
package/src/prompts/index.ts
DELETED
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
export interface PromptArgument {
|
|
2
|
-
type: string;
|
|
3
|
-
description?: string;
|
|
4
|
-
enum?: string[];
|
|
5
|
-
default?: unknown;
|
|
6
|
-
required?: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface PromptTemplate {
|
|
10
|
-
name: string;
|
|
11
|
-
description: string;
|
|
12
|
-
arguments?: Record<string, PromptArgument>;
|
|
13
|
-
build: (args: Record<string, unknown>) => Array<{
|
|
14
|
-
role: 'user' | 'assistant';
|
|
15
|
-
content: { type: 'text'; text: string };
|
|
16
|
-
}>;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function clampChoice(value: unknown, choices: string[], fallback: string): string {
|
|
20
|
-
if (typeof value === 'string') {
|
|
21
|
-
const normalized = value.toLowerCase();
|
|
22
|
-
if (choices.includes(normalized)) {
|
|
23
|
-
return normalized;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return fallback;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function coerceNumber(value: unknown, fallback: number, min?: number, max?: number): number {
|
|
30
|
-
const num = typeof value === 'number' ? value : Number(value);
|
|
31
|
-
if (!Number.isFinite(num)) {
|
|
32
|
-
return fallback;
|
|
33
|
-
}
|
|
34
|
-
if (min !== undefined && num < min) {
|
|
35
|
-
return min;
|
|
36
|
-
}
|
|
37
|
-
if (max !== undefined && num > max) {
|
|
38
|
-
return max;
|
|
39
|
-
}
|
|
40
|
-
return num;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function formatVector(value: unknown): string | null {
|
|
44
|
-
if (!value || typeof value !== 'object') {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
const vector = value as Record<string, unknown>;
|
|
48
|
-
const x = typeof vector.x === 'number' ? vector.x : Number(vector.x);
|
|
49
|
-
const y = typeof vector.y === 'number' ? vector.y : Number(vector.y);
|
|
50
|
-
const z = typeof vector.z === 'number' ? vector.z : Number(vector.z);
|
|
51
|
-
if ([x, y, z].some((component) => !Number.isFinite(component))) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
return `${x.toFixed(2)}, ${y.toFixed(2)}, ${z.toFixed(2)}`;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const prompts: PromptTemplate[] = [
|
|
58
|
-
{
|
|
59
|
-
name: 'setup_three_point_lighting',
|
|
60
|
-
description: 'Author a cinematic three-point lighting rig aligned to the active camera focus.',
|
|
61
|
-
arguments: {
|
|
62
|
-
intensity: {
|
|
63
|
-
type: 'string',
|
|
64
|
-
enum: ['low', 'medium', 'high'],
|
|
65
|
-
default: 'medium',
|
|
66
|
-
description: 'Overall lighting mood. Low = dramatic contrast, high = bright key light.'
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
build: (args) => {
|
|
70
|
-
const intensity = clampChoice(args.intensity, ['low', 'medium', 'high'], 'medium');
|
|
71
|
-
const moodHints: Record<string, string> = {
|
|
72
|
-
low: 'gentle key with strong contrast and subtle rim highlights',
|
|
73
|
-
medium: 'balanced key/fill ratio for natural coverage',
|
|
74
|
-
high: 'bright key with energetic fill and crisp rim separation'
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const text = `Configure a three-point lighting rig around the current cinematic focus.
|
|
78
|
-
|
|
79
|
-
Tasks:
|
|
80
|
-
- Position a key light roughly 45° off-axis at eye level. Target the subject center and tune intensity for ${intensity} output (${moodHints[intensity]}).
|
|
81
|
-
- Add a fill light on the opposite side with wider spread and softened shadows to control contrast.
|
|
82
|
-
- Place a rim/back light to outline silhouettes and separate the subject from the background.
|
|
83
|
-
- Ensure all lights use physically plausible color temperature, enable shadow casting where helpful, and adjust attenuation to avoid spill.
|
|
84
|
-
- Once balanced, report the final intensity values, color temperatures, and any blockers encountered.`;
|
|
85
|
-
|
|
86
|
-
return [{
|
|
87
|
-
role: 'user',
|
|
88
|
-
content: { type: 'text', text }
|
|
89
|
-
}];
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: 'create_fps_controller',
|
|
94
|
-
description: 'Spin up a first-person controller blueprint with input mappings, collision, and starter movement.',
|
|
95
|
-
arguments: {
|
|
96
|
-
spawnLocation: {
|
|
97
|
-
type: 'vector',
|
|
98
|
-
description: 'Optional XYZ spawn position for the player pawn.',
|
|
99
|
-
required: false
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
build: (args) => {
|
|
103
|
-
const spawnVector = formatVector(args.spawnLocation);
|
|
104
|
-
const spawnLine = spawnVector ? `Spawn the pawn at world coordinates (${spawnVector}).` : 'Spawn the pawn at a safe default player start or the origin.';
|
|
105
|
-
|
|
106
|
-
const text = `Build a First Person Character blueprint with:
|
|
107
|
-
- Camera + arms mesh, basic WASD input, jump, crouch, and sprint bindings using Enhanced Input.
|
|
108
|
-
- Proper collision capsule sizing for a 180cm tall human.
|
|
109
|
-
- Momentum-preserving air control with configurable acceleration and friction.
|
|
110
|
-
- A configurable base turn rate with mouse sensitivity scaling.
|
|
111
|
-
- Serialized defaults for walking speed (600 uu/s) and sprint speed (900 uu/s).
|
|
112
|
-
- Expose key movement settings as editable defaults.
|
|
113
|
-
- ${spawnLine}
|
|
114
|
-
|
|
115
|
-
Finish by compiling, saving, and summarizing the created blueprint path plus the mapped input actions.`;
|
|
116
|
-
|
|
117
|
-
return [{
|
|
118
|
-
role: 'user',
|
|
119
|
-
content: { type: 'text', text }
|
|
120
|
-
}];
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
name: 'setup_post_processing',
|
|
125
|
-
description: 'Author a post-process volume tuned to a named cinematic grade.',
|
|
126
|
-
arguments: {
|
|
127
|
-
style: {
|
|
128
|
-
type: 'string',
|
|
129
|
-
enum: ['cinematic', 'realistic', 'stylized', 'noir'],
|
|
130
|
-
default: 'cinematic',
|
|
131
|
-
description: 'Look preset to emphasize color grading and tone-mapping style.'
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
build: (args) => {
|
|
135
|
-
const style = clampChoice(args.style, ['cinematic', 'realistic', 'stylized', 'noir'], 'cinematic');
|
|
136
|
-
const styleNotes: Record<string, string> = {
|
|
137
|
-
cinematic: 'filmic tonemapper, gentle bloom, warm highlights, cool shadows, slight vignette',
|
|
138
|
-
realistic: 'minimal grading, accurate white balance, restrained bloom, detail-preserving sharpening',
|
|
139
|
-
stylized: 'bold saturation shifts, custom color LUT, exaggerated contrast, selective bloom',
|
|
140
|
-
noir: 'monochrome conversion, strong contrast curve, subtle film grain, heavy vignette'
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
const text = `Create a global post-process volume with priority over level defaults.
|
|
144
|
-
- Apply the "${style}" look: ${styleNotes[style]}.
|
|
145
|
-
- Configure tone mapping, exposure, bloom, chromatic aberration, and LUTs as required.
|
|
146
|
-
- Ensure the volume is unbound unless level-specific constraints apply.
|
|
147
|
-
- Provide sanity checks for HDR output and keep auto-exposure transitions smooth.
|
|
148
|
-
- Summarize all modified settings with their final numeric values or asset references.`;
|
|
149
|
-
|
|
150
|
-
return [{
|
|
151
|
-
role: 'user',
|
|
152
|
-
content: { type: 'text', text }
|
|
153
|
-
}];
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: 'setup_dynamic_day_night_cycle',
|
|
158
|
-
description: 'Create or update a Blueprint to drive a dynamic day/night cycle with optional weather hooks.',
|
|
159
|
-
arguments: {
|
|
160
|
-
startTime: {
|
|
161
|
-
type: 'string',
|
|
162
|
-
enum: ['dawn', 'noon', 'dusk', 'midnight'],
|
|
163
|
-
default: 'dawn',
|
|
164
|
-
description: 'Initial lighting state for the cycle.'
|
|
165
|
-
},
|
|
166
|
-
transitionMinutes: {
|
|
167
|
-
type: 'number',
|
|
168
|
-
default: 5,
|
|
169
|
-
description: 'Game-time minutes to blend between major lighting states.'
|
|
170
|
-
},
|
|
171
|
-
enableWeather: {
|
|
172
|
-
type: 'boolean',
|
|
173
|
-
default: false,
|
|
174
|
-
description: 'Whether to expose hooks for weather-driven sky adjustments.'
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
build: (args) => {
|
|
178
|
-
const startTime = clampChoice(args.startTime, ['dawn', 'noon', 'dusk', 'midnight'], 'dawn');
|
|
179
|
-
const transitionMinutes = coerceNumber(args.transitionMinutes, 5, 1, 60);
|
|
180
|
-
const enableWeather = Boolean(args.enableWeather);
|
|
181
|
-
|
|
182
|
-
const weatherLine = enableWeather
|
|
183
|
-
? '- Expose interfaces for cloud opacity, precipitation-driven skylight updates, and lightning flashes.'
|
|
184
|
-
: '- Weather hooks are disabled; keep the blueprint lean';
|
|
185
|
-
|
|
186
|
-
const text = `Implement a Blueprint-based day/night cycle manager.
|
|
187
|
-
- Start the sequence at ${startTime} lighting.
|
|
188
|
-
- Advance sun rotation, skylight captures, fog, and sky atmosphere continuously with ${transitionMinutes} minute blends between key states.
|
|
189
|
-
- Sync directional light intensity/color with real-world sun elevation and inject moonlight at night.
|
|
190
|
-
- ${weatherLine}.
|
|
191
|
-
- Provide editor controls for time-of-day multiplier and manual overrides.
|
|
192
|
-
- Document the generated blueprint path and exposed parameters.`;
|
|
193
|
-
|
|
194
|
-
return [{
|
|
195
|
-
role: 'user',
|
|
196
|
-
content: { type: 'text', text }
|
|
197
|
-
}];
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
name: 'design_cinematic_camera_move',
|
|
202
|
-
description: 'Author a sequencer shot with a polished camera move and easing markers.',
|
|
203
|
-
arguments: {
|
|
204
|
-
durationSeconds: {
|
|
205
|
-
type: 'number',
|
|
206
|
-
default: 6,
|
|
207
|
-
description: 'Shot duration in seconds.'
|
|
208
|
-
},
|
|
209
|
-
moveStyle: {
|
|
210
|
-
type: 'string',
|
|
211
|
-
enum: ['push_in', 'orbit', 'tracking', 'crane'],
|
|
212
|
-
default: 'push_in',
|
|
213
|
-
description: 'Camera move archetype to emphasize.'
|
|
214
|
-
},
|
|
215
|
-
focusTarget: {
|
|
216
|
-
type: 'string',
|
|
217
|
-
description: 'Optional actor or component name to keep in focus.',
|
|
218
|
-
required: false
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
build: (args) => {
|
|
222
|
-
const duration = coerceNumber(args.durationSeconds, 6, 2, 30);
|
|
223
|
-
const moveStyle = clampChoice(args.moveStyle, ['push_in', 'orbit', 'tracking', 'crane'], 'push_in');
|
|
224
|
-
const focusLine = typeof args.focusTarget === 'string' && args.focusTarget.trim().length > 0
|
|
225
|
-
? `Lock focus distance on "${args.focusTarget}" and animate depth of field pulls if necessary.`
|
|
226
|
-
: 'Pick the most prominent subject in frame and maintain crisp focus throughout the move.';
|
|
227
|
-
|
|
228
|
-
const moveHints: Record<string, string> = {
|
|
229
|
-
push_in: 'Ease-in push toward the subject with gentle camera roll stabilization.',
|
|
230
|
-
orbit: '360° orbit with consistent parallax and a tracked look-at target.',
|
|
231
|
-
tracking: 'Match the subject velocity along a spline with smoothed acceleration.',
|
|
232
|
-
crane: 'Combine vertical rise with lateral drift for a reveal shot.'
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
const text = `In Sequencer, author a ${duration.toFixed(1)} second cinematic shot.
|
|
236
|
-
- Movement style: ${moveStyle} (${moveHints[moveStyle]}).
|
|
237
|
-
- Key auto-exposure, camera focal length, and focal distance for a premium look.
|
|
238
|
-
- Add ease-in/ease-out tangents at shot boundaries to avoid abrupt starts/stops.
|
|
239
|
-
- ${focusLine}
|
|
240
|
-
- Annotate the timeline with intent markers (intro beat, climax, resolve).
|
|
241
|
-
- Render a preview range and summarize the created assets.`;
|
|
242
|
-
|
|
243
|
-
return [{
|
|
244
|
-
role: 'user',
|
|
245
|
-
content: { type: 'text', text }
|
|
246
|
-
}];
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
];
|