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.
Files changed (630) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/batch-spawn.d.ts +33 -0
  4. package/dist/batch-spawn.js +329 -0
  5. package/dist/batch-spawn.js.map +1 -0
  6. package/dist/capabilities/build-capabilities.d.ts +155 -0
  7. package/dist/capabilities/build-capabilities.js +475 -0
  8. package/dist/capabilities/build-capabilities.js.map +1 -0
  9. package/dist/capabilities/list-rules.d.ts +45 -0
  10. package/dist/capabilities/list-rules.js +121 -0
  11. package/dist/capabilities/list-rules.js.map +1 -0
  12. package/dist/capabilities/rule-catalog.d.ts +44 -0
  13. package/dist/capabilities/rule-catalog.js +330 -0
  14. package/dist/capabilities/rule-catalog.js.map +1 -0
  15. package/dist/capabilities/tool-groups.d.ts +53 -0
  16. package/dist/capabilities/tool-groups.js +396 -0
  17. package/dist/capabilities/tool-groups.js.map +1 -0
  18. package/dist/cli/args.d.ts +36 -0
  19. package/dist/cli/args.js +239 -0
  20. package/dist/cli/args.js.map +1 -0
  21. package/dist/cli/cli.d.ts +23 -0
  22. package/dist/cli/cli.js +125 -0
  23. package/dist/cli/cli.js.map +1 -0
  24. package/dist/cli/commands.d.ts +37 -0
  25. package/dist/cli/commands.js +277 -0
  26. package/dist/cli/commands.js.map +1 -0
  27. package/dist/cli/ping-poller.d.ts +81 -0
  28. package/dist/cli/ping-poller.js +161 -0
  29. package/dist/cli/ping-poller.js.map +1 -0
  30. package/dist/compat.d.ts +32 -0
  31. package/dist/compat.js +121 -0
  32. package/dist/compat.js.map +1 -0
  33. package/dist/compiler-errors.d.ts +31 -0
  34. package/dist/compiler-errors.js +91 -0
  35. package/dist/compiler-errors.js.map +1 -0
  36. package/dist/compressible-router.d.ts +18 -0
  37. package/dist/compressible-router.js +191 -0
  38. package/dist/compressible-router.js.map +1 -0
  39. package/dist/compression/asset-model.d.ts +86 -0
  40. package/dist/compression/asset-model.js +15 -0
  41. package/dist/compression/asset-model.js.map +1 -0
  42. package/dist/compression/compact.d.ts +153 -0
  43. package/dist/compression/compact.js +501 -0
  44. package/dist/compression/compact.js.map +1 -0
  45. package/dist/dialog-dismiss.d.ts +197 -0
  46. package/dist/dialog-dismiss.js +533 -0
  47. package/dist/dialog-dismiss.js.map +1 -0
  48. package/dist/event-stream.d.ts +60 -0
  49. package/dist/event-stream.js +228 -0
  50. package/dist/event-stream.js.map +1 -0
  51. package/dist/gate-error.d.ts +18 -0
  52. package/dist/gate-error.js +11 -0
  53. package/dist/gate-error.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.js +146 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/instance-discovery.d.ts +117 -0
  58. package/dist/instance-discovery.js +202 -0
  59. package/dist/instance-discovery.js.map +1 -0
  60. package/dist/live-client.d.ts +68 -0
  61. package/dist/live-client.js +583 -0
  62. package/dist/live-client.js.map +1 -0
  63. package/dist/offline.d.ts +75 -0
  64. package/dist/offline.js +1495 -0
  65. package/dist/offline.js.map +1 -0
  66. package/dist/package-version.d.ts +8 -0
  67. package/dist/package-version.js +41 -0
  68. package/dist/package-version.js.map +1 -0
  69. package/dist/ping-cache.d.ts +15 -0
  70. package/dist/ping-cache.js +10 -0
  71. package/dist/ping-cache.js.map +1 -0
  72. package/dist/project-health.d.ts +52 -0
  73. package/dist/project-health.js +177 -0
  74. package/dist/project-health.js.map +1 -0
  75. package/dist/resource-router.d.ts +26 -0
  76. package/dist/resource-router.js +143 -0
  77. package/dist/resource-router.js.map +1 -0
  78. package/dist/resources/index.d.ts +6 -0
  79. package/dist/resources/index.js +40 -0
  80. package/dist/resources/index.js.map +1 -0
  81. package/dist/results.d.ts +14 -0
  82. package/dist/results.js +22 -0
  83. package/dist/results.js.map +1 -0
  84. package/dist/router.d.ts +5 -0
  85. package/dist/router.js +2 -0
  86. package/dist/router.js.map +1 -0
  87. package/dist/routers.d.ts +44 -0
  88. package/dist/routers.js +73 -0
  89. package/dist/routers.js.map +1 -0
  90. package/dist/schema-defaults.d.ts +10 -0
  91. package/dist/schema-defaults.js +43 -0
  92. package/dist/schema-defaults.js.map +1 -0
  93. package/dist/skill/client-paths.d.ts +33 -0
  94. package/dist/skill/client-paths.js +131 -0
  95. package/dist/skill/client-paths.js.map +1 -0
  96. package/dist/skill/generate-skill.d.ts +38 -0
  97. package/dist/skill/generate-skill.js +389 -0
  98. package/dist/skill/generate-skill.js.map +1 -0
  99. package/dist/tool-router.d.ts +40 -0
  100. package/dist/tool-router.js +778 -0
  101. package/dist/tool-router.js.map +1 -0
  102. package/dist/tool-session-state.d.ts +55 -0
  103. package/dist/tool-session-state.js +116 -0
  104. package/dist/tool-session-state.js.map +1 -0
  105. package/dist/tools/agent-capabilities.d.ts +2 -0
  106. package/dist/tools/agent-capabilities.js +24 -0
  107. package/dist/tools/agent-capabilities.js.map +1 -0
  108. package/dist/tools/animation-create.d.ts +2 -0
  109. package/dist/tools/animation-create.js +31 -0
  110. package/dist/tools/animation-create.js.map +1 -0
  111. package/dist/tools/animation-get-data.d.ts +2 -0
  112. package/dist/tools/animation-get-data.js +23 -0
  113. package/dist/tools/animation-get-data.js.map +1 -0
  114. package/dist/tools/animation-modify.d.ts +2 -0
  115. package/dist/tools/animation-modify.js +45 -0
  116. package/dist/tools/animation-modify.js.map +1 -0
  117. package/dist/tools/animator-create.d.ts +2 -0
  118. package/dist/tools/animator-create.js +31 -0
  119. package/dist/tools/animator-create.js.map +1 -0
  120. package/dist/tools/animator-get-data.d.ts +2 -0
  121. package/dist/tools/animator-get-data.js +23 -0
  122. package/dist/tools/animator-get-data.js.map +1 -0
  123. package/dist/tools/animator-modify.d.ts +2 -0
  124. package/dist/tools/animator-modify.js +51 -0
  125. package/dist/tools/animator-modify.js.map +1 -0
  126. package/dist/tools/apply-fix.d.ts +2 -0
  127. package/dist/tools/apply-fix.js +39 -0
  128. package/dist/tools/apply-fix.js.map +1 -0
  129. package/dist/tools/assets-copy.d.ts +2 -0
  130. package/dist/tools/assets-copy.js +50 -0
  131. package/dist/tools/assets-copy.js.map +1 -0
  132. package/dist/tools/assets-create-folder.d.ts +2 -0
  133. package/dist/tools/assets-create-folder.js +53 -0
  134. package/dist/tools/assets-create-folder.js.map +1 -0
  135. package/dist/tools/assets-delete.d.ts +2 -0
  136. package/dist/tools/assets-delete.js +34 -0
  137. package/dist/tools/assets-delete.js.map +1 -0
  138. package/dist/tools/assets-move.d.ts +2 -0
  139. package/dist/tools/assets-move.js +50 -0
  140. package/dist/tools/assets-move.js.map +1 -0
  141. package/dist/tools/assets-refresh.d.ts +2 -0
  142. package/dist/tools/assets-refresh.js +37 -0
  143. package/dist/tools/assets-refresh.js.map +1 -0
  144. package/dist/tools/baseline-create.d.ts +2 -0
  145. package/dist/tools/baseline-create.js +20 -0
  146. package/dist/tools/baseline-create.js.map +1 -0
  147. package/dist/tools/bridge-status.d.ts +2 -0
  148. package/dist/tools/bridge-status.js +44 -0
  149. package/dist/tools/bridge-status.js.map +1 -0
  150. package/dist/tools/build-get-active-target.d.ts +2 -0
  151. package/dist/tools/build-get-active-target.js +16 -0
  152. package/dist/tools/build-get-active-target.js.map +1 -0
  153. package/dist/tools/build-get-defines.d.ts +2 -0
  154. package/dist/tools/build-get-defines.js +16 -0
  155. package/dist/tools/build-get-defines.js.map +1 -0
  156. package/dist/tools/build-get-scenes.d.ts +2 -0
  157. package/dist/tools/build-get-scenes.js +16 -0
  158. package/dist/tools/build-get-scenes.js.map +1 -0
  159. package/dist/tools/build-get-targets.d.ts +2 -0
  160. package/dist/tools/build-get-targets.js +18 -0
  161. package/dist/tools/build-get-targets.js.map +1 -0
  162. package/dist/tools/build-set-defines.d.ts +2 -0
  163. package/dist/tools/build-set-defines.js +50 -0
  164. package/dist/tools/build-set-defines.js.map +1 -0
  165. package/dist/tools/build-set-scenes.d.ts +2 -0
  166. package/dist/tools/build-set-scenes.js +60 -0
  167. package/dist/tools/build-set-scenes.js.map +1 -0
  168. package/dist/tools/build-set-target.d.ts +2 -0
  169. package/dist/tools/build-set-target.js +49 -0
  170. package/dist/tools/build-set-target.js.map +1 -0
  171. package/dist/tools/build-start.d.ts +2 -0
  172. package/dist/tools/build-start.js +64 -0
  173. package/dist/tools/build-start.js.map +1 -0
  174. package/dist/tools/capture-inline.d.ts +2 -0
  175. package/dist/tools/capture-inline.js +57 -0
  176. package/dist/tools/capture-inline.js.map +1 -0
  177. package/dist/tools/checkpoint-create.d.ts +2 -0
  178. package/dist/tools/checkpoint-create.js +16 -0
  179. package/dist/tools/checkpoint-create.js.map +1 -0
  180. package/dist/tools/compile-check.d.ts +2 -0
  181. package/dist/tools/compile-check.js +26 -0
  182. package/dist/tools/compile-check.js.map +1 -0
  183. package/dist/tools/component-add.d.ts +2 -0
  184. package/dist/tools/component-add.js +47 -0
  185. package/dist/tools/component-add.js.map +1 -0
  186. package/dist/tools/component-destroy.d.ts +2 -0
  187. package/dist/tools/component-destroy.js +46 -0
  188. package/dist/tools/component-destroy.js.map +1 -0
  189. package/dist/tools/component-get.d.ts +2 -0
  190. package/dist/tools/component-get.js +54 -0
  191. package/dist/tools/component-get.js.map +1 -0
  192. package/dist/tools/component-list-all.d.ts +2 -0
  193. package/dist/tools/component-list-all.js +38 -0
  194. package/dist/tools/component-list-all.js.map +1 -0
  195. package/dist/tools/component-modify.d.ts +2 -0
  196. package/dist/tools/component-modify.js +80 -0
  197. package/dist/tools/component-modify.js.map +1 -0
  198. package/dist/tools/console-clear.d.ts +2 -0
  199. package/dist/tools/console-clear.js +19 -0
  200. package/dist/tools/console-clear.js.map +1 -0
  201. package/dist/tools/console-log.d.ts +2 -0
  202. package/dist/tools/console-log.js +47 -0
  203. package/dist/tools/console-log.js.map +1 -0
  204. package/dist/tools/delta.d.ts +2 -0
  205. package/dist/tools/delta.js +17 -0
  206. package/dist/tools/delta.js.map +1 -0
  207. package/dist/tools/editor-add-layer.d.ts +2 -0
  208. package/dist/tools/editor-add-layer.js +51 -0
  209. package/dist/tools/editor-add-layer.js.map +1 -0
  210. package/dist/tools/editor-add-tag.d.ts +2 -0
  211. package/dist/tools/editor-add-tag.js +41 -0
  212. package/dist/tools/editor-add-tag.js.map +1 -0
  213. package/dist/tools/editor-get-layers.d.ts +2 -0
  214. package/dist/tools/editor-get-layers.js +22 -0
  215. package/dist/tools/editor-get-layers.js.map +1 -0
  216. package/dist/tools/editor-get-tags.d.ts +2 -0
  217. package/dist/tools/editor-get-tags.js +19 -0
  218. package/dist/tools/editor-get-tags.js.map +1 -0
  219. package/dist/tools/editor-redo.d.ts +2 -0
  220. package/dist/tools/editor-redo.js +27 -0
  221. package/dist/tools/editor-redo.js.map +1 -0
  222. package/dist/tools/editor-set-state.d.ts +2 -0
  223. package/dist/tools/editor-set-state.js +57 -0
  224. package/dist/tools/editor-set-state.js.map +1 -0
  225. package/dist/tools/editor-status.d.ts +2 -0
  226. package/dist/tools/editor-status.js +17 -0
  227. package/dist/tools/editor-status.js.map +1 -0
  228. package/dist/tools/editor-undo.d.ts +2 -0
  229. package/dist/tools/editor-undo.js +29 -0
  230. package/dist/tools/editor-undo.js.map +1 -0
  231. package/dist/tools/execute-csharp.d.ts +2 -0
  232. package/dist/tools/execute-csharp.js +74 -0
  233. package/dist/tools/execute-csharp.js.map +1 -0
  234. package/dist/tools/execute-menu.d.ts +2 -0
  235. package/dist/tools/execute-menu.js +40 -0
  236. package/dist/tools/execute-menu.js.map +1 -0
  237. package/dist/tools/find-members.d.ts +2 -0
  238. package/dist/tools/find-members.js +56 -0
  239. package/dist/tools/find-members.js.map +1 -0
  240. package/dist/tools/find-references.d.ts +2 -0
  241. package/dist/tools/find-references.js +29 -0
  242. package/dist/tools/find-references.js.map +1 -0
  243. package/dist/tools/gameobject-create.d.ts +2 -0
  244. package/dist/tools/gameobject-create.js +61 -0
  245. package/dist/tools/gameobject-create.js.map +1 -0
  246. package/dist/tools/gameobject-destroy.d.ts +2 -0
  247. package/dist/tools/gameobject-destroy.js +38 -0
  248. package/dist/tools/gameobject-destroy.js.map +1 -0
  249. package/dist/tools/gameobject-duplicate.d.ts +2 -0
  250. package/dist/tools/gameobject-duplicate.js +40 -0
  251. package/dist/tools/gameobject-duplicate.js.map +1 -0
  252. package/dist/tools/gameobject-find.d.ts +2 -0
  253. package/dist/tools/gameobject-find.js +59 -0
  254. package/dist/tools/gameobject-find.js.map +1 -0
  255. package/dist/tools/gameobject-modify.d.ts +2 -0
  256. package/dist/tools/gameobject-modify.js +76 -0
  257. package/dist/tools/gameobject-modify.js.map +1 -0
  258. package/dist/tools/gameobject-set-parent.d.ts +2 -0
  259. package/dist/tools/gameobject-set-parent.js +55 -0
  260. package/dist/tools/gameobject-set-parent.js.map +1 -0
  261. package/dist/tools/gate-budget-estimate.d.ts +2 -0
  262. package/dist/tools/gate-budget-estimate.js +59 -0
  263. package/dist/tools/gate-budget-estimate.js.map +1 -0
  264. package/dist/tools/generate-skill.d.ts +2 -0
  265. package/dist/tools/generate-skill.js +37 -0
  266. package/dist/tools/generate-skill.js.map +1 -0
  267. package/dist/tools/impact-preview.d.ts +2 -0
  268. package/dist/tools/impact-preview.js +50 -0
  269. package/dist/tools/impact-preview.js.map +1 -0
  270. package/dist/tools/index.d.ts +30 -0
  271. package/dist/tools/index.js +576 -0
  272. package/dist/tools/index.js.map +1 -0
  273. package/dist/tools/inputsystem-action-add.d.ts +2 -0
  274. package/dist/tools/inputsystem-action-add.js +61 -0
  275. package/dist/tools/inputsystem-action-add.js.map +1 -0
  276. package/dist/tools/inputsystem-actionmap-add.d.ts +2 -0
  277. package/dist/tools/inputsystem-actionmap-add.js +31 -0
  278. package/dist/tools/inputsystem-actionmap-add.js.map +1 -0
  279. package/dist/tools/inputsystem-asset-create.d.ts +2 -0
  280. package/dist/tools/inputsystem-asset-create.js +35 -0
  281. package/dist/tools/inputsystem-asset-create.js.map +1 -0
  282. package/dist/tools/inputsystem-binding-add.d.ts +2 -0
  283. package/dist/tools/inputsystem-binding-add.js +48 -0
  284. package/dist/tools/inputsystem-binding-add.js.map +1 -0
  285. package/dist/tools/inputsystem-binding-composite-add.d.ts +2 -0
  286. package/dist/tools/inputsystem-binding-composite-add.js +51 -0
  287. package/dist/tools/inputsystem-binding-composite-add.js.map +1 -0
  288. package/dist/tools/inputsystem-controlscheme-add.d.ts +2 -0
  289. package/dist/tools/inputsystem-controlscheme-add.js +43 -0
  290. package/dist/tools/inputsystem-controlscheme-add.js.map +1 -0
  291. package/dist/tools/inputsystem-get.d.ts +2 -0
  292. package/dist/tools/inputsystem-get.js +22 -0
  293. package/dist/tools/inputsystem-get.js.map +1 -0
  294. package/dist/tools/invoke-method.d.ts +2 -0
  295. package/dist/tools/invoke-method.js +104 -0
  296. package/dist/tools/invoke-method.js.map +1 -0
  297. package/dist/tools/list-assets.d.ts +2 -0
  298. package/dist/tools/list-assets.js +30 -0
  299. package/dist/tools/list-assets.js.map +1 -0
  300. package/dist/tools/list-rules.d.ts +2 -0
  301. package/dist/tools/list-rules.js +27 -0
  302. package/dist/tools/list-rules.js.map +1 -0
  303. package/dist/tools/manage-tools.d.ts +2 -0
  304. package/dist/tools/manage-tools.js +47 -0
  305. package/dist/tools/manage-tools.js.map +1 -0
  306. package/dist/tools/material-create.d.ts +2 -0
  307. package/dist/tools/material-create.js +37 -0
  308. package/dist/tools/material-create.js.map +1 -0
  309. package/dist/tools/material-get-keywords.d.ts +2 -0
  310. package/dist/tools/material-get-keywords.js +23 -0
  311. package/dist/tools/material-get-keywords.js.map +1 -0
  312. package/dist/tools/material-get-properties.d.ts +2 -0
  313. package/dist/tools/material-get-properties.js +32 -0
  314. package/dist/tools/material-get-properties.js.map +1 -0
  315. package/dist/tools/material-set-keyword.d.ts +2 -0
  316. package/dist/tools/material-set-keyword.js +42 -0
  317. package/dist/tools/material-set-keyword.js.map +1 -0
  318. package/dist/tools/material-set-property.d.ts +2 -0
  319. package/dist/tools/material-set-property.js +49 -0
  320. package/dist/tools/material-set-property.js.map +1 -0
  321. package/dist/tools/material-set-shader.d.ts +2 -0
  322. package/dist/tools/material-set-shader.js +39 -0
  323. package/dist/tools/material-set-shader.js.map +1 -0
  324. package/dist/tools/mutation-explain.d.ts +2 -0
  325. package/dist/tools/mutation-explain.js +44 -0
  326. package/dist/tools/mutation-explain.js.map +1 -0
  327. package/dist/tools/navigation-agent-add.d.ts +2 -0
  328. package/dist/tools/navigation-agent-add.js +38 -0
  329. package/dist/tools/navigation-agent-add.js.map +1 -0
  330. package/dist/tools/navigation-agent-set-destination.d.ts +2 -0
  331. package/dist/tools/navigation-agent-set-destination.js +33 -0
  332. package/dist/tools/navigation-agent-set-destination.js.map +1 -0
  333. package/dist/tools/navigation-get.d.ts +2 -0
  334. package/dist/tools/navigation-get.js +20 -0
  335. package/dist/tools/navigation-get.js.map +1 -0
  336. package/dist/tools/navigation-link-add.d.ts +2 -0
  337. package/dist/tools/navigation-link-add.js +57 -0
  338. package/dist/tools/navigation-link-add.js.map +1 -0
  339. package/dist/tools/navigation-list.d.ts +2 -0
  340. package/dist/tools/navigation-list.js +16 -0
  341. package/dist/tools/navigation-list.js.map +1 -0
  342. package/dist/tools/navigation-modifier-add.d.ts +2 -0
  343. package/dist/tools/navigation-modifier-add.js +42 -0
  344. package/dist/tools/navigation-modifier-add.js.map +1 -0
  345. package/dist/tools/navigation-modifier-volume-add.d.ts +2 -0
  346. package/dist/tools/navigation-modifier-volume-add.js +41 -0
  347. package/dist/tools/navigation-modifier-volume-add.js.map +1 -0
  348. package/dist/tools/navigation-modify.d.ts +2 -0
  349. package/dist/tools/navigation-modify.js +47 -0
  350. package/dist/tools/navigation-modify.js.map +1 -0
  351. package/dist/tools/navigation-set-bake-settings.d.ts +2 -0
  352. package/dist/tools/navigation-set-bake-settings.js +42 -0
  353. package/dist/tools/navigation-set-bake-settings.js.map +1 -0
  354. package/dist/tools/navigation-surface-add.d.ts +2 -0
  355. package/dist/tools/navigation-surface-add.js +62 -0
  356. package/dist/tools/navigation-surface-add.js.map +1 -0
  357. package/dist/tools/navigation-surface-bake.d.ts +2 -0
  358. package/dist/tools/navigation-surface-bake.js +30 -0
  359. package/dist/tools/navigation-surface-bake.js.map +1 -0
  360. package/dist/tools/object-get-data.d.ts +2 -0
  361. package/dist/tools/object-get-data.js +59 -0
  362. package/dist/tools/object-get-data.js.map +1 -0
  363. package/dist/tools/object-modify.d.ts +2 -0
  364. package/dist/tools/object-modify.js +73 -0
  365. package/dist/tools/object-modify.js.map +1 -0
  366. package/dist/tools/package-add.d.ts +2 -0
  367. package/dist/tools/package-add.js +42 -0
  368. package/dist/tools/package-add.js.map +1 -0
  369. package/dist/tools/package-check.d.ts +2 -0
  370. package/dist/tools/package-check.js +27 -0
  371. package/dist/tools/package-check.js.map +1 -0
  372. package/dist/tools/package-get-dependencies.d.ts +2 -0
  373. package/dist/tools/package-get-dependencies.js +17 -0
  374. package/dist/tools/package-get-dependencies.js.map +1 -0
  375. package/dist/tools/package-get-info.d.ts +2 -0
  376. package/dist/tools/package-get-info.js +33 -0
  377. package/dist/tools/package-get-info.js.map +1 -0
  378. package/dist/tools/package-list.d.ts +2 -0
  379. package/dist/tools/package-list.js +57 -0
  380. package/dist/tools/package-list.js.map +1 -0
  381. package/dist/tools/package-remove.d.ts +2 -0
  382. package/dist/tools/package-remove.js +40 -0
  383. package/dist/tools/package-remove.js.map +1 -0
  384. package/dist/tools/package-search.d.ts +2 -0
  385. package/dist/tools/package-search.js +42 -0
  386. package/dist/tools/package-search.js.map +1 -0
  387. package/dist/tools/particle-system-get.d.ts +2 -0
  388. package/dist/tools/particle-system-get.js +42 -0
  389. package/dist/tools/particle-system-get.js.map +1 -0
  390. package/dist/tools/particle-system-modify.d.ts +2 -0
  391. package/dist/tools/particle-system-modify.js +73 -0
  392. package/dist/tools/particle-system-modify.js.map +1 -0
  393. package/dist/tools/ping.d.ts +2 -0
  394. package/dist/tools/ping.js +10 -0
  395. package/dist/tools/ping.js.map +1 -0
  396. package/dist/tools/prefab-apply.d.ts +2 -0
  397. package/dist/tools/prefab-apply.js +39 -0
  398. package/dist/tools/prefab-apply.js.map +1 -0
  399. package/dist/tools/prefab-close.d.ts +2 -0
  400. package/dist/tools/prefab-close.js +29 -0
  401. package/dist/tools/prefab-close.js.map +1 -0
  402. package/dist/tools/prefab-create.d.ts +2 -0
  403. package/dist/tools/prefab-create.js +52 -0
  404. package/dist/tools/prefab-create.js.map +1 -0
  405. package/dist/tools/prefab-get-overrides.d.ts +2 -0
  406. package/dist/tools/prefab-get-overrides.js +27 -0
  407. package/dist/tools/prefab-get-overrides.js.map +1 -0
  408. package/dist/tools/prefab-instantiate.d.ts +2 -0
  409. package/dist/tools/prefab-instantiate.js +52 -0
  410. package/dist/tools/prefab-instantiate.js.map +1 -0
  411. package/dist/tools/prefab-open.d.ts +2 -0
  412. package/dist/tools/prefab-open.js +30 -0
  413. package/dist/tools/prefab-open.js.map +1 -0
  414. package/dist/tools/prefab-revert.d.ts +2 -0
  415. package/dist/tools/prefab-revert.js +37 -0
  416. package/dist/tools/prefab-revert.js.map +1 -0
  417. package/dist/tools/prefab-save.d.ts +2 -0
  418. package/dist/tools/prefab-save.js +24 -0
  419. package/dist/tools/prefab-save.js.map +1 -0
  420. package/dist/tools/prefab-status.d.ts +2 -0
  421. package/dist/tools/prefab-status.js +29 -0
  422. package/dist/tools/prefab-status.js.map +1 -0
  423. package/dist/tools/prefab-unpack.d.ts +2 -0
  424. package/dist/tools/prefab-unpack.js +43 -0
  425. package/dist/tools/prefab-unpack.js.map +1 -0
  426. package/dist/tools/probuilder-create-shape.d.ts +2 -0
  427. package/dist/tools/probuilder-create-shape.js +40 -0
  428. package/dist/tools/probuilder-create-shape.js.map +1 -0
  429. package/dist/tools/probuilder-delete-faces.d.ts +2 -0
  430. package/dist/tools/probuilder-delete-faces.js +47 -0
  431. package/dist/tools/probuilder-delete-faces.js.map +1 -0
  432. package/dist/tools/probuilder-extrude.d.ts +2 -0
  433. package/dist/tools/probuilder-extrude.js +58 -0
  434. package/dist/tools/probuilder-extrude.js.map +1 -0
  435. package/dist/tools/probuilder-get-mesh-info.d.ts +2 -0
  436. package/dist/tools/probuilder-get-mesh-info.js +21 -0
  437. package/dist/tools/probuilder-get-mesh-info.js.map +1 -0
  438. package/dist/tools/probuilder-set-face-material.d.ts +2 -0
  439. package/dist/tools/probuilder-set-face-material.js +53 -0
  440. package/dist/tools/probuilder-set-face-material.js.map +1 -0
  441. package/dist/tools/profiler-capture.d.ts +2 -0
  442. package/dist/tools/profiler-capture.js +84 -0
  443. package/dist/tools/profiler-capture.js.map +1 -0
  444. package/dist/tools/profiler-clear-data.d.ts +2 -0
  445. package/dist/tools/profiler-clear-data.js +20 -0
  446. package/dist/tools/profiler-clear-data.js.map +1 -0
  447. package/dist/tools/profiler-enable-module.d.ts +2 -0
  448. package/dist/tools/profiler-enable-module.js +32 -0
  449. package/dist/tools/profiler-enable-module.js.map +1 -0
  450. package/dist/tools/profiler-get-config.d.ts +2 -0
  451. package/dist/tools/profiler-get-config.js +21 -0
  452. package/dist/tools/profiler-get-config.js.map +1 -0
  453. package/dist/tools/profiler-get-script-stats.d.ts +2 -0
  454. package/dist/tools/profiler-get-script-stats.js +20 -0
  455. package/dist/tools/profiler-get-script-stats.js.map +1 -0
  456. package/dist/tools/profiler-get-status.d.ts +2 -0
  457. package/dist/tools/profiler-get-status.js +22 -0
  458. package/dist/tools/profiler-get-status.js.map +1 -0
  459. package/dist/tools/profiler-list-modules.d.ts +2 -0
  460. package/dist/tools/profiler-list-modules.js +20 -0
  461. package/dist/tools/profiler-list-modules.js.map +1 -0
  462. package/dist/tools/profiler-load-data.d.ts +2 -0
  463. package/dist/tools/profiler-load-data.js +38 -0
  464. package/dist/tools/profiler-load-data.js.map +1 -0
  465. package/dist/tools/profiler-memory.d.ts +2 -0
  466. package/dist/tools/profiler-memory.js +21 -0
  467. package/dist/tools/profiler-memory.js.map +1 -0
  468. package/dist/tools/profiler-rendering.d.ts +2 -0
  469. package/dist/tools/profiler-rendering.js +14 -0
  470. package/dist/tools/profiler-rendering.js.map +1 -0
  471. package/dist/tools/profiler-save-data.d.ts +2 -0
  472. package/dist/tools/profiler-save-data.js +38 -0
  473. package/dist/tools/profiler-save-data.js.map +1 -0
  474. package/dist/tools/profiler-set-config.d.ts +2 -0
  475. package/dist/tools/profiler-set-config.js +72 -0
  476. package/dist/tools/profiler-set-config.js.map +1 -0
  477. package/dist/tools/profiler-start.d.ts +2 -0
  478. package/dist/tools/profiler-start.js +31 -0
  479. package/dist/tools/profiler-start.js.map +1 -0
  480. package/dist/tools/profiler-stop.d.ts +2 -0
  481. package/dist/tools/profiler-stop.js +20 -0
  482. package/dist/tools/profiler-stop.js.map +1 -0
  483. package/dist/tools/pull-events.d.ts +2 -0
  484. package/dist/tools/pull-events.js +43 -0
  485. package/dist/tools/pull-events.js.map +1 -0
  486. package/dist/tools/read-asset.d.ts +2 -0
  487. package/dist/tools/read-asset.js +62 -0
  488. package/dist/tools/read-asset.js.map +1 -0
  489. package/dist/tools/read-compile-errors.d.ts +2 -0
  490. package/dist/tools/read-compile-errors.js +59 -0
  491. package/dist/tools/read-compile-errors.js.map +1 -0
  492. package/dist/tools/read-console.d.ts +2 -0
  493. package/dist/tools/read-console.js +57 -0
  494. package/dist/tools/read-console.js.map +1 -0
  495. package/dist/tools/regression-check.d.ts +2 -0
  496. package/dist/tools/regression-check.js +36 -0
  497. package/dist/tools/regression-check.js.map +1 -0
  498. package/dist/tools/reserialize.d.ts +2 -0
  499. package/dist/tools/reserialize.js +31 -0
  500. package/dist/tools/reserialize.js.map +1 -0
  501. package/dist/tools/run-tests.d.ts +2 -0
  502. package/dist/tools/run-tests.js +49 -0
  503. package/dist/tools/run-tests.js.map +1 -0
  504. package/dist/tools/scan-all.d.ts +2 -0
  505. package/dist/tools/scan-all.js +25 -0
  506. package/dist/tools/scan-all.js.map +1 -0
  507. package/dist/tools/scan-paths.d.ts +2 -0
  508. package/dist/tools/scan-paths.js +40 -0
  509. package/dist/tools/scan-paths.js.map +1 -0
  510. package/dist/tools/scene-create.d.ts +2 -0
  511. package/dist/tools/scene-create.js +47 -0
  512. package/dist/tools/scene-create.js.map +1 -0
  513. package/dist/tools/scene-focus.d.ts +2 -0
  514. package/dist/tools/scene-focus.js +55 -0
  515. package/dist/tools/scene-focus.js.map +1 -0
  516. package/dist/tools/scene-get-data.d.ts +2 -0
  517. package/dist/tools/scene-get-data.js +52 -0
  518. package/dist/tools/scene-get-data.js.map +1 -0
  519. package/dist/tools/scene-get-dirty-summary.d.ts +2 -0
  520. package/dist/tools/scene-get-dirty-summary.js +17 -0
  521. package/dist/tools/scene-get-dirty-summary.js.map +1 -0
  522. package/dist/tools/scene-list-opened.d.ts +2 -0
  523. package/dist/tools/scene-list-opened.js +16 -0
  524. package/dist/tools/scene-list-opened.js.map +1 -0
  525. package/dist/tools/scene-open.d.ts +2 -0
  526. package/dist/tools/scene-open.js +48 -0
  527. package/dist/tools/scene-open.js.map +1 -0
  528. package/dist/tools/scene-save.d.ts +2 -0
  529. package/dist/tools/scene-save.js +38 -0
  530. package/dist/tools/scene-save.js.map +1 -0
  531. package/dist/tools/scene-set-active.d.ts +2 -0
  532. package/dist/tools/scene-set-active.js +33 -0
  533. package/dist/tools/scene-set-active.js.map +1 -0
  534. package/dist/tools/scene-unload.d.ts +2 -0
  535. package/dist/tools/scene-unload.js +33 -0
  536. package/dist/tools/scene-unload.js.map +1 -0
  537. package/dist/tools/screenshot-camera.d.ts +2 -0
  538. package/dist/tools/screenshot-camera.js +59 -0
  539. package/dist/tools/screenshot-camera.js.map +1 -0
  540. package/dist/tools/screenshot-window.d.ts +2 -0
  541. package/dist/tools/screenshot-window.js +54 -0
  542. package/dist/tools/screenshot-window.js.map +1 -0
  543. package/dist/tools/screenshot.d.ts +2 -0
  544. package/dist/tools/screenshot.js +47 -0
  545. package/dist/tools/screenshot.js.map +1 -0
  546. package/dist/tools/script-delete.d.ts +2 -0
  547. package/dist/tools/script-delete.js +37 -0
  548. package/dist/tools/script-delete.js.map +1 -0
  549. package/dist/tools/script-read.d.ts +2 -0
  550. package/dist/tools/script-read.js +46 -0
  551. package/dist/tools/script-read.js.map +1 -0
  552. package/dist/tools/script-write.d.ts +2 -0
  553. package/dist/tools/script-write.js +56 -0
  554. package/dist/tools/script-write.js.map +1 -0
  555. package/dist/tools/search-assets.d.ts +2 -0
  556. package/dist/tools/search-assets.js +49 -0
  557. package/dist/tools/search-assets.js.map +1 -0
  558. package/dist/tools/selection-get.d.ts +2 -0
  559. package/dist/tools/selection-get.js +28 -0
  560. package/dist/tools/selection-get.js.map +1 -0
  561. package/dist/tools/selection-set.d.ts +2 -0
  562. package/dist/tools/selection-set.js +72 -0
  563. package/dist/tools/selection-set.js.map +1 -0
  564. package/dist/tools/settings-get-lighting.d.ts +2 -0
  565. package/dist/tools/settings-get-lighting.js +21 -0
  566. package/dist/tools/settings-get-lighting.js.map +1 -0
  567. package/dist/tools/settings-get-physics.d.ts +2 -0
  568. package/dist/tools/settings-get-physics.js +17 -0
  569. package/dist/tools/settings-get-physics.js.map +1 -0
  570. package/dist/tools/settings-get-player.d.ts +2 -0
  571. package/dist/tools/settings-get-player.js +16 -0
  572. package/dist/tools/settings-get-player.js.map +1 -0
  573. package/dist/tools/settings-get-quality.d.ts +2 -0
  574. package/dist/tools/settings-get-quality.js +16 -0
  575. package/dist/tools/settings-get-quality.js.map +1 -0
  576. package/dist/tools/settings-set-lighting.d.ts +2 -0
  577. package/dist/tools/settings-set-lighting.js +58 -0
  578. package/dist/tools/settings-set-lighting.js.map +1 -0
  579. package/dist/tools/settings-set-physics.d.ts +2 -0
  580. package/dist/tools/settings-set-physics.js +52 -0
  581. package/dist/tools/settings-set-physics.js.map +1 -0
  582. package/dist/tools/settings-set-player.d.ts +2 -0
  583. package/dist/tools/settings-set-player.js +62 -0
  584. package/dist/tools/settings-set-player.js.map +1 -0
  585. package/dist/tools/settings-set-quality.d.ts +2 -0
  586. package/dist/tools/settings-set-quality.js +51 -0
  587. package/dist/tools/settings-set-quality.js.map +1 -0
  588. package/dist/tools/shader-get-data.d.ts +2 -0
  589. package/dist/tools/shader-get-data.js +31 -0
  590. package/dist/tools/shader-get-data.js.map +1 -0
  591. package/dist/tools/shader-list-all.d.ts +2 -0
  592. package/dist/tools/shader-list-all.js +24 -0
  593. package/dist/tools/shader-list-all.js.map +1 -0
  594. package/dist/tools/spatial-query.d.ts +2 -0
  595. package/dist/tools/spatial-query.js +117 -0
  596. package/dist/tools/spatial-query.js.map +1 -0
  597. package/dist/tools/splines-add-knot.d.ts +2 -0
  598. package/dist/tools/splines-add-knot.js +44 -0
  599. package/dist/tools/splines-add-knot.js.map +1 -0
  600. package/dist/tools/splines-container-create.d.ts +2 -0
  601. package/dist/tools/splines-container-create.js +39 -0
  602. package/dist/tools/splines-container-create.js.map +1 -0
  603. package/dist/tools/splines-evaluate.d.ts +2 -0
  604. package/dist/tools/splines-evaluate.js +31 -0
  605. package/dist/tools/splines-evaluate.js.map +1 -0
  606. package/dist/tools/splines-get-knots.d.ts +2 -0
  607. package/dist/tools/splines-get-knots.js +25 -0
  608. package/dist/tools/splines-get-knots.js.map +1 -0
  609. package/dist/tools/splines-modify.d.ts +2 -0
  610. package/dist/tools/splines-modify.js +35 -0
  611. package/dist/tools/splines-modify.js.map +1 -0
  612. package/dist/tools/splines-set-knot.d.ts +2 -0
  613. package/dist/tools/splines-set-knot.js +41 -0
  614. package/dist/tools/splines-set-knot.js.map +1 -0
  615. package/dist/tools/splines-set-tangent-mode.d.ts +2 -0
  616. package/dist/tools/splines-set-tangent-mode.js +43 -0
  617. package/dist/tools/splines-set-tangent-mode.js.map +1 -0
  618. package/dist/tools/type-schema.d.ts +2 -0
  619. package/dist/tools/type-schema.js +62 -0
  620. package/dist/tools/type-schema.js.map +1 -0
  621. package/dist/tools/validate-edit.d.ts +2 -0
  622. package/dist/tools/validate-edit.js +43 -0
  623. package/dist/tools/validate-edit.js.map +1 -0
  624. package/dist/unity-install-discovery.d.ts +79 -0
  625. package/dist/unity-install-discovery.js +206 -0
  626. package/dist/unity-install-discovery.js.map +1 -0
  627. package/dist/unity-log.d.ts +35 -0
  628. package/dist/unity-log.js +110 -0
  629. package/dist/unity-log.js.map +1 -0
  630. 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
+ [![npm version](https://img.shields.io/npm/v/unity-open-mcp.svg)](https://www.npmjs.com/package/unity-open-mcp)
4
+ [![license](https://img.shields.io/npm/l/unity-open-mcp.svg)](./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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"}