unity-mcp-cli 0.52.0 → 0.54.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 (39) hide show
  1. package/README.md +85 -66
  2. package/dist/commands/configure.js +17 -13
  3. package/dist/commands/configure.js.map +1 -1
  4. package/dist/commands/create-project.js +17 -5
  5. package/dist/commands/create-project.js.map +1 -1
  6. package/dist/commands/install-plugin.js +20 -6
  7. package/dist/commands/install-plugin.js.map +1 -1
  8. package/dist/commands/install-unity.d.ts +2 -0
  9. package/dist/commands/install-unity.js +72 -0
  10. package/dist/commands/install-unity.js.map +1 -0
  11. package/dist/commands/open.js +82 -10
  12. package/dist/commands/open.js.map +1 -1
  13. package/dist/commands/remove-plugin.d.ts +2 -0
  14. package/dist/commands/remove-plugin.js +29 -0
  15. package/dist/commands/remove-plugin.js.map +1 -0
  16. package/dist/index.js +34 -11
  17. package/dist/index.js.map +1 -1
  18. package/dist/utils/manifest.d.ts +12 -3
  19. package/dist/utils/manifest.js +53 -29
  20. package/dist/utils/manifest.js.map +1 -1
  21. package/dist/utils/ui.d.ts +70 -0
  22. package/dist/utils/ui.js +288 -0
  23. package/dist/utils/ui.js.map +1 -0
  24. package/dist/utils/unity-editor.d.ts +5 -0
  25. package/dist/utils/unity-editor.js +49 -3
  26. package/dist/utils/unity-editor.js.map +1 -1
  27. package/dist/utils/unity-hub.d.ts +29 -1
  28. package/dist/utils/unity-hub.js +291 -22
  29. package/dist/utils/unity-hub.js.map +1 -1
  30. package/docs/README.es.md +333 -0
  31. package/docs/README.ja.md +333 -0
  32. package/docs/README.zh-CN.md +333 -0
  33. package/package.json +3 -3
  34. package/dist/commands/connect.d.ts +0 -2
  35. package/dist/commands/connect.js +0 -81
  36. package/dist/commands/connect.js.map +0 -1
  37. package/dist/commands/install-editor.d.ts +0 -2
  38. package/dist/commands/install-editor.js +0 -49
  39. package/dist/commands/install-editor.js.map +0 -1
@@ -0,0 +1,333 @@
1
+ <div align="center" width="100%">
2
+ <h1>Unity MCP — <i>CLI</i></h1>
3
+
4
+ [![npm](https://img.shields.io/npm/v/unity-mcp-cli?label=npm&labelColor=333A41 'npm package')](https://www.npmjs.com/package/unity-mcp-cli)
5
+ [![Node.js](https://img.shields.io/badge/Node.js-%5E20.19.0%20%7C%7C%20%3E%3D22.12.0-5FA04E?logo=nodedotjs&labelColor=333A41 'Node.js')](https://nodejs.org/)
6
+ [![License](https://img.shields.io/github/license/IvanMurzak/Unity-MCP?label=License&labelColor=333A41)](https://github.com/IvanMurzak/Unity-MCP/blob/main/LICENSE)
7
+ [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)
8
+
9
+ <img src="https://github.com/IvanMurzak/Unity-MCP/raw/main/docs/img/promo/ai-developer-banner-glitch.gif" alt="AI Game Developer" title="Unity MCP CLI" width="100%">
10
+
11
+ </div>
12
+
13
+ <b>[English](https://github.com/IvanMurzak/Unity-MCP/blob/main/cli/README.md) | [日本語](https://github.com/IvanMurzak/Unity-MCP/blob/main/cli/docs/README.ja.md) | [Español](https://github.com/IvanMurzak/Unity-MCP/blob/main/cli/docs/README.es.md)</b>
14
+
15
+ 适用于 **[Unity MCP](https://github.com/IvanMurzak/Unity-MCP)** 的跨平台 CLI 工具 — 创建项目、安装插件、配置 MCP 工具,并启动带有活跃 MCP 连接的 Unity。一切操作均可通过单一命令行完成。
16
+
17
+ ## ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-features.svg?raw=true)
18
+
19
+ - :white_check_mark: **创建项目** — 通过 Unity Editor 快速搭建新 Unity 项目
20
+ - :white_check_mark: **安装编辑器** — 从命令行安装任意 Unity Editor 版本
21
+ - :white_check_mark: **安装插件** — 将 Unity-MCP 插件连同所有必要的作用域注册表添加到 `manifest.json`
22
+ - :white_check_mark: **移除插件** — 从 `manifest.json` 中移除 Unity-MCP 插件
23
+ - :white_check_mark: **配置** — 启用/禁用 MCP 工具、提示词和资源
24
+ - :white_check_mark: **连接** — 携带 MCP 环境变量启动 Unity,实现自动化服务器连接
25
+ - :white_check_mark: **跨平台** — 支持 Windows、macOS 和 Linux
26
+ - :white_check_mark: **版本感知** — 从不降级插件版本,自动从 OpenUPM 解析最新版本
27
+
28
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
29
+
30
+ # 快速开始
31
+
32
+ 使用 `npx` 即时运行任意命令,无需安装:
33
+
34
+ ```bash
35
+ npx unity-mcp-cli install-plugin /path/to/unity/project
36
+ ```
37
+
38
+ 或全局安装:
39
+
40
+ ```bash
41
+ npm install -g unity-mcp-cli
42
+ unity-mcp-cli install-plugin /path/to/unity/project
43
+ ```
44
+
45
+ > **环境要求:** [Node.js](https://nodejs.org/) ^20.19.0 或 >=22.12.0。若未检测到 [Unity Hub](https://unity.com/download),将自动下载安装。
46
+
47
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
48
+
49
+ # 目录
50
+
51
+ - [快速开始](#快速开始)
52
+ - [命令](#命令)
53
+ - [`create-project`](#create-project) — 创建新 Unity 项目
54
+ - [`install-unity`](#install-unity) — 通过 Unity Hub 安装 Unity Editor
55
+ - [`open`](#open) — 在编辑器中打开 Unity 项目
56
+ - [`install-plugin`](#install-plugin) — 将 Unity-MCP 插件安装到项目中
57
+ - [`remove-plugin`](#remove-plugin) — 从项目中移除 Unity-MCP 插件
58
+ - [`configure`](#configure) — 配置 MCP 工具、提示词和资源
59
+ - [`connect`](#connect) — 启动 Unity 并建立 MCP 连接
60
+ - [完整自动化示例](#完整自动化示例)
61
+ - [工作原理](#工作原理)
62
+
63
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
64
+
65
+ # 命令
66
+
67
+ ## `create-project`
68
+
69
+ 使用 Unity Editor 创建新的 Unity 项目。
70
+
71
+ ```bash
72
+ npx unity-mcp-cli create-project /path/to/new/project
73
+ ```
74
+
75
+ | 选项 | 必需 | 描述 |
76
+ |---|---|---|
77
+ | `[path]` | 是 | 项目将被创建的路径(位置参数或 `--path`) |
78
+ | `--unity <version>` | 否 | 要使用的 Unity Editor 版本(默认为已安装的最高版本) |
79
+
80
+ **示例 — 使用指定编辑器版本创建项目:**
81
+
82
+ ```bash
83
+ npx unity-mcp-cli create-project ./MyGame --unity 2022.3.62f1
84
+ ```
85
+
86
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
87
+
88
+ ## `install-unity`
89
+
90
+ 通过 Unity Hub CLI 安装指定版本的 Unity Editor。
91
+
92
+ ```bash
93
+ npx unity-mcp-cli install-unity 6000.3.1f1
94
+ ```
95
+
96
+ | 参数 / 选项 | 必需 | 描述 |
97
+ |---|---|---|
98
+ | `[version]` | 否 | 要安装的 Unity Editor 版本(例如 `6000.3.1f1`) |
99
+ | `--path <path>` | 否 | 从现有项目中读取所需版本 |
100
+
101
+ 若参数和选项均未提供,命令将从 Unity Hub 发布列表中安装最新稳定版本。
102
+
103
+ **示例 — 安装项目所需的编辑器版本:**
104
+
105
+ ```bash
106
+ npx unity-mcp-cli install-unity --path ./MyGame
107
+ ```
108
+
109
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
110
+
111
+ ## `open`
112
+
113
+ 在 Unity Editor 中打开 Unity 项目。
114
+
115
+ ```bash
116
+ npx unity-mcp-cli open ./MyGame
117
+ ```
118
+
119
+ | 选项 | 必需 | 描述 |
120
+ |---|---|---|
121
+ | `[path]` | 是 | Unity 项目的路径(位置参数或 `--path`) |
122
+ | `--unity <version>` | 否 | 要使用的特定 Unity Editor 版本(默认为项目设置中的版本,回退为已安装的最高版本) |
123
+
124
+ 编辑器进程以分离模式启动 — CLI 会立即返回。
125
+
126
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
127
+
128
+ ## `install-plugin`
129
+
130
+ 将 Unity-MCP 插件安装到 Unity 项目的 `Packages/manifest.json` 中。
131
+
132
+ ```bash
133
+ npx unity-mcp-cli install-plugin ./MyGame
134
+ ```
135
+
136
+ | 选项 | 必需 | 描述 |
137
+ |---|---|---|
138
+ | `[path]` | 是 | Unity 项目的路径(位置参数或 `--path`) |
139
+ | `--plugin-version <version>` | 否 | 要安装的插件版本(默认为来自 [OpenUPM](https://openupm.com/packages/com.ivanmurzak.unity.mcp/) 的最新版本) |
140
+
141
+ 此命令将:
142
+ 1. 添加 **OpenUPM 作用域注册表**及所有必要的作用域
143
+ 2. 将 `com.ivanmurzak.unity.mcp` 添加到 `dependencies`
144
+ 3. **从不降级** — 若已安装更高版本,则保留现有版本
145
+
146
+ **示例 — 安装指定插件版本:**
147
+
148
+ ```bash
149
+ npx unity-mcp-cli install-plugin ./MyGame --plugin-version 0.52.0
150
+ ```
151
+
152
+ > 运行此命令后,请在 Unity Editor 中打开项目以完成包安装。
153
+
154
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
155
+
156
+ ## `remove-plugin`
157
+
158
+ 从 Unity 项目的 `Packages/manifest.json` 中移除 Unity-MCP 插件。
159
+
160
+ ```bash
161
+ npx unity-mcp-cli remove-plugin ./MyGame
162
+ ```
163
+
164
+ | 选项 | 必需 | 描述 |
165
+ |---|---|---|
166
+ | `[path]` | 是 | Unity 项目的路径(位置参数或 `--path`) |
167
+
168
+ 此命令将:
169
+ 1. 从 `dependencies` 中移除 `com.ivanmurzak.unity.mcp`
170
+ 2. **保留作用域注册表和作用域** — 其他包可能依赖它们
171
+ 3. 若插件未安装,则**不执行任何操作**
172
+
173
+ > 运行此命令后,请在 Unity Editor 中打开项目以应用更改。
174
+
175
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
176
+
177
+ ## `configure`
178
+
179
+ 在 `UserSettings/AI-Game-Developer-Config.json` 中配置 MCP 工具、提示词和资源。
180
+
181
+ ```bash
182
+ npx unity-mcp-cli configure ./MyGame --list
183
+ ```
184
+
185
+ | 选项 | 必需 | 描述 |
186
+ |---|---|---|
187
+ | `[path]` | 是 | Unity 项目的路径(位置参数或 `--path`) |
188
+ | `--list` | 否 | 列出当前配置并退出 |
189
+ | `--enable-tools <names>` | 否 | 启用指定工具(逗号分隔) |
190
+ | `--disable-tools <names>` | 否 | 禁用指定工具(逗号分隔) |
191
+ | `--enable-all-tools` | 否 | 启用所有工具 |
192
+ | `--disable-all-tools` | 否 | 禁用所有工具 |
193
+ | `--enable-prompts <names>` | 否 | 启用指定提示词(逗号分隔) |
194
+ | `--disable-prompts <names>` | 否 | 禁用指定提示词(逗号分隔) |
195
+ | `--enable-all-prompts` | 否 | 启用所有提示词 |
196
+ | `--disable-all-prompts` | 否 | 禁用所有提示词 |
197
+ | `--enable-resources <names>` | 否 | 启用指定资源(逗号分隔) |
198
+ | `--disable-resources <names>` | 否 | 禁用指定资源(逗号分隔) |
199
+ | `--enable-all-resources` | 否 | 启用所有资源 |
200
+ | `--disable-all-resources` | 否 | 禁用所有资源 |
201
+
202
+ **示例 — 启用指定工具并禁用所有提示词:**
203
+
204
+ ```bash
205
+ npx unity-mcp-cli configure ./MyGame \
206
+ --enable-tools gameobject-create,gameobject-find \
207
+ --disable-all-prompts
208
+ ```
209
+
210
+ **示例 — 启用所有功能:**
211
+
212
+ ```bash
213
+ npx unity-mcp-cli configure ./MyGame \
214
+ --enable-all-tools \
215
+ --enable-all-prompts \
216
+ --enable-all-resources
217
+ ```
218
+
219
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
220
+
221
+ ## `connect`
222
+
223
+ 打开 Unity 项目并通过环境变量将其连接到指定的 MCP 服务器。每个选项均对应一个 `UNITY_MCP_*` 环境变量,Unity 插件将在启动时读取这些变量。
224
+
225
+ ```bash
226
+ npx unity-mcp-cli connect \
227
+ --path ./MyGame \
228
+ --url http://localhost:8080
229
+ ```
230
+
231
+ | 选项 | 环境变量 | 必需 | 描述 |
232
+ |---|---|---|---|
233
+ | `--url <url>` | `UNITY_MCP_HOST` | 是 | 要连接的 MCP 服务器 URL |
234
+ | `--path <path>` | — | 是 | Unity 项目的路径 |
235
+ | `--keep-connected` | `UNITY_MCP_KEEP_CONNECTED` | 否 | 强制保持连接 |
236
+ | `--token <token>` | `UNITY_MCP_TOKEN` | 否 | 身份验证令牌 |
237
+ | `--auth <option>` | `UNITY_MCP_AUTH_OPTION` | 否 | 认证模式:`none` 或 `required` |
238
+ | `--tools <names>` | `UNITY_MCP_TOOLS` | 否 | 要启用的工具列表(逗号分隔) |
239
+ | `--transport <method>` | `UNITY_MCP_TRANSPORT` | 否 | 传输方式:`streamableHttp` 或 `stdio` |
240
+ | `--start-server <value>` | `UNITY_MCP_START_SERVER` | 否 | 设置为 `true` 或 `false` 以控制 Unity Editor 中 MCP 服务器的自动启动(仅适用于 `streamableHttp` 传输方式) |
241
+ | `--unity <version>` | — | 否 | 要使用的特定 Unity Editor 版本(默认为项目设置中的版本,回退为已安装的最高版本) |
242
+
243
+ 此命令携带相应的 `UNITY_MCP_*` 环境变量启动 Unity Editor,以便插件在启动时自动获取这些配置。运行时,环境变量将覆盖项目 `UserSettings/AI-Game-Developer-Config.json` 配置文件中的对应值。
244
+
245
+ **示例 — 携带身份验证和指定工具连接:**
246
+
247
+ ```bash
248
+ npx unity-mcp-cli connect \
249
+ --path ./MyGame \
250
+ --url http://my-server:8080 \
251
+ --token my-secret-token \
252
+ --auth required \
253
+ --keep-connected \
254
+ --tools gameobject-create,gameobject-find,script-execute
255
+ ```
256
+
257
+ **示例 — 使用 stdio 传输方式连接(服务器由 AI 代理管理):**
258
+
259
+ ```bash
260
+ npx unity-mcp-cli connect \
261
+ --path ./MyGame \
262
+ --url http://localhost:8080 \
263
+ --transport stdio \
264
+ --start-server false
265
+ ```
266
+
267
+ **示例 — 使用 streamableHttp 连接并自动启动服务器:**
268
+
269
+ ```bash
270
+ npx unity-mcp-cli connect \
271
+ --path ./MyGame \
272
+ --url http://localhost:8080 \
273
+ --transport streamableHttp \
274
+ --start-server true \
275
+ --keep-connected
276
+ ```
277
+
278
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
279
+
280
+ # 完整自动化示例
281
+
282
+ 通过一个脚本从零搭建完整的 Unity MCP 项目:
283
+
284
+ ```bash
285
+ # 1. 创建新的 Unity 项目
286
+ npx unity-mcp-cli create-project ./MyAIGame --unity 6000.3.1f1
287
+
288
+ # 2. 安装 Unity-MCP 插件
289
+ npx unity-mcp-cli install-plugin ./MyAIGame
290
+
291
+ # 3. 启用所有 MCP 工具
292
+ npx unity-mcp-cli configure ./MyAIGame --enable-all-tools
293
+
294
+ # 4. 打开项目并建立 MCP 连接
295
+ npx unity-mcp-cli connect \
296
+ --path ./MyAIGame \
297
+ --url http://localhost:8080 \
298
+ --keep-connected
299
+ ```
300
+
301
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
302
+
303
+ # 工作原理
304
+
305
+ ### 确定性端口
306
+
307
+ CLI 根据 Unity 项目的目录路径生成**确定性端口**(SHA256 哈希值映射到端口范围 50000–59999)。该端口生成机制与 Unity 插件中的实现完全一致,确保服务器与插件无需手动配置即可自动协商使用同一端口。
308
+
309
+ ### 插件安装
310
+
311
+ `install-plugin` 命令直接修改 `Packages/manifest.json`:
312
+ - 添加 [OpenUPM](https://openupm.com/) 作用域注册表(`package.openupm.com`)
313
+ - 注册所有必要的作用域(`com.ivanmurzak`、`extensions.unity`、`org.nuget.*`)
314
+ - 以版本感知的方式添加 `com.ivanmurzak.unity.mcp` 依赖(从不降级)
315
+
316
+ ### 配置文件
317
+
318
+ `configure` 命令读写 `UserSettings/AI-Game-Developer-Config.json`,该文件控制:
319
+ - **工具** — AI 代理可用的 MCP 工具
320
+ - **提示词** — 注入到 LLM 对话中的预定义提示词
321
+ - **资源** — 暴露给 AI 代理的只读数据
322
+ - **连接设置** — 主机 URL、认证令牌、传输方式、超时配置
323
+
324
+ ### Unity Hub 集成
325
+
326
+ 管理编辑器或创建项目的命令使用 **Unity Hub CLI**(`--headless` 模式)。若未安装 Unity Hub,CLI 将**自动下载并安装**:
327
+ - **Windows** — 通过 `UnityHubSetup.exe /S` 静默安装(可能需要管理员权限)
328
+ - **macOS** — 下载 DMG,挂载后将 `Unity Hub.app` 复制到 `/Applications`
329
+ - **Linux** — 将 `UnityHub.AppImage` 下载到 `~/Applications/`
330
+
331
+ > 完整的 Unity-MCP 项目文档请参阅 [主 README](https://github.com/IvanMurzak/Unity-MCP/blob/main/README.md)。
332
+
333
+ ![AI Game Developer — Unity MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unity-mcp-cli",
3
- "version": "0.52.0",
3
+ "version": "0.54.0",
4
4
  "description": "Cross-platform CLI tool for Unity-MCP operations — create projects, install plugins, configure tools, and manage MCP connections",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,12 +35,12 @@
35
35
  "node": "^20.19.0 || >=22.12.0"
36
36
  },
37
37
  "dependencies": {
38
+ "chalk": "^5.6.2",
38
39
  "commander": "^13.1.0",
39
- "semver": "^7.7.1"
40
+ "yocto-spinner": "^1.1.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/node": "^22.15.0",
43
- "@types/semver": "^7.7.0",
44
44
  "typescript": "^5.8.0",
45
45
  "vitest": "^3.1.0"
46
46
  }
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const connectCommand: Command;
@@ -1,81 +0,0 @@
1
- import { Command } from 'commander';
2
- import * as path from 'path';
3
- import * as fs from 'fs';
4
- import { findEditorPath, getProjectEditorVersion, launchEditor } from '../utils/unity-editor.js';
5
- export const connectCommand = new Command('connect')
6
- .description('Open Unity and enforce MCP connection to a specified server URL via environment variables')
7
- .requiredOption('--path <path>', 'Path to the Unity project')
8
- .requiredOption('--url <url>', 'MCP server URL to connect to')
9
- .option('--tools <names>', 'Comma-separated list of tools to enable (sets UNITY_MCP_TOOLS)')
10
- .option('--token <token>', 'Auth token (sets UNITY_MCP_TOKEN)')
11
- .option('--auth <option>', 'Auth option: none or required (sets UNITY_MCP_AUTH_OPTION)')
12
- .option('--keep-connected', 'Force keep connected (sets UNITY_MCP_KEEP_CONNECTED=true)')
13
- .option('--transport <method>', 'Transport method: streamableHttp or stdio (sets UNITY_MCP_TRANSPORT)')
14
- .option('--start-server <value>', 'Set to true/false to control server auto-start (sets UNITY_MCP_START_SERVER)', undefined)
15
- .option('--unity <version>', 'Specific Unity Editor version to use')
16
- .action(async (options) => {
17
- const projectPath = path.resolve(options.path);
18
- if (!fs.existsSync(projectPath)) {
19
- console.error(`Error: Project path does not exist: ${projectPath}`);
20
- process.exit(1);
21
- }
22
- // Determine editor version
23
- let version = options.unity;
24
- if (!version) {
25
- version = getProjectEditorVersion(projectPath) ?? undefined;
26
- if (version) {
27
- console.log(`Detected editor version from project: ${version}`);
28
- }
29
- }
30
- const editorPath = await findEditorPath(version);
31
- if (!editorPath) {
32
- const versionMsg = version ? ` (version ${version})` : '';
33
- console.error(`Error: Unity Editor not found${versionMsg}. Install it with: unity-mcp-cli install-editor --version <version>`);
34
- process.exit(1);
35
- }
36
- // Build environment variables for MCP connection
37
- const env = {
38
- UNITY_MCP_HOST: options.url,
39
- };
40
- if (options.keepConnected) {
41
- env['UNITY_MCP_KEEP_CONNECTED'] = 'true';
42
- }
43
- if (options.tools) {
44
- env['UNITY_MCP_TOOLS'] = options.tools;
45
- }
46
- if (options.token) {
47
- env['UNITY_MCP_TOKEN'] = options.token;
48
- }
49
- if (options.auth) {
50
- if (options.auth !== 'none' && options.auth !== 'required') {
51
- console.error('Error: --auth must be "none" or "required"');
52
- process.exit(1);
53
- }
54
- env['UNITY_MCP_AUTH_OPTION'] = options.auth;
55
- }
56
- if (options.transport) {
57
- if (options.transport !== 'streamableHttp' && options.transport !== 'stdio') {
58
- console.error('Error: --transport must be "streamableHttp" or "stdio"');
59
- process.exit(1);
60
- }
61
- env['UNITY_MCP_TRANSPORT'] = options.transport;
62
- }
63
- if (options.startServer !== undefined) {
64
- const val = options.startServer.toLowerCase();
65
- if (val !== 'true' && val !== 'false') {
66
- console.error('Error: --start-server must be "true" or "false"');
67
- process.exit(1);
68
- }
69
- env['UNITY_MCP_START_SERVER'] = val;
70
- }
71
- console.log(`Connecting to MCP server: ${options.url}`);
72
- console.log('Environment variables:');
73
- for (const [key, value] of Object.entries(env)) {
74
- const display = key === 'UNITY_MCP_TOKEN' ? '***' : value;
75
- console.log(` ${key}=${display}`);
76
- }
77
- console.log(`\nOpening project: ${projectPath}`);
78
- console.log(`Using editor: ${editorPath}`);
79
- launchEditor(editorPath, projectPath, env);
80
- });
81
- //# sourceMappingURL=connect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const installEditorCommand: Command;
@@ -1,49 +0,0 @@
1
- import { Command } from 'commander';
2
- import * as path from 'path';
3
- import * as fs from 'fs';
4
- import { ensureUnityHub, installEditor, listInstalledEditors } from '../utils/unity-hub.js';
5
- import { getProjectEditorVersion } from '../utils/unity-editor.js';
6
- export const installEditorCommand = new Command('install-editor')
7
- .description('Install Unity Editor via Unity Hub')
8
- .option('--version <version>', 'Unity Editor version to install')
9
- .option('--path <path>', 'Read version from an existing Unity project')
10
- .action(async (options) => {
11
- const hubPath = await ensureUnityHub();
12
- let version = options.version;
13
- if (!version && options.path) {
14
- const projectPath = path.resolve(options.path);
15
- if (!fs.existsSync(projectPath)) {
16
- console.error(`Error: Project path does not exist: ${projectPath}`);
17
- process.exit(1);
18
- }
19
- version = getProjectEditorVersion(projectPath) ?? undefined;
20
- if (version) {
21
- console.log(`Detected editor version from project: ${version}`);
22
- }
23
- else {
24
- console.error('Error: Could not read editor version from ProjectSettings/ProjectVersion.txt');
25
- process.exit(1);
26
- }
27
- }
28
- if (!version) {
29
- console.error('Error: Please specify --version or --path');
30
- // Show installed editors as a hint
31
- const editors = listInstalledEditors(hubPath);
32
- if (editors.length > 0) {
33
- console.log('\nCurrently installed editors:');
34
- for (const editor of editors) {
35
- console.log(` ${editor.version} - ${editor.path}`);
36
- }
37
- }
38
- process.exit(1);
39
- }
40
- // Check if already installed
41
- const editors = listInstalledEditors(hubPath);
42
- const alreadyInstalled = editors.find((e) => e.version === version);
43
- if (alreadyInstalled) {
44
- console.log(`Unity Editor ${version} is already installed at: ${alreadyInstalled.path}`);
45
- return;
46
- }
47
- installEditor(hubPath, version);
48
- });
49
- //# sourceMappingURL=install-editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-editor.js","sourceRoot":"","sources":["../../src/commands/install-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAA4C,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IAEvC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE9B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE3D,mCAAmC;QACnC,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACpE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,6BAA6B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IAED,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}