unity-open-mcp 1.1.0 → 1.3.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.
Files changed (174) hide show
  1. package/README.md +33 -2
  2. package/dist/agent-identity.d.ts +12 -0
  3. package/dist/agent-identity.js +2 -0
  4. package/dist/agent-identity.js.map +1 -1
  5. package/dist/batch-spawn.d.ts +39 -0
  6. package/dist/batch-spawn.js +287 -69
  7. package/dist/batch-spawn.js.map +1 -1
  8. package/dist/capabilities/build-capabilities.js +2 -0
  9. package/dist/capabilities/build-capabilities.js.map +1 -1
  10. package/dist/capabilities/discovery.d.ts +51 -0
  11. package/dist/capabilities/discovery.js +87 -0
  12. package/dist/capabilities/discovery.js.map +1 -0
  13. package/dist/capabilities/lifecycle.d.ts +6 -0
  14. package/dist/capabilities/lifecycle.js +17 -1
  15. package/dist/capabilities/lifecycle.js.map +1 -1
  16. package/dist/capabilities/tool-groups.js +1 -0
  17. package/dist/capabilities/tool-groups.js.map +1 -1
  18. package/dist/child-supervision.d.ts +6 -0
  19. package/dist/child-supervision.js +12 -0
  20. package/dist/child-supervision.js.map +1 -1
  21. package/dist/cli/args.d.ts +24 -2
  22. package/dist/cli/args.js +97 -2
  23. package/dist/cli/args.js.map +1 -1
  24. package/dist/cli/cli.js +42 -3
  25. package/dist/cli/cli.js.map +1 -1
  26. package/dist/cli/help-text.d.ts +1 -0
  27. package/dist/cli/help-text.js +71 -3
  28. package/dist/cli/help-text.js.map +1 -1
  29. package/dist/cli/json-guards.d.ts +2 -0
  30. package/dist/cli/json-guards.js +5 -0
  31. package/dist/cli/json-guards.js.map +1 -0
  32. package/dist/cli/setup-command.d.ts +88 -0
  33. package/dist/cli/setup-command.js +444 -0
  34. package/dist/cli/setup-command.js.map +1 -0
  35. package/dist/cli/update-command.d.ts +30 -0
  36. package/dist/cli/update-command.js +271 -0
  37. package/dist/cli/update-command.js.map +1 -0
  38. package/dist/compile-verify.d.ts +3 -0
  39. package/dist/compile-verify.js +4 -0
  40. package/dist/compile-verify.js.map +1 -1
  41. package/dist/constants.d.ts +10 -2
  42. package/dist/constants.js +10 -2
  43. package/dist/constants.js.map +1 -1
  44. package/dist/dialog-dismiss.d.ts +108 -12
  45. package/dist/dialog-dismiss.js +294 -109
  46. package/dist/dialog-dismiss.js.map +1 -1
  47. package/dist/dialog-policy.d.ts +55 -9
  48. package/dist/dialog-policy.js +85 -15
  49. package/dist/dialog-policy.js.map +1 -1
  50. package/dist/editor-search.d.ts +2 -0
  51. package/dist/editor-search.js +8 -0
  52. package/dist/editor-search.js.map +1 -0
  53. package/dist/gate-error.d.ts +3 -0
  54. package/dist/gate-error.js.map +1 -1
  55. package/dist/index.js +55 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/instance-discovery.d.ts +16 -0
  58. package/dist/instance-discovery.js +45 -0
  59. package/dist/instance-discovery.js.map +1 -1
  60. package/dist/jobs/adapters.d.ts +15 -0
  61. package/dist/jobs/adapters.js +147 -0
  62. package/dist/jobs/adapters.js.map +1 -0
  63. package/dist/jobs/handler.d.ts +3 -0
  64. package/dist/jobs/handler.js +29 -0
  65. package/dist/jobs/handler.js.map +1 -0
  66. package/dist/jobs/job-manager.d.ts +123 -0
  67. package/dist/jobs/job-manager.js +290 -0
  68. package/dist/jobs/job-manager.js.map +1 -0
  69. package/dist/live-client.d.ts +50 -2
  70. package/dist/live-client.js +221 -26
  71. package/dist/live-client.js.map +1 -1
  72. package/dist/local-tools.d.ts +17 -0
  73. package/dist/local-tools.js +47 -0
  74. package/dist/local-tools.js.map +1 -0
  75. package/dist/process-diagnostics.d.ts +47 -20
  76. package/dist/process-diagnostics.js +30 -15
  77. package/dist/process-diagnostics.js.map +1 -1
  78. package/dist/project-path.d.ts +86 -0
  79. package/dist/project-path.js +159 -0
  80. package/dist/project-path.js.map +1 -0
  81. package/dist/release-lookup.d.ts +32 -0
  82. package/dist/release-lookup.js +147 -0
  83. package/dist/release-lookup.js.map +1 -0
  84. package/dist/routers.d.ts +17 -3
  85. package/dist/routers.js +28 -8
  86. package/dist/routers.js.map +1 -1
  87. package/dist/running-unity.d.ts +21 -0
  88. package/dist/running-unity.js +50 -0
  89. package/dist/running-unity.js.map +1 -1
  90. package/dist/schema-defaults.d.ts +4 -3
  91. package/dist/schema-defaults.js +20 -6
  92. package/dist/schema-defaults.js.map +1 -1
  93. package/dist/server-instructions.js +7 -1
  94. package/dist/server-instructions.js.map +1 -1
  95. package/dist/server.d.ts +10 -3
  96. package/dist/server.js +24 -25
  97. package/dist/server.js.map +1 -1
  98. package/dist/setup/portable-config.d.ts +60 -0
  99. package/dist/setup/portable-config.js +249 -0
  100. package/dist/setup/portable-config.js.map +1 -0
  101. package/dist/skill/SKILL.md +68 -0
  102. package/dist/skill/copy-references.d.ts +2 -0
  103. package/dist/skill/copy-references.js +16 -0
  104. package/dist/skill/copy-references.js.map +1 -0
  105. package/dist/skill/generate-skill.js +5 -3
  106. package/dist/skill/generate-skill.js.map +1 -1
  107. package/dist/skill/references/batch-and-gates.md +142 -0
  108. package/dist/skill/references/compile-and-safe-mode.md +163 -0
  109. package/dist/skill/references/discovery-and-groups.md +30 -0
  110. package/dist/skill/references/routing-and-lifecycle.md +62 -0
  111. package/dist/skill/references/senses-and-tests.md +41 -0
  112. package/dist/skill/references/yaml-and-offline-work.md +33 -0
  113. package/dist/templates/mcp-wrapper.sh +35 -0
  114. package/dist/tool-contract.d.ts +8 -0
  115. package/dist/tool-contract.js +253 -0
  116. package/dist/tool-contract.js.map +1 -0
  117. package/dist/tool-router.d.ts +62 -7
  118. package/dist/tool-router.js +535 -61
  119. package/dist/tool-router.js.map +1 -1
  120. package/dist/tool-session-state.d.ts +6 -0
  121. package/dist/tool-session-state.js +14 -0
  122. package/dist/tool-session-state.js.map +1 -1
  123. package/dist/tools/agent-capabilities.js +9 -0
  124. package/dist/tools/agent-capabilities.js.map +1 -1
  125. package/dist/tools/batch-execute.js +17 -14
  126. package/dist/tools/batch-execute.js.map +1 -1
  127. package/dist/tools/bridge-status.js +4 -5
  128. package/dist/tools/bridge-status.js.map +1 -1
  129. package/dist/tools/compile-check.js +6 -4
  130. package/dist/tools/compile-check.js.map +1 -1
  131. package/dist/tools/component-get.js +2 -2
  132. package/dist/tools/component-get.js.map +1 -1
  133. package/dist/tools/component-modify.js +4 -4
  134. package/dist/tools/component-modify.js.map +1 -1
  135. package/dist/tools/execute-csharp.js +8 -4
  136. package/dist/tools/execute-csharp.js.map +1 -1
  137. package/dist/tools/gameobject-modify.js +2 -1
  138. package/dist/tools/gameobject-modify.js.map +1 -1
  139. package/dist/tools/index.d.ts +2 -0
  140. package/dist/tools/index.js +10 -2
  141. package/dist/tools/index.js.map +1 -1
  142. package/dist/tools/inputsim-key.js +12 -14
  143. package/dist/tools/inputsim-key.js.map +1 -1
  144. package/dist/tools/inputsim-pointer.js +3 -3
  145. package/dist/tools/inputsim-pointer.js.map +1 -1
  146. package/dist/tools/inputsim-step.js +7 -8
  147. package/dist/tools/inputsim-step.js.map +1 -1
  148. package/dist/tools/inputsim-touch.js +9 -10
  149. package/dist/tools/inputsim-touch.js.map +1 -1
  150. package/dist/tools/jobs.d.ts +40 -0
  151. package/dist/tools/jobs.js +18 -0
  152. package/dist/tools/jobs.js.map +1 -0
  153. package/dist/tools/manage-tools.js +10 -5
  154. package/dist/tools/manage-tools.js.map +1 -1
  155. package/dist/tools/project-commands.d.ts +40 -0
  156. package/dist/tools/project-commands.js +23 -0
  157. package/dist/tools/project-commands.js.map +1 -0
  158. package/dist/tools/read-compile-errors.js +14 -93
  159. package/dist/tools/read-compile-errors.js.map +1 -1
  160. package/dist/tools/resource-pressure.js +27 -17
  161. package/dist/tools/resource-pressure.js.map +1 -1
  162. package/dist/tools/scan-paths.js +4 -4
  163. package/dist/tools/scan-paths.js.map +1 -1
  164. package/dist/tools/schema-fragments.d.ts +15 -3
  165. package/dist/tools/schema-fragments.js +23 -13
  166. package/dist/tools/schema-fragments.js.map +1 -1
  167. package/dist/tools/upgrade.d.ts +40 -0
  168. package/dist/tools/upgrade.js +55 -0
  169. package/dist/tools/upgrade.js.map +1 -0
  170. package/dist/unity-install-discovery.d.ts +24 -0
  171. package/dist/unity-install-discovery.js +113 -4
  172. package/dist/unity-install-discovery.js.map +1 -1
  173. package/package.json +4 -3
  174. package/templates/mcp-wrapper.sh +35 -0
package/README.md CHANGED
@@ -16,6 +16,19 @@ You do not need to install this package yourself — your MCP client spawns it v
16
16
  `npx`. The sections below show both the zero-install `npx` path and the optional
17
17
  global install.
18
18
 
19
+ For a first installation, the setup command merges the Unity package pins,
20
+ project MCP config, and bundled core skill without requiring a running Editor:
21
+
22
+ ```bash
23
+ npx -y unity-open-mcp@latest setup \
24
+ --project /absolute/path/to/MyGame \
25
+ --client cursor
26
+ ```
27
+
28
+ Supported project-config ids are `cursor`, `claude`, `opencode`, and `agents`.
29
+ Run `npx -y unity-open-mcp@latest setup --help` for dry-run, skill-skip, JSON,
30
+ and exit-code details.
31
+
19
32
  ### Configure your MCP client
20
33
 
21
34
  Pick your client and merge a `unity-open-mcp` entry using the canonical
@@ -39,7 +52,7 @@ npm install -g unity-open-mcp
39
52
 
40
53
  Then use `"command": "unity-open-mcp", "args": []` (Cursor / Claude Desktop) or
41
54
  `"command": ["unity-open-mcp"]` (OpenCode) in your client config. Update with
42
- `npm update -g unity-open-mcp`.
55
+ `unity-open-mcp update` (or `npm update -g unity-open-mcp`).
43
56
 
44
57
  Core environment variables and modal-policy options are documented in the
45
58
  [client configuration reference](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/client-configuration.md)
@@ -73,10 +86,24 @@ npx unity-open-mcp run-tool unity_open_mcp_capabilities \
73
86
  ```
74
87
 
75
88
  Commands also include event streaming, verify, baseline, and regression
76
- automation. All accept `--json` for machine-readable output. See the
89
+ automation, plus bridge-independent project setup. All accept `--json` for
90
+ machine-readable output. See the
77
91
  [CLI and automation reference](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/api/cli-automation.md)
78
92
  for the full option reference.
79
93
 
94
+ Check or apply an MCP server update without a Unity project path:
95
+
96
+ ```bash
97
+ unity-open-mcp update --check
98
+ unity-open-mcp update
99
+ ```
100
+
101
+ The command updates global and project-local npm installs. When launched by
102
+ `npx`, it prints the pin to change instead of modifying the npx cache. It never
103
+ changes Unity package pins or MCP client configuration; use the repository's
104
+ [Updating guide](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/updating.md)
105
+ for the coordinated and air-gapped paths.
106
+
80
107
  ## Version pinning
81
108
 
82
109
  The client configuration reference pins the server so it stays in lockstep
@@ -89,8 +116,12 @@ client and Unity package pins together — see
89
116
  - [Agent setup](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/agent-setup.md)
90
117
  - [Full manual setup](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/manual-setup.md)
91
118
  - [MCP client configuration](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/client-configuration.md)
119
+ - [Portable, committable MCP configuration](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/portable-config.md)
92
120
  - [Unity Hub Pro wizard walkthrough](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/setup/wizard-setup.md)
121
+ - [Updating and air-gapped installs](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/updating.md)
93
122
  - [MCP tool catalog and routing](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/api/mcp-tools.md)
123
+ - [Project-defined commands](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/api/project-commands.md)
124
+ - [Asynchronous jobs](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/api/jobs.md)
94
125
  - [Bridge HTTP API](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/api/bridge-http.md)
95
126
  - [Architecture](https://github.com/AlexeyPerov/Unity-Open-MCP/blob/master/docs/architecture.md)
96
127
 
@@ -5,6 +5,18 @@
5
5
  * an explicit `_meta.agentId` override.
6
6
  */
7
7
  export declare const PROCESS_AGENT_ID: string;
8
+ /**
9
+ * Who made a call and which bridge port it pinned for that call alone: the key
10
+ * session-owned jobs are filed under. `port` is the per-request override only,
11
+ * never the default client's env pin. The router threads it through every entry
12
+ * point (direct call, `manage_tools` invoke, port override).
13
+ */
14
+ export interface RequestIdentity {
15
+ agent: string;
16
+ port?: number;
17
+ }
18
+ /** Identity of a call that carries no routing metadata. */
19
+ export declare const PROCESS_IDENTITY: RequestIdentity;
8
20
  /** Minimum/maximum valid TCP port for an override. */
9
21
  export declare const MIN_PORT = 1;
10
22
  export declare const MAX_PORT = 65535;
@@ -32,6 +32,8 @@ import { randomBytes } from "node:crypto";
32
32
  * an explicit `_meta.agentId` override.
33
33
  */
34
34
  export const PROCESS_AGENT_ID = `agent-${process.pid}-${randomBytes(3).toString("hex")}`;
35
+ /** Identity of a call that carries no routing metadata. */
36
+ export const PROCESS_IDENTITY = { agent: PROCESS_AGENT_ID };
35
37
  /** Minimum/maximum valid TCP port for an override. */
36
38
  export const MIN_PORT = 1;
37
39
  export const MAX_PORT = 65535;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../src/agent-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../src/agent-identity.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,33 @@
1
+ import { type ChildProcess, type SpawnOptions } from "node:child_process";
1
2
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
3
  import type { Router } from "./router.js";
4
+ export declare const FAILED_RESOLUTION_TTL_MS = 30000;
5
+ /**
6
+ * A headless Unity run this server is currently driving for a project. Held
7
+ * for exactly as long as the per-project batch lease: from just before the
8
+ * spawn until the child closes (or fails to start).
9
+ */
10
+ export interface HeadlessRunInfo {
11
+ /** MCP tool whose call spawned the run, e.g. `unity_open_mcp_compile_check`. */
12
+ tool: string;
13
+ /** Batch operation passed to the Unity entry point, e.g. `compile_check`. */
14
+ operation: string;
15
+ /** Epoch ms when the lease was taken. */
16
+ startedAt: number;
17
+ /** Overall batch timeout; the child is killed once it elapses. */
18
+ timeoutMs: number;
19
+ /** OS pid of the Unity child; null until the spawn returned one. */
20
+ pid: number | null;
21
+ }
22
+ /**
23
+ * The headless run this server is driving for `projectPath`, or null when no
24
+ * batch lease is held for it. Returns a copy; callers cannot mutate the lease.
25
+ */
26
+ export declare function activeHeadlessRun(projectPath: string | null | undefined): HeadlessRunInfo | null;
3
27
  export declare const VERIFY_BATCH_TOOL_NAMES: ReadonlySet<string>;
4
28
  export declare const ALWAYS_BATCH_TOOLS: ReadonlyMap<string, string>;
5
29
  export declare const BATCH_TOOL_NAMES: Set<string>;
30
+ export declare function extractJson(stdout: string): string | null;
6
31
  export declare class BoundedTextAccumulator {
7
32
  private decoder;
8
33
  private bytes;
@@ -67,6 +92,13 @@ export interface BatchSpawnOptions {
67
92
  * UNITY_PROJECT_PATH env var, then the instance lock's projectPath.
68
93
  */
69
94
  projectPath?: string;
95
+ /**
96
+ * Optional replacement for `child_process.spawn` (test hook), for child
97
+ * event sequences a real process does not produce on demand.
98
+ */
99
+ spawnProcess?: (command: string, args: string[], options: SpawnOptions) => ChildProcess;
100
+ /** Optional clock (test hook) for the failed-resolution TTL. */
101
+ now?: () => number;
70
102
  }
71
103
  export declare class BatchSpawn implements Router {
72
104
  private unityPath;
@@ -74,10 +106,17 @@ export declare class BatchSpawn implements Router {
74
106
  private projectPath;
75
107
  private timeoutMs;
76
108
  private readonly discoveryRoots?;
109
+ private readonly spawnProcess;
110
+ private readonly now;
111
+ private resolutionError?;
112
+ private resolutionKey?;
113
+ private resolvedAt;
77
114
  constructor(options?: BatchSpawnOptions);
78
115
  isBatchTool(toolName: string): boolean;
79
116
  getProjectPath(): string;
117
+ headlessAvailable(): boolean;
80
118
  route(toolName: string, args: Record<string, unknown>): Promise<CallToolResult>;
119
+ private refreshUnityPath;
81
120
  private validateUnityPath;
82
121
  private spawnUnity;
83
122
  }