unity-mcp-cli 0.52.0 → 0.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -7
- package/dist/commands/configure.js +14 -13
- package/dist/commands/configure.js.map +1 -1
- package/dist/commands/connect.js +17 -11
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/create-project.js +14 -5
- package/dist/commands/create-project.js.map +1 -1
- package/dist/commands/install-plugin.js +7 -4
- package/dist/commands/install-plugin.js.map +1 -1
- package/dist/commands/install-unity.d.ts +2 -0
- package/dist/commands/{install-editor.js → install-unity.js} +21 -11
- package/dist/commands/install-unity.js.map +1 -0
- package/dist/commands/open.js +10 -6
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/remove-plugin.d.ts +2 -0
- package/dist/commands/remove-plugin.js +27 -0
- package/dist/commands/remove-plugin.js.map +1 -0
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/utils/manifest.d.ts +6 -0
- package/dist/utils/manifest.js +27 -6
- package/dist/utils/manifest.js.map +1 -1
- package/dist/utils/ui.d.ts +50 -0
- package/dist/utils/ui.js +136 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/unity-editor.js +7 -1
- package/dist/utils/unity-editor.js.map +1 -1
- package/dist/utils/unity-hub.js +42 -16
- package/dist/utils/unity-hub.js.map +1 -1
- package/docs/README.es.md +333 -0
- package/docs/README.ja.md +333 -0
- package/docs/README.zh-CN.md +333 -0
- package/package.json +4 -1
- package/dist/commands/install-editor.d.ts +0 -2
- package/dist/commands/install-editor.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
+
<b>[中文](https://github.com/IvanMurzak/Unity-MCP/blob/main/cli/docs/README.zh-CN.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
|
+
|
|
13
15
|
Cross-platform CLI tool for **[Unity MCP](https://github.com/IvanMurzak/Unity-MCP)** — create projects, install plugins, configure MCP tools, and launch Unity with active MCP connections. All from a single command line.
|
|
14
16
|
|
|
15
17
|
## 
|
|
@@ -17,6 +19,7 @@ Cross-platform CLI tool for **[Unity MCP](https://github.com/IvanMurzak/Unity-MC
|
|
|
17
19
|
- :white_check_mark: **Create projects** — scaffold new Unity projects via Unity Editor
|
|
18
20
|
- :white_check_mark: **Install editors** — install any Unity Editor version from the command line
|
|
19
21
|
- :white_check_mark: **Install plugin** — add Unity-MCP plugin to `manifest.json` with all required scoped registries
|
|
22
|
+
- :white_check_mark: **Remove plugin** — remove Unity-MCP plugin from `manifest.json`
|
|
20
23
|
- :white_check_mark: **Configure** — enable/disable MCP tools, prompts, and resources
|
|
21
24
|
- :white_check_mark: **Connect** — launch Unity with MCP environment variables for automated server connection
|
|
22
25
|
- :white_check_mark: **Cross-platform** — Windows, macOS, and Linux
|
|
@@ -48,9 +51,10 @@ unity-mcp-cli install-plugin /path/to/unity/project
|
|
|
48
51
|
- [Quick Start](#quick-start)
|
|
49
52
|
- [Commands](#commands)
|
|
50
53
|
- [`create-project`](#create-project) — Create a new Unity project
|
|
51
|
-
- [`install-
|
|
54
|
+
- [`install-unity`](#install-unity) — Install Unity Editor via Unity Hub
|
|
52
55
|
- [`open`](#open) — Open a Unity project in the Editor
|
|
53
56
|
- [`install-plugin`](#install-plugin) — Install Unity-MCP plugin into a project
|
|
57
|
+
- [`remove-plugin`](#remove-plugin) — Remove Unity-MCP plugin from a project
|
|
54
58
|
- [`configure`](#configure) — Configure MCP tools, prompts, and resources
|
|
55
59
|
- [`connect`](#connect) — Launch Unity with MCP connection
|
|
56
60
|
- [Full Automation Example](#full-automation-example)
|
|
@@ -81,12 +85,12 @@ npx unity-mcp-cli create-project ./MyGame --unity 2022.3.62f1
|
|
|
81
85
|
|
|
82
86
|

|
|
83
87
|
|
|
84
|
-
## `install-
|
|
88
|
+
## `install-unity`
|
|
85
89
|
|
|
86
90
|
Install a Unity Editor version via Unity Hub CLI.
|
|
87
91
|
|
|
88
92
|
```bash
|
|
89
|
-
npx unity-mcp-cli install-
|
|
93
|
+
npx unity-mcp-cli install-unity --version 6000.3.1f1
|
|
90
94
|
```
|
|
91
95
|
|
|
92
96
|
| Option | Required | Description |
|
|
@@ -99,7 +103,7 @@ If neither option is provided, the command lists currently installed editors.
|
|
|
99
103
|
**Example — install the editor version that a project needs:**
|
|
100
104
|
|
|
101
105
|
```bash
|
|
102
|
-
npx unity-mcp-cli install-
|
|
106
|
+
npx unity-mcp-cli install-unity --path ./MyGame
|
|
103
107
|
```
|
|
104
108
|
|
|
105
109
|

|
|
@@ -149,6 +153,27 @@ npx unity-mcp-cli install-plugin ./MyGame --plugin-version 0.51.6
|
|
|
149
153
|
|
|
150
154
|

|
|
151
155
|
|
|
156
|
+
## `remove-plugin`
|
|
157
|
+
|
|
158
|
+
Remove the Unity-MCP plugin from a Unity project's `Packages/manifest.json`.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx unity-mcp-cli remove-plugin ./MyGame
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
| Option | Required | Description |
|
|
165
|
+
|---|---|---|
|
|
166
|
+
| `[path]` | Yes | Path to the Unity project (positional or `--path`) |
|
|
167
|
+
|
|
168
|
+
This command:
|
|
169
|
+
1. Removes `com.ivanmurzak.unity.mcp` from `dependencies`
|
|
170
|
+
2. **Preserves scoped registries and scopes** — other packages may depend on them
|
|
171
|
+
3. **No-op** if the plugin is not installed
|
|
172
|
+
|
|
173
|
+
> After running this command, open the project in Unity Editor to apply the change.
|
|
174
|
+
|
|
175
|
+

|
|
176
|
+
|
|
152
177
|
## `configure`
|
|
153
178
|
|
|
154
179
|
Configure MCP tools, prompts, and resources in `UserSettings/AI-Game-Developer-Config.json`.
|
|
@@ -212,7 +237,7 @@ npx unity-mcp-cli connect \
|
|
|
212
237
|
| `--auth <option>` | `UNITY_MCP_AUTH_OPTION` | No | Auth mode: `none` or `required` |
|
|
213
238
|
| `--tools <names>` | `UNITY_MCP_TOOLS` | No | Comma-separated list of tools to enable |
|
|
214
239
|
| `--transport <method>` | `UNITY_MCP_TRANSPORT` | No | Transport method: `streamableHttp` or `stdio` |
|
|
215
|
-
| `--start-server
|
|
240
|
+
| `--start-server <value>` | `UNITY_MCP_START_SERVER` | No | Set to `true` or `false` to control MCP server auto-start in Unity Editor (only applies to `streamableHttp` transport) |
|
|
216
241
|
| `--unity <version>` | — | No | Specific Unity Editor version to use (defaults to version from project settings, falls back to highest installed) |
|
|
217
242
|
|
|
218
243
|
This command launches the Unity Editor with the corresponding `UNITY_MCP_*` environment variables so the plugin picks them up automatically on startup. The environment variables override values from the project's `UserSettings/AI-Game-Developer-Config.json` config file at runtime.
|
|
@@ -236,7 +261,7 @@ npx unity-mcp-cli connect \
|
|
|
236
261
|
--path ./MyGame \
|
|
237
262
|
--url http://localhost:8080 \
|
|
238
263
|
--transport stdio \
|
|
239
|
-
--
|
|
264
|
+
--start-server false
|
|
240
265
|
```
|
|
241
266
|
|
|
242
267
|
**Example — connect with streamableHttp and auto-start server:**
|
|
@@ -246,7 +271,7 @@ npx unity-mcp-cli connect \
|
|
|
246
271
|
--path ./MyGame \
|
|
247
272
|
--url http://localhost:8080 \
|
|
248
273
|
--transport streamableHttp \
|
|
249
|
-
--start-server \
|
|
274
|
+
--start-server true \
|
|
250
275
|
--keep-connected
|
|
251
276
|
```
|
|
252
277
|
|
|
@@ -303,4 +328,6 @@ Commands that manage editors or create projects use the **Unity Hub CLI** (`--he
|
|
|
303
328
|
- **macOS** — downloads the DMG, mounts it, and copies `Unity Hub.app` to `/Applications`
|
|
304
329
|
- **Linux** — downloads `UnityHub.AppImage` to `~/Applications/`
|
|
305
330
|
|
|
331
|
+
> For the full Unity-MCP project documentation, see the [main README](https://github.com/IvanMurzak/Unity-MCP/blob/main/README.md).
|
|
332
|
+
|
|
306
333
|

|
|
@@ -2,6 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { getOrCreateConfig, writeConfig, updateFeatures } from '../utils/config.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
function parseCommaSeparated(value) {
|
|
6
7
|
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
7
8
|
}
|
|
@@ -25,30 +26,30 @@ export const configureCommand = new Command('configure')
|
|
|
25
26
|
.action(async (positionalPath, options) => {
|
|
26
27
|
const resolvedPath = positionalPath ?? options.path;
|
|
27
28
|
if (!resolvedPath) {
|
|
28
|
-
|
|
29
|
+
ui.error('Path is required. Usage: unity-mcp-cli configure <path> or --path <path>');
|
|
29
30
|
process.exit(1);
|
|
30
31
|
}
|
|
31
32
|
const projectPath = path.resolve(resolvedPath);
|
|
32
33
|
if (!fs.existsSync(projectPath)) {
|
|
33
|
-
|
|
34
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
34
35
|
process.exit(1);
|
|
35
36
|
}
|
|
36
37
|
const config = getOrCreateConfig(projectPath);
|
|
37
38
|
if (options.list) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const printFeatures = (
|
|
39
|
+
ui.heading('Current configuration');
|
|
40
|
+
ui.label('Host', config.host ?? 'not set');
|
|
41
|
+
ui.label('Keep Connected', String(config.keepConnected ?? false));
|
|
42
|
+
ui.label('Transport', config.transportMethod ?? 'streamableHttp');
|
|
43
|
+
ui.label('Auth', config.authOption ?? 'none');
|
|
44
|
+
const printFeatures = (featureLabel, features) => {
|
|
44
45
|
if (!features || features.length === 0) {
|
|
45
|
-
|
|
46
|
+
ui.heading(featureLabel);
|
|
47
|
+
ui.info('(none configured - all enabled by default)');
|
|
46
48
|
return;
|
|
47
49
|
}
|
|
48
|
-
|
|
50
|
+
ui.heading(featureLabel);
|
|
49
51
|
for (const f of features) {
|
|
50
|
-
|
|
51
|
-
console.log(` ${status} ${f.name}`);
|
|
52
|
+
ui.featureRow(f.name, f.enabled);
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
55
|
printFeatures('Tools', config.tools);
|
|
@@ -84,6 +85,6 @@ export const configureCommand = new Command('configure')
|
|
|
84
85
|
});
|
|
85
86
|
}
|
|
86
87
|
writeConfig(projectPath, config);
|
|
87
|
-
|
|
88
|
+
ui.success('Configuration updated successfully.');
|
|
88
89
|
});
|
|
89
90
|
//# sourceMappingURL=configure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.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,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/connect.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { findEditorPath, getProjectEditorVersion, launchEditor } from '../utils/unity-editor.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export const connectCommand = new Command('connect')
|
|
6
7
|
.description('Open Unity and enforce MCP connection to a specified server URL via environment variables')
|
|
7
8
|
.requiredOption('--path <path>', 'Path to the Unity project')
|
|
@@ -16,7 +17,7 @@ export const connectCommand = new Command('connect')
|
|
|
16
17
|
.action(async (options) => {
|
|
17
18
|
const projectPath = path.resolve(options.path);
|
|
18
19
|
if (!fs.existsSync(projectPath)) {
|
|
19
|
-
|
|
20
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
20
21
|
process.exit(1);
|
|
21
22
|
}
|
|
22
23
|
// Determine editor version
|
|
@@ -24,15 +25,18 @@ export const connectCommand = new Command('connect')
|
|
|
24
25
|
if (!version) {
|
|
25
26
|
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
26
27
|
if (version) {
|
|
27
|
-
|
|
28
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
const spinner = ui.startSpinner('Locating Unity Editor...');
|
|
30
32
|
const editorPath = await findEditorPath(version);
|
|
31
33
|
if (!editorPath) {
|
|
34
|
+
spinner.fail('Unity Editor not found');
|
|
32
35
|
const versionMsg = version ? ` (version ${version})` : '';
|
|
33
|
-
|
|
36
|
+
ui.error(`Unity Editor not found${versionMsg}. Install it with: unity-mcp-cli install-unity --version <version>`);
|
|
34
37
|
process.exit(1);
|
|
35
38
|
}
|
|
39
|
+
spinner.succeed('Unity Editor located');
|
|
36
40
|
// Build environment variables for MCP connection
|
|
37
41
|
const env = {
|
|
38
42
|
UNITY_MCP_HOST: options.url,
|
|
@@ -48,14 +52,14 @@ export const connectCommand = new Command('connect')
|
|
|
48
52
|
}
|
|
49
53
|
if (options.auth) {
|
|
50
54
|
if (options.auth !== 'none' && options.auth !== 'required') {
|
|
51
|
-
|
|
55
|
+
ui.error('--auth must be "none" or "required"');
|
|
52
56
|
process.exit(1);
|
|
53
57
|
}
|
|
54
58
|
env['UNITY_MCP_AUTH_OPTION'] = options.auth;
|
|
55
59
|
}
|
|
56
60
|
if (options.transport) {
|
|
57
61
|
if (options.transport !== 'streamableHttp' && options.transport !== 'stdio') {
|
|
58
|
-
|
|
62
|
+
ui.error('--transport must be "streamableHttp" or "stdio"');
|
|
59
63
|
process.exit(1);
|
|
60
64
|
}
|
|
61
65
|
env['UNITY_MCP_TRANSPORT'] = options.transport;
|
|
@@ -63,19 +67,21 @@ export const connectCommand = new Command('connect')
|
|
|
63
67
|
if (options.startServer !== undefined) {
|
|
64
68
|
const val = options.startServer.toLowerCase();
|
|
65
69
|
if (val !== 'true' && val !== 'false') {
|
|
66
|
-
|
|
70
|
+
ui.error('--start-server must be "true" or "false"');
|
|
67
71
|
process.exit(1);
|
|
68
72
|
}
|
|
69
73
|
env['UNITY_MCP_START_SERVER'] = val;
|
|
70
74
|
}
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
ui.heading('Connection Details');
|
|
76
|
+
ui.label('MCP Server', options.url);
|
|
77
|
+
ui.label('Project', projectPath);
|
|
78
|
+
ui.label('Editor', editorPath);
|
|
79
|
+
ui.heading('Environment Variables');
|
|
73
80
|
for (const [key, value] of Object.entries(env)) {
|
|
74
81
|
const display = key === 'UNITY_MCP_TOKEN' ? '***' : value;
|
|
75
|
-
|
|
82
|
+
ui.label(key, display);
|
|
76
83
|
}
|
|
77
|
-
|
|
78
|
-
console.log(`Using editor: ${editorPath}`);
|
|
84
|
+
ui.divider();
|
|
79
85
|
launchEditor(editorPath, projectPath, env);
|
|
80
86
|
});
|
|
81
87
|
//# sourceMappingURL=connect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.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,uBAAuB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { ensureUnityHub, createProject, listInstalledEditors, findHighestEditor } from '../utils/unity-hub.js';
|
|
4
|
+
import * as ui from '../utils/ui.js';
|
|
4
5
|
export const createProjectCommand = new Command('create-project')
|
|
5
6
|
.description('Create a new Unity project')
|
|
6
7
|
.argument('[path]', 'Path where the project will be created')
|
|
@@ -9,21 +10,29 @@ export const createProjectCommand = new Command('create-project')
|
|
|
9
10
|
.action(async (positionalPath, options) => {
|
|
10
11
|
const resolvedPath = positionalPath ?? options.path;
|
|
11
12
|
if (!resolvedPath) {
|
|
12
|
-
|
|
13
|
+
ui.error('Path is required. Usage: unity-mcp-cli create-project <path> or --path <path>');
|
|
13
14
|
process.exit(1);
|
|
14
15
|
}
|
|
15
|
-
const
|
|
16
|
+
const spinner = ui.startSpinner('Locating Unity Hub...');
|
|
17
|
+
let hubPath;
|
|
18
|
+
try {
|
|
19
|
+
hubPath = await ensureUnityHub();
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
spinner.fail('Failed to locate Unity Hub');
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
spinner.succeed('Unity Hub located');
|
|
16
26
|
let editorVersion = options.unity;
|
|
17
27
|
if (!editorVersion) {
|
|
18
|
-
// Use the highest installed editor version
|
|
19
28
|
const editors = listInstalledEditors(hubPath);
|
|
20
29
|
if (editors.length === 0) {
|
|
21
|
-
|
|
30
|
+
ui.error('No Unity editors installed. Install one with: unity-mcp-cli install-unity --version <version>');
|
|
22
31
|
process.exit(1);
|
|
23
32
|
}
|
|
24
33
|
const highest = findHighestEditor(editors);
|
|
25
34
|
editorVersion = highest.version;
|
|
26
|
-
|
|
35
|
+
ui.info(`No Unity version specified, using highest installed: ${editorVersion}`);
|
|
27
36
|
}
|
|
28
37
|
const projectPath = path.resolve(resolvedPath);
|
|
29
38
|
createProject(hubPath, projectPath, editorVersion);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/commands/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/commands/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/G,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;KACjE,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0C,EAAE,EAAE;IAC/F,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IACzD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAErC,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IAElC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,EAAE,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;YAC1G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC,wDAAwD,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { addPluginToManifest, resolveLatestVersion } from '../utils/manifest.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export const installPluginCommand = new Command('install-plugin')
|
|
6
7
|
.description('Install Unity-MCP plugin into a Unity project')
|
|
7
8
|
.argument('[path]', 'Path to the Unity project')
|
|
@@ -10,23 +11,25 @@ export const installPluginCommand = new Command('install-plugin')
|
|
|
10
11
|
.action(async (positionalPath, options) => {
|
|
11
12
|
const resolvedPath = positionalPath ?? options.path;
|
|
12
13
|
if (!resolvedPath) {
|
|
13
|
-
|
|
14
|
+
ui.error('Path is required. Usage: unity-mcp-cli install-plugin <path> or --path <path>');
|
|
14
15
|
process.exit(1);
|
|
15
16
|
}
|
|
16
17
|
const projectPath = path.resolve(resolvedPath);
|
|
17
18
|
// Validate project exists
|
|
18
19
|
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
19
20
|
if (!fs.existsSync(manifestPath)) {
|
|
20
|
-
|
|
21
|
+
ui.error(`Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
|
|
21
22
|
process.exit(1);
|
|
22
23
|
}
|
|
23
24
|
// Resolve version
|
|
24
25
|
let version = options.pluginVersion;
|
|
25
26
|
if (!version) {
|
|
27
|
+
const spinner = ui.startSpinner('Resolving latest plugin version...');
|
|
26
28
|
version = await resolveLatestVersion();
|
|
29
|
+
spinner.succeed(`Resolved plugin version: ${version}`);
|
|
27
30
|
}
|
|
28
|
-
|
|
31
|
+
ui.info(`Installing Unity-MCP plugin v${version} into: ${projectPath}`);
|
|
29
32
|
addPluginToManifest(projectPath, version);
|
|
30
|
-
|
|
33
|
+
ui.success('Done! Open the project in Unity Editor to complete installation.');
|
|
31
34
|
});
|
|
32
35
|
//# sourceMappingURL=install-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.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,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.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,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,+CAA+C,CAAC;KAC5D,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,4BAA4B,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAAkD,EAAE,EAAE;IACvG,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,+DAA+D,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC;QACtE,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,gCAAgC,OAAO,UAAU,WAAW,EAAE,CAAC,CAAC;IACxE,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC"}
|
|
@@ -3,36 +3,45 @@ import * as path from 'path';
|
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { ensureUnityHub, installEditor, listInstalledEditors } from '../utils/unity-hub.js';
|
|
5
5
|
import { getProjectEditorVersion } from '../utils/unity-editor.js';
|
|
6
|
-
|
|
6
|
+
import * as ui from '../utils/ui.js';
|
|
7
|
+
export const installUnityCommand = new Command('install-unity')
|
|
7
8
|
.description('Install Unity Editor via Unity Hub')
|
|
8
9
|
.option('--version <version>', 'Unity Editor version to install')
|
|
9
10
|
.option('--path <path>', 'Read version from an existing Unity project')
|
|
10
11
|
.action(async (options) => {
|
|
11
|
-
const
|
|
12
|
+
const spinner = ui.startSpinner('Locating Unity Hub...');
|
|
13
|
+
let hubPath;
|
|
14
|
+
try {
|
|
15
|
+
hubPath = await ensureUnityHub();
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
spinner.fail('Failed to locate Unity Hub');
|
|
19
|
+
throw err;
|
|
20
|
+
}
|
|
21
|
+
spinner.succeed('Unity Hub located');
|
|
12
22
|
let version = options.version;
|
|
13
23
|
if (!version && options.path) {
|
|
14
24
|
const projectPath = path.resolve(options.path);
|
|
15
25
|
if (!fs.existsSync(projectPath)) {
|
|
16
|
-
|
|
26
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
17
27
|
process.exit(1);
|
|
18
28
|
}
|
|
19
29
|
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
20
30
|
if (version) {
|
|
21
|
-
|
|
31
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
22
32
|
}
|
|
23
33
|
else {
|
|
24
|
-
|
|
34
|
+
ui.error('Could not read editor version from ProjectSettings/ProjectVersion.txt');
|
|
25
35
|
process.exit(1);
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
if (!version) {
|
|
29
|
-
|
|
30
|
-
// Show installed editors as a hint
|
|
39
|
+
ui.error('Please specify --version or --path');
|
|
31
40
|
const editors = listInstalledEditors(hubPath);
|
|
32
41
|
if (editors.length > 0) {
|
|
33
|
-
|
|
42
|
+
ui.heading('Currently installed editors:');
|
|
34
43
|
for (const editor of editors) {
|
|
35
|
-
|
|
44
|
+
ui.label(editor.version, editor.path);
|
|
36
45
|
}
|
|
37
46
|
}
|
|
38
47
|
process.exit(1);
|
|
@@ -41,9 +50,10 @@ export const installEditorCommand = new Command('install-editor')
|
|
|
41
50
|
const editors = listInstalledEditors(hubPath);
|
|
42
51
|
const alreadyInstalled = editors.find((e) => e.version === version);
|
|
43
52
|
if (alreadyInstalled) {
|
|
44
|
-
|
|
53
|
+
ui.success(`Unity Editor ${version} is already installed at: ${alreadyInstalled.path}`);
|
|
45
54
|
return;
|
|
46
55
|
}
|
|
47
56
|
installEditor(hubPath, version);
|
|
57
|
+
ui.success(`Unity Editor ${version} installed successfully`);
|
|
48
58
|
});
|
|
49
|
-
//# sourceMappingURL=install-
|
|
59
|
+
//# sourceMappingURL=install-unity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-unity.js","sourceRoot":"","sources":["../../src/commands/install-unity.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/open.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { findEditorPath, getProjectEditorVersion, launchEditor } from '../utils/unity-editor.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export const openCommand = new Command('open')
|
|
6
7
|
.description('Open a Unity project in Unity Editor')
|
|
7
8
|
.argument('[path]', 'Path to the Unity project')
|
|
@@ -10,12 +11,12 @@ export const openCommand = new Command('open')
|
|
|
10
11
|
.action(async (positionalPath, options) => {
|
|
11
12
|
const resolvedPath = positionalPath ?? options.path;
|
|
12
13
|
if (!resolvedPath) {
|
|
13
|
-
|
|
14
|
+
ui.error('Path is required. Usage: unity-mcp-cli open <path> or --path <path>');
|
|
14
15
|
process.exit(1);
|
|
15
16
|
}
|
|
16
17
|
const projectPath = path.resolve(resolvedPath);
|
|
17
18
|
if (!fs.existsSync(projectPath)) {
|
|
18
|
-
|
|
19
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
19
20
|
process.exit(1);
|
|
20
21
|
}
|
|
21
22
|
// Determine editor version
|
|
@@ -23,17 +24,20 @@ export const openCommand = new Command('open')
|
|
|
23
24
|
if (!version) {
|
|
24
25
|
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
25
26
|
if (version) {
|
|
26
|
-
|
|
27
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
30
|
+
const spinner = ui.startSpinner('Locating Unity Editor...');
|
|
29
31
|
const editorPath = await findEditorPath(version);
|
|
30
32
|
if (!editorPath) {
|
|
33
|
+
spinner.fail('Unity Editor not found');
|
|
31
34
|
const versionMsg = version ? ` (version ${version})` : '';
|
|
32
|
-
|
|
35
|
+
ui.error(`Unity Editor not found${versionMsg}. Install it with: unity-mcp-cli install-unity --version <version>`);
|
|
33
36
|
process.exit(1);
|
|
34
37
|
}
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
spinner.succeed('Unity Editor located');
|
|
39
|
+
ui.label('Project', projectPath);
|
|
40
|
+
ui.label('Editor', editorPath);
|
|
37
41
|
launchEditor(editorPath, projectPath);
|
|
38
42
|
});
|
|
39
43
|
//# sourceMappingURL=open.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.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,uBAAuB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.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,uBAAuB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0C,EAAE,EAAE;IAC/F,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,IAAI,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,EAAE,CAAC,KAAK,CAAC,yBAAyB,UAAU,oEAAoE,CAAC,CAAC;QAClH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAExC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/B,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { removePluginFromManifest } from '../utils/manifest.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
6
|
+
export const removePluginCommand = new Command('remove-plugin')
|
|
7
|
+
.description('Remove Unity-MCP plugin from a Unity project')
|
|
8
|
+
.argument('[path]', 'Path to the Unity project')
|
|
9
|
+
.option('--path <path>', 'Path to the Unity project')
|
|
10
|
+
.action(async (positionalPath, options) => {
|
|
11
|
+
const resolvedPath = positionalPath ?? options.path;
|
|
12
|
+
if (!resolvedPath) {
|
|
13
|
+
ui.error('Path is required. Usage: unity-mcp-cli remove-plugin <path> or --path <path>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const projectPath = path.resolve(resolvedPath);
|
|
17
|
+
// Validate project exists
|
|
18
|
+
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
19
|
+
if (!fs.existsSync(manifestPath)) {
|
|
20
|
+
ui.error(`Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
ui.info(`Removing Unity-MCP plugin from: ${projectPath}`);
|
|
24
|
+
removePluginFromManifest(projectPath);
|
|
25
|
+
ui.success('Done!');
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=remove-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-plugin.js","sourceRoot":"","sources":["../../src/commands/remove-plugin.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,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KAC5D,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0B,EAAE,EAAE;IAC/E,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,+DAA+D,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IAC1D,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACtC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
|