unreal-engine-mcp-server 0.5.21 → 0.5.30
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/CHANGELOG.md +247 -4
- package/README.md +140 -85
- package/dist/automation/bridge.d.ts +8 -0
- package/dist/automation/bridge.d.ts.map +1 -1
- package/dist/automation/bridge.js +94 -14
- package/dist/automation/bridge.js.map +1 -1
- package/dist/automation/connection-manager.d.ts.map +1 -1
- package/dist/automation/connection-manager.js +13 -5
- package/dist/automation/connection-manager.js.map +1 -1
- package/dist/automation/handshake.d.ts.map +1 -1
- package/dist/automation/handshake.js +40 -27
- package/dist/automation/handshake.js.map +1 -1
- package/dist/automation/index.d.ts +1 -1
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.js +0 -1
- package/dist/automation/index.js.map +1 -1
- package/dist/automation/message-handler.d.ts.map +1 -1
- package/dist/automation/message-handler.js +13 -9
- package/dist/automation/message-handler.js.map +1 -1
- package/dist/automation/message-schema.d.ts.map +1 -1
- package/dist/automation/message-schema.js +19 -18
- package/dist/automation/message-schema.js.map +1 -1
- package/dist/automation/request-tracker.d.ts +1 -0
- package/dist/automation/request-tracker.d.ts.map +1 -1
- package/dist/automation/request-tracker.js +30 -31
- package/dist/automation/request-tracker.js.map +1 -1
- package/dist/automation/types.d.ts +38 -32
- package/dist/automation/types.d.ts.map +1 -1
- package/dist/cli.js +14 -16
- package/dist/cli.js.map +1 -1
- package/dist/config/class-aliases.d.ts.map +1 -1
- package/dist/config/class-aliases.js +10 -2
- package/dist/config/class-aliases.js.map +1 -1
- package/dist/config.d.ts +9 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -32
- package/dist/config.js.map +1 -1
- package/dist/handlers/resource-handlers.d.ts +15 -2
- package/dist/handlers/resource-handlers.d.ts.map +1 -1
- package/dist/handlers/resource-handlers.js +46 -63
- package/dist/handlers/resource-handlers.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -48
- package/dist/index.js.map +1 -1
- package/dist/resources/assets.d.ts.map +1 -1
- package/dist/resources/assets.js +34 -9
- package/dist/resources/assets.js.map +1 -1
- package/dist/resources/levels.d.ts +3 -0
- package/dist/resources/levels.d.ts.map +1 -1
- package/dist/resources/levels.js +33 -17
- package/dist/resources/levels.js.map +1 -1
- package/dist/server/resource-registry.d.ts +15 -2
- package/dist/server/resource-registry.d.ts.map +1 -1
- package/dist/server/resource-registry.js +9 -8
- package/dist/server/resource-registry.js.map +1 -1
- package/dist/server/tool-registry.d.ts +0 -1
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +91 -101
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/server-setup.d.ts +5 -2
- package/dist/server-setup.d.ts.map +1 -1
- package/dist/server-setup.js +15 -19
- package/dist/server-setup.js.map +1 -1
- package/dist/services/health-monitor.d.ts +3 -0
- package/dist/services/health-monitor.d.ts.map +1 -1
- package/dist/services/health-monitor.js +30 -11
- package/dist/services/health-monitor.js.map +1 -1
- package/dist/services/metrics-server.d.ts +1 -1
- package/dist/services/metrics-server.d.ts.map +1 -1
- package/dist/services/metrics-server.js +65 -3
- package/dist/services/metrics-server.js.map +1 -1
- package/dist/tools/base-tool.d.ts.map +1 -1
- package/dist/tools/base-tool.js +14 -16
- package/dist/tools/base-tool.js.map +1 -1
- package/dist/tools/consolidated-tool-definitions.d.ts +16 -1
- package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -1
- package/dist/tools/consolidated-tool-definitions.js +1479 -2538
- package/dist/tools/consolidated-tool-definitions.js.map +1 -1
- package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -1
- package/dist/tools/consolidated-tool-handlers.js +195 -217
- package/dist/tools/consolidated-tool-handlers.js.map +1 -1
- package/dist/tools/dynamic-handler-registry.d.ts +1 -0
- package/dist/tools/dynamic-handler-registry.d.ts.map +1 -1
- package/dist/tools/dynamic-handler-registry.js +15 -7
- package/dist/tools/dynamic-handler-registry.js.map +1 -1
- package/dist/tools/dynamic-tool-manager.d.ts +1 -1
- package/dist/tools/dynamic-tool-manager.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-manager.js +30 -18
- package/dist/tools/dynamic-tool-manager.js.map +1 -1
- package/dist/tools/editor.d.ts +2 -2
- package/dist/tools/editor.d.ts.map +1 -1
- package/dist/tools/editor.js +4 -4
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/handlers/actor-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/actor-handlers.js +66 -7
- package/dist/tools/handlers/actor-handlers.js.map +1 -1
- package/dist/tools/handlers/ai-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/ai-handlers.js +24 -13
- package/dist/tools/handlers/ai-handlers.js.map +1 -1
- package/dist/tools/handlers/animation-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/animation-authoring-handlers.js +285 -218
- package/dist/tools/handlers/animation-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/animation-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/animation-handlers.js +69 -21
- package/dist/tools/handlers/animation-handlers.js.map +1 -1
- package/dist/tools/handlers/asset-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/asset-handlers.js +75 -16
- package/dist/tools/handlers/asset-handlers.js.map +1 -1
- package/dist/tools/handlers/audio-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/audio-authoring-handlers.js +102 -9
- package/dist/tools/handlers/audio-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/audio-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/audio-handlers.js +48 -13
- package/dist/tools/handlers/audio-handlers.js.map +1 -1
- package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/blueprint-handlers.js +28 -48
- package/dist/tools/handlers/blueprint-handlers.js.map +1 -1
- package/dist/tools/handlers/character-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/character-handlers.js +13 -12
- package/dist/tools/handlers/character-handlers.js.map +1 -1
- package/dist/tools/handlers/combat-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/combat-handlers.js +12 -12
- package/dist/tools/handlers/combat-handlers.js.map +1 -1
- package/dist/tools/handlers/common-handlers.d.ts +14 -0
- package/dist/tools/handlers/common-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/common-handlers.js +117 -9
- package/dist/tools/handlers/common-handlers.js.map +1 -1
- package/dist/tools/handlers/editor-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/editor-handlers.js +139 -67
- package/dist/tools/handlers/editor-handlers.js.map +1 -1
- package/dist/tools/handlers/effect-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/effect-handlers.js +324 -36
- package/dist/tools/handlers/effect-handlers.js.map +1 -1
- package/dist/tools/handlers/environment-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/environment-handlers.js +186 -21
- package/dist/tools/handlers/environment-handlers.js.map +1 -1
- package/dist/tools/handlers/game-framework-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/game-framework-handlers.js +10 -12
- package/dist/tools/handlers/game-framework-handlers.js.map +1 -1
- package/dist/tools/handlers/gas-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/gas-handlers.js +136 -20
- package/dist/tools/handlers/gas-handlers.js.map +1 -1
- package/dist/tools/handlers/geometry-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/geometry-handlers.js +130 -7
- package/dist/tools/handlers/geometry-handlers.js.map +1 -1
- package/dist/tools/handlers/graph-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/graph-handlers.js +46 -11
- package/dist/tools/handlers/graph-handlers.js.map +1 -1
- package/dist/tools/handlers/input-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/input-handlers.js +33 -75
- package/dist/tools/handlers/input-handlers.js.map +1 -1
- package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/inspect-handlers.js +136 -39
- package/dist/tools/handlers/inspect-handlers.js.map +1 -1
- package/dist/tools/handlers/interaction-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/interaction-handlers.js +14 -12
- package/dist/tools/handlers/interaction-handlers.js.map +1 -1
- package/dist/tools/handlers/inventory-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/inventory-handlers.js +19 -12
- package/dist/tools/handlers/inventory-handlers.js.map +1 -1
- package/dist/tools/handlers/level-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/level-handlers.js +166 -149
- package/dist/tools/handlers/level-handlers.js.map +1 -1
- package/dist/tools/handlers/level-structure-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/level-structure-handlers.js +18 -34
- package/dist/tools/handlers/level-structure-handlers.js.map +1 -1
- package/dist/tools/handlers/manage-tools-handlers.js +3 -3
- package/dist/tools/handlers/manage-tools-handlers.js.map +1 -1
- package/dist/tools/handlers/material-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/material-authoring-handlers.js +382 -41
- package/dist/tools/handlers/material-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/navigation-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/navigation-handlers.js +11 -36
- package/dist/tools/handlers/navigation-handlers.js.map +1 -1
- package/dist/tools/handlers/networking-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/networking-handlers.js +17 -15
- package/dist/tools/handlers/networking-handlers.js.map +1 -1
- package/dist/tools/handlers/niagara-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/niagara-authoring-handlers.js +24 -23
- package/dist/tools/handlers/niagara-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/pcg-handlers.d.ts +4 -0
- package/dist/tools/handlers/pcg-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/pcg-handlers.js +77 -0
- package/dist/tools/handlers/pcg-handlers.js.map +1 -0
- package/dist/tools/handlers/performance-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/performance-handlers.js +35 -42
- package/dist/tools/handlers/performance-handlers.js.map +1 -1
- package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/pipeline-handlers.js +157 -39
- package/dist/tools/handlers/pipeline-handlers.js.map +1 -1
- package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/sequence-handlers.js +6 -4
- package/dist/tools/handlers/sequence-handlers.js.map +1 -1
- package/dist/tools/handlers/sessions-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/sessions-handlers.js +7 -15
- package/dist/tools/handlers/sessions-handlers.js.map +1 -1
- package/dist/tools/handlers/spline-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/spline-handlers.js +8 -35
- package/dist/tools/handlers/spline-handlers.js.map +1 -1
- package/dist/tools/handlers/system-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/system-handlers.js +100 -26
- package/dist/tools/handlers/system-handlers.js.map +1 -1
- package/dist/tools/handlers/texture-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/texture-handlers.js +14 -0
- package/dist/tools/handlers/texture-handlers.js.map +1 -1
- package/dist/tools/handlers/volume-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/volume-handlers.js +6 -33
- package/dist/tools/handlers/volume-handlers.js.map +1 -1
- package/dist/tools/handlers/widget-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/widget-authoring-handlers.js +26 -20
- package/dist/tools/handlers/widget-authoring-handlers.js.map +1 -1
- package/dist/tools/level.d.ts +2 -2
- package/dist/tools/level.d.ts.map +1 -1
- package/dist/tools/level.js +2 -1
- package/dist/tools/level.js.map +1 -1
- package/dist/tools/property-dictionary.js +1 -1
- package/dist/tools/property-dictionary.js.map +1 -1
- package/dist/tools/schemas/core-tools.d.ts +1 -1
- package/dist/tools/schemas/core-tools.d.ts.map +1 -1
- package/dist/tools/schemas/core-tools.js +94 -57
- package/dist/tools/schemas/core-tools.js.map +1 -1
- package/dist/tools/tool-definition-utils.d.ts +8 -0
- package/dist/tools/tool-definition-utils.d.ts.map +1 -1
- package/dist/tools/tool-definition-utils.js +20 -0
- package/dist/tools/tool-definition-utils.js.map +1 -1
- package/dist/types/automation-responses.d.ts +26 -33
- package/dist/types/automation-responses.d.ts.map +1 -1
- package/dist/types/env.d.ts.map +1 -1
- package/dist/types/env.js +7 -6
- package/dist/types/env.js.map +1 -1
- package/dist/types/handler-types.d.ts +41 -20
- package/dist/types/handler-types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/tool-interfaces.d.ts +5 -873
- package/dist/types/tool-interfaces.d.ts.map +1 -1
- package/dist/types/tool-types.d.ts +35 -1
- package/dist/types/tool-types.d.ts.map +1 -1
- package/dist/unreal-bridge.d.ts.map +1 -1
- package/dist/unreal-bridge.js +16 -6
- package/dist/unreal-bridge.js.map +1 -1
- package/dist/utils/action-constants.d.ts +4 -1
- package/dist/utils/action-constants.d.ts.map +1 -1
- package/dist/utils/action-constants.js +4 -1
- package/dist/utils/action-constants.js.map +1 -1
- package/dist/utils/command-validator.d.ts.map +1 -1
- package/dist/utils/command-validator.js +5 -4
- package/dist/utils/command-validator.js.map +1 -1
- package/dist/utils/elicitation.d.ts +5 -2
- package/dist/utils/elicitation.d.ts.map +1 -1
- package/dist/utils/elicitation.js +38 -21
- package/dist/utils/elicitation.js.map +1 -1
- package/dist/utils/environment-snapshot.d.ts +17 -0
- package/dist/utils/environment-snapshot.d.ts.map +1 -0
- package/dist/utils/environment-snapshot.js +242 -0
- package/dist/utils/environment-snapshot.js.map +1 -0
- package/dist/utils/error-handler.d.ts +1 -11
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +41 -25
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ini-reader.js +4 -4
- package/dist/utils/ini-reader.js.map +1 -1
- package/dist/utils/log-reader.d.ts +29 -0
- package/dist/utils/log-reader.d.ts.map +1 -0
- package/dist/utils/log-reader.js +229 -0
- package/dist/utils/log-reader.js.map +1 -0
- package/dist/utils/log-redaction.d.ts +4 -0
- package/dist/utils/log-redaction.d.ts.map +1 -0
- package/dist/utils/log-redaction.js +27 -0
- package/dist/utils/log-redaction.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +20 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/normalize.d.ts.map +1 -1
- package/dist/utils/normalize.js +31 -30
- package/dist/utils/normalize.js.map +1 -1
- package/dist/utils/path-security.d.ts.map +1 -1
- package/dist/utils/path-security.js +20 -11
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/response-factory.d.ts +1 -1
- package/dist/utils/response-factory.d.ts.map +1 -1
- package/dist/utils/response-factory.js +17 -3
- package/dist/utils/response-factory.js.map +1 -1
- package/dist/utils/response-validator.d.ts.map +1 -1
- package/dist/utils/response-validator.js +114 -47
- package/dist/utils/response-validator.js.map +1 -1
- package/dist/utils/safe-json.d.ts.map +1 -1
- package/dist/utils/safe-json.js +24 -18
- package/dist/utils/safe-json.js.map +1 -1
- package/dist/utils/type-coercion.d.ts +2 -3
- package/dist/utils/type-coercion.d.ts.map +1 -1
- package/dist/utils/type-coercion.js +42 -14
- package/dist/utils/type-coercion.js.map +1 -1
- package/dist/utils/type-guards.d.ts +2 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +4 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/unreal-command-queue.d.ts +2 -0
- package/dist/utils/unreal-command-queue.d.ts.map +1 -1
- package/dist/utils/unreal-command-queue.js +80 -54
- package/dist/utils/unreal-command-queue.js.map +1 -1
- package/dist/utils/validation.d.ts +2 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +44 -34
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -6
- package/server.json +3 -3
- package/dist/graphql/loaders.d.ts +0 -64
- package/dist/graphql/loaders.d.ts.map +0 -1
- package/dist/graphql/loaders.js +0 -117
- package/dist/graphql/loaders.js.map +0 -1
- package/dist/graphql/resolvers.d.ts +0 -373
- package/dist/graphql/resolvers.d.ts.map +0 -1
- package/dist/graphql/resolvers.js +0 -776
- package/dist/graphql/resolvers.js.map +0 -1
- package/dist/graphql/schema.d.ts +0 -5
- package/dist/graphql/schema.d.ts.map +0 -1
- package/dist/graphql/schema.js +0 -437
- package/dist/graphql/schema.js.map +0 -1
- package/dist/graphql/server.d.ts +0 -25
- package/dist/graphql/server.d.ts.map +0 -1
- package/dist/graphql/server.js +0 -119
- package/dist/graphql/server.js.map +0 -1
- package/dist/graphql/types.d.ts +0 -9
- package/dist/graphql/types.d.ts.map +0 -1
- package/dist/graphql/types.js +0 -2
- package/dist/graphql/types.js.map +0 -1
- package/dist/tools/actors.d.ts +0 -212
- package/dist/tools/actors.d.ts.map +0 -1
- package/dist/tools/actors.js +0 -456
- package/dist/tools/actors.js.map +0 -1
- package/dist/tools/animation.d.ts +0 -274
- package/dist/tools/animation.d.ts.map +0 -1
- package/dist/tools/animation.js +0 -773
- package/dist/tools/animation.js.map +0 -1
- package/dist/tools/assets.d.ts +0 -82
- package/dist/tools/assets.d.ts.map +0 -1
- package/dist/tools/assets.js +0 -383
- package/dist/tools/assets.js.map +0 -1
- package/dist/tools/blueprint.d.ts +0 -271
- package/dist/tools/blueprint.d.ts.map +0 -1
- package/dist/tools/blueprint.js +0 -828
- package/dist/tools/blueprint.js.map +0 -1
- package/dist/tools/environment.d.ts +0 -37
- package/dist/tools/environment.d.ts.map +0 -1
- package/dist/tools/environment.js +0 -338
- package/dist/tools/environment.js.map +0 -1
- package/dist/tools/foliage.d.ts +0 -140
- package/dist/tools/foliage.d.ts.map +0 -1
- package/dist/tools/foliage.js +0 -405
- package/dist/tools/foliage.js.map +0 -1
- package/dist/tools/landscape.d.ts +0 -120
- package/dist/tools/landscape.d.ts.map +0 -1
- package/dist/tools/landscape.js +0 -454
- package/dist/tools/landscape.js.map +0 -1
- package/dist/tools/lighting.d.ts +0 -240
- package/dist/tools/lighting.d.ts.map +0 -1
- package/dist/tools/lighting.js +0 -856
- package/dist/tools/lighting.js.map +0 -1
- package/dist/tools/logs.d.ts +0 -45
- package/dist/tools/logs.d.ts.map +0 -1
- package/dist/tools/logs.js +0 -235
- package/dist/tools/logs.js.map +0 -1
- package/dist/tools/niagara.d.ts +0 -277
- package/dist/tools/niagara.d.ts.map +0 -1
- package/dist/tools/niagara.js +0 -325
- package/dist/tools/niagara.js.map +0 -1
- package/dist/tools/physics.d.ts +0 -191
- package/dist/tools/physics.d.ts.map +0 -1
- package/dist/tools/physics.js +0 -492
- package/dist/tools/physics.js.map +0 -1
- package/dist/tools/sequence.d.ts +0 -139
- package/dist/tools/sequence.d.ts.map +0 -1
- package/dist/tools/sequence.js +0 -261
- package/dist/tools/sequence.js.map +0 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const stringToPositiveInteger: (val: unknown, defaultVal: number) => number;
|
|
3
|
+
export declare const EnvSchema: z.ZodPreprocess<z.ZodObject<{
|
|
3
4
|
NODE_ENV: z.ZodDefault<z.ZodEnum<{
|
|
4
5
|
development: "development";
|
|
5
|
-
production: "production";
|
|
6
6
|
test: "test";
|
|
7
|
+
production: "production";
|
|
7
8
|
}>>;
|
|
8
9
|
LOG_LEVEL: z.ZodDefault<z.ZodEnum<{
|
|
9
10
|
debug: "debug";
|
|
@@ -11,17 +12,17 @@ export declare const EnvSchema: z.ZodObject<{
|
|
|
11
12
|
warn: "warn";
|
|
12
13
|
error: "error";
|
|
13
14
|
}>>;
|
|
14
|
-
MCP_ROUTE_STDOUT_LOGS: z.
|
|
15
|
+
MCP_ROUTE_STDOUT_LOGS: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
15
16
|
UE_PROJECT_PATH: z.ZodOptional<z.ZodString>;
|
|
16
17
|
UE_EDITOR_EXE: z.ZodOptional<z.ZodString>;
|
|
17
|
-
MCP_AUTOMATION_PORT: z.
|
|
18
|
+
MCP_AUTOMATION_PORT: z.ZodDefault<z.ZodPreprocess<z.ZodNumber>>;
|
|
18
19
|
MCP_AUTOMATION_HOST: z.ZodDefault<z.ZodString>;
|
|
19
|
-
MCP_AUTOMATION_CLIENT_MODE: z.
|
|
20
|
-
MCP_CONNECTION_TIMEOUT_MS: z.
|
|
21
|
-
MCP_REQUEST_TIMEOUT_MS: z.
|
|
20
|
+
MCP_AUTOMATION_CLIENT_MODE: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
21
|
+
MCP_CONNECTION_TIMEOUT_MS: z.ZodDefault<z.ZodPreprocess<z.ZodNumber>>;
|
|
22
|
+
MCP_REQUEST_TIMEOUT_MS: z.ZodDefault<z.ZodPreprocess<z.ZodNumber>>;
|
|
22
23
|
MCP_DEFAULT_CATEGORIES: z.ZodDefault<z.ZodString>;
|
|
23
24
|
MCP_ADDITIONAL_PATH_PREFIXES: z.ZodDefault<z.ZodString>;
|
|
24
|
-
}, z.core.$strip
|
|
25
|
+
}, z.core.$strip>>;
|
|
25
26
|
export type Config = z.infer<typeof EnvSchema>;
|
|
26
27
|
declare let config: Config;
|
|
27
28
|
export { config };
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB,eAAO,MAAM,uBAAuB,GAAI,KAAK,OAAO,EAAE,YAAY,MAAM,WAYvE,CAAC;AAyDF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;kBAA+C,CAAC;AAEtE,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE/C,QAAA,IAAI,MAAM,EAAE,MAAM,CAAC;AAgBnB,OAAO,EAAE,MAAM,EAAE,CAAC;AAOlB,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CASpD"}
|
package/dist/config.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { Logger } from './utils/logger.js';
|
|
3
|
+
import { isRecord } from './utils/type-guards.js';
|
|
3
4
|
import dotenv from 'dotenv';
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const shouldLoadDotenv = process.env.NODE_ENV !== 'test' && process.env.VITEST !== 'true' && process.env.VITEST_WORKER_ID === undefined;
|
|
6
|
+
if (shouldLoadDotenv) {
|
|
7
|
+
const originalWrite = process.stdout.write;
|
|
8
|
+
process.stdout.write = function () { return true; };
|
|
9
|
+
try {
|
|
10
|
+
dotenv.config();
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
process.stdout.write = originalWrite;
|
|
14
|
+
}
|
|
11
15
|
}
|
|
12
16
|
const log = new Logger('Config');
|
|
13
17
|
const stringToBoolean = (val) => {
|
|
@@ -19,29 +23,60 @@ const stringToBoolean = (val) => {
|
|
|
19
23
|
}
|
|
20
24
|
return false;
|
|
21
25
|
};
|
|
22
|
-
const
|
|
23
|
-
if (typeof val === 'number')
|
|
24
|
-
return val;
|
|
26
|
+
export const stringToPositiveInteger = (val, defaultVal) => {
|
|
27
|
+
if (typeof val === 'number') {
|
|
28
|
+
return Number.isInteger(val) && val > 0 ? val : defaultVal;
|
|
29
|
+
}
|
|
25
30
|
if (typeof val === 'string') {
|
|
26
|
-
const
|
|
27
|
-
|
|
31
|
+
const trimmed = val.trim();
|
|
32
|
+
if (trimmed.length === 0)
|
|
33
|
+
return defaultVal;
|
|
34
|
+
if (!/^\d+$/.test(trimmed))
|
|
35
|
+
return defaultVal;
|
|
36
|
+
const parsed = Number(trimmed);
|
|
37
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : defaultVal;
|
|
28
38
|
}
|
|
29
39
|
return defaultVal;
|
|
30
40
|
};
|
|
31
|
-
|
|
41
|
+
function withEnvAliases(val) {
|
|
42
|
+
if (!isRecord(val))
|
|
43
|
+
return val;
|
|
44
|
+
const env = { ...val };
|
|
45
|
+
if (env.MCP_REQUEST_TIMEOUT_MS === undefined && env.MCP_AUTOMATION_REQUEST_TIMEOUT_MS !== undefined) {
|
|
46
|
+
env.MCP_REQUEST_TIMEOUT_MS = env.MCP_AUTOMATION_REQUEST_TIMEOUT_MS;
|
|
47
|
+
}
|
|
48
|
+
if (env.MCP_CONNECTION_TIMEOUT_MS === undefined && env.UNREAL_CONNECTION_TIMEOUT !== undefined) {
|
|
49
|
+
env.MCP_CONNECTION_TIMEOUT_MS = env.UNREAL_CONNECTION_TIMEOUT;
|
|
50
|
+
}
|
|
51
|
+
return env;
|
|
52
|
+
}
|
|
53
|
+
function normalizeAdditionalPathPrefix(value) {
|
|
54
|
+
const trimmed = value.trim();
|
|
55
|
+
if (!trimmed)
|
|
56
|
+
return undefined;
|
|
57
|
+
let prefix = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
58
|
+
prefix = prefix.replace(/\\/g, '/');
|
|
59
|
+
if (!prefix.endsWith('/'))
|
|
60
|
+
prefix += '/';
|
|
61
|
+
if (prefix === '/' || prefix.includes('..') || prefix.includes('//'))
|
|
62
|
+
return undefined;
|
|
63
|
+
return prefix;
|
|
64
|
+
}
|
|
65
|
+
const EnvSchemaShape = z.object({
|
|
32
66
|
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
33
67
|
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('debug'),
|
|
34
|
-
MCP_ROUTE_STDOUT_LOGS: z.preprocess(stringToBoolean, z.boolean().default(true)
|
|
68
|
+
MCP_ROUTE_STDOUT_LOGS: z.preprocess(stringToBoolean, z.boolean()).default(true),
|
|
35
69
|
UE_PROJECT_PATH: z.string().optional(),
|
|
36
70
|
UE_EDITOR_EXE: z.string().optional(),
|
|
37
|
-
MCP_AUTOMATION_PORT: z.preprocess((v) =>
|
|
71
|
+
MCP_AUTOMATION_PORT: z.preprocess((v) => stringToPositiveInteger(v, 8091), z.number()).default(8091),
|
|
38
72
|
MCP_AUTOMATION_HOST: z.string().default('127.0.0.1'),
|
|
39
|
-
MCP_AUTOMATION_CLIENT_MODE: z.preprocess(stringToBoolean, z.boolean().default(false)
|
|
40
|
-
MCP_CONNECTION_TIMEOUT_MS: z.preprocess((v) =>
|
|
41
|
-
MCP_REQUEST_TIMEOUT_MS: z.preprocess((v) =>
|
|
42
|
-
MCP_DEFAULT_CATEGORIES: z.string().default('
|
|
73
|
+
MCP_AUTOMATION_CLIENT_MODE: z.preprocess(stringToBoolean, z.boolean()).default(false),
|
|
74
|
+
MCP_CONNECTION_TIMEOUT_MS: z.preprocess((v) => stringToPositiveInteger(v, 5000), z.number()).default(5000),
|
|
75
|
+
MCP_REQUEST_TIMEOUT_MS: z.preprocess((v) => stringToPositiveInteger(v, 30000), z.number()).default(30000),
|
|
76
|
+
MCP_DEFAULT_CATEGORIES: z.string().default('all'),
|
|
43
77
|
MCP_ADDITIONAL_PATH_PREFIXES: z.string().default(''),
|
|
44
78
|
});
|
|
79
|
+
export const EnvSchema = z.preprocess(withEnvAliases, EnvSchemaShape);
|
|
45
80
|
let config;
|
|
46
81
|
try {
|
|
47
82
|
config = EnvSchema.parse(process.env);
|
|
@@ -49,7 +84,7 @@ try {
|
|
|
49
84
|
}
|
|
50
85
|
catch (error) {
|
|
51
86
|
if (error instanceof z.ZodError) {
|
|
52
|
-
log.error('❌ Invalid configuration:', error.
|
|
87
|
+
log.error('❌ Invalid configuration:', error.issues);
|
|
53
88
|
log.warn('⚠️ Falling back to safe defaults.');
|
|
54
89
|
config = EnvSchema.parse({});
|
|
55
90
|
}
|
|
@@ -62,18 +97,9 @@ export function getAdditionalPathPrefixes() {
|
|
|
62
97
|
const raw = config.MCP_ADDITIONAL_PATH_PREFIXES;
|
|
63
98
|
if (!raw || raw.trim() === '')
|
|
64
99
|
return [];
|
|
65
|
-
return raw
|
|
100
|
+
return Array.from(new Set(raw
|
|
66
101
|
.split(',')
|
|
67
|
-
.map(
|
|
68
|
-
.filter(
|
|
69
|
-
.map(s => {
|
|
70
|
-
let p = s.startsWith('/') ? s : `/${s}`;
|
|
71
|
-
if (!p.endsWith('/'))
|
|
72
|
-
p += '/';
|
|
73
|
-
if (p === '/' || p.includes('..') || p.includes('//'))
|
|
74
|
-
return '';
|
|
75
|
-
return p;
|
|
76
|
-
})
|
|
77
|
-
.filter(s => s.length > 0);
|
|
102
|
+
.map(normalizeAdditionalPathPrefix)
|
|
103
|
+
.filter((prefix) => prefix !== undefined)));
|
|
78
104
|
}
|
|
79
105
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { UnrealBridge } from '../unreal-bridge.js';
|
|
3
3
|
import { AutomationBridge } from '../automation/index.js';
|
|
4
4
|
import { AssetResources } from '../resources/assets.js';
|
|
5
5
|
import { ActorResources } from '../resources/actors.js';
|
|
6
6
|
import { LevelResources } from '../resources/levels.js';
|
|
7
7
|
import { HealthMonitor } from '../services/health-monitor.js';
|
|
8
|
+
export type ResourceServer = {
|
|
9
|
+
setRequestHandler(schema: typeof ReadResourceRequestSchema, handler: (request: {
|
|
10
|
+
params: {
|
|
11
|
+
uri: string;
|
|
12
|
+
};
|
|
13
|
+
}) => Promise<{
|
|
14
|
+
contents: Array<{
|
|
15
|
+
uri: string;
|
|
16
|
+
mimeType: string;
|
|
17
|
+
text: string;
|
|
18
|
+
}>;
|
|
19
|
+
}>): void;
|
|
20
|
+
};
|
|
8
21
|
export declare class ResourceHandler {
|
|
9
22
|
private server;
|
|
10
23
|
private bridge;
|
|
@@ -14,7 +27,7 @@ export declare class ResourceHandler {
|
|
|
14
27
|
private levelResources;
|
|
15
28
|
private healthMonitor;
|
|
16
29
|
private ensureConnected;
|
|
17
|
-
constructor(server:
|
|
30
|
+
constructor(server: ResourceServer, bridge: UnrealBridge, automationBridge: AutomationBridge, assetResources: AssetResources, actorResources: ActorResources, levelResources: LevelResources, healthMonitor: HealthMonitor, ensureConnected: () => Promise<boolean>);
|
|
18
31
|
registerHandlers(): void;
|
|
19
32
|
}
|
|
20
33
|
//# sourceMappingURL=resource-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/resource-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/resource-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,iBAAiB,CACf,MAAM,EAAE,OAAO,yBAAyB,EACxC,OAAO,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAC/H,IAAI,CAAC;CACT,CAAC;AA+BF,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,eAAe;gBAPf,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC;IAGjD,gBAAgB;CAyHjB"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import { ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
function resourceContent(uri, mimeType, text) {
|
|
3
|
+
return { contents: [{ uri, mimeType, text }] };
|
|
4
|
+
}
|
|
5
|
+
function jsonResource(uri, value) {
|
|
6
|
+
return resourceContent(uri, 'application/json', JSON.stringify(value, null, 2));
|
|
7
|
+
}
|
|
8
|
+
function disconnectedResource(uri) {
|
|
9
|
+
return resourceContent(uri, 'text/plain', 'Unreal Engine not connected (after 3 attempts).');
|
|
10
|
+
}
|
|
11
|
+
function redactRecentErrors(errors) {
|
|
12
|
+
return errors.map(error => ({
|
|
13
|
+
time: error.time,
|
|
14
|
+
scope: error.scope,
|
|
15
|
+
type: error.type,
|
|
16
|
+
retriable: error.retriable
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
function objectDetails(value) {
|
|
20
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
21
|
+
? value
|
|
22
|
+
: {};
|
|
23
|
+
}
|
|
2
24
|
export class ResourceHandler {
|
|
3
25
|
server;
|
|
4
26
|
bridge;
|
|
@@ -24,44 +46,26 @@ export class ResourceHandler {
|
|
|
24
46
|
if (uri === 'ue://assets') {
|
|
25
47
|
const ok = await this.ensureConnected();
|
|
26
48
|
if (!ok) {
|
|
27
|
-
return
|
|
49
|
+
return disconnectedResource(uri);
|
|
28
50
|
}
|
|
29
51
|
const list = await this.assetResources.list('/Game', true);
|
|
30
|
-
return
|
|
31
|
-
contents: [{
|
|
32
|
-
uri,
|
|
33
|
-
mimeType: 'application/json',
|
|
34
|
-
text: JSON.stringify(list, null, 2)
|
|
35
|
-
}]
|
|
36
|
-
};
|
|
52
|
+
return jsonResource(uri, list);
|
|
37
53
|
}
|
|
38
54
|
if (uri === 'ue://actors') {
|
|
39
55
|
const ok = await this.ensureConnected();
|
|
40
56
|
if (!ok) {
|
|
41
|
-
return
|
|
57
|
+
return disconnectedResource(uri);
|
|
42
58
|
}
|
|
43
59
|
const list = await this.actorResources.listActors();
|
|
44
|
-
return
|
|
45
|
-
contents: [{
|
|
46
|
-
uri,
|
|
47
|
-
mimeType: 'application/json',
|
|
48
|
-
text: JSON.stringify(list, null, 2)
|
|
49
|
-
}]
|
|
50
|
-
};
|
|
60
|
+
return jsonResource(uri, list);
|
|
51
61
|
}
|
|
52
62
|
if (uri === 'ue://level') {
|
|
53
63
|
const ok = await this.ensureConnected();
|
|
54
64
|
if (!ok) {
|
|
55
|
-
return
|
|
65
|
+
return disconnectedResource(uri);
|
|
56
66
|
}
|
|
57
67
|
const level = await this.levelResources.getCurrentLevel();
|
|
58
|
-
return
|
|
59
|
-
contents: [{
|
|
60
|
-
uri,
|
|
61
|
-
mimeType: 'application/json',
|
|
62
|
-
text: JSON.stringify(level, null, 2)
|
|
63
|
-
}]
|
|
64
|
-
};
|
|
68
|
+
return jsonResource(uri, level);
|
|
65
69
|
}
|
|
66
70
|
if (uri === 'ue://health') {
|
|
67
71
|
const uptimeMs = Date.now() - this.healthMonitor.metrics.uptime;
|
|
@@ -70,13 +74,17 @@ export class ResourceHandler {
|
|
|
70
74
|
let featureFlags = {};
|
|
71
75
|
if (this.bridge.isConnected) {
|
|
72
76
|
try {
|
|
73
|
-
versionInfo = await this.bridge.getEngineVersion();
|
|
77
|
+
versionInfo = objectDetails(await this.bridge.getEngineVersion());
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
versionInfo = {};
|
|
74
81
|
}
|
|
75
|
-
catch { }
|
|
76
82
|
try {
|
|
77
|
-
featureFlags = await this.bridge.getFeatureFlags();
|
|
83
|
+
featureFlags = objectDetails(await this.bridge.getFeatureFlags());
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
featureFlags = {};
|
|
78
87
|
}
|
|
79
|
-
catch { }
|
|
80
88
|
}
|
|
81
89
|
const responseTimes = this.healthMonitor.metrics.responseTimes.slice(-25);
|
|
82
90
|
const automationSummary = {
|
|
@@ -107,24 +115,14 @@ export class ResourceHandler {
|
|
|
107
115
|
engineVersion: versionInfo,
|
|
108
116
|
features: {
|
|
109
117
|
pythonEnabled: false,
|
|
110
|
-
subsystems: featureFlags.subsystems
|
|
118
|
+
subsystems: objectDetails(featureFlags.subsystems),
|
|
111
119
|
automationBridgeConnected: automationStatus.connected
|
|
112
120
|
}
|
|
113
121
|
},
|
|
114
|
-
recentErrors: this.healthMonitor.metrics.recentErrors.slice(-10),
|
|
115
|
-
automationBridge: automationSummary
|
|
116
|
-
raw: {
|
|
117
|
-
metrics: this.healthMonitor.metrics,
|
|
118
|
-
automationStatus
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
return {
|
|
122
|
-
contents: [{
|
|
123
|
-
uri,
|
|
124
|
-
mimeType: 'application/json',
|
|
125
|
-
text: JSON.stringify(health, null, 2)
|
|
126
|
-
}]
|
|
122
|
+
recentErrors: redactRecentErrors(this.healthMonitor.metrics.recentErrors.slice(-10)),
|
|
123
|
+
automationBridge: automationSummary
|
|
127
124
|
};
|
|
125
|
+
return jsonResource(uri, health);
|
|
128
126
|
}
|
|
129
127
|
if (uri === 'ue://automation-bridge') {
|
|
130
128
|
const status = this.automationBridge.getStatus();
|
|
@@ -137,41 +135,26 @@ export class ResourceHandler {
|
|
|
137
135
|
capabilityTokenRequired: status.capabilityTokenRequired,
|
|
138
136
|
pendingRequests: status.pendingRequests
|
|
139
137
|
},
|
|
140
|
-
connections: status.connections,
|
|
141
138
|
timestamps: {
|
|
142
139
|
connectedAt: status.connectedAt,
|
|
143
140
|
lastHandshakeAt: status.lastHandshakeAt,
|
|
144
141
|
lastMessageAt: status.lastMessageAt,
|
|
145
142
|
lastRequestSentAt: status.lastRequestSentAt
|
|
146
143
|
},
|
|
147
|
-
lastDisconnect: status.lastDisconnect,
|
|
148
|
-
lastHandshakeFailure: status.lastHandshakeFailure,
|
|
149
|
-
lastError: status.lastError,
|
|
150
|
-
lastHandshakeMetadata: status.lastHandshakeMetadata,
|
|
151
|
-
pendingRequestDetails: status.pendingRequestDetails,
|
|
144
|
+
lastDisconnect: status.lastDisconnect ? { code: status.lastDisconnect.code, at: status.lastDisconnect.at } : null,
|
|
145
|
+
lastHandshakeFailure: status.lastHandshakeFailure ? { at: status.lastHandshakeFailure.at } : null,
|
|
146
|
+
lastError: status.lastError ? { at: status.lastError.at } : null,
|
|
152
147
|
listening: status.webSocketListening
|
|
153
148
|
};
|
|
154
|
-
return
|
|
155
|
-
contents: [{
|
|
156
|
-
uri,
|
|
157
|
-
mimeType: 'application/json',
|
|
158
|
-
text: JSON.stringify(content, null, 2)
|
|
159
|
-
}]
|
|
160
|
-
};
|
|
149
|
+
return jsonResource(uri, content);
|
|
161
150
|
}
|
|
162
151
|
if (uri === 'ue://version') {
|
|
163
152
|
const ok = await this.ensureConnected();
|
|
164
153
|
if (!ok) {
|
|
165
|
-
return
|
|
154
|
+
return disconnectedResource(uri);
|
|
166
155
|
}
|
|
167
156
|
const info = await this.bridge.getEngineVersion();
|
|
168
|
-
return
|
|
169
|
-
contents: [{
|
|
170
|
-
uri,
|
|
171
|
-
mimeType: 'application/json',
|
|
172
|
-
text: JSON.stringify(info, null, 2)
|
|
173
|
-
}]
|
|
174
|
-
};
|
|
157
|
+
return jsonResource(uri, info);
|
|
175
158
|
}
|
|
176
159
|
throw new Error(`Unknown resource: ${uri}`);
|
|
177
160
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-handlers.js","sourceRoot":"","sources":["../../src/handlers/resource-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-handlers.js","sourceRoot":"","sources":["../../src/handlers/resource-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
2
2
|
import { UnrealBridge } from './unreal-bridge.js';
|
|
3
3
|
import { AutomationBridge } from './automation/index.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { GraphQLServer } from './graphql/server.js';
|
|
6
5
|
export declare function createServer(): {
|
|
7
6
|
server: Server<{
|
|
8
7
|
method: string;
|
|
@@ -40,7 +39,6 @@ export declare function createServer(): {
|
|
|
40
39
|
}>;
|
|
41
40
|
bridge: UnrealBridge;
|
|
42
41
|
automationBridge: AutomationBridge;
|
|
43
|
-
graphqlServer: GraphQLServer;
|
|
44
42
|
metricsServer: import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse> | null;
|
|
45
43
|
};
|
|
46
44
|
export declare const configSchema: z.ZodObject<{
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmExB,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyE3B;AAGD,eAAO,MAAM,YAAY;;;;;;;;iBAGvB,CAAC;AAGH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAahG;AAED,wBAAsB,gBAAgB,kBA0HrC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,6 @@ import { HealthMonitor } from './services/health-monitor.js';
|
|
|
11
11
|
import { ServerSetup } from './server-setup.js';
|
|
12
12
|
import { startMetricsServer } from './services/metrics-server.js';
|
|
13
13
|
import { config } from './config.js';
|
|
14
|
-
import { GraphQLServer } from './graphql/server.js';
|
|
15
14
|
const require = createRequire(import.meta.url);
|
|
16
15
|
const packageInfo = (() => {
|
|
17
16
|
try {
|
|
@@ -28,7 +27,7 @@ const DEFAULT_SERVER_NAME = typeof packageInfo.name === 'string' && packageInfo.
|
|
|
28
27
|
: 'unreal-engine-mcp';
|
|
29
28
|
const DEFAULT_SERVER_VERSION = typeof packageInfo.version === 'string' && packageInfo.version.trim().length > 0
|
|
30
29
|
? packageInfo.version
|
|
31
|
-
: '0.5.
|
|
30
|
+
: '0.5.30';
|
|
32
31
|
function routeStdoutLogsToStderr() {
|
|
33
32
|
if (!config.MCP_ROUTE_STDOUT_LOGS) {
|
|
34
33
|
return;
|
|
@@ -39,10 +38,10 @@ function routeStdoutLogsToStderr() {
|
|
|
39
38
|
.join(' ');
|
|
40
39
|
process.stderr.write(`${line}\n`);
|
|
41
40
|
};
|
|
42
|
-
console.log =
|
|
43
|
-
console.info =
|
|
41
|
+
console.log = writeToStderr;
|
|
42
|
+
console.info = writeToStderr;
|
|
44
43
|
if (typeof console.debug === 'function') {
|
|
45
|
-
console.debug =
|
|
44
|
+
console.debug = writeToStderr;
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
47
|
const log = new Logger('UE-MCP');
|
|
@@ -55,6 +54,12 @@ const CONFIG = {
|
|
|
55
54
|
AUTOMATION_HEARTBEAT_MS: 15000,
|
|
56
55
|
HEALTH_CHECK_INTERVAL_MS: 30000
|
|
57
56
|
};
|
|
57
|
+
function getErrorCode(error) {
|
|
58
|
+
if (error && typeof error === 'object' && 'code' in error) {
|
|
59
|
+
return error.code;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
58
63
|
export function createServer() {
|
|
59
64
|
const bridge = new UnrealBridge();
|
|
60
65
|
const healthMonitor = new HealthMonitor(log);
|
|
@@ -81,10 +86,6 @@ export function createServer() {
|
|
|
81
86
|
log.error('Automation bridge error', error);
|
|
82
87
|
});
|
|
83
88
|
const metricsServer = startMetricsServer({ healthMonitor, automationBridge, logger: log });
|
|
84
|
-
const graphqlServer = new GraphQLServer(bridge, automationBridge);
|
|
85
|
-
graphqlServer.start().catch((error) => {
|
|
86
|
-
log.warn('GraphQL server failed to start:', error);
|
|
87
|
-
});
|
|
88
89
|
log.debug('Initializing response validation...');
|
|
89
90
|
const toolDefs = consolidatedToolDefinitions;
|
|
90
91
|
toolDefs.forEach((tool) => {
|
|
@@ -107,7 +108,7 @@ export function createServer() {
|
|
|
107
108
|
});
|
|
108
109
|
const serverSetup = new ServerSetup(server, bridge, automationBridge, log, healthMonitor);
|
|
109
110
|
serverSetup.setup();
|
|
110
|
-
return { server, bridge, automationBridge,
|
|
111
|
+
return { server, bridge, automationBridge, metricsServer };
|
|
111
112
|
}
|
|
112
113
|
export const configSchema = z.object({
|
|
113
114
|
logLevel: z.enum(['debug', 'info', 'warn', 'error']).optional().default('info').describe('Runtime log level'),
|
|
@@ -130,7 +131,7 @@ export default function createServerDefault({ config } = {}) {
|
|
|
130
131
|
return server;
|
|
131
132
|
}
|
|
132
133
|
export async function startStdioServer() {
|
|
133
|
-
const { server, bridge, automationBridge,
|
|
134
|
+
const { server, bridge, automationBridge, metricsServer } = createServer();
|
|
134
135
|
const transport = new StdioServerTransport();
|
|
135
136
|
let shuttingDown = false;
|
|
136
137
|
const closeMetricsServer = async () => {
|
|
@@ -140,8 +141,7 @@ export async function startStdioServer() {
|
|
|
140
141
|
await new Promise((resolve) => {
|
|
141
142
|
try {
|
|
142
143
|
metricsServer.close((error) => {
|
|
143
|
-
const
|
|
144
|
-
const errorCode = errorObj?.code;
|
|
144
|
+
const errorCode = getErrorCode(error);
|
|
145
145
|
if (error && errorCode !== 'ERR_SERVER_NOT_RUNNING') {
|
|
146
146
|
log.warn('Failed to close metrics server cleanly', error);
|
|
147
147
|
}
|
|
@@ -149,8 +149,7 @@ export async function startStdioServer() {
|
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
151
|
catch (error) {
|
|
152
|
-
const
|
|
153
|
-
const errorCode = errorObj?.code;
|
|
152
|
+
const errorCode = getErrorCode(error);
|
|
154
153
|
if (errorCode !== 'ERR_SERVER_NOT_RUNNING') {
|
|
155
154
|
log.warn('Failed to close metrics server cleanly', error);
|
|
156
155
|
}
|
|
@@ -184,15 +183,9 @@ export async function startStdioServer() {
|
|
|
184
183
|
log.warn('Failed to close metrics server cleanly', error);
|
|
185
184
|
}
|
|
186
185
|
try {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
log.warn('Failed to stop GraphQL server cleanly', error);
|
|
191
|
-
}
|
|
192
|
-
try {
|
|
193
|
-
const serverObj = server;
|
|
194
|
-
if (typeof serverObj.close === 'function') {
|
|
195
|
-
await serverObj.close();
|
|
186
|
+
const closeServer = server.close;
|
|
187
|
+
if (typeof closeServer === 'function') {
|
|
188
|
+
await closeServer.call(server);
|
|
196
189
|
}
|
|
197
190
|
}
|
|
198
191
|
catch (error) {
|
|
@@ -207,33 +200,34 @@ export async function startStdioServer() {
|
|
|
207
200
|
void handleShutdown(signal);
|
|
208
201
|
});
|
|
209
202
|
});
|
|
203
|
+
process.stdin.once('end', () => {
|
|
204
|
+
void handleShutdown();
|
|
205
|
+
});
|
|
206
|
+
process.stdin.once('close', () => {
|
|
207
|
+
void handleShutdown();
|
|
208
|
+
});
|
|
209
|
+
process.stdin.once('error', (error) => {
|
|
210
|
+
log.warn('Stdio input closed with an error', error);
|
|
211
|
+
void handleShutdown();
|
|
212
|
+
});
|
|
213
|
+
const runLifecycleCleanup = (eventName) => {
|
|
214
|
+
const runCleanup = (operation, cleanup) => {
|
|
215
|
+
try {
|
|
216
|
+
cleanup();
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
log.debug(`Failed to ${operation} during ${eventName}`, error);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
runCleanup('stop automation bridge', () => automationBridge.stop());
|
|
223
|
+
runCleanup('dispose Unreal bridge', () => bridge.dispose());
|
|
224
|
+
runCleanup('close metrics server', () => { metricsServer?.close(); });
|
|
225
|
+
};
|
|
210
226
|
process.once('beforeExit', () => {
|
|
211
|
-
|
|
212
|
-
automationBridge.stop();
|
|
213
|
-
}
|
|
214
|
-
catch { }
|
|
215
|
-
try {
|
|
216
|
-
bridge.dispose();
|
|
217
|
-
}
|
|
218
|
-
catch { }
|
|
219
|
-
try {
|
|
220
|
-
metricsServer?.close();
|
|
221
|
-
}
|
|
222
|
-
catch { }
|
|
227
|
+
runLifecycleCleanup('beforeExit');
|
|
223
228
|
});
|
|
224
229
|
process.once('exit', () => {
|
|
225
|
-
|
|
226
|
-
automationBridge.stop();
|
|
227
|
-
}
|
|
228
|
-
catch { }
|
|
229
|
-
try {
|
|
230
|
-
bridge.dispose();
|
|
231
|
-
}
|
|
232
|
-
catch { }
|
|
233
|
-
try {
|
|
234
|
-
metricsServer?.close();
|
|
235
|
-
}
|
|
236
|
-
catch { }
|
|
230
|
+
runLifecycleCleanup('exit');
|
|
237
231
|
});
|
|
238
232
|
const originalWrite = process.stdout.write;
|
|
239
233
|
process.stdout.write = function (...args) {
|