unity-open-mcp 0.1.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/LICENSE +21 -0
- package/README.md +145 -0
- package/dist/batch-spawn.d.ts +33 -0
- package/dist/batch-spawn.js +329 -0
- package/dist/batch-spawn.js.map +1 -0
- package/dist/capabilities/build-capabilities.d.ts +155 -0
- package/dist/capabilities/build-capabilities.js +475 -0
- package/dist/capabilities/build-capabilities.js.map +1 -0
- package/dist/capabilities/list-rules.d.ts +45 -0
- package/dist/capabilities/list-rules.js +121 -0
- package/dist/capabilities/list-rules.js.map +1 -0
- package/dist/capabilities/rule-catalog.d.ts +44 -0
- package/dist/capabilities/rule-catalog.js +330 -0
- package/dist/capabilities/rule-catalog.js.map +1 -0
- package/dist/capabilities/tool-groups.d.ts +53 -0
- package/dist/capabilities/tool-groups.js +396 -0
- package/dist/capabilities/tool-groups.js.map +1 -0
- package/dist/cli/args.d.ts +36 -0
- package/dist/cli/args.js +239 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/cli.d.ts +23 -0
- package/dist/cli/cli.js +125 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands.d.ts +37 -0
- package/dist/cli/commands.js +277 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/ping-poller.d.ts +81 -0
- package/dist/cli/ping-poller.js +161 -0
- package/dist/cli/ping-poller.js.map +1 -0
- package/dist/compat.d.ts +32 -0
- package/dist/compat.js +121 -0
- package/dist/compat.js.map +1 -0
- package/dist/compiler-errors.d.ts +31 -0
- package/dist/compiler-errors.js +91 -0
- package/dist/compiler-errors.js.map +1 -0
- package/dist/compressible-router.d.ts +18 -0
- package/dist/compressible-router.js +191 -0
- package/dist/compressible-router.js.map +1 -0
- package/dist/compression/asset-model.d.ts +86 -0
- package/dist/compression/asset-model.js +15 -0
- package/dist/compression/asset-model.js.map +1 -0
- package/dist/compression/compact.d.ts +153 -0
- package/dist/compression/compact.js +501 -0
- package/dist/compression/compact.js.map +1 -0
- package/dist/dialog-dismiss.d.ts +197 -0
- package/dist/dialog-dismiss.js +533 -0
- package/dist/dialog-dismiss.js.map +1 -0
- package/dist/event-stream.d.ts +60 -0
- package/dist/event-stream.js +228 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/gate-error.d.ts +18 -0
- package/dist/gate-error.js +11 -0
- package/dist/gate-error.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +146 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-discovery.d.ts +117 -0
- package/dist/instance-discovery.js +202 -0
- package/dist/instance-discovery.js.map +1 -0
- package/dist/live-client.d.ts +68 -0
- package/dist/live-client.js +583 -0
- package/dist/live-client.js.map +1 -0
- package/dist/offline.d.ts +75 -0
- package/dist/offline.js +1495 -0
- package/dist/offline.js.map +1 -0
- package/dist/package-version.d.ts +8 -0
- package/dist/package-version.js +41 -0
- package/dist/package-version.js.map +1 -0
- package/dist/ping-cache.d.ts +15 -0
- package/dist/ping-cache.js +10 -0
- package/dist/ping-cache.js.map +1 -0
- package/dist/project-health.d.ts +52 -0
- package/dist/project-health.js +177 -0
- package/dist/project-health.js.map +1 -0
- package/dist/resource-router.d.ts +26 -0
- package/dist/resource-router.js +143 -0
- package/dist/resource-router.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.js +40 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/results.d.ts +14 -0
- package/dist/results.js +22 -0
- package/dist/results.js.map +1 -0
- package/dist/router.d.ts +5 -0
- package/dist/router.js +2 -0
- package/dist/router.js.map +1 -0
- package/dist/routers.d.ts +44 -0
- package/dist/routers.js +73 -0
- package/dist/routers.js.map +1 -0
- package/dist/schema-defaults.d.ts +10 -0
- package/dist/schema-defaults.js +43 -0
- package/dist/schema-defaults.js.map +1 -0
- package/dist/skill/client-paths.d.ts +33 -0
- package/dist/skill/client-paths.js +131 -0
- package/dist/skill/client-paths.js.map +1 -0
- package/dist/skill/generate-skill.d.ts +38 -0
- package/dist/skill/generate-skill.js +389 -0
- package/dist/skill/generate-skill.js.map +1 -0
- package/dist/tool-router.d.ts +40 -0
- package/dist/tool-router.js +778 -0
- package/dist/tool-router.js.map +1 -0
- package/dist/tool-session-state.d.ts +55 -0
- package/dist/tool-session-state.js +116 -0
- package/dist/tool-session-state.js.map +1 -0
- package/dist/tools/agent-capabilities.d.ts +2 -0
- package/dist/tools/agent-capabilities.js +24 -0
- package/dist/tools/agent-capabilities.js.map +1 -0
- package/dist/tools/animation-create.d.ts +2 -0
- package/dist/tools/animation-create.js +31 -0
- package/dist/tools/animation-create.js.map +1 -0
- package/dist/tools/animation-get-data.d.ts +2 -0
- package/dist/tools/animation-get-data.js +23 -0
- package/dist/tools/animation-get-data.js.map +1 -0
- package/dist/tools/animation-modify.d.ts +2 -0
- package/dist/tools/animation-modify.js +45 -0
- package/dist/tools/animation-modify.js.map +1 -0
- package/dist/tools/animator-create.d.ts +2 -0
- package/dist/tools/animator-create.js +31 -0
- package/dist/tools/animator-create.js.map +1 -0
- package/dist/tools/animator-get-data.d.ts +2 -0
- package/dist/tools/animator-get-data.js +23 -0
- package/dist/tools/animator-get-data.js.map +1 -0
- package/dist/tools/animator-modify.d.ts +2 -0
- package/dist/tools/animator-modify.js +51 -0
- package/dist/tools/animator-modify.js.map +1 -0
- package/dist/tools/apply-fix.d.ts +2 -0
- package/dist/tools/apply-fix.js +39 -0
- package/dist/tools/apply-fix.js.map +1 -0
- package/dist/tools/assets-copy.d.ts +2 -0
- package/dist/tools/assets-copy.js +50 -0
- package/dist/tools/assets-copy.js.map +1 -0
- package/dist/tools/assets-create-folder.d.ts +2 -0
- package/dist/tools/assets-create-folder.js +53 -0
- package/dist/tools/assets-create-folder.js.map +1 -0
- package/dist/tools/assets-delete.d.ts +2 -0
- package/dist/tools/assets-delete.js +34 -0
- package/dist/tools/assets-delete.js.map +1 -0
- package/dist/tools/assets-move.d.ts +2 -0
- package/dist/tools/assets-move.js +50 -0
- package/dist/tools/assets-move.js.map +1 -0
- package/dist/tools/assets-refresh.d.ts +2 -0
- package/dist/tools/assets-refresh.js +37 -0
- package/dist/tools/assets-refresh.js.map +1 -0
- package/dist/tools/baseline-create.d.ts +2 -0
- package/dist/tools/baseline-create.js +20 -0
- package/dist/tools/baseline-create.js.map +1 -0
- package/dist/tools/bridge-status.d.ts +2 -0
- package/dist/tools/bridge-status.js +44 -0
- package/dist/tools/bridge-status.js.map +1 -0
- package/dist/tools/build-get-active-target.d.ts +2 -0
- package/dist/tools/build-get-active-target.js +16 -0
- package/dist/tools/build-get-active-target.js.map +1 -0
- package/dist/tools/build-get-defines.d.ts +2 -0
- package/dist/tools/build-get-defines.js +16 -0
- package/dist/tools/build-get-defines.js.map +1 -0
- package/dist/tools/build-get-scenes.d.ts +2 -0
- package/dist/tools/build-get-scenes.js +16 -0
- package/dist/tools/build-get-scenes.js.map +1 -0
- package/dist/tools/build-get-targets.d.ts +2 -0
- package/dist/tools/build-get-targets.js +18 -0
- package/dist/tools/build-get-targets.js.map +1 -0
- package/dist/tools/build-set-defines.d.ts +2 -0
- package/dist/tools/build-set-defines.js +50 -0
- package/dist/tools/build-set-defines.js.map +1 -0
- package/dist/tools/build-set-scenes.d.ts +2 -0
- package/dist/tools/build-set-scenes.js +60 -0
- package/dist/tools/build-set-scenes.js.map +1 -0
- package/dist/tools/build-set-target.d.ts +2 -0
- package/dist/tools/build-set-target.js +49 -0
- package/dist/tools/build-set-target.js.map +1 -0
- package/dist/tools/build-start.d.ts +2 -0
- package/dist/tools/build-start.js +64 -0
- package/dist/tools/build-start.js.map +1 -0
- package/dist/tools/capture-inline.d.ts +2 -0
- package/dist/tools/capture-inline.js +57 -0
- package/dist/tools/capture-inline.js.map +1 -0
- package/dist/tools/checkpoint-create.d.ts +2 -0
- package/dist/tools/checkpoint-create.js +16 -0
- package/dist/tools/checkpoint-create.js.map +1 -0
- package/dist/tools/compile-check.d.ts +2 -0
- package/dist/tools/compile-check.js +26 -0
- package/dist/tools/compile-check.js.map +1 -0
- package/dist/tools/component-add.d.ts +2 -0
- package/dist/tools/component-add.js +47 -0
- package/dist/tools/component-add.js.map +1 -0
- package/dist/tools/component-destroy.d.ts +2 -0
- package/dist/tools/component-destroy.js +46 -0
- package/dist/tools/component-destroy.js.map +1 -0
- package/dist/tools/component-get.d.ts +2 -0
- package/dist/tools/component-get.js +54 -0
- package/dist/tools/component-get.js.map +1 -0
- package/dist/tools/component-list-all.d.ts +2 -0
- package/dist/tools/component-list-all.js +38 -0
- package/dist/tools/component-list-all.js.map +1 -0
- package/dist/tools/component-modify.d.ts +2 -0
- package/dist/tools/component-modify.js +80 -0
- package/dist/tools/component-modify.js.map +1 -0
- package/dist/tools/console-clear.d.ts +2 -0
- package/dist/tools/console-clear.js +19 -0
- package/dist/tools/console-clear.js.map +1 -0
- package/dist/tools/console-log.d.ts +2 -0
- package/dist/tools/console-log.js +47 -0
- package/dist/tools/console-log.js.map +1 -0
- package/dist/tools/delta.d.ts +2 -0
- package/dist/tools/delta.js +17 -0
- package/dist/tools/delta.js.map +1 -0
- package/dist/tools/editor-add-layer.d.ts +2 -0
- package/dist/tools/editor-add-layer.js +51 -0
- package/dist/tools/editor-add-layer.js.map +1 -0
- package/dist/tools/editor-add-tag.d.ts +2 -0
- package/dist/tools/editor-add-tag.js +41 -0
- package/dist/tools/editor-add-tag.js.map +1 -0
- package/dist/tools/editor-get-layers.d.ts +2 -0
- package/dist/tools/editor-get-layers.js +22 -0
- package/dist/tools/editor-get-layers.js.map +1 -0
- package/dist/tools/editor-get-tags.d.ts +2 -0
- package/dist/tools/editor-get-tags.js +19 -0
- package/dist/tools/editor-get-tags.js.map +1 -0
- package/dist/tools/editor-redo.d.ts +2 -0
- package/dist/tools/editor-redo.js +27 -0
- package/dist/tools/editor-redo.js.map +1 -0
- package/dist/tools/editor-set-state.d.ts +2 -0
- package/dist/tools/editor-set-state.js +57 -0
- package/dist/tools/editor-set-state.js.map +1 -0
- package/dist/tools/editor-status.d.ts +2 -0
- package/dist/tools/editor-status.js +17 -0
- package/dist/tools/editor-status.js.map +1 -0
- package/dist/tools/editor-undo.d.ts +2 -0
- package/dist/tools/editor-undo.js +29 -0
- package/dist/tools/editor-undo.js.map +1 -0
- package/dist/tools/execute-csharp.d.ts +2 -0
- package/dist/tools/execute-csharp.js +74 -0
- package/dist/tools/execute-csharp.js.map +1 -0
- package/dist/tools/execute-menu.d.ts +2 -0
- package/dist/tools/execute-menu.js +40 -0
- package/dist/tools/execute-menu.js.map +1 -0
- package/dist/tools/find-members.d.ts +2 -0
- package/dist/tools/find-members.js +56 -0
- package/dist/tools/find-members.js.map +1 -0
- package/dist/tools/find-references.d.ts +2 -0
- package/dist/tools/find-references.js +29 -0
- package/dist/tools/find-references.js.map +1 -0
- package/dist/tools/gameobject-create.d.ts +2 -0
- package/dist/tools/gameobject-create.js +61 -0
- package/dist/tools/gameobject-create.js.map +1 -0
- package/dist/tools/gameobject-destroy.d.ts +2 -0
- package/dist/tools/gameobject-destroy.js +38 -0
- package/dist/tools/gameobject-destroy.js.map +1 -0
- package/dist/tools/gameobject-duplicate.d.ts +2 -0
- package/dist/tools/gameobject-duplicate.js +40 -0
- package/dist/tools/gameobject-duplicate.js.map +1 -0
- package/dist/tools/gameobject-find.d.ts +2 -0
- package/dist/tools/gameobject-find.js +59 -0
- package/dist/tools/gameobject-find.js.map +1 -0
- package/dist/tools/gameobject-modify.d.ts +2 -0
- package/dist/tools/gameobject-modify.js +76 -0
- package/dist/tools/gameobject-modify.js.map +1 -0
- package/dist/tools/gameobject-set-parent.d.ts +2 -0
- package/dist/tools/gameobject-set-parent.js +55 -0
- package/dist/tools/gameobject-set-parent.js.map +1 -0
- package/dist/tools/gate-budget-estimate.d.ts +2 -0
- package/dist/tools/gate-budget-estimate.js +59 -0
- package/dist/tools/gate-budget-estimate.js.map +1 -0
- package/dist/tools/generate-skill.d.ts +2 -0
- package/dist/tools/generate-skill.js +37 -0
- package/dist/tools/generate-skill.js.map +1 -0
- package/dist/tools/impact-preview.d.ts +2 -0
- package/dist/tools/impact-preview.js +50 -0
- package/dist/tools/impact-preview.js.map +1 -0
- package/dist/tools/index.d.ts +30 -0
- package/dist/tools/index.js +576 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inputsystem-action-add.d.ts +2 -0
- package/dist/tools/inputsystem-action-add.js +61 -0
- package/dist/tools/inputsystem-action-add.js.map +1 -0
- package/dist/tools/inputsystem-actionmap-add.d.ts +2 -0
- package/dist/tools/inputsystem-actionmap-add.js +31 -0
- package/dist/tools/inputsystem-actionmap-add.js.map +1 -0
- package/dist/tools/inputsystem-asset-create.d.ts +2 -0
- package/dist/tools/inputsystem-asset-create.js +35 -0
- package/dist/tools/inputsystem-asset-create.js.map +1 -0
- package/dist/tools/inputsystem-binding-add.d.ts +2 -0
- package/dist/tools/inputsystem-binding-add.js +48 -0
- package/dist/tools/inputsystem-binding-add.js.map +1 -0
- package/dist/tools/inputsystem-binding-composite-add.d.ts +2 -0
- package/dist/tools/inputsystem-binding-composite-add.js +51 -0
- package/dist/tools/inputsystem-binding-composite-add.js.map +1 -0
- package/dist/tools/inputsystem-controlscheme-add.d.ts +2 -0
- package/dist/tools/inputsystem-controlscheme-add.js +43 -0
- package/dist/tools/inputsystem-controlscheme-add.js.map +1 -0
- package/dist/tools/inputsystem-get.d.ts +2 -0
- package/dist/tools/inputsystem-get.js +22 -0
- package/dist/tools/inputsystem-get.js.map +1 -0
- package/dist/tools/invoke-method.d.ts +2 -0
- package/dist/tools/invoke-method.js +104 -0
- package/dist/tools/invoke-method.js.map +1 -0
- package/dist/tools/list-assets.d.ts +2 -0
- package/dist/tools/list-assets.js +30 -0
- package/dist/tools/list-assets.js.map +1 -0
- package/dist/tools/list-rules.d.ts +2 -0
- package/dist/tools/list-rules.js +27 -0
- package/dist/tools/list-rules.js.map +1 -0
- package/dist/tools/manage-tools.d.ts +2 -0
- package/dist/tools/manage-tools.js +47 -0
- package/dist/tools/manage-tools.js.map +1 -0
- package/dist/tools/material-create.d.ts +2 -0
- package/dist/tools/material-create.js +37 -0
- package/dist/tools/material-create.js.map +1 -0
- package/dist/tools/material-get-keywords.d.ts +2 -0
- package/dist/tools/material-get-keywords.js +23 -0
- package/dist/tools/material-get-keywords.js.map +1 -0
- package/dist/tools/material-get-properties.d.ts +2 -0
- package/dist/tools/material-get-properties.js +32 -0
- package/dist/tools/material-get-properties.js.map +1 -0
- package/dist/tools/material-set-keyword.d.ts +2 -0
- package/dist/tools/material-set-keyword.js +42 -0
- package/dist/tools/material-set-keyword.js.map +1 -0
- package/dist/tools/material-set-property.d.ts +2 -0
- package/dist/tools/material-set-property.js +49 -0
- package/dist/tools/material-set-property.js.map +1 -0
- package/dist/tools/material-set-shader.d.ts +2 -0
- package/dist/tools/material-set-shader.js +39 -0
- package/dist/tools/material-set-shader.js.map +1 -0
- package/dist/tools/mutation-explain.d.ts +2 -0
- package/dist/tools/mutation-explain.js +44 -0
- package/dist/tools/mutation-explain.js.map +1 -0
- package/dist/tools/navigation-agent-add.d.ts +2 -0
- package/dist/tools/navigation-agent-add.js +38 -0
- package/dist/tools/navigation-agent-add.js.map +1 -0
- package/dist/tools/navigation-agent-set-destination.d.ts +2 -0
- package/dist/tools/navigation-agent-set-destination.js +33 -0
- package/dist/tools/navigation-agent-set-destination.js.map +1 -0
- package/dist/tools/navigation-get.d.ts +2 -0
- package/dist/tools/navigation-get.js +20 -0
- package/dist/tools/navigation-get.js.map +1 -0
- package/dist/tools/navigation-link-add.d.ts +2 -0
- package/dist/tools/navigation-link-add.js +57 -0
- package/dist/tools/navigation-link-add.js.map +1 -0
- package/dist/tools/navigation-list.d.ts +2 -0
- package/dist/tools/navigation-list.js +16 -0
- package/dist/tools/navigation-list.js.map +1 -0
- package/dist/tools/navigation-modifier-add.d.ts +2 -0
- package/dist/tools/navigation-modifier-add.js +42 -0
- package/dist/tools/navigation-modifier-add.js.map +1 -0
- package/dist/tools/navigation-modifier-volume-add.d.ts +2 -0
- package/dist/tools/navigation-modifier-volume-add.js +41 -0
- package/dist/tools/navigation-modifier-volume-add.js.map +1 -0
- package/dist/tools/navigation-modify.d.ts +2 -0
- package/dist/tools/navigation-modify.js +47 -0
- package/dist/tools/navigation-modify.js.map +1 -0
- package/dist/tools/navigation-set-bake-settings.d.ts +2 -0
- package/dist/tools/navigation-set-bake-settings.js +42 -0
- package/dist/tools/navigation-set-bake-settings.js.map +1 -0
- package/dist/tools/navigation-surface-add.d.ts +2 -0
- package/dist/tools/navigation-surface-add.js +62 -0
- package/dist/tools/navigation-surface-add.js.map +1 -0
- package/dist/tools/navigation-surface-bake.d.ts +2 -0
- package/dist/tools/navigation-surface-bake.js +30 -0
- package/dist/tools/navigation-surface-bake.js.map +1 -0
- package/dist/tools/object-get-data.d.ts +2 -0
- package/dist/tools/object-get-data.js +59 -0
- package/dist/tools/object-get-data.js.map +1 -0
- package/dist/tools/object-modify.d.ts +2 -0
- package/dist/tools/object-modify.js +73 -0
- package/dist/tools/object-modify.js.map +1 -0
- package/dist/tools/package-add.d.ts +2 -0
- package/dist/tools/package-add.js +42 -0
- package/dist/tools/package-add.js.map +1 -0
- package/dist/tools/package-check.d.ts +2 -0
- package/dist/tools/package-check.js +27 -0
- package/dist/tools/package-check.js.map +1 -0
- package/dist/tools/package-get-dependencies.d.ts +2 -0
- package/dist/tools/package-get-dependencies.js +17 -0
- package/dist/tools/package-get-dependencies.js.map +1 -0
- package/dist/tools/package-get-info.d.ts +2 -0
- package/dist/tools/package-get-info.js +33 -0
- package/dist/tools/package-get-info.js.map +1 -0
- package/dist/tools/package-list.d.ts +2 -0
- package/dist/tools/package-list.js +57 -0
- package/dist/tools/package-list.js.map +1 -0
- package/dist/tools/package-remove.d.ts +2 -0
- package/dist/tools/package-remove.js +40 -0
- package/dist/tools/package-remove.js.map +1 -0
- package/dist/tools/package-search.d.ts +2 -0
- package/dist/tools/package-search.js +42 -0
- package/dist/tools/package-search.js.map +1 -0
- package/dist/tools/particle-system-get.d.ts +2 -0
- package/dist/tools/particle-system-get.js +42 -0
- package/dist/tools/particle-system-get.js.map +1 -0
- package/dist/tools/particle-system-modify.d.ts +2 -0
- package/dist/tools/particle-system-modify.js +73 -0
- package/dist/tools/particle-system-modify.js.map +1 -0
- package/dist/tools/ping.d.ts +2 -0
- package/dist/tools/ping.js +10 -0
- package/dist/tools/ping.js.map +1 -0
- package/dist/tools/prefab-apply.d.ts +2 -0
- package/dist/tools/prefab-apply.js +39 -0
- package/dist/tools/prefab-apply.js.map +1 -0
- package/dist/tools/prefab-close.d.ts +2 -0
- package/dist/tools/prefab-close.js +29 -0
- package/dist/tools/prefab-close.js.map +1 -0
- package/dist/tools/prefab-create.d.ts +2 -0
- package/dist/tools/prefab-create.js +52 -0
- package/dist/tools/prefab-create.js.map +1 -0
- package/dist/tools/prefab-get-overrides.d.ts +2 -0
- package/dist/tools/prefab-get-overrides.js +27 -0
- package/dist/tools/prefab-get-overrides.js.map +1 -0
- package/dist/tools/prefab-instantiate.d.ts +2 -0
- package/dist/tools/prefab-instantiate.js +52 -0
- package/dist/tools/prefab-instantiate.js.map +1 -0
- package/dist/tools/prefab-open.d.ts +2 -0
- package/dist/tools/prefab-open.js +30 -0
- package/dist/tools/prefab-open.js.map +1 -0
- package/dist/tools/prefab-revert.d.ts +2 -0
- package/dist/tools/prefab-revert.js +37 -0
- package/dist/tools/prefab-revert.js.map +1 -0
- package/dist/tools/prefab-save.d.ts +2 -0
- package/dist/tools/prefab-save.js +24 -0
- package/dist/tools/prefab-save.js.map +1 -0
- package/dist/tools/prefab-status.d.ts +2 -0
- package/dist/tools/prefab-status.js +29 -0
- package/dist/tools/prefab-status.js.map +1 -0
- package/dist/tools/prefab-unpack.d.ts +2 -0
- package/dist/tools/prefab-unpack.js +43 -0
- package/dist/tools/prefab-unpack.js.map +1 -0
- package/dist/tools/probuilder-create-shape.d.ts +2 -0
- package/dist/tools/probuilder-create-shape.js +40 -0
- package/dist/tools/probuilder-create-shape.js.map +1 -0
- package/dist/tools/probuilder-delete-faces.d.ts +2 -0
- package/dist/tools/probuilder-delete-faces.js +47 -0
- package/dist/tools/probuilder-delete-faces.js.map +1 -0
- package/dist/tools/probuilder-extrude.d.ts +2 -0
- package/dist/tools/probuilder-extrude.js +58 -0
- package/dist/tools/probuilder-extrude.js.map +1 -0
- package/dist/tools/probuilder-get-mesh-info.d.ts +2 -0
- package/dist/tools/probuilder-get-mesh-info.js +21 -0
- package/dist/tools/probuilder-get-mesh-info.js.map +1 -0
- package/dist/tools/probuilder-set-face-material.d.ts +2 -0
- package/dist/tools/probuilder-set-face-material.js +53 -0
- package/dist/tools/probuilder-set-face-material.js.map +1 -0
- package/dist/tools/profiler-capture.d.ts +2 -0
- package/dist/tools/profiler-capture.js +84 -0
- package/dist/tools/profiler-capture.js.map +1 -0
- package/dist/tools/profiler-clear-data.d.ts +2 -0
- package/dist/tools/profiler-clear-data.js +20 -0
- package/dist/tools/profiler-clear-data.js.map +1 -0
- package/dist/tools/profiler-enable-module.d.ts +2 -0
- package/dist/tools/profiler-enable-module.js +32 -0
- package/dist/tools/profiler-enable-module.js.map +1 -0
- package/dist/tools/profiler-get-config.d.ts +2 -0
- package/dist/tools/profiler-get-config.js +21 -0
- package/dist/tools/profiler-get-config.js.map +1 -0
- package/dist/tools/profiler-get-script-stats.d.ts +2 -0
- package/dist/tools/profiler-get-script-stats.js +20 -0
- package/dist/tools/profiler-get-script-stats.js.map +1 -0
- package/dist/tools/profiler-get-status.d.ts +2 -0
- package/dist/tools/profiler-get-status.js +22 -0
- package/dist/tools/profiler-get-status.js.map +1 -0
- package/dist/tools/profiler-list-modules.d.ts +2 -0
- package/dist/tools/profiler-list-modules.js +20 -0
- package/dist/tools/profiler-list-modules.js.map +1 -0
- package/dist/tools/profiler-load-data.d.ts +2 -0
- package/dist/tools/profiler-load-data.js +38 -0
- package/dist/tools/profiler-load-data.js.map +1 -0
- package/dist/tools/profiler-memory.d.ts +2 -0
- package/dist/tools/profiler-memory.js +21 -0
- package/dist/tools/profiler-memory.js.map +1 -0
- package/dist/tools/profiler-rendering.d.ts +2 -0
- package/dist/tools/profiler-rendering.js +14 -0
- package/dist/tools/profiler-rendering.js.map +1 -0
- package/dist/tools/profiler-save-data.d.ts +2 -0
- package/dist/tools/profiler-save-data.js +38 -0
- package/dist/tools/profiler-save-data.js.map +1 -0
- package/dist/tools/profiler-set-config.d.ts +2 -0
- package/dist/tools/profiler-set-config.js +72 -0
- package/dist/tools/profiler-set-config.js.map +1 -0
- package/dist/tools/profiler-start.d.ts +2 -0
- package/dist/tools/profiler-start.js +31 -0
- package/dist/tools/profiler-start.js.map +1 -0
- package/dist/tools/profiler-stop.d.ts +2 -0
- package/dist/tools/profiler-stop.js +20 -0
- package/dist/tools/profiler-stop.js.map +1 -0
- package/dist/tools/pull-events.d.ts +2 -0
- package/dist/tools/pull-events.js +43 -0
- package/dist/tools/pull-events.js.map +1 -0
- package/dist/tools/read-asset.d.ts +2 -0
- package/dist/tools/read-asset.js +62 -0
- package/dist/tools/read-asset.js.map +1 -0
- package/dist/tools/read-compile-errors.d.ts +2 -0
- package/dist/tools/read-compile-errors.js +59 -0
- package/dist/tools/read-compile-errors.js.map +1 -0
- package/dist/tools/read-console.d.ts +2 -0
- package/dist/tools/read-console.js +57 -0
- package/dist/tools/read-console.js.map +1 -0
- package/dist/tools/regression-check.d.ts +2 -0
- package/dist/tools/regression-check.js +36 -0
- package/dist/tools/regression-check.js.map +1 -0
- package/dist/tools/reserialize.d.ts +2 -0
- package/dist/tools/reserialize.js +31 -0
- package/dist/tools/reserialize.js.map +1 -0
- package/dist/tools/run-tests.d.ts +2 -0
- package/dist/tools/run-tests.js +49 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/scan-all.d.ts +2 -0
- package/dist/tools/scan-all.js +25 -0
- package/dist/tools/scan-all.js.map +1 -0
- package/dist/tools/scan-paths.d.ts +2 -0
- package/dist/tools/scan-paths.js +40 -0
- package/dist/tools/scan-paths.js.map +1 -0
- package/dist/tools/scene-create.d.ts +2 -0
- package/dist/tools/scene-create.js +47 -0
- package/dist/tools/scene-create.js.map +1 -0
- package/dist/tools/scene-focus.d.ts +2 -0
- package/dist/tools/scene-focus.js +55 -0
- package/dist/tools/scene-focus.js.map +1 -0
- package/dist/tools/scene-get-data.d.ts +2 -0
- package/dist/tools/scene-get-data.js +52 -0
- package/dist/tools/scene-get-data.js.map +1 -0
- package/dist/tools/scene-get-dirty-summary.d.ts +2 -0
- package/dist/tools/scene-get-dirty-summary.js +17 -0
- package/dist/tools/scene-get-dirty-summary.js.map +1 -0
- package/dist/tools/scene-list-opened.d.ts +2 -0
- package/dist/tools/scene-list-opened.js +16 -0
- package/dist/tools/scene-list-opened.js.map +1 -0
- package/dist/tools/scene-open.d.ts +2 -0
- package/dist/tools/scene-open.js +48 -0
- package/dist/tools/scene-open.js.map +1 -0
- package/dist/tools/scene-save.d.ts +2 -0
- package/dist/tools/scene-save.js +38 -0
- package/dist/tools/scene-save.js.map +1 -0
- package/dist/tools/scene-set-active.d.ts +2 -0
- package/dist/tools/scene-set-active.js +33 -0
- package/dist/tools/scene-set-active.js.map +1 -0
- package/dist/tools/scene-unload.d.ts +2 -0
- package/dist/tools/scene-unload.js +33 -0
- package/dist/tools/scene-unload.js.map +1 -0
- package/dist/tools/screenshot-camera.d.ts +2 -0
- package/dist/tools/screenshot-camera.js +59 -0
- package/dist/tools/screenshot-camera.js.map +1 -0
- package/dist/tools/screenshot-window.d.ts +2 -0
- package/dist/tools/screenshot-window.js +54 -0
- package/dist/tools/screenshot-window.js.map +1 -0
- package/dist/tools/screenshot.d.ts +2 -0
- package/dist/tools/screenshot.js +47 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/script-delete.d.ts +2 -0
- package/dist/tools/script-delete.js +37 -0
- package/dist/tools/script-delete.js.map +1 -0
- package/dist/tools/script-read.d.ts +2 -0
- package/dist/tools/script-read.js +46 -0
- package/dist/tools/script-read.js.map +1 -0
- package/dist/tools/script-write.d.ts +2 -0
- package/dist/tools/script-write.js +56 -0
- package/dist/tools/script-write.js.map +1 -0
- package/dist/tools/search-assets.d.ts +2 -0
- package/dist/tools/search-assets.js +49 -0
- package/dist/tools/search-assets.js.map +1 -0
- package/dist/tools/selection-get.d.ts +2 -0
- package/dist/tools/selection-get.js +28 -0
- package/dist/tools/selection-get.js.map +1 -0
- package/dist/tools/selection-set.d.ts +2 -0
- package/dist/tools/selection-set.js +72 -0
- package/dist/tools/selection-set.js.map +1 -0
- package/dist/tools/settings-get-lighting.d.ts +2 -0
- package/dist/tools/settings-get-lighting.js +21 -0
- package/dist/tools/settings-get-lighting.js.map +1 -0
- package/dist/tools/settings-get-physics.d.ts +2 -0
- package/dist/tools/settings-get-physics.js +17 -0
- package/dist/tools/settings-get-physics.js.map +1 -0
- package/dist/tools/settings-get-player.d.ts +2 -0
- package/dist/tools/settings-get-player.js +16 -0
- package/dist/tools/settings-get-player.js.map +1 -0
- package/dist/tools/settings-get-quality.d.ts +2 -0
- package/dist/tools/settings-get-quality.js +16 -0
- package/dist/tools/settings-get-quality.js.map +1 -0
- package/dist/tools/settings-set-lighting.d.ts +2 -0
- package/dist/tools/settings-set-lighting.js +58 -0
- package/dist/tools/settings-set-lighting.js.map +1 -0
- package/dist/tools/settings-set-physics.d.ts +2 -0
- package/dist/tools/settings-set-physics.js +52 -0
- package/dist/tools/settings-set-physics.js.map +1 -0
- package/dist/tools/settings-set-player.d.ts +2 -0
- package/dist/tools/settings-set-player.js +62 -0
- package/dist/tools/settings-set-player.js.map +1 -0
- package/dist/tools/settings-set-quality.d.ts +2 -0
- package/dist/tools/settings-set-quality.js +51 -0
- package/dist/tools/settings-set-quality.js.map +1 -0
- package/dist/tools/shader-get-data.d.ts +2 -0
- package/dist/tools/shader-get-data.js +31 -0
- package/dist/tools/shader-get-data.js.map +1 -0
- package/dist/tools/shader-list-all.d.ts +2 -0
- package/dist/tools/shader-list-all.js +24 -0
- package/dist/tools/shader-list-all.js.map +1 -0
- package/dist/tools/spatial-query.d.ts +2 -0
- package/dist/tools/spatial-query.js +117 -0
- package/dist/tools/spatial-query.js.map +1 -0
- package/dist/tools/splines-add-knot.d.ts +2 -0
- package/dist/tools/splines-add-knot.js +44 -0
- package/dist/tools/splines-add-knot.js.map +1 -0
- package/dist/tools/splines-container-create.d.ts +2 -0
- package/dist/tools/splines-container-create.js +39 -0
- package/dist/tools/splines-container-create.js.map +1 -0
- package/dist/tools/splines-evaluate.d.ts +2 -0
- package/dist/tools/splines-evaluate.js +31 -0
- package/dist/tools/splines-evaluate.js.map +1 -0
- package/dist/tools/splines-get-knots.d.ts +2 -0
- package/dist/tools/splines-get-knots.js +25 -0
- package/dist/tools/splines-get-knots.js.map +1 -0
- package/dist/tools/splines-modify.d.ts +2 -0
- package/dist/tools/splines-modify.js +35 -0
- package/dist/tools/splines-modify.js.map +1 -0
- package/dist/tools/splines-set-knot.d.ts +2 -0
- package/dist/tools/splines-set-knot.js +41 -0
- package/dist/tools/splines-set-knot.js.map +1 -0
- package/dist/tools/splines-set-tangent-mode.d.ts +2 -0
- package/dist/tools/splines-set-tangent-mode.js +43 -0
- package/dist/tools/splines-set-tangent-mode.js.map +1 -0
- package/dist/tools/type-schema.d.ts +2 -0
- package/dist/tools/type-schema.js +62 -0
- package/dist/tools/type-schema.js.map +1 -0
- package/dist/tools/validate-edit.d.ts +2 -0
- package/dist/tools/validate-edit.js +43 -0
- package/dist/tools/validate-edit.js.map +1 -0
- package/dist/unity-install-discovery.d.ts +79 -0
- package/dist/unity-install-discovery.js +206 -0
- package/dist/unity-install-discovery.js.map +1 -0
- package/dist/unity-log.d.ts +35 -0
- package/dist/unity-log.js +110 -0
- package/dist/unity-log.js.map +1 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 Alexey Perov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# unity-open-mcp
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/unity-open-mcp)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
|
|
6
|
+
MCP server (stdio) that routes Model Context Protocol tool calls to a **live Unity
|
|
7
|
+
Editor** via the [Unity Open MCP Bridge](https://github.com/AlexeyPerov/Unity-Open-MCP),
|
|
8
|
+
with batch (headless Unity) and offline (disk-parse) fallbacks. Works with Cursor,
|
|
9
|
+
Claude Desktop, Claude Code, OpenCode, ZCode, and any MCP stdio client.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
Node.js 18+ is required (the server is a Node process spawned by your MCP client).
|
|
14
|
+
|
|
15
|
+
You do not need to install this package yourself — your MCP client spawns it via
|
|
16
|
+
`npx`. The sections below show both the zero-install `npx` path and the optional
|
|
17
|
+
global install.
|
|
18
|
+
|
|
19
|
+
### Configure your MCP client
|
|
20
|
+
|
|
21
|
+
Pick your client and merge the matching config. Replace `/path/to/your/unity/project`
|
|
22
|
+
with the absolute path to your Unity project root.
|
|
23
|
+
|
|
24
|
+
#### Cursor or Claude Desktop
|
|
25
|
+
|
|
26
|
+
Edit `~/.cursor/mcp.json` (Cursor) or your Claude Desktop MCP config file:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"unity-open-mcp": {
|
|
32
|
+
"command": "npx",
|
|
33
|
+
"args": ["-y", "unity-open-mcp@latest"],
|
|
34
|
+
"env": {
|
|
35
|
+
"UNITY_PROJECT_PATH": "/path/to/your/unity/project"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### OpenCode (global)
|
|
43
|
+
|
|
44
|
+
Edit `~/.config/opencode/opencode.json`:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"mcp": {
|
|
49
|
+
"unity-open-mcp": {
|
|
50
|
+
"type": "local",
|
|
51
|
+
"command": ["npx", "-y", "unity-open-mcp@latest"],
|
|
52
|
+
"enabled": true,
|
|
53
|
+
"environment": {
|
|
54
|
+
"UNITY_PROJECT_PATH": "/path/to/your/unity/project"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
For a project-scoped config, put the same `mcp.unity-open-mcp` block in
|
|
62
|
+
`opencode.json` at your Unity project root.
|
|
63
|
+
|
|
64
|
+
#### Claude Code (CLI)
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
claude mcp add unity-open-mcp \
|
|
68
|
+
--env UNITY_PROJECT_PATH=/path/to/your/unity/project \
|
|
69
|
+
-- npx -y unity-open-mcp@latest
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
> **Bridge port.** The bridge HTTP port is **derived from the project path**
|
|
73
|
+
> (`20000 + sha256(path) % 10000`, so two projects never collide), and the
|
|
74
|
+
> server discovers it via the bridge's lock file — so you usually do **not**
|
|
75
|
+
> need to set a port at all. The Unity Hub Pro wizard computes it for you.
|
|
76
|
+
> Set `UNITY_OPEN_MCP_BRIDGE_PORT` only when you want to pin a specific port.
|
|
77
|
+
|
|
78
|
+
### Optional: global install
|
|
79
|
+
|
|
80
|
+
If you prefer a one-time install over `npx` re-resolving on each spawn:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm install -g unity-open-mcp
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Then use `"command": "unity-open-mcp", "args": []` (Cursor / Claude Desktop) or
|
|
87
|
+
`"command": ["unity-open-mcp"]` (OpenCode) in your client config. Update with
|
|
88
|
+
`npm update -g unity-open-mcp`.
|
|
89
|
+
|
|
90
|
+
## Environment variables
|
|
91
|
+
|
|
92
|
+
| Variable | Required | Purpose |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| `UNITY_PROJECT_PATH` | yes | Absolute path to your Unity project root. |
|
|
95
|
+
| `UNITY_OPEN_MCP_BRIDGE_PORT` | no | Bridge HTTP port override. When unset, the port is derived deterministically from the project path (`20000 + sha256(path) % 10000`) and discovered via the bridge's lock file. Set only to pin a specific port. |
|
|
96
|
+
| `UNITY_PATH` | no | Unity Editor executable for batch-only (headless) tools. |
|
|
97
|
+
|
|
98
|
+
## How it works
|
|
99
|
+
|
|
100
|
+
1. The Unity Open MCP Bridge package runs inside the Unity Editor and exposes an
|
|
101
|
+
HTTP listener on `127.0.0.1`.
|
|
102
|
+
2. This MCP server connects to that bridge, routes tool calls to it, and returns
|
|
103
|
+
the results over MCP stdio to your AI client.
|
|
104
|
+
3. When the live Editor is unavailable, supported tools fall back to headless
|
|
105
|
+
Unity (batch) or offline disk parsing.
|
|
106
|
+
|
|
107
|
+
The bridge package must be installed in your Unity project. See the
|
|
108
|
+
[manual setup guide](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/manual-setup.md)
|
|
109
|
+
for the `Packages/manifest.json` entries.
|
|
110
|
+
|
|
111
|
+
## CLI
|
|
112
|
+
|
|
113
|
+
The same binary is a thin CLI for scripting and CI:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx unity-open-mcp wait-for-ready --project /path/to/MyGame
|
|
117
|
+
npx unity-open-mcp ping --project /path/to/MyGame --json
|
|
118
|
+
npx unity-open-mcp status --project /path/to/MyGame --json
|
|
119
|
+
npx unity-open-mcp run-tool unity_open_mcp_capabilities \
|
|
120
|
+
--project /path/to/MyGame --json --arg include_planned=false
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Commands: `ping`, `wait-for-ready`, `status`, `run-tool`, `--help`, `--version`.
|
|
124
|
+
All accept `--json` for machine-readable output. See the
|
|
125
|
+
[manual setup guide](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/manual-setup.md#cli-for-ci--automation)
|
|
126
|
+
for the full option reference.
|
|
127
|
+
|
|
128
|
+
## Version pinning
|
|
129
|
+
|
|
130
|
+
The default `npx -y unity-open-mcp@latest` always fetches the latest published
|
|
131
|
+
version on first run. To pin a specific version, change the version suffix in
|
|
132
|
+
your client config (for example `unity-open-mcp@0.2.0`) or install a specific
|
|
133
|
+
version globally.
|
|
134
|
+
|
|
135
|
+
## Documentation
|
|
136
|
+
|
|
137
|
+
- [Full manual setup](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/manual-setup.md)
|
|
138
|
+
- [Unity Hub Pro wizard walkthrough](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/wizard-setup.md)
|
|
139
|
+
- [MCP tool catalog and routing](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/api/mcp-tools.md)
|
|
140
|
+
- [Bridge HTTP API](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/api/bridge-http.md)
|
|
141
|
+
- [Architecture](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/main/docs/architecture.md)
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
[MIT](./LICENSE)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { Router } from "./router.js";
|
|
3
|
+
export declare const BATCH_TOOL_NAMES: Set<string>;
|
|
4
|
+
import { extractCompilerErrors } from "./compiler-errors.js";
|
|
5
|
+
export { extractCompilerErrors };
|
|
6
|
+
export declare function buildVerifyArgs(operation: string, args: Record<string, unknown>): string[];
|
|
7
|
+
export declare function buildMetaArgs(operation: string, args: Record<string, unknown>): string[];
|
|
8
|
+
export interface BatchSpawnOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Optional override for the Unity-install discovery roots (test hook).
|
|
11
|
+
* When omitted, the real OS-default Hub paths (+ UNITY_HUB env override)
|
|
12
|
+
* are scanned. Pass an empty array to force the "nothing discovered"
|
|
13
|
+
* path in tests.
|
|
14
|
+
*/
|
|
15
|
+
discoveryRoots?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Optional explicit project path (test hook). When omitted, falls back to
|
|
18
|
+
* UNITY_PROJECT_PATH env var, then the instance lock's projectPath.
|
|
19
|
+
*/
|
|
20
|
+
projectPath?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class BatchSpawn implements Router {
|
|
23
|
+
private unityPath;
|
|
24
|
+
private unityPathSource;
|
|
25
|
+
private projectPath;
|
|
26
|
+
private timeoutMs;
|
|
27
|
+
private readonly discoveryRoots?;
|
|
28
|
+
constructor(options?: BatchSpawnOptions);
|
|
29
|
+
isBatchTool(toolName: string): boolean;
|
|
30
|
+
route(toolName: string, args: Record<string, unknown>): Promise<CallToolResult>;
|
|
31
|
+
private validateUnityPath;
|
|
32
|
+
private spawnUnity;
|
|
33
|
+
}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { stat } from "node:fs/promises";
|
|
3
|
+
import { resolveUnityPath, scannedHubRoots } from "./unity-install-discovery.js";
|
|
4
|
+
import { readInstanceLock } from "./instance-discovery.js";
|
|
5
|
+
import { makeErrorResult } from "./results.js";
|
|
6
|
+
const VERIFY_EXECUTE_METHOD = "UnityOpenMcpVerify.Batch.VerifyBatchEntry.Run";
|
|
7
|
+
const BRIDGE_EXECUTE_METHOD = "UnityOpenMcpBridge.Batch.BridgeBatchEntry.Run";
|
|
8
|
+
const OUTPUT_BEGIN = "---UNITY_OPEN_MCP_VERIFY_JSON_BEGIN---";
|
|
9
|
+
const OUTPUT_END = "---UNITY_OPEN_MCP_VERIFY_JSON_END---";
|
|
10
|
+
const DEFAULT_BATCH_TIMEOUT_MS = 600_000;
|
|
11
|
+
const VERIFY_TOOL_TO_OPERATION = {
|
|
12
|
+
unity_open_mcp_scan_all: "scan_all",
|
|
13
|
+
unity_open_mcp_baseline_create: "baseline_create",
|
|
14
|
+
unity_open_mcp_regression_check: "regression_check",
|
|
15
|
+
};
|
|
16
|
+
const META_TOOL_TO_OPERATION = {
|
|
17
|
+
unity_open_mcp_find_members: "find_members",
|
|
18
|
+
unity_open_mcp_compile_check: "compile_check",
|
|
19
|
+
};
|
|
20
|
+
const LIMITED_META_TOOLS = new Set([
|
|
21
|
+
"unity_open_mcp_execute_csharp",
|
|
22
|
+
"unity_open_mcp_invoke_method",
|
|
23
|
+
"unity_open_mcp_execute_menu",
|
|
24
|
+
]);
|
|
25
|
+
export const BATCH_TOOL_NAMES = new Set([
|
|
26
|
+
...Object.keys(VERIFY_TOOL_TO_OPERATION),
|
|
27
|
+
...Object.keys(META_TOOL_TO_OPERATION),
|
|
28
|
+
...LIMITED_META_TOOLS,
|
|
29
|
+
]);
|
|
30
|
+
function extractJson(stdout) {
|
|
31
|
+
const beginIdx = stdout.indexOf(OUTPUT_BEGIN);
|
|
32
|
+
if (beginIdx === -1)
|
|
33
|
+
return null;
|
|
34
|
+
const jsonStart = beginIdx + OUTPUT_BEGIN.length;
|
|
35
|
+
const endIdx = stdout.indexOf(OUTPUT_END, jsonStart);
|
|
36
|
+
if (endIdx === -1)
|
|
37
|
+
return null;
|
|
38
|
+
return stdout.slice(jsonStart, endIdx).trim();
|
|
39
|
+
}
|
|
40
|
+
// extractCompilerErrors is shared with the offline read_compile_errors tool —
|
|
41
|
+
// see compiler-errors.ts. Imported for the local call site below and
|
|
42
|
+
// re-exported so existing callers/tests that import it from batch-spawn keep
|
|
43
|
+
// working. Captures CSxxxx lines from raw Unity compiler output (Editor.log /
|
|
44
|
+
// batch stdout) when the bridge assembly itself fails to compile and the JSON
|
|
45
|
+
// markers never print.
|
|
46
|
+
import { extractCompilerErrors } from "./compiler-errors.js";
|
|
47
|
+
export { extractCompilerErrors };
|
|
48
|
+
export function buildVerifyArgs(operation, args) {
|
|
49
|
+
const cli = [operation];
|
|
50
|
+
if (operation === "scan_all") {
|
|
51
|
+
if (args.platform_profile)
|
|
52
|
+
cli.push("--platform-profile", String(args.platform_profile));
|
|
53
|
+
if (args.fail_on_severity)
|
|
54
|
+
cli.push("--fail-on-severity", String(args.fail_on_severity));
|
|
55
|
+
if (args.output_path)
|
|
56
|
+
cli.push("--output-path", String(args.output_path));
|
|
57
|
+
}
|
|
58
|
+
else if (operation === "baseline_create") {
|
|
59
|
+
const baselinePath = args.baseline_path || "CI/unity-open-mcp-baseline.json";
|
|
60
|
+
cli.push("--baseline-path", baselinePath);
|
|
61
|
+
if (args.platform_profile)
|
|
62
|
+
cli.push("--platform-profile", String(args.platform_profile));
|
|
63
|
+
}
|
|
64
|
+
else if (operation === "regression_check") {
|
|
65
|
+
cli.push("--baseline-path", String(args.baseline_path));
|
|
66
|
+
if (args.regression_threshold !== undefined)
|
|
67
|
+
cli.push("--regression-threshold", String(args.regression_threshold));
|
|
68
|
+
// Per-category thresholds are an optional object: ruleId -> max delta.
|
|
69
|
+
// Repeatable --per-category-threshold <ruleId>=<int> flags are emitted in a
|
|
70
|
+
// stable key order so the spawn line is deterministic.
|
|
71
|
+
const perCategory = args.per_category_thresholds;
|
|
72
|
+
if (perCategory && typeof perCategory === "object") {
|
|
73
|
+
const entries = Object.entries(perCategory).sort(([a], [b]) => a.localeCompare(b));
|
|
74
|
+
for (const [ruleId, value] of entries) {
|
|
75
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
|
|
76
|
+
cli.push("--per-category-threshold", `${ruleId}=${Math.trunc(value)}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (args.platform_profile)
|
|
81
|
+
cli.push("--platform-profile", String(args.platform_profile));
|
|
82
|
+
}
|
|
83
|
+
return cli;
|
|
84
|
+
}
|
|
85
|
+
export function buildMetaArgs(operation, args) {
|
|
86
|
+
const cli = [operation];
|
|
87
|
+
if (operation === "find_members") {
|
|
88
|
+
if (args.query !== undefined)
|
|
89
|
+
cli.push("--query", String(args.query));
|
|
90
|
+
if (args.kind !== undefined)
|
|
91
|
+
cli.push("--kind", String(args.kind));
|
|
92
|
+
if (args.assembly_filter !== undefined)
|
|
93
|
+
cli.push("--assembly-filter", String(args.assembly_filter));
|
|
94
|
+
if (args.include_unity_editor !== undefined)
|
|
95
|
+
cli.push("--include-unity-editor", String(args.include_unity_editor));
|
|
96
|
+
if (args.include_project !== undefined)
|
|
97
|
+
cli.push("--include-project", String(args.include_project));
|
|
98
|
+
if (args.max_results !== undefined)
|
|
99
|
+
cli.push("--max-results", String(args.max_results));
|
|
100
|
+
}
|
|
101
|
+
else if (operation === "compile_check") {
|
|
102
|
+
if (args.timeout_ms !== undefined)
|
|
103
|
+
cli.push("--timeout-ms", String(args.timeout_ms));
|
|
104
|
+
}
|
|
105
|
+
return cli;
|
|
106
|
+
}
|
|
107
|
+
const LIMITED_META_MESSAGES = {
|
|
108
|
+
unity_open_mcp_execute_csharp: "execute_csharp is not supported in batch mode. " +
|
|
109
|
+
"The gate (checkpoint, validate, delta) cannot run headless and Roslyn compilation " +
|
|
110
|
+
"without a live Editor is unreliable. Connect a live Editor for full support. " +
|
|
111
|
+
"Only find_members is available in batch mode.",
|
|
112
|
+
unity_open_mcp_invoke_method: "invoke_method is not supported in batch mode. " +
|
|
113
|
+
"Mutating method calls require gate enforcement which is unavailable headless, " +
|
|
114
|
+
"and instance methods may depend on Editor-only state. " +
|
|
115
|
+
"Connect a live Editor for full support. " +
|
|
116
|
+
"Only find_members is available in batch mode.",
|
|
117
|
+
unity_open_mcp_execute_menu: "execute_menu is not supported in batch mode. " +
|
|
118
|
+
"Menu execution requires a live Editor UI; most menus fail in -batchmode. " +
|
|
119
|
+
"Connect a live Editor for full support. " +
|
|
120
|
+
"Only find_members is available in batch mode.",
|
|
121
|
+
};
|
|
122
|
+
export class BatchSpawn {
|
|
123
|
+
unityPath;
|
|
124
|
+
unityPathSource;
|
|
125
|
+
projectPath;
|
|
126
|
+
timeoutMs;
|
|
127
|
+
discoveryRoots;
|
|
128
|
+
constructor(options = {}) {
|
|
129
|
+
this.discoveryRoots = options.discoveryRoots;
|
|
130
|
+
// UNITY_PATH env (validated, wins) -> auto-discovered install (preferred
|
|
131
|
+
// version from the running bridge's lock when available) -> none.
|
|
132
|
+
const lock = readInstanceLock(options.projectPath ?? process.env.UNITY_PROJECT_PATH ?? "");
|
|
133
|
+
const resolved = resolveUnityPath(lock?.unityVersion, this.discoveryRoots);
|
|
134
|
+
if (resolved) {
|
|
135
|
+
this.unityPath = resolved.path;
|
|
136
|
+
this.unityPathSource = resolved.source;
|
|
137
|
+
if (resolved.source === "discovered") {
|
|
138
|
+
console.error(`[unity-open-mcp] Unity path auto-discovered: ${resolved.path} (version ${resolved.version}). Set UNITY_PATH to override.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.unityPath = "";
|
|
143
|
+
this.unityPathSource = "none";
|
|
144
|
+
}
|
|
145
|
+
// UNITY_PROJECT_PATH env -> instance lock's projectPath (so batch works
|
|
146
|
+
// with zero env vars when the bridge has run the project at least once)
|
|
147
|
+
// -> empty.
|
|
148
|
+
this.projectPath =
|
|
149
|
+
options.projectPath ??
|
|
150
|
+
process.env.UNITY_PROJECT_PATH ??
|
|
151
|
+
lock?.projectPath ??
|
|
152
|
+
"";
|
|
153
|
+
this.timeoutMs = process.env.UNITY_OPEN_MCP_BATCH_TIMEOUT_MS
|
|
154
|
+
? parseInt(process.env.UNITY_OPEN_MCP_BATCH_TIMEOUT_MS, 10)
|
|
155
|
+
: DEFAULT_BATCH_TIMEOUT_MS;
|
|
156
|
+
}
|
|
157
|
+
isBatchTool(toolName) {
|
|
158
|
+
return BATCH_TOOL_NAMES.has(toolName);
|
|
159
|
+
}
|
|
160
|
+
async route(toolName, args) {
|
|
161
|
+
if (LIMITED_META_TOOLS.has(toolName)) {
|
|
162
|
+
return makeErrorResult({
|
|
163
|
+
code: "batch_not_supported",
|
|
164
|
+
message: LIMITED_META_MESSAGES[toolName] ??
|
|
165
|
+
`${toolName} is not supported in batch mode.`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
const verifyOperation = VERIFY_TOOL_TO_OPERATION[toolName];
|
|
169
|
+
const metaOperation = META_TOOL_TO_OPERATION[toolName];
|
|
170
|
+
if (!verifyOperation && !metaOperation) {
|
|
171
|
+
return makeErrorResult({
|
|
172
|
+
code: "unknown_batch_tool",
|
|
173
|
+
message: `Tool '${toolName}' is not a batch tool.`,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const pathError = await this.validateUnityPath();
|
|
177
|
+
if (pathError)
|
|
178
|
+
return pathError;
|
|
179
|
+
if (!this.projectPath) {
|
|
180
|
+
return makeErrorResult({
|
|
181
|
+
code: "project_path_missing",
|
|
182
|
+
message: "UNITY_PROJECT_PATH environment variable is required for batch operations " +
|
|
183
|
+
"(or open the project in Unity once so the instance lock records its path — " +
|
|
184
|
+
"the MCP server falls back to the lock's projectPath when the env var is unset).",
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
const executeMethod = verifyOperation
|
|
188
|
+
? VERIFY_EXECUTE_METHOD
|
|
189
|
+
: BRIDGE_EXECUTE_METHOD;
|
|
190
|
+
const operation = verifyOperation ?? metaOperation;
|
|
191
|
+
const argBuilder = verifyOperation ? buildVerifyArgs : buildMetaArgs;
|
|
192
|
+
let parsed;
|
|
193
|
+
try {
|
|
194
|
+
parsed = await this.spawnUnity(operation, args, executeMethod, argBuilder);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
198
|
+
return makeErrorResult({ code: "batch_spawn_failed", message });
|
|
199
|
+
}
|
|
200
|
+
const body = parsed.json;
|
|
201
|
+
body.exitCode = parsed.exitCode;
|
|
202
|
+
body._diagnostics = {
|
|
203
|
+
command: this.unityPath,
|
|
204
|
+
elapsedMs: parsed.elapsedMs,
|
|
205
|
+
exitCode: parsed.exitCode,
|
|
206
|
+
};
|
|
207
|
+
const mutation = body.mutation;
|
|
208
|
+
const hasError = body.error != null ||
|
|
209
|
+
(mutation != null && mutation.success === false);
|
|
210
|
+
return {
|
|
211
|
+
content: [
|
|
212
|
+
{
|
|
213
|
+
type: "text",
|
|
214
|
+
text: JSON.stringify(body),
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
isError: hasError,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
async validateUnityPath() {
|
|
221
|
+
if (!this.unityPath) {
|
|
222
|
+
// No explicit UNITY_PATH AND auto-discovery found nothing. List the
|
|
223
|
+
// scanned roots so the user/agent knows where to install Unity or set
|
|
224
|
+
// the env var. `unity_not_discovered` is distinct from the legacy
|
|
225
|
+
// `unity_path_missing` so an agent can tell "I looked, nothing here"
|
|
226
|
+
// from "discovery was disabled".
|
|
227
|
+
const roots = this.discoveryRoots ?? scannedHubRoots();
|
|
228
|
+
const rootList = roots.length > 0 ? roots.join(", ") : "(no Hub paths found for this OS)";
|
|
229
|
+
return makeErrorResult({
|
|
230
|
+
code: "unity_not_discovered",
|
|
231
|
+
message: "No Unity Editor found. The MCP server auto-discovers Unity from the " +
|
|
232
|
+
"OS-default Unity Hub install paths (+ UNITY_HUB env override); " +
|
|
233
|
+
`scanned: ${rootList}. Either install Unity there, or set UNITY_PATH ` +
|
|
234
|
+
"to an explicit editor executable " +
|
|
235
|
+
"(macOS: /Applications/Unity/Hub/Editor/<version>/Unity.app/Contents/MacOS/Unity, " +
|
|
236
|
+
"Windows: C:\\Program Files\\Unity\\Hub\\Editor\\<version>\\Editor\\Unity.exe, " +
|
|
237
|
+
"Linux: ~/Unity/Hub/Editor/<version>/Unity).",
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
const s = await stat(this.unityPath);
|
|
242
|
+
if (!s.isFile()) {
|
|
243
|
+
return makeErrorResult({
|
|
244
|
+
code: "unity_path_invalid",
|
|
245
|
+
message: `Unity path '${this.unityPath}' is not a file. ` +
|
|
246
|
+
"Set UNITY_PATH to the Unity Editor executable.",
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return makeErrorResult({
|
|
252
|
+
code: "unity_path_not_found",
|
|
253
|
+
message: `Unity path '${this.unityPath}' does not exist or is not accessible. ` +
|
|
254
|
+
"Verify the path points to a valid Unity Editor executable.",
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
spawnUnity(operation, args, executeMethod, argBuilder) {
|
|
260
|
+
return new Promise((resolve, reject) => {
|
|
261
|
+
const toolArgs = argBuilder(operation, args);
|
|
262
|
+
const unityArgs = [
|
|
263
|
+
"-batchmode",
|
|
264
|
+
"-quit",
|
|
265
|
+
"-projectPath", this.projectPath,
|
|
266
|
+
"-executeMethod", executeMethod,
|
|
267
|
+
"--",
|
|
268
|
+
...toolArgs,
|
|
269
|
+
];
|
|
270
|
+
console.error(`[unity-open-mcp] Batch spawn: ${this.unityPath} ${unityArgs.join(" ")}`);
|
|
271
|
+
const startTime = Date.now();
|
|
272
|
+
let stdout = "";
|
|
273
|
+
let stderr = "";
|
|
274
|
+
const child = spawn(this.unityPath, unityArgs, {
|
|
275
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
276
|
+
});
|
|
277
|
+
const timer = setTimeout(() => {
|
|
278
|
+
child.kill("SIGTERM");
|
|
279
|
+
reject(new Error(`Batch Unity process timed out after ${this.timeoutMs / 1000}s.`));
|
|
280
|
+
}, this.timeoutMs);
|
|
281
|
+
child.stdout?.on("data", (chunk) => {
|
|
282
|
+
stdout += chunk.toString();
|
|
283
|
+
});
|
|
284
|
+
child.stderr?.on("data", (chunk) => {
|
|
285
|
+
stderr += chunk.toString();
|
|
286
|
+
});
|
|
287
|
+
child.on("error", (err) => {
|
|
288
|
+
clearTimeout(timer);
|
|
289
|
+
reject(new Error(`Failed to spawn Unity at '${this.unityPath}': ${err.message}`));
|
|
290
|
+
});
|
|
291
|
+
child.on("close", (code) => {
|
|
292
|
+
clearTimeout(timer);
|
|
293
|
+
const elapsedMs = Date.now() - startTime;
|
|
294
|
+
const exitCode = code ?? 1;
|
|
295
|
+
console.error(`[unity-open-mcp] Batch completed: exit=${exitCode} elapsed=${elapsedMs}ms`);
|
|
296
|
+
const jsonStr = extractJson(stdout);
|
|
297
|
+
if (!jsonStr) {
|
|
298
|
+
// Most common cause: the bridge assembly failed to compile, so the
|
|
299
|
+
// batch entry point (BridgeBatchEntry.Run()) never ran and emitted
|
|
300
|
+
// no markers. Surface the C# compiler errors directly rather than an
|
|
301
|
+
// opaque "no markers" message.
|
|
302
|
+
const combined = `${stdout}\n${stderr}`;
|
|
303
|
+
const csErrors = extractCompilerErrors(combined);
|
|
304
|
+
const tail = stderr.trim().slice(-500) || stdout.trim().slice(-500);
|
|
305
|
+
if (csErrors.length > 0) {
|
|
306
|
+
reject(new Error(`Batch output did not contain JSON markers (exit ${exitCode}). ` +
|
|
307
|
+
`The bridge assembly likely failed to compile:\n` +
|
|
308
|
+
csErrors.join("\n")));
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
reject(new Error(`Batch output did not contain JSON markers. Exit code: ${exitCode}.` +
|
|
312
|
+
(tail ? ` Last output: ${tail}` : "")));
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
let json;
|
|
316
|
+
try {
|
|
317
|
+
json = JSON.parse(jsonStr);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
reject(new Error(`Failed to parse batch JSON output. Exit code: ${exitCode}.`));
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
json.elapsedMs = elapsedMs;
|
|
324
|
+
resolve({ json, exitCode, elapsedMs });
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=batch-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-spawn.js","sourceRoot":"","sources":["../src/batch-spawn.ts"],"names":[],"mappings":"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"}
|