godot-cli 0.19.0 → 0.20.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.
- package/CHANGELOG.md +7 -0
- package/README.md +18 -9
- package/dist/lib/setup-mcp.d.ts +2 -2
- package/dist/lib/setup-mcp.js +3 -3
- package/dist/lib/setup-mcp.js.map +1 -1
- package/dist/utils/addon-deps.js +1 -1
- package/dist/utils/connection.d.ts +9 -11
- package/dist/utils/connection.js +86 -37
- package/dist/utils/connection.js.map +1 -1
- package/dist/utils/probe.d.ts +8 -2
- package/dist/utils/probe.js +8 -2
- package/dist/utils/probe.js.map +1 -1
- package/dist/utils/server-source.d.ts +1 -1
- package/dist/utils/server-source.js +1 -1
- package/dist/utils/skills.d.ts +45 -1
- package/dist/utils/skills.js +197 -29
- package/dist/utils/skills.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,13 @@ All notable changes to `godot-cli` are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
- **BREAKING (requires a matching addon).** `status` and `wait-for-ready` now probe
|
|
8
|
+
`/api/system-tools/ping` instead of `/api/tools/ping`. The addon's `ping` became a **System** tool
|
|
9
|
+
(owner ruling 2026-07-25, for parity with Unity-MCP), and `McpPluginBuilder` partitions tools by
|
|
10
|
+
`ToolType` into two disjoint registries — so `ping` no longer answers on the standard tool route at
|
|
11
|
+
all. Pair this CLI with an addon of the same release; against an OLDER addon (where `ping` is still
|
|
12
|
+
Standard) both commands report a healthy editor as unreachable. There is deliberately no fallback
|
|
13
|
+
probe, matching the Unity CLI, which has always probed the system route.
|
|
7
14
|
- `install-extension <id> [path]` — install a Godot-MCP **extension** (an optional AI-tool-family package)
|
|
8
15
|
into a Godot C# project: resolve `<id>` from the shared catalog, add/update its `<PackageReference>` in
|
|
9
16
|
the project `.csproj` (added when absent, version-bumped only when newer, no-op when up to date), then
|
package/README.md
CHANGED
|
@@ -140,16 +140,24 @@ Building first guarantees the assembly is present when the addon is instantiated
|
|
|
140
140
|
|
|
141
141
|
### Server URL resolution (`run-tool` / `status` / `wait-for-ready`)
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
resolved as:
|
|
143
|
+
The server base URL a tool call POSTs to (`<base>/api/tools/<name>`, or
|
|
144
|
+
`<base>/api/system-tools/<name>` for system tools — `status` / `wait-for-ready` probe the system
|
|
145
|
+
tool `ping`) is resolved as:
|
|
146
146
|
|
|
147
147
|
1. `--url <url>` (explicit override).
|
|
148
148
|
2. `GODOT_MCP_HOST` env (Custom-mode host).
|
|
149
|
-
3. `GODOT_MCP_CLOUD_URL` env
|
|
150
|
-
4.
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
3. `GODOT_MCP_CLOUD_URL` env → the cloud **`/mcp` hub** URL (`/mcp` is appended if absent).
|
|
150
|
+
4. `GODOT_MCP_CONNECTION_MODE=Cloud` → the default cloud hub `https://ai-game.dev/mcp`.
|
|
151
|
+
5. The **enrolled project marker** (`.ai-game-dev/project.json` `serverTarget`, written by
|
|
152
|
+
`install-plugin --enroll`): a hosted target routes to its `/mcp` hub, a `localhost` target is used
|
|
153
|
+
verbatim. This makes an **enrolled cloud project reachable with zero env config** — the persisted
|
|
154
|
+
cloud credential (project store, then `~/.ai-game-dev/credentials.json`) is used automatically.
|
|
155
|
+
6. Local fallback: `http://localhost:<derived-port>`, the deterministic v2 project-path port the
|
|
156
|
+
editor addon binds locally (a marker `portOverride` wins over the hash-derived port).
|
|
157
|
+
|
|
158
|
+
The cloud paths carry the `/mcp` hub segment so the request reaches the hub rather than the cloud
|
|
159
|
+
backend (which serves no `/api/tools/*`). Pass `--url http://localhost:<port>` to target a
|
|
160
|
+
local/self-hosted server explicitly.
|
|
153
161
|
|
|
154
162
|

|
|
155
163
|
|
|
@@ -192,8 +200,9 @@ The command writes a `SKILL.md`-per-tool-family directory (a `godot-mcp/` overvi
|
|
|
192
200
|
families. It is **idempotent** — re-running rewrites the same bytes.
|
|
193
201
|
|
|
194
202
|
Unlike the Unity CLI — which POSTs to a running editor's `/api/system-tools/unity-skill-generate`
|
|
195
|
-
endpoint — the Godot CLI generates the files **locally** from a built-in catalog
|
|
196
|
-
|
|
203
|
+
endpoint — the Godot CLI generates the files **locally** from a built-in catalog, so no server and no
|
|
204
|
+
running editor are required. (The addon now *also* exposes `godot-skill-generate` on
|
|
205
|
+
`/api/system-tools/`, but that path needs a booted editor; local generation is the server-less one.) (The addon
|
|
197
206
|
*additionally* auto-generates skills in-process on plugin boot via
|
|
198
207
|
`GodotMcpConnection.Start` → `GenerateSkillFilesIfNeeded`; the CLI command is the
|
|
199
208
|
server-less, scriptable path that does not need a live editor.)
|
package/dist/lib/setup-mcp.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CLOUD_MCP_URL
|
|
1
|
+
import { CLOUD_MCP_URL } from '../utils/connection.js';
|
|
2
2
|
import type { SetupMcpOptions, SetupMcpResult } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Decide whether `setup-mcp` writes a static `Authorization: Bearer` header for a
|
|
@@ -41,4 +41,4 @@ export declare function shouldWriteAuthHeader(input: {
|
|
|
41
41
|
export declare function setupMcp(opts: SetupMcpOptions): Promise<SetupMcpResult>;
|
|
42
42
|
/** List every agent id known to `setupMcp`. */
|
|
43
43
|
export declare function listAgentIds(): string[];
|
|
44
|
-
export { CLOUD_MCP_URL
|
|
44
|
+
export { CLOUD_MCP_URL };
|
package/dist/lib/setup-mcp.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import { pinUrl } from '@baizor/gamedev-cli-core';
|
|
3
|
-
import { CLOUD_MCP_URL,
|
|
3
|
+
import { CLOUD_MCP_URL, ENV_HOST, ENV_TOKEN, MCP_HUB_PATH, } from '../utils/connection.js';
|
|
4
4
|
import { getAgentById, getAgentIds, writeJsonAgentConfig, writeTomlAgentConfig, MCP_SERVER_NAME, } from '../utils/agents.js';
|
|
5
5
|
import { derivePinV2 } from '../utils/project-identity.js';
|
|
6
6
|
import { emitProgress } from './progress.js';
|
|
@@ -191,6 +191,6 @@ export async function setupMcp(opts) {
|
|
|
191
191
|
export function listAgentIds() {
|
|
192
192
|
return getAgentIds();
|
|
193
193
|
}
|
|
194
|
-
// Re-export the
|
|
195
|
-
export { CLOUD_MCP_URL
|
|
194
|
+
// Re-export the constant so the CLI command can surface the default URL in help.
|
|
195
|
+
export { CLOUD_MCP_URL };
|
|
196
196
|
//# sourceMappingURL=setup-mcp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/lib/setup-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/lib/setup-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD;;;GAGG;AACH,SAAS,YAAY,CAAC,GAAuB;IAC3C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,MAA0B;IACrD,MAAM,IAAI,GAAG,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,aAAa,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,OAAO,CAAC;IACjE,OAAO,OAAO,GAAG,YAAY,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAIrC;IACC,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAED,wGAAwG;AACxG,SAAS,eAAe,CAAC,WAAmB,EAAE,UAAkB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAqB;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,KAAK,EAAE,IAAI,KAAK,CAAC,6CAA6C,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aAC1F,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,KAAK,EAAE,IAAI,KAAK,CACd,mBAAmB,IAAI,CAAC,OAAO,2BAA2B,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrF;aACF,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,IAAI,WAAmB,CAAC;QACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/E,CAAC;YACD,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,eAAe,KAAK,CAAC,IAAI,QAAQ,WAAW,EAAE;SACxD,CAAC,CAAC;QAEH,4FAA4F;QAC5F,iGAAiG;QACjG,6FAA6F;QAC7F,8FAA8F;QAC9F,gGAAgG;QAChG,iGAAiG;QACjG,gGAAgG;QAChG,kBAAkB;QAClB,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAC3F,6EAA6E;QAC7E,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,gFAAgF;QAChF,8EAA8E;QAC9E,6EAA6E;QAC7E,oDAAoD;QACpD,MAAM,YAAY,GAAG,qBAAqB,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YAC1B,aAAa;YACb,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAEjE,6EAA6E;QAC7E,+EAA+E;QAC/E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,8EAA8E;QAC9E,yEAAyE;QACzE,MAAM,eAAe,GAAG,OAAO,CAAE,KAA+B,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,eAAe,IAAI,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CACX,4EAA4E,UAAU,IAAI;gBACxF,mEAAmE,SAAS,WAAW;gBACvF,0FAA0F,CAC7F,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YAClC,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QACjG,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5B,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,SAAS,UAAU,EAAE;YAC9B,YAAY,EAAE,UAAU;SACzB,CAAC,CAAC;QAEH,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAC;QAEpG,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,UAAU;YACV,SAAS;YACT,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY;IAC1B,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC;AAED,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/utils/addon-deps.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export const ADDON_PACKAGE_REFERENCES = [
|
|
22
22
|
{ id: 'com.IvanMurzak.ReflectorNet', version: '5.3.2' },
|
|
23
|
-
{ id: 'com.IvanMurzak.McpPlugin', version: '7.
|
|
23
|
+
{ id: 'com.IvanMurzak.McpPlugin', version: '7.5.0' },
|
|
24
24
|
];
|
|
25
25
|
/**
|
|
26
26
|
* The exact `<EmbeddedResource>`s the consumer's project `.csproj` needs, single-sourced
|
|
@@ -4,8 +4,6 @@ export declare const DEFAULT_CLOUD_BASE_URL = "https://ai-game.dev";
|
|
|
4
4
|
export declare const MCP_HUB_PATH = "/mcp";
|
|
5
5
|
/** Resolved cloud MCP-client URL (base + /mcp). */
|
|
6
6
|
export declare const CLOUD_MCP_URL = "https://ai-game.dev/mcp";
|
|
7
|
-
/** Default custom-mode host (GodotMcpConfig.DefaultCustomHost). */
|
|
8
|
-
export declare const DEFAULT_CUSTOM_HOST = "http://localhost:8080";
|
|
9
7
|
export declare const ENV_CLOUD_URL = "GODOT_MCP_CLOUD_URL";
|
|
10
8
|
export declare const ENV_HOST = "GODOT_MCP_HOST";
|
|
11
9
|
export declare const ENV_TOKEN = "GODOT_MCP_TOKEN";
|
|
@@ -35,19 +33,19 @@ export declare function resolveAndValidateProjectPath(positionalPath: string | u
|
|
|
35
33
|
* Resolve the MCP server base URL + auth token for direct-tool-call requests
|
|
36
34
|
* (the `<base>/api/tools/<name>` HTTP API exposed by a Godot-MCP server).
|
|
37
35
|
*
|
|
38
|
-
* URL priority
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* 4. default custom host (http://localhost:8080)
|
|
36
|
+
* URL priority — see {@link resolveTargetUrl}. A cloud target carries the `/mcp`
|
|
37
|
+
* hub segment so `<base>/api/tools/<name>` reaches the hub (not the 404'ing
|
|
38
|
+
* backend); a local target is the addon's v2 derived port (or the enrolled
|
|
39
|
+
* marker's recorded localhost target).
|
|
43
40
|
*
|
|
44
41
|
* Token priority:
|
|
45
42
|
* 1. --token flag (explicit override)
|
|
46
43
|
* 2. GODOT_MCP_TOKEN env
|
|
47
|
-
* 3. persisted cloud token (
|
|
48
|
-
* `.godot-mcp/credentials.json` (a `--project`
|
|
49
|
-
* store `~/.ai-game-dev/credentials.json`
|
|
50
|
-
* sign-once-per-machine credential is picked
|
|
44
|
+
* 3. persisted cloud token (cloud targets only — env Cloud mode OR an enrolled
|
|
45
|
+
* hosted marker) — the project-local `.godot-mcp/credentials.json` (a `--project`
|
|
46
|
+
* login) first, then the shared machine store `~/.ai-game-dev/credentials.json`
|
|
47
|
+
* (a default `godot-cli login`), so a sign-once-per-machine credential is picked
|
|
48
|
+
* up here too. An enrolled cloud project therefore authenticates with zero env config.
|
|
51
49
|
*/
|
|
52
50
|
export declare function resolveConnection(projectPath: string, options: ConnectionOptions): {
|
|
53
51
|
url: string;
|
package/dist/utils/connection.js
CHANGED
|
@@ -4,6 +4,8 @@ import { verbose } from './ui.js';
|
|
|
4
4
|
import * as ui from './ui.js';
|
|
5
5
|
import { readCloudToken } from './credentials.js';
|
|
6
6
|
import { readMachineAccessToken } from './machine-credentials.js';
|
|
7
|
+
import { deriveProjectIdentityV2 } from './project-identity.js';
|
|
8
|
+
import { readProjectMarker, isLocalhostUrl } from './project-marker.js';
|
|
7
9
|
// --- Godot MCP connection constants (mirror addons/godot_mcp GodotMcpConfig). ---
|
|
8
10
|
/** Default hosted cloud base URL (GodotMcpConfig.DefaultCloudBaseUrl). */
|
|
9
11
|
export const DEFAULT_CLOUD_BASE_URL = 'https://ai-game.dev';
|
|
@@ -11,8 +13,6 @@ export const DEFAULT_CLOUD_BASE_URL = 'https://ai-game.dev';
|
|
|
11
13
|
export const MCP_HUB_PATH = '/mcp';
|
|
12
14
|
/** Resolved cloud MCP-client URL (base + /mcp). */
|
|
13
15
|
export const CLOUD_MCP_URL = `${DEFAULT_CLOUD_BASE_URL}${MCP_HUB_PATH}`;
|
|
14
|
-
/** Default custom-mode host (GodotMcpConfig.DefaultCustomHost). */
|
|
15
|
-
export const DEFAULT_CUSTOM_HOST = 'http://localhost:8080';
|
|
16
16
|
// --- Environment-variable names the addon reads (GodotMcpConfig EnvX consts). ---
|
|
17
17
|
export const ENV_CLOUD_URL = 'GODOT_MCP_CLOUD_URL';
|
|
18
18
|
export const ENV_HOST = 'GODOT_MCP_HOST';
|
|
@@ -73,50 +73,99 @@ function isCloudMode() {
|
|
|
73
73
|
const mode = normalizeEnv(process.env[ENV_CONNECTION_MODE]);
|
|
74
74
|
return mode !== undefined && mode.toLowerCase() === 'cloud';
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Normalize a cloud/hub base URL so it ends in exactly one `/mcp` hub segment
|
|
78
|
+
* (mirrors `setup-mcp`'s `resolveMcpClientUrl`). The mcp-server's REST
|
|
79
|
+
* direct-tool API is reachable ONLY under the `/mcp`-prefixed route — nginx maps
|
|
80
|
+
* `^/mcp(/|$)` to the mcp-server (stripping `/mcp`) while `/api` alone goes to the
|
|
81
|
+
* cloud backend — so a cloud base that LOSES `/mcp` sends `<base>/api/tools/<name>`
|
|
82
|
+
* to the backend, which 404s (defect A). Trailing slash trimmed; an already-`/mcp`
|
|
83
|
+
* base is left as-is (case-insensitive, idempotent).
|
|
84
|
+
*/
|
|
85
|
+
function ensureMcpHubPath(baseUrl) {
|
|
86
|
+
const trimmed = baseUrl.replace(/\/$/, '');
|
|
87
|
+
if (trimmed.toLowerCase().endsWith(MCP_HUB_PATH))
|
|
88
|
+
return trimmed;
|
|
89
|
+
return trimmed + MCP_HUB_PATH;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the base URL a direct-tool-call POSTs to, plus whether that target is
|
|
93
|
+
* the cloud hub. Priority (first match wins):
|
|
94
|
+
* 1. `--url` flag — explicit override, verbatim (trailing slash trimmed).
|
|
95
|
+
* 2. `GODOT_MCP_HOST` env — an explicit Custom-mode host, verbatim.
|
|
96
|
+
* 3. `GODOT_MCP_CLOUD_URL` env — a cloud base, normalized to its `/mcp` hub URL (fix A).
|
|
97
|
+
* 4. `GODOT_MCP_CONNECTION_MODE=Cloud` — the default hosted `/mcp` hub (fix A).
|
|
98
|
+
* 5. Enrolled project marker (`.ai-game-dev/project.json` `serverTarget`) — the
|
|
99
|
+
* ZERO-env-config path (fix B): a hosted target routes to its `/mcp` hub (cloud,
|
|
100
|
+
* so an enrolled project reaches the cloud with no env var set); a localhost
|
|
101
|
+
* target is used verbatim (the derived port enrollment recorded).
|
|
102
|
+
* 6. Local fallback — `http://localhost:<v2-derived-port>`, the deterministic port
|
|
103
|
+
* the addon binds locally (fix B; replaces the dead `http://localhost:8080`). An
|
|
104
|
+
* explicit marker `portOverride` still wins over the hash-derived port.
|
|
105
|
+
*/
|
|
106
|
+
function resolveTargetUrl(projectPath, options) {
|
|
107
|
+
if (options.url) {
|
|
108
|
+
const url = options.url.replace(/\/$/, '');
|
|
109
|
+
verbose(`Using explicit --url: ${url}`);
|
|
110
|
+
return { url, isCloud: false };
|
|
111
|
+
}
|
|
112
|
+
const envHost = normalizeEnv(process.env[ENV_HOST]);
|
|
113
|
+
if (envHost) {
|
|
114
|
+
const url = envHost.replace(/\/$/, '');
|
|
115
|
+
verbose(`Using ${ENV_HOST}: ${url}`);
|
|
116
|
+
return { url, isCloud: false };
|
|
117
|
+
}
|
|
118
|
+
const envCloud = normalizeEnv(process.env[ENV_CLOUD_URL]);
|
|
119
|
+
if (envCloud) {
|
|
120
|
+
const url = ensureMcpHubPath(envCloud);
|
|
121
|
+
verbose(`Using ${ENV_CLOUD_URL} hub URL: ${url}`);
|
|
122
|
+
return { url, isCloud: true };
|
|
123
|
+
}
|
|
124
|
+
if (isCloudMode()) {
|
|
125
|
+
verbose(`Using default cloud hub URL: ${CLOUD_MCP_URL}`);
|
|
126
|
+
return { url: CLOUD_MCP_URL, isCloud: true };
|
|
127
|
+
}
|
|
128
|
+
// The enrolled marker (and any port override) is read once here — it backs both
|
|
129
|
+
// the zero-config marker target (5) and the derived-port fallback (6).
|
|
130
|
+
const marker = readProjectMarker(projectPath);
|
|
131
|
+
const rawTarget = marker?.serverTarget;
|
|
132
|
+
const serverTarget = typeof rawTarget === 'string' && rawTarget.trim().length > 0 ? rawTarget.trim() : undefined;
|
|
133
|
+
if (serverTarget) {
|
|
134
|
+
if (isLocalhostUrl(serverTarget)) {
|
|
135
|
+
const url = serverTarget.replace(/\/$/, '');
|
|
136
|
+
verbose(`Using enrolled marker localhost target: ${url}`);
|
|
137
|
+
return { url, isCloud: false };
|
|
138
|
+
}
|
|
139
|
+
const url = ensureMcpHubPath(serverTarget);
|
|
140
|
+
verbose(`Using enrolled marker cloud hub URL: ${url}`);
|
|
141
|
+
return { url, isCloud: true };
|
|
142
|
+
}
|
|
143
|
+
const portOverride = typeof marker?.portOverride === 'number' ? marker.portOverride : null;
|
|
144
|
+
const { port } = deriveProjectIdentityV2(projectPath, portOverride);
|
|
145
|
+
const url = `http://localhost:${port}`;
|
|
146
|
+
verbose(`Using derived local port fallback: ${url}`);
|
|
147
|
+
return { url, isCloud: false };
|
|
148
|
+
}
|
|
76
149
|
/**
|
|
77
150
|
* Resolve the MCP server base URL + auth token for direct-tool-call requests
|
|
78
151
|
* (the `<base>/api/tools/<name>` HTTP API exposed by a Godot-MCP server).
|
|
79
152
|
*
|
|
80
|
-
* URL priority
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* 4. default custom host (http://localhost:8080)
|
|
153
|
+
* URL priority — see {@link resolveTargetUrl}. A cloud target carries the `/mcp`
|
|
154
|
+
* hub segment so `<base>/api/tools/<name>` reaches the hub (not the 404'ing
|
|
155
|
+
* backend); a local target is the addon's v2 derived port (or the enrolled
|
|
156
|
+
* marker's recorded localhost target).
|
|
85
157
|
*
|
|
86
158
|
* Token priority:
|
|
87
159
|
* 1. --token flag (explicit override)
|
|
88
160
|
* 2. GODOT_MCP_TOKEN env
|
|
89
|
-
* 3. persisted cloud token (
|
|
90
|
-
* `.godot-mcp/credentials.json` (a `--project`
|
|
91
|
-
* store `~/.ai-game-dev/credentials.json`
|
|
92
|
-
* sign-once-per-machine credential is picked
|
|
161
|
+
* 3. persisted cloud token (cloud targets only — env Cloud mode OR an enrolled
|
|
162
|
+
* hosted marker) — the project-local `.godot-mcp/credentials.json` (a `--project`
|
|
163
|
+
* login) first, then the shared machine store `~/.ai-game-dev/credentials.json`
|
|
164
|
+
* (a default `godot-cli login`), so a sign-once-per-machine credential is picked
|
|
165
|
+
* up here too. An enrolled cloud project therefore authenticates with zero env config.
|
|
93
166
|
*/
|
|
94
167
|
export function resolveConnection(projectPath, options) {
|
|
95
|
-
|
|
96
|
-
if (options.url) {
|
|
97
|
-
url = options.url.replace(/\/$/, '');
|
|
98
|
-
verbose(`Using explicit --url: ${url}`);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const envHost = normalizeEnv(process.env[ENV_HOST]);
|
|
102
|
-
const envCloud = normalizeEnv(process.env[ENV_CLOUD_URL]);
|
|
103
|
-
if (envHost) {
|
|
104
|
-
url = envHost.replace(/\/$/, '');
|
|
105
|
-
verbose(`Using ${ENV_HOST}: ${url}`);
|
|
106
|
-
}
|
|
107
|
-
else if (envCloud) {
|
|
108
|
-
url = envCloud.replace(new RegExp(`${MCP_HUB_PATH}$`), '').replace(/\/$/, '');
|
|
109
|
-
verbose(`Using ${ENV_CLOUD_URL} base: ${url}`);
|
|
110
|
-
}
|
|
111
|
-
else if (isCloudMode()) {
|
|
112
|
-
url = DEFAULT_CLOUD_BASE_URL;
|
|
113
|
-
verbose(`Using default cloud base URL: ${url}`);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
url = DEFAULT_CUSTOM_HOST;
|
|
117
|
-
verbose(`Using default custom host: ${url}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
168
|
+
const { url, isCloud } = resolveTargetUrl(projectPath, options);
|
|
120
169
|
let token = options.token ?? normalizeEnv(process.env[ENV_TOKEN]);
|
|
121
170
|
if (options.token) {
|
|
122
171
|
verbose('Using explicit --token');
|
|
@@ -124,7 +173,7 @@ export function resolveConnection(projectPath, options) {
|
|
|
124
173
|
else if (token) {
|
|
125
174
|
verbose(`Using ${ENV_TOKEN}`);
|
|
126
175
|
}
|
|
127
|
-
else if (
|
|
176
|
+
else if (isCloud) {
|
|
128
177
|
const persisted = readCloudToken(projectPath) ?? readMachineAccessToken();
|
|
129
178
|
if (persisted) {
|
|
130
179
|
token = persisted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/probe.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const PING_ENDPOINT = "/api/tools/ping";
|
|
1
|
+
export declare const PING_ENDPOINT = "/api/system-tools/ping";
|
|
2
2
|
export interface ProbeSuccess {
|
|
3
3
|
ok: true;
|
|
4
4
|
baseUrl: string;
|
|
@@ -10,9 +10,15 @@ export interface ProbeFailure {
|
|
|
10
10
|
}
|
|
11
11
|
export type ProbeResult = ProbeSuccess | ProbeFailure;
|
|
12
12
|
/**
|
|
13
|
-
* Probe a Godot-MCP server's ping endpoint (`<base>/api/tools/ping`).
|
|
13
|
+
* Probe a Godot-MCP server's ping endpoint (`<base>/api/system-tools/ping`).
|
|
14
14
|
* Returns a structured result. The `ping` tool is registered by the
|
|
15
15
|
* `Tool_Ping` family (pure-managed, no editor required), so a connected
|
|
16
16
|
* plugin responds `{ "structured": { "result": "pong" } }`.
|
|
17
|
+
*
|
|
18
|
+
* `ping` is a SYSTEM tool (`ToolType = McpToolType.System`, matching Unity-MCP
|
|
19
|
+
* per the owner ruling of 2026-07-25), and `McpPluginBuilder` partitions tools
|
|
20
|
+
* by `ToolType` into two DISJOINT registries — so it is reachable ONLY on the
|
|
21
|
+
* `/api/system-tools/` surface, never on `/api/tools/`. Both surfaces return the
|
|
22
|
+
* same `{ status, structured }` envelope, so only the route differs.
|
|
17
23
|
*/
|
|
18
24
|
export declare function probe(baseUrl: string, headers: Record<string, string>, timeoutMs: number): Promise<ProbeResult>;
|
package/dist/utils/probe.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { verbose } from './ui.js';
|
|
2
|
-
export const PING_ENDPOINT = '/api/tools/ping';
|
|
2
|
+
export const PING_ENDPOINT = '/api/system-tools/ping';
|
|
3
3
|
/**
|
|
4
|
-
* Probe a Godot-MCP server's ping endpoint (`<base>/api/tools/ping`).
|
|
4
|
+
* Probe a Godot-MCP server's ping endpoint (`<base>/api/system-tools/ping`).
|
|
5
5
|
* Returns a structured result. The `ping` tool is registered by the
|
|
6
6
|
* `Tool_Ping` family (pure-managed, no editor required), so a connected
|
|
7
7
|
* plugin responds `{ "structured": { "result": "pong" } }`.
|
|
8
|
+
*
|
|
9
|
+
* `ping` is a SYSTEM tool (`ToolType = McpToolType.System`, matching Unity-MCP
|
|
10
|
+
* per the owner ruling of 2026-07-25), and `McpPluginBuilder` partitions tools
|
|
11
|
+
* by `ToolType` into two DISJOINT registries — so it is reachable ONLY on the
|
|
12
|
+
* `/api/system-tools/` surface, never on `/api/tools/`. Both surfaces return the
|
|
13
|
+
* same `{ status, structured }` envelope, so only the route differs.
|
|
8
14
|
*/
|
|
9
15
|
export async function probe(baseUrl, headers, timeoutMs) {
|
|
10
16
|
const endpoint = `${baseUrl}${PING_ENDPOINT}`;
|
package/dist/utils/probe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/utils/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/utils/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAetD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAAe,EACf,OAA+B,EAC/B,SAAiB;IAEjB,MAAM,QAAQ,GAAG,GAAG,OAAO,GAAG,aAAa,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;YAAC,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,IAAI,OAAO,UAAU,QAAQ,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAChE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,KAAmC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;QAElE,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,WAAW,CAAC;YACrB,OAAO,CAAC,IAAI,OAAO,mBAAmB,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,MAAM,GAAG,oBAAoB,CAAC;YAC9B,OAAO,CAAC,IAAI,OAAO,sBAAsB,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,MAAM,GAAG,kBAAkB,CAAC;YAC5B,OAAO,CAAC,IAAI,OAAO,oBAAoB,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,OAAO,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* download entirely (offline / CI). Bumping the addon's server pin requires
|
|
6
6
|
* bumping this in the same PR or the parity test goes red.
|
|
7
7
|
*/
|
|
8
|
-
export declare const DEFAULT_SERVER_VERSION = "9.2.
|
|
8
|
+
export declare const DEFAULT_SERVER_VERSION = "9.2.2";
|
|
9
9
|
/** GitHub-release host the server zip + manifest are downloaded from. NOTHING else is trusted. */
|
|
10
10
|
export declare const TRUSTED_DOWNLOAD_HOST = "github.com";
|
|
11
11
|
/** The `owner/repo` the shared server releases live under. */
|
|
@@ -18,7 +18,7 @@ import { createHash } from 'crypto';
|
|
|
18
18
|
* download entirely (offline / CI). Bumping the addon's server pin requires
|
|
19
19
|
* bumping this in the same PR or the parity test goes red.
|
|
20
20
|
*/
|
|
21
|
-
export const DEFAULT_SERVER_VERSION = '9.2.
|
|
21
|
+
export const DEFAULT_SERVER_VERSION = '9.2.2';
|
|
22
22
|
/** GitHub-release host the server zip + manifest are downloaded from. NOTHING else is trusted. */
|
|
23
23
|
export const TRUSTED_DOWNLOAD_HOST = 'github.com';
|
|
24
24
|
/** The `owner/repo` the shared server releases live under. */
|
package/dist/utils/skills.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export interface SkillFamily {
|
|
|
13
13
|
}[];
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* The Godot-MCP tool-family catalog. Mirrors the
|
|
16
|
+
* The Godot-MCP tool-family catalog. Mirrors the 12 families documented in
|
|
17
17
|
* `Godot-MCP/CLAUDE.md` § Tool families and the `[AiToolType]` classes under
|
|
18
18
|
* `addons/godot_mcp/Runtime/Tools/` and `addons/godot_mcp/Editor/Tools/`. Tool names are the `[AiTool("<name>")]` identifiers
|
|
19
19
|
* an MCP client invokes.
|
|
@@ -41,6 +41,30 @@ export interface SkillFile {
|
|
|
41
41
|
export declare function buildSkillFiles(): SkillFile[];
|
|
42
42
|
/** Catalog (skills.ts) side of the parity check: the `Tool_<title>` suffixes the CLI advertises. */
|
|
43
43
|
export declare function catalogToolFamilyClassSuffixes(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Blank out the non-code spans of a C# source — always `//` line comments and `/* *\/` block comments,
|
|
46
|
+
* and (when `blankStrings`) char + string literals too (regular `"…"` with `\` escapes, verbatim `@"…"`
|
|
47
|
+
* with doubled `""`) — replacing each with a space while preserving newlines so nothing shifts lines.
|
|
48
|
+
*
|
|
49
|
+
* WHY THIS EXISTS: the discovery scans below are TEXT scans over the addon sources, and the addon
|
|
50
|
+
* legitimately embeds C# SAMPLES inside comments and string literals — `Tool_Skills.Create.SkillBody.cs`
|
|
51
|
+
* carries a full `[AiToolType] partial class Tool_Sample { … }` example in its `[AiSkillBody]` markdown so
|
|
52
|
+
* the `godot-skill-create` skill can teach an agent the shape. Scanning the raw text discovers
|
|
53
|
+
* `Tool_Sample` as a real addon family and fails parity against a phantom. Blanking non-code first leaves
|
|
54
|
+
* exactly the real declarations — the same technique (and the same rationale) as the addon's
|
|
55
|
+
* `scripts/check-runtime-boundary.py`, which blanks comments + strings before hunting editor-API tokens.
|
|
56
|
+
*
|
|
57
|
+
* The two scans need DIFFERENT strengths, hence the flag: the family scan matches a declaration
|
|
58
|
+
* (`partial class Tool_X`) so it blanks strings too, while the tool-ID scan matches the QUOTED id in
|
|
59
|
+
* `public const string XToolId = "x"` and would find nothing if strings were blanked. Keeping strings for
|
|
60
|
+
* the id scan is safe: inside an embedded sample the quotes are necessarily escaped (`\"`) or doubled
|
|
61
|
+
* (`""`), neither of which satisfies the `= "<id>"` shape.
|
|
62
|
+
*
|
|
63
|
+
* Deliberately a small single-purpose scanner, not a C# lexer: it covers the constructs this addon uses
|
|
64
|
+
* (line/block comments, regular/verbatim/interpolated strings, escaped quotes, doubled `""`, char
|
|
65
|
+
* literals). Raw string literals (`"""…"""`, C# 11) are not used in this addon and are not handled.
|
|
66
|
+
*/
|
|
67
|
+
export declare function stripNonCode(source: string, blankStrings: boolean): string;
|
|
44
68
|
/**
|
|
45
69
|
* Resolve the addon's `Tools/` source directories relative to a repo root. The
|
|
46
70
|
* cross-check passes the Godot-MCP repo root (the directory that contains both
|
|
@@ -48,6 +72,23 @@ export declare function catalogToolFamilyClassSuffixes(): string[];
|
|
|
48
72
|
* folders (Runtime = pure-managed families, Editor = `#if TOOLS` families).
|
|
49
73
|
*/
|
|
50
74
|
export declare function addonToolDirs(repoRoot: string): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Every addon `.cs` file under {@link addonToolDirs}, **recursively**.
|
|
77
|
+
*
|
|
78
|
+
* The scan used to be a flat `readdirSync` over the two `Tools/` folders, which made
|
|
79
|
+
* any tool family placed in a SUBFOLDER (the Unity-MCP `API/SystemTool/` layout, and
|
|
80
|
+
* the natural thing to reach for as the family list grows) invisible to both parity
|
|
81
|
+
* checks below. That did not fail the gate — it made it pass VACUOUSLY at the stale
|
|
82
|
+
* counts, which is strictly worse than no gate at all. Discovery is therefore
|
|
83
|
+
* recursive, and nesting is a free organisational choice again.
|
|
84
|
+
*
|
|
85
|
+
* Implemented as an explicit walk rather than `readdirSync(dir, { recursive: true })`
|
|
86
|
+
* so the behaviour is identical on every Node version this package supports
|
|
87
|
+
* (`^20.19.0 || >=22.12.0`) — the `withFileTypes` + `recursive` combination reports
|
|
88
|
+
* the parent directory through differently-named properties across those releases.
|
|
89
|
+
* Returns absolute paths sorted for deterministic ordering.
|
|
90
|
+
*/
|
|
91
|
+
export declare function addonToolFiles(repoRoot: string): string[];
|
|
51
92
|
/**
|
|
52
93
|
* Addon side of the parity check: discover every tool family declared in the addon
|
|
53
94
|
* by scanning for `[AiToolType] ... partial class Tool_<Family>` in the `.cs` sources
|
|
@@ -55,6 +96,9 @@ export declare function addonToolDirs(repoRoot: string): string[];
|
|
|
55
96
|
* (e.g. `Node`, `FileSystem`, `RuntimeErrors`).
|
|
56
97
|
*
|
|
57
98
|
* Robustness notes:
|
|
99
|
+
* - The source scan is RECURSIVE (see {@link addonToolFiles}), so a family in a
|
|
100
|
+
* subfolder of `{Runtime,Editor}/Tools/` is discovered rather than silently
|
|
101
|
+
* skipped — a skipped family made the parity assertions pass vacuously.
|
|
58
102
|
* - Tool families are partial classes split across files (`Tool_RuntimeErrors.cs`,
|
|
59
103
|
* `Tool_RuntimeErrors.Get.cs`, `Tool_RuntimeErrors.Clear.cs`). Only the base file
|
|
60
104
|
* carries the `[AiToolType]` attribute, so keying on `[AiToolType]` (not on file
|
package/dist/utils/skills.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
/**
|
|
4
|
-
* The Godot-MCP tool-family catalog. Mirrors the
|
|
4
|
+
* The Godot-MCP tool-family catalog. Mirrors the 12 families documented in
|
|
5
5
|
* `Godot-MCP/CLAUDE.md` § Tool families and the `[AiToolType]` classes under
|
|
6
6
|
* `addons/godot_mcp/Runtime/Tools/` and `addons/godot_mcp/Editor/Tools/`. Tool names are the `[AiTool("<name>")]` identifiers
|
|
7
7
|
* an MCP client invokes.
|
|
@@ -17,12 +17,19 @@ export const SKILL_FAMILIES = [
|
|
|
17
17
|
{
|
|
18
18
|
id: 'node',
|
|
19
19
|
title: 'Node',
|
|
20
|
-
summary: 'Find, create, modify, reparent, duplicate, and delete nodes in the open scene tree.',
|
|
20
|
+
summary: 'Find, create, modify, reparent, reorder, duplicate, and delete nodes in the open scene tree.',
|
|
21
21
|
tools: [
|
|
22
22
|
{ name: 'node-find', description: 'Find nodes in the open scene by path, name, or type.' },
|
|
23
|
-
{
|
|
23
|
+
{
|
|
24
|
+
name: 'node-create',
|
|
25
|
+
description: 'Create a new node (optionally instancing a sub-scene) under a parent, optionally at a specific sibling index.',
|
|
26
|
+
},
|
|
24
27
|
{ name: 'node-modify', description: 'Set properties on an existing node.' },
|
|
25
28
|
{ name: 'node-set-parent', description: 'Reparent a node to a new parent in the scene tree.' },
|
|
29
|
+
{
|
|
30
|
+
name: 'node-reorder',
|
|
31
|
+
description: 'Move a node to a different position among its siblings (child order is layout order in a container).',
|
|
32
|
+
},
|
|
26
33
|
{ name: 'node-duplicate', description: 'Duplicate an existing node.' },
|
|
27
34
|
{ name: 'node-delete', description: 'Delete a node from the scene tree.' },
|
|
28
35
|
],
|
|
@@ -136,6 +143,21 @@ export const SKILL_FAMILIES = [
|
|
|
136
143
|
{ name: 'ping', description: 'Return `pong` (or the echoed message) to confirm connectivity.' },
|
|
137
144
|
],
|
|
138
145
|
},
|
|
146
|
+
{
|
|
147
|
+
id: 'skills',
|
|
148
|
+
title: 'Skills',
|
|
149
|
+
summary: 'Author new MCP tools for the project and regenerate the SKILL.md files from the tools the editor currently has registered.',
|
|
150
|
+
tools: [
|
|
151
|
+
{
|
|
152
|
+
name: 'godot-skill-create',
|
|
153
|
+
description: 'Write a new C# (`.cs`) MCP tool file into the project under `res://`. The tool becomes callable after the project is rebuilt (Godot builds C# out-of-band). The file must declare an `[AiToolType]` partial class whose methods carry `[AiTool]`, and every Godot API call must be marshalled onto the editor main thread.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: 'godot-skill-generate',
|
|
157
|
+
description: 'Regenerate every `SKILL.md` from the tools currently registered in the editor, into the selected AI agent\'s skills folder (or a project-relative `path` override).',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
139
161
|
];
|
|
140
162
|
const ROOT_SKILL_NAME = 'godot-mcp';
|
|
141
163
|
/**
|
|
@@ -242,6 +264,127 @@ export function buildSkillFiles() {
|
|
|
242
264
|
export function catalogToolFamilyClassSuffixes() {
|
|
243
265
|
return SKILL_FAMILIES.map((f) => f.title).sort();
|
|
244
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Blank out the non-code spans of a C# source — always `//` line comments and `/* *\/` block comments,
|
|
269
|
+
* and (when `blankStrings`) char + string literals too (regular `"…"` with `\` escapes, verbatim `@"…"`
|
|
270
|
+
* with doubled `""`) — replacing each with a space while preserving newlines so nothing shifts lines.
|
|
271
|
+
*
|
|
272
|
+
* WHY THIS EXISTS: the discovery scans below are TEXT scans over the addon sources, and the addon
|
|
273
|
+
* legitimately embeds C# SAMPLES inside comments and string literals — `Tool_Skills.Create.SkillBody.cs`
|
|
274
|
+
* carries a full `[AiToolType] partial class Tool_Sample { … }` example in its `[AiSkillBody]` markdown so
|
|
275
|
+
* the `godot-skill-create` skill can teach an agent the shape. Scanning the raw text discovers
|
|
276
|
+
* `Tool_Sample` as a real addon family and fails parity against a phantom. Blanking non-code first leaves
|
|
277
|
+
* exactly the real declarations — the same technique (and the same rationale) as the addon's
|
|
278
|
+
* `scripts/check-runtime-boundary.py`, which blanks comments + strings before hunting editor-API tokens.
|
|
279
|
+
*
|
|
280
|
+
* The two scans need DIFFERENT strengths, hence the flag: the family scan matches a declaration
|
|
281
|
+
* (`partial class Tool_X`) so it blanks strings too, while the tool-ID scan matches the QUOTED id in
|
|
282
|
+
* `public const string XToolId = "x"` and would find nothing if strings were blanked. Keeping strings for
|
|
283
|
+
* the id scan is safe: inside an embedded sample the quotes are necessarily escaped (`\"`) or doubled
|
|
284
|
+
* (`""`), neither of which satisfies the `= "<id>"` shape.
|
|
285
|
+
*
|
|
286
|
+
* Deliberately a small single-purpose scanner, not a C# lexer: it covers the constructs this addon uses
|
|
287
|
+
* (line/block comments, regular/verbatim/interpolated strings, escaped quotes, doubled `""`, char
|
|
288
|
+
* literals). Raw string literals (`"""…"""`, C# 11) are not used in this addon and are not handled.
|
|
289
|
+
*/
|
|
290
|
+
export function stripNonCode(source, blankStrings) {
|
|
291
|
+
const out = [];
|
|
292
|
+
let inLine = false;
|
|
293
|
+
let inBlock = false;
|
|
294
|
+
let inString = false; // regular "..."
|
|
295
|
+
let inVerbatim = false; // @"..." (doubled "" is an escaped quote)
|
|
296
|
+
let inChar = false; // '...'
|
|
297
|
+
for (let i = 0; i < source.length; i++) {
|
|
298
|
+
const c = source[i];
|
|
299
|
+
const next = i + 1 < source.length ? source[i + 1] : '';
|
|
300
|
+
if (inLine) {
|
|
301
|
+
out.push(c === '\n' ? '\n' : ' ');
|
|
302
|
+
if (c === '\n')
|
|
303
|
+
inLine = false;
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
if (inBlock) {
|
|
307
|
+
if (c === '*' && next === '/') {
|
|
308
|
+
out.push(' ');
|
|
309
|
+
i++;
|
|
310
|
+
inBlock = false;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
out.push(c === '\n' ? '\n' : ' ');
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (inVerbatim) {
|
|
317
|
+
if (c === '"' && next === '"') {
|
|
318
|
+
out.push(' ');
|
|
319
|
+
i++;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
out.push(c === '\n' ? '\n' : ' ');
|
|
323
|
+
if (c === '"')
|
|
324
|
+
inVerbatim = false;
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (inString) {
|
|
328
|
+
if (c === '\\') {
|
|
329
|
+
out.push(' ');
|
|
330
|
+
i++; // consume the escaped char (covers \" and \\)
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
out.push(c === '\n' ? '\n' : ' ');
|
|
334
|
+
if (c === '"')
|
|
335
|
+
inString = false;
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
if (inChar) {
|
|
339
|
+
if (c === '\\') {
|
|
340
|
+
out.push(' ');
|
|
341
|
+
i++;
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
// Preserve newlines like every sibling state does — the documented invariant is that blanking
|
|
345
|
+
// never shifts line numbers, and an unterminated char literal would otherwise swallow one.
|
|
346
|
+
out.push(c === '\n' ? '\n' : ' ');
|
|
347
|
+
if (c === "'")
|
|
348
|
+
inChar = false;
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
// --- real code ---
|
|
352
|
+
if (c === '/' && next === '/') {
|
|
353
|
+
out.push(' ');
|
|
354
|
+
i++;
|
|
355
|
+
inLine = true;
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (c === '/' && next === '*') {
|
|
359
|
+
out.push(' ');
|
|
360
|
+
i++;
|
|
361
|
+
inBlock = true;
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
if (blankStrings && c === '@' && next === '"') {
|
|
365
|
+
out.push(' ');
|
|
366
|
+
i++;
|
|
367
|
+
inVerbatim = true;
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
if (blankStrings && c === '"') {
|
|
371
|
+
out.push(' ');
|
|
372
|
+
inString = true;
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
if (blankStrings && c === "'") {
|
|
376
|
+
out.push(' ');
|
|
377
|
+
inChar = true;
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
out.push(c);
|
|
381
|
+
}
|
|
382
|
+
return out.join('');
|
|
383
|
+
}
|
|
384
|
+
/** Read an addon `.cs` file with its non-code spans blanked (see {@link stripNonCode}). */
|
|
385
|
+
function readAddonCode(file, blankStrings) {
|
|
386
|
+
return stripNonCode(fs.readFileSync(file, 'utf-8'), blankStrings);
|
|
387
|
+
}
|
|
245
388
|
/**
|
|
246
389
|
* Resolve the addon's `Tools/` source directories relative to a repo root. The
|
|
247
390
|
* cross-check passes the Godot-MCP repo root (the directory that contains both
|
|
@@ -254,6 +397,40 @@ export function addonToolDirs(repoRoot) {
|
|
|
254
397
|
path.join(repoRoot, 'addons', 'godot_mcp', 'Editor', 'Tools'),
|
|
255
398
|
];
|
|
256
399
|
}
|
|
400
|
+
/**
|
|
401
|
+
* Every addon `.cs` file under {@link addonToolDirs}, **recursively**.
|
|
402
|
+
*
|
|
403
|
+
* The scan used to be a flat `readdirSync` over the two `Tools/` folders, which made
|
|
404
|
+
* any tool family placed in a SUBFOLDER (the Unity-MCP `API/SystemTool/` layout, and
|
|
405
|
+
* the natural thing to reach for as the family list grows) invisible to both parity
|
|
406
|
+
* checks below. That did not fail the gate — it made it pass VACUOUSLY at the stale
|
|
407
|
+
* counts, which is strictly worse than no gate at all. Discovery is therefore
|
|
408
|
+
* recursive, and nesting is a free organisational choice again.
|
|
409
|
+
*
|
|
410
|
+
* Implemented as an explicit walk rather than `readdirSync(dir, { recursive: true })`
|
|
411
|
+
* so the behaviour is identical on every Node version this package supports
|
|
412
|
+
* (`^20.19.0 || >=22.12.0`) — the `withFileTypes` + `recursive` combination reports
|
|
413
|
+
* the parent directory through differently-named properties across those releases.
|
|
414
|
+
* Returns absolute paths sorted for deterministic ordering.
|
|
415
|
+
*/
|
|
416
|
+
export function addonToolFiles(repoRoot) {
|
|
417
|
+
const files = [];
|
|
418
|
+
const walk = (dir) => {
|
|
419
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
420
|
+
const full = path.join(dir, entry.name);
|
|
421
|
+
if (entry.isDirectory())
|
|
422
|
+
walk(full);
|
|
423
|
+
else if (entry.isFile() && entry.name.endsWith('.cs'))
|
|
424
|
+
files.push(full);
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
for (const dir of addonToolDirs(repoRoot)) {
|
|
428
|
+
if (!fs.existsSync(dir))
|
|
429
|
+
continue;
|
|
430
|
+
walk(dir);
|
|
431
|
+
}
|
|
432
|
+
return files.sort();
|
|
433
|
+
}
|
|
257
434
|
/**
|
|
258
435
|
* Addon side of the parity check: discover every tool family declared in the addon
|
|
259
436
|
* by scanning for `[AiToolType] ... partial class Tool_<Family>` in the `.cs` sources
|
|
@@ -261,6 +438,9 @@ export function addonToolDirs(repoRoot) {
|
|
|
261
438
|
* (e.g. `Node`, `FileSystem`, `RuntimeErrors`).
|
|
262
439
|
*
|
|
263
440
|
* Robustness notes:
|
|
441
|
+
* - The source scan is RECURSIVE (see {@link addonToolFiles}), so a family in a
|
|
442
|
+
* subfolder of `{Runtime,Editor}/Tools/` is discovered rather than silently
|
|
443
|
+
* skipped — a skipped family made the parity assertions pass vacuously.
|
|
264
444
|
* - Tool families are partial classes split across files (`Tool_RuntimeErrors.cs`,
|
|
265
445
|
* `Tool_RuntimeErrors.Get.cs`, `Tool_RuntimeErrors.Clear.cs`). Only the base file
|
|
266
446
|
* carries the `[AiToolType]` attribute, so keying on `[AiToolType]` (not on file
|
|
@@ -288,20 +468,14 @@ export function discoverAddonToolFamilies(repoRoot) {
|
|
|
288
468
|
// compound suffix (`Editor`, `Editor_Selection`, ...). First segment = the family.
|
|
289
469
|
const familyRe = /\[AiToolType[^\]]*\](?:(?!\b(?:class|struct|interface|enum|record)\b)[\s\S])*?\bpartial\s+class\s+Tool_([A-Za-z][A-Za-z0-9]*(?:_[A-Za-z][A-Za-z0-9]*)*)\b/g;
|
|
290
470
|
const found = new Set();
|
|
291
|
-
for (const
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
familyRe.lastIndex = 0;
|
|
300
|
-
while ((m = familyRe.exec(src)) !== null) {
|
|
301
|
-
// Attribute a compound sub-tool class (`Tool_Editor_Selection`) to its
|
|
302
|
-
// parent family by taking the FIRST `_`-delimited segment (`Editor`).
|
|
303
|
-
found.add(m[1].split('_')[0]);
|
|
304
|
-
}
|
|
471
|
+
for (const file of addonToolFiles(repoRoot)) {
|
|
472
|
+
const src = readAddonCode(file, /* blankStrings */ true);
|
|
473
|
+
let m;
|
|
474
|
+
familyRe.lastIndex = 0;
|
|
475
|
+
while ((m = familyRe.exec(src)) !== null) {
|
|
476
|
+
// Attribute a compound sub-tool class (`Tool_Editor_Selection`) to its
|
|
477
|
+
// parent family by taking the FIRST `_`-delimited segment (`Editor`).
|
|
478
|
+
found.add(m[1].split('_')[0]);
|
|
305
479
|
}
|
|
306
480
|
}
|
|
307
481
|
return [...found].sort();
|
|
@@ -334,18 +508,12 @@ export function catalogToolIds() {
|
|
|
334
508
|
export function discoverAddonToolIds(repoRoot) {
|
|
335
509
|
const toolIdRe = /public\s+const\s+string\s+\w+ToolId\s*=\s*"([a-z][a-z0-9-]*)"/g;
|
|
336
510
|
const found = new Set();
|
|
337
|
-
for (const
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
const src = fs.readFileSync(path.join(dir, entry), 'utf-8');
|
|
344
|
-
let m;
|
|
345
|
-
toolIdRe.lastIndex = 0;
|
|
346
|
-
while ((m = toolIdRe.exec(src)) !== null) {
|
|
347
|
-
found.add(m[1]);
|
|
348
|
-
}
|
|
511
|
+
for (const file of addonToolFiles(repoRoot)) {
|
|
512
|
+
const src = readAddonCode(file, /* blankStrings */ false);
|
|
513
|
+
let m;
|
|
514
|
+
toolIdRe.lastIndex = 0;
|
|
515
|
+
while ((m = toolIdRe.exec(src)) !== null) {
|
|
516
|
+
found.add(m[1]);
|
|
349
517
|
}
|
|
350
518
|
}
|
|
351
519
|
return [...found].sort();
|
package/dist/utils/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godot-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Cross-platform CLI tool for Godot-MCP (Skills & MCP). Resolves and launches the Godot editor with MCP connection env vars, runs MCP/system tools over HTTP, probes server health, configures AI agents (Claude Code, Cursor, VS Code, …), and enables/disables the godot_mcp addon. Works with Claude Code, Cursor, Copilot, and any MCP client.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/lib.js",
|