unity-mcp-cli 0.60.0 → 0.62.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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Open a URL in the user's default browser.
3
+ * Silently ignores errors — the URL is always shown in the terminal as a fallback.
4
+ */
5
+ export declare function openBrowser(url: string): void;
@@ -0,0 +1,32 @@
1
+ // Copyright (c) 2024 Ivan Murzak. All rights reserved.
2
+ // Licensed under the Apache License, Version 2.0.
3
+ import { execFile } from 'child_process';
4
+ import { verbose } from './ui.js';
5
+ /**
6
+ * Open a URL in the user's default browser.
7
+ * Silently ignores errors — the URL is always shown in the terminal as a fallback.
8
+ */
9
+ export function openBrowser(url) {
10
+ const platform = process.platform;
11
+ let cmd;
12
+ let args;
13
+ if (platform === 'darwin') {
14
+ cmd = 'open';
15
+ args = [url];
16
+ }
17
+ else if (platform === 'win32') {
18
+ cmd = 'cmd';
19
+ args = ['/c', 'start', '', url];
20
+ }
21
+ else {
22
+ cmd = 'xdg-open';
23
+ args = [url];
24
+ }
25
+ verbose(`Opening browser: ${cmd} ${args.join(' ')}`);
26
+ execFile(cmd, args, (err) => {
27
+ if (err) {
28
+ verbose(`Failed to open browser: ${err.message}`);
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/utils/browser.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,kDAAkD;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,GAAW,CAAC;IAChB,IAAI,IAAc,CAAC;IAEnB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,GAAG,GAAG,MAAM,CAAC;QACb,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,GAAG,GAAG,KAAK,CAAC;QACZ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,UAAU,CAAC;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,OAAO,CAAC,oBAAoB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Run the cloud device-auth flow: initiate, display code, open browser, poll,
3
+ * and persist the token to the project config.
4
+ *
5
+ * Returns the access token on success, or null on failure (errors are printed).
6
+ */
7
+ export declare function runCloudLogin(projectPath: string): Promise<string | null>;
@@ -0,0 +1,56 @@
1
+ // Copyright (c) 2024 Ivan Murzak. All rights reserved.
2
+ // Licensed under the Apache License, Version 2.0.
3
+ import * as ui from './ui.js';
4
+ import { readConfig, writeConfig, CLOUD_SERVER_BASE_URL } from './config.js';
5
+ import { deviceAuthFlow } from './auth.js';
6
+ import { openBrowser } from './browser.js';
7
+ /**
8
+ * Run the cloud device-auth flow: initiate, display code, open browser, poll,
9
+ * and persist the token to the project config.
10
+ *
11
+ * Returns the access token on success, or null on failure (errors are printed).
12
+ */
13
+ export async function runCloudLogin(projectPath) {
14
+ let spinner;
15
+ try {
16
+ const result = await deviceAuthFlow(CLOUD_SERVER_BASE_URL, 'Unity-MCP CLI', {
17
+ onUserCode: (userCode, verificationUrl) => {
18
+ ui.info('Open this URL to authorize:');
19
+ console.log();
20
+ console.log(` ${verificationUrl}`);
21
+ console.log();
22
+ ui.label('Code', userCode);
23
+ openBrowser(verificationUrl);
24
+ },
25
+ onPolling: () => {
26
+ spinner = ui.startSpinner('Waiting for authorization...');
27
+ },
28
+ });
29
+ if (result.success) {
30
+ spinner?.success('Authorized');
31
+ const config = readConfig(projectPath) ?? {};
32
+ const updatedConfig = {
33
+ ...config,
34
+ cloudToken: result.accessToken,
35
+ connectionMode: 'Cloud',
36
+ };
37
+ writeConfig(projectPath, updatedConfig);
38
+ return result.accessToken;
39
+ }
40
+ spinner?.stop();
41
+ ui.error(result.message);
42
+ return null;
43
+ }
44
+ catch (err) {
45
+ spinner?.stop();
46
+ const message = err instanceof Error ? err.message : String(err);
47
+ if (message.includes('ECONNREFUSED') || message.includes('fetch failed')) {
48
+ ui.error(`Cannot reach cloud server at ${CLOUD_SERVER_BASE_URL}`);
49
+ }
50
+ else {
51
+ ui.error(`Authentication failed: ${message}`);
52
+ }
53
+ return null;
54
+ }
55
+ }
56
+ //# sourceMappingURL=cloud-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-login.js","sourceRoot":"","sources":["../../src/utils/cloud-login.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,kDAAkD;AAElD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,IAAI,OAAuD,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,qBAAqB,EACrB,eAAe,EACf;YACE,UAAU,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE;gBACxC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAe,EAAE,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC3B,WAAW,CAAC,eAAe,CAAC,CAAC;YAC/B,CAAC;YACD,SAAS,EAAE,GAAG,EAAE;gBACd,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;YAC5D,CAAC;SACF,CACF,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG;gBACpB,GAAG,MAAM;gBACT,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,cAAc,EAAE,OAAgB;aACjC,CAAC;YACF,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAExC,OAAO,MAAM,CAAC,WAAW,CAAC;QAC5B,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,CAAC;QAChB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACzE,EAAE,CAAC,KAAK,CAAC,gCAAgC,qBAAqB,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -54,6 +54,7 @@ export declare function updateFeatures(config: UnityConnectionConfig, featureTyp
54
54
  * of the ConnectionMode enum.
55
55
  */
56
56
  export declare function isCloudMode(config: UnityConnectionConfig): boolean;
57
+ export declare const CLOUD_SERVER_BASE_URL = "https://ai-game.dev";
57
58
  export declare const CLOUD_SERVER_URL = "https://ai-game.dev/mcp";
58
59
  /**
59
60
  * Resolve the server URL and auth token from a project config based on connectionMode.
@@ -123,6 +123,7 @@ export function isCloudMode(config) {
123
123
  const mode = config.connectionMode;
124
124
  return mode === 'Cloud' || mode === 1;
125
125
  }
126
+ export const CLOUD_SERVER_BASE_URL = 'https://ai-game.dev';
126
127
  export const CLOUD_SERVER_URL = 'https://ai-game.dev/mcp';
127
128
  /**
128
129
  * Resolve the server URL and auth token from a project config based on connectionMode.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import { isNewerVersion, isValidVersion } from './semver.js';
3
4
  import * as ui from './ui.js';
4
5
  const PACKAGE_ID = 'com.ivanmurzak.unity.mcp';
5
6
  const REGISTRY_NAME = 'package.openupm.com';
@@ -61,18 +62,8 @@ export function shouldUpdateVersion(currentVersion, newVersion) {
61
62
  if (nonSemverPrefixes.some((prefix) => currentVersion.startsWith(prefix))) {
62
63
  return false;
63
64
  }
64
- const numericOnly = /^\d+(\.\d+)*$/;
65
- if (numericOnly.test(currentVersion) && numericOnly.test(newVersion)) {
66
- const currentParts = currentVersion.split('.').map(Number);
67
- const targetParts = newVersion.split('.').map(Number);
68
- const len = Math.max(currentParts.length, targetParts.length);
69
- for (let i = 0; i < len; i++) {
70
- const c = currentParts[i] ?? 0;
71
- const t = targetParts[i] ?? 0;
72
- if (t !== c)
73
- return t > c;
74
- }
75
- return false;
65
+ if (isValidVersion(currentVersion) && isValidVersion(newVersion)) {
66
+ return isNewerVersion(currentVersion, newVersion);
76
67
  }
77
68
  return newVersion.toLowerCase() > currentVersion.toLowerCase();
78
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Returns true if the string is a valid numeric semver (e.g. "1.2.3"). */
2
+ export declare function isValidVersion(version: string): boolean;
3
+ /** Returns true if `latest` is strictly greater than `current`. */
4
+ export declare function isNewerVersion(current: string, latest: string): boolean;
@@ -0,0 +1,25 @@
1
+ const SEMVER_NUMERIC = /^\d+(\.\d+)*$/;
2
+ /** Returns true if the string is a valid numeric semver (e.g. "1.2.3"). */
3
+ export function isValidVersion(version) {
4
+ return SEMVER_NUMERIC.test(version);
5
+ }
6
+ /** Returns -1 if a < b, 0 if equal, 1 if a > b. */
7
+ function compareVersions(a, b) {
8
+ const pa = a.split('.').map(Number);
9
+ const pb = b.split('.').map(Number);
10
+ const len = Math.max(pa.length, pb.length);
11
+ for (let i = 0; i < len; i++) {
12
+ const na = pa[i] ?? 0;
13
+ const nb = pb[i] ?? 0;
14
+ if (na < nb)
15
+ return -1;
16
+ if (na > nb)
17
+ return 1;
18
+ }
19
+ return 0;
20
+ }
21
+ /** Returns true if `latest` is strictly greater than `current`. */
22
+ export function isNewerVersion(current, latest) {
23
+ return compareVersions(current, latest) < 0;
24
+ }
25
+ //# sourceMappingURL=semver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/utils/semver.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,eAAe,CAAC;AAEvC,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,mDAAmD;AACnD,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,19 @@
1
+ interface UpdateInfo {
2
+ current: string;
3
+ latest: string;
4
+ }
5
+ /** Fetch the latest version string from the npm registry. */
6
+ export declare function fetchLatestVersion(): Promise<string>;
7
+ /**
8
+ * Check if a newer version is available on npm.
9
+ * Returns update info if available, null otherwise.
10
+ * Never throws — all errors are silently caught.
11
+ */
12
+ export declare function checkForUpdate(currentVersion: string): Promise<UpdateInfo | null>;
13
+ /** Format the "update available" message with chalk styling. */
14
+ export declare function formatUpdateAvailable(current: string, latest: string): string;
15
+ /** Print a styled update notification to stderr (does not interfere with stdout piping). */
16
+ export declare function printUpdateNotification(current: string, latest: string): void;
17
+ /** Returns true if the CLI was likely invoked via npx. */
18
+ export declare function isRunningViaNpx(): boolean;
19
+ export {};
@@ -0,0 +1,92 @@
1
+ import { homedir } from 'os';
2
+ import { join } from 'path';
3
+ import { readFileSync, writeFileSync } from 'fs';
4
+ import chalk from 'chalk';
5
+ import { isNewerVersion, isValidVersion } from './semver.js';
6
+ const PACKAGE_NAME = 'unity-mcp-cli';
7
+ const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
8
+ const CACHE_FILE = join(homedir(), '.unity-mcp-cli-update.json');
9
+ const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
10
+ const FETCH_TIMEOUT_MS = 3000;
11
+ /** Fetch the latest version string from the npm registry. */
12
+ export async function fetchLatestVersion() {
13
+ const response = await fetch(NPM_REGISTRY_URL, {
14
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
15
+ headers: { 'Accept': 'application/json' },
16
+ });
17
+ if (!response.ok) {
18
+ throw new Error(`npm registry returned ${response.status}`);
19
+ }
20
+ const data = (await response.json());
21
+ if (!data.version) {
22
+ throw new Error('No version field in registry response');
23
+ }
24
+ return data.version;
25
+ }
26
+ function readCache() {
27
+ try {
28
+ const raw = readFileSync(CACHE_FILE, 'utf-8');
29
+ const parsed = JSON.parse(raw);
30
+ if (parsed.latestVersion && typeof parsed.lastChecked === 'number' && isValidVersion(parsed.latestVersion)) {
31
+ return parsed;
32
+ }
33
+ }
34
+ catch {
35
+ // Cache missing or corrupt — ignore
36
+ }
37
+ return null;
38
+ }
39
+ function writeCache(latestVersion) {
40
+ try {
41
+ const data = { latestVersion, lastChecked: Date.now() };
42
+ writeFileSync(CACHE_FILE, JSON.stringify(data), 'utf-8');
43
+ }
44
+ catch {
45
+ // Non-critical — ignore write failures
46
+ }
47
+ }
48
+ /**
49
+ * Check if a newer version is available on npm.
50
+ * Returns update info if available, null otherwise.
51
+ * Never throws — all errors are silently caught.
52
+ */
53
+ export async function checkForUpdate(currentVersion) {
54
+ try {
55
+ // Check cache first
56
+ const cache = readCache();
57
+ if (cache && Date.now() - cache.lastChecked < CACHE_TTL_MS) {
58
+ if (isNewerVersion(currentVersion, cache.latestVersion)) {
59
+ return { current: currentVersion, latest: cache.latestVersion };
60
+ }
61
+ return null;
62
+ }
63
+ // Fetch fresh
64
+ const latest = await fetchLatestVersion();
65
+ writeCache(latest);
66
+ if (isNewerVersion(currentVersion, latest)) {
67
+ return { current: currentVersion, latest };
68
+ }
69
+ }
70
+ catch {
71
+ // Best-effort — never disrupt CLI usage
72
+ }
73
+ return null;
74
+ }
75
+ /** Format the "update available" message with chalk styling. */
76
+ export function formatUpdateAvailable(current, latest) {
77
+ return `Update available: ${chalk.dim(current)} → ${chalk.green(latest)}`;
78
+ }
79
+ /** Print a styled update notification to stderr (does not interfere with stdout piping). */
80
+ export function printUpdateNotification(current, latest) {
81
+ console.error();
82
+ console.error(chalk.yellow(` ${formatUpdateAvailable(current, latest)}`));
83
+ console.error(chalk.dim(` Run ${chalk.cyan(`npm i -g ${PACKAGE_NAME}`)} to update`));
84
+ console.error();
85
+ }
86
+ /** Returns true if the CLI was likely invoked via npx. */
87
+ export function isRunningViaNpx() {
88
+ const execPath = process.env['npm_execpath'] ?? '';
89
+ const npmCommand = process.env['npm_command'] ?? '';
90
+ return execPath.includes('npx') || npmCommand === 'exec';
91
+ }
92
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"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"}
package/docs/README.es.md CHANGED
@@ -66,14 +66,14 @@ unity-mcp-cli create-project ./MyUnityProject # │ codex
66
66
  # 2. Install "AI Game Developer" in Unity project # │ gemini │
67
67
  unity-mcp-cli install-plugin ./MyUnityProject # │ github-copilot-cli │
68
68
  # │ kilo-code │
69
- # 3. Setup Skills for Claude Code # │ open-code │
70
- unity-mcp-cli setup-skills claude-code ./MyUnityProject # │ rider-junie │
69
+ # 3. Login to cloud server # │ open-code │
70
+ unity-mcp-cli login ./MyUnityProject # │ rider-junie │
71
71
  # │ unity-ai │
72
- # (Optional) Setup MCP for Claude Code # │ vs-copilot │
73
- unity-mcp-cli setup-mcp claude-code ./MyUnityProject # │ vscode-copilot │
72
+ # 4. Open Unity project (auto-connects and generates skills) │ vs-copilot │
73
+ unity-mcp-cli open ./MyUnityProject # │ vscode-copilot │
74
74
  # └────────────────────┘
75
- # (It depends...) Open Unity project
76
- unity-mcp-cli open ./MyUnityProject
75
+ # 5. Wait for Unity Editor to be ready
76
+ unity-mcp-cli wait-for-ready ./MyUnityProject
77
77
  ```
78
78
 
79
79
  O ejecuta cualquier comando al instante con `npx` — sin necesidad de instalacion global:
@@ -88,8 +88,9 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
88
88
 
89
89
  # Contenidos
90
90
 
91
- - [Inicio rapido](#quick-start)
92
- - [Comandos](#commands)
91
+ - [Inicio rapido](#inicio-rapido)
92
+ - [Contenidos](#contenidos)
93
+ - [Comandos](#comandos)
93
94
  - [`configure`](#configure)
94
95
  - [`create-project`](#create-project)
95
96
  - [`install-plugin`](#install-plugin)
@@ -101,13 +102,13 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
101
102
  - [`setup-skills`](#setup-skills)
102
103
  - [`remove-plugin`](#remove-plugin)
103
104
  - [`status`](#status)
104
- - [Opciones globales](#global-options)
105
- - [Ejemplo de automatizacion completa](#full-automation-example)
106
- - [Como funciona](#how-it-works)
107
- - [Puerto determinista](#deterministic-port)
108
- - [Instalacion del plugin](#plugin-installation)
109
- - [Archivo de configuracion](#configuration-file)
110
- - [Integracion con Unity Hub](#unity-hub-integration)
105
+ - [Opciones globales](#opciones-globales)
106
+ - [Ejemplo de automatizacion completa](#ejemplo-de-automatizacion-completa)
107
+ - [Como funciona](#como-funciona)
108
+ - [Puerto determinista](#puerto-determinista)
109
+ - [Instalacion del plugin](#instalacion-del-plugin)
110
+ - [Archivo de configuracion](#archivo-de-configuracion)
111
+ - [Integracion con Unity Hub](#integracion-con-unity-hub)
111
112
 
112
113
  ![AI Game Developer — Unity SKILLS and MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
113
114
 
@@ -488,21 +489,16 @@ unity-mcp-cli install-plugin ./MyAIGame
488
489
  # 3. Enable all MCP tools
489
490
  unity-mcp-cli configure ./MyAIGame --enable-all-tools
490
491
 
491
- # 4. Setup Skills for Claude Code (requires Unity Editor running)
492
- unity-mcp-cli setup-skills claude-code ./MyAIGame
492
+ # 4. Login to cloud server (authenticates and saves token)
493
+ unity-mcp-cli login ./MyAIGame
493
494
 
494
- # 5. Configure Claude Code MCP integration
495
- unity-mcp-cli setup-mcp claude-code ./MyAIGame
495
+ # 5. Open the project (auto-connects and generates skills for claude-code)
496
+ unity-mcp-cli open ./MyAIGame
496
497
 
497
- # 6. Open the project with MCP connection
498
- unity-mcp-cli open ./MyAIGame \
499
- --url http://localhost:8080 \
500
- --keep-connected
501
-
502
- # 7. Wait for Unity Editor and MCP server to be ready
498
+ # 6. Wait for Unity Editor and MCP server to be ready
503
499
  unity-mcp-cli wait-for-ready ./MyAIGame
504
500
 
505
- # 8. Run tests to verify everything works
501
+ # 7. Run tests to verify everything works
506
502
  unity-mcp-cli run-tool tests-run ./MyAIGame --input '{"testMode":"EditMode"}'
507
503
  ```
508
504
 
package/docs/README.ja.md CHANGED
@@ -66,14 +66,14 @@ unity-mcp-cli create-project ./MyUnityProject # │ codex
66
66
  # 2. Install "AI Game Developer" in Unity project # │ gemini │
67
67
  unity-mcp-cli install-plugin ./MyUnityProject # │ github-copilot-cli │
68
68
  # │ kilo-code │
69
- # 3. Setup Skills for Claude Code # │ open-code │
70
- unity-mcp-cli setup-skills claude-code ./MyUnityProject # │ rider-junie │
69
+ # 3. Login to cloud server # │ open-code │
70
+ unity-mcp-cli login ./MyUnityProject # │ rider-junie │
71
71
  # │ unity-ai │
72
- # (Optional) Setup MCP for Claude Code # │ vs-copilot │
73
- unity-mcp-cli setup-mcp claude-code ./MyUnityProject # │ vscode-copilot │
72
+ # 4. Open Unity project (auto-connects and generates skills) │ vs-copilot │
73
+ unity-mcp-cli open ./MyUnityProject # │ vscode-copilot │
74
74
  # └────────────────────┘
75
- # (It depends...) Open Unity project
76
- unity-mcp-cli open ./MyUnityProject
75
+ # 5. Wait for Unity Editor to be ready
76
+ unity-mcp-cli wait-for-ready ./MyUnityProject
77
77
  ```
78
78
 
79
79
  または`npx`で任意のコマンドを即座に実行できます — グローバルインストールは不要です:
@@ -88,8 +88,9 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
88
88
 
89
89
  # 目次
90
90
 
91
- - [クイックスタート](#quick-start)
92
- - [コマンド](#commands)
91
+ - [クイックスタート](#クイックスタート)
92
+ - [目次](#目次)
93
+ - [コマンド](#コマンド)
93
94
  - [`configure`](#configure)
94
95
  - [`create-project`](#create-project)
95
96
  - [`install-plugin`](#install-plugin)
@@ -101,13 +102,13 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
101
102
  - [`setup-skills`](#setup-skills)
102
103
  - [`remove-plugin`](#remove-plugin)
103
104
  - [`status`](#status)
104
- - [グローバルオプション](#global-options)
105
- - [完全自動化の例](#full-automation-example)
106
- - [仕組み](#how-it-works)
107
- - [決定論的ポート](#deterministic-port)
108
- - [プラグインのインストール](#plugin-installation)
109
- - [設定ファイル](#configuration-file)
110
- - [Unity Hub連携](#unity-hub-integration)
105
+ - [グローバルオプション](#グローバルオプション)
106
+ - [完全自動化の例](#完全自動化の例)
107
+ - [仕組み](#仕組み)
108
+ - [決定論的ポート](#決定論的ポート)
109
+ - [プラグインのインストール](#プラグインのインストール)
110
+ - [設定ファイル](#設定ファイル)
111
+ - [Unity Hub連携](#unity-hub連携)
111
112
 
112
113
  ![AI Game Developer — Unity SKILLS and MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
113
114
 
@@ -488,21 +489,16 @@ unity-mcp-cli install-plugin ./MyAIGame
488
489
  # 3. Enable all MCP tools
489
490
  unity-mcp-cli configure ./MyAIGame --enable-all-tools
490
491
 
491
- # 4. Setup Skills for Claude Code (requires Unity Editor running)
492
- unity-mcp-cli setup-skills claude-code ./MyAIGame
492
+ # 4. Login to cloud server (authenticates and saves token)
493
+ unity-mcp-cli login ./MyAIGame
493
494
 
494
- # 5. Configure Claude Code MCP integration
495
- unity-mcp-cli setup-mcp claude-code ./MyAIGame
495
+ # 5. Open the project (auto-connects and generates skills for claude-code)
496
+ unity-mcp-cli open ./MyAIGame
496
497
 
497
- # 6. Open the project with MCP connection
498
- unity-mcp-cli open ./MyAIGame \
499
- --url http://localhost:8080 \
500
- --keep-connected
501
-
502
- # 7. Wait for Unity Editor and MCP server to be ready
498
+ # 6. Wait for Unity Editor and MCP server to be ready
503
499
  unity-mcp-cli wait-for-ready ./MyAIGame
504
500
 
505
- # 8. Run tests to verify everything works
501
+ # 7. Run tests to verify everything works
506
502
  unity-mcp-cli run-tool tests-run ./MyAIGame --input '{"testMode":"EditMode"}'
507
503
  ```
508
504
 
@@ -66,14 +66,14 @@ unity-mcp-cli create-project ./MyUnityProject # │ codex
66
66
  # 2. Install "AI Game Developer" in Unity project # │ gemini │
67
67
  unity-mcp-cli install-plugin ./MyUnityProject # │ github-copilot-cli │
68
68
  # │ kilo-code │
69
- # 3. Setup Skills for Claude Code # │ open-code │
70
- unity-mcp-cli setup-skills claude-code ./MyUnityProject # │ rider-junie │
69
+ # 3. Login to cloud server # │ open-code │
70
+ unity-mcp-cli login ./MyUnityProject # │ rider-junie │
71
71
  # │ unity-ai │
72
- # (Optional) Setup MCP for Claude Code # │ vs-copilot │
73
- unity-mcp-cli setup-mcp claude-code ./MyUnityProject # │ vscode-copilot │
72
+ # 4. Open Unity project (auto-connects and generates skills) │ vs-copilot │
73
+ unity-mcp-cli open ./MyUnityProject # │ vscode-copilot │
74
74
  # └────────────────────┘
75
- # (It depends...) Open Unity project
76
- unity-mcp-cli open ./MyUnityProject
75
+ # 5. Wait for Unity Editor to be ready
76
+ unity-mcp-cli wait-for-ready ./MyUnityProject
77
77
  ```
78
78
 
79
79
  或使用 `npx` 即时运行任何命令 — 无需全局安装:
@@ -88,8 +88,9 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
88
88
 
89
89
  # 目录
90
90
 
91
- - [快速开始](#quick-start)
92
- - [命令](#commands)
91
+ - [快速开始](#快速开始)
92
+ - [目录](#目录)
93
+ - [命令](#命令)
93
94
  - [`configure`](#configure)
94
95
  - [`create-project`](#create-project)
95
96
  - [`install-plugin`](#install-plugin)
@@ -101,13 +102,13 @@ npx unity-mcp-cli install-plugin /path/to/unity/project
101
102
  - [`setup-skills`](#setup-skills)
102
103
  - [`remove-plugin`](#remove-plugin)
103
104
  - [`status`](#status)
104
- - [全局选项](#global-options)
105
- - [完整自动化示例](#full-automation-example)
106
- - [工作原理](#how-it-works)
107
- - [确定性端口](#deterministic-port)
108
- - [插件安装](#plugin-installation)
109
- - [配置文件](#configuration-file)
110
- - [Unity Hub 集成](#unity-hub-integration)
105
+ - [全局选项](#全局选项)
106
+ - [完整自动化示例](#完整自动化示例)
107
+ - [工作原理](#工作原理)
108
+ - [确定性端口](#确定性端口)
109
+ - [插件安装](#插件安装)
110
+ - [配置文件](#配置文件)
111
+ - [Unity Hub 集成](#unity-hub-集成)
111
112
 
112
113
  ![AI Game Developer — Unity SKILLS and MCP](https://github.com/IvanMurzak/Unity-MCP/blob/main/docs/img/promo/hazzard-divider.svg?raw=true)
113
114
 
@@ -488,21 +489,16 @@ unity-mcp-cli install-plugin ./MyAIGame
488
489
  # 3. Enable all MCP tools
489
490
  unity-mcp-cli configure ./MyAIGame --enable-all-tools
490
491
 
491
- # 4. Setup Skills for Claude Code (requires Unity Editor running)
492
- unity-mcp-cli setup-skills claude-code ./MyAIGame
492
+ # 4. Login to cloud server (authenticates and saves token)
493
+ unity-mcp-cli login ./MyAIGame
493
494
 
494
- # 5. Configure Claude Code MCP integration
495
- unity-mcp-cli setup-mcp claude-code ./MyAIGame
495
+ # 5. Open the project (auto-connects and generates skills for claude-code)
496
+ unity-mcp-cli open ./MyAIGame
496
497
 
497
- # 6. Open the project with MCP connection
498
- unity-mcp-cli open ./MyAIGame \
499
- --url http://localhost:8080 \
500
- --keep-connected
501
-
502
- # 7. Wait for Unity Editor and MCP server to be ready
498
+ # 6. Wait for Unity Editor and MCP server to be ready
503
499
  unity-mcp-cli wait-for-ready ./MyAIGame
504
500
 
505
- # 8. Run tests to verify everything works
501
+ # 7. Run tests to verify everything works
506
502
  unity-mcp-cli run-tool tests-run ./MyAIGame --input '{"testMode":"EditMode"}'
507
503
  ```
508
504
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unity-mcp-cli",
3
- "version": "0.60.0",
3
+ "version": "0.62.0",
4
4
  "description": "Cross-platform CLI tool for AI Game Developer (Skills & MCP). Full AI develop and test loop. Efficient token usage, advanced tools. Creates Unity project, installs plugins, configures tools, and manages HTTP connection with Unity Editor and a game made with Unity. Works with Claude Code, Gemini, Copilot, Cursor and any other absolutely for free.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",