godot-cli 0.19.1 → 0.20.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/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,7 +140,9 @@ 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
- The server base URL a tool call POSTs to (`<base>/api/tools/<name>`) is 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:
144
146
 
145
147
  1. `--url <url>` (explicit override).
146
148
  2. `GODOT_MCP_HOST` env (Custom-mode host).
@@ -198,8 +200,9 @@ The command writes a `SKILL.md`-per-tool-family directory (a `godot-mcp/` overvi
198
200
  families. It is **idempotent** — re-running rewrites the same bytes.
199
201
 
200
202
  Unlike the Unity CLI — which POSTs to a running editor's `/api/system-tools/unity-skill-generate`
201
- endpoint — the Godot CLI generates the files **locally** from a built-in catalog: the Godot MCP server
202
- exposes no skill-generate HTTP endpoint, so no server or running editor is required. (The addon
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
203
206
  *additionally* auto-generates skills in-process on plugin boot via
204
207
  `GodotMcpConnection.Start` → `GenerateSkillFilesIfNeeded`; the CLI command is the
205
208
  server-less, scriptable path that does not need a live editor.)
@@ -19,8 +19,8 @@
19
19
  * addon csproj (ReflectorNet first, then McpPlugin).
20
20
  */
21
21
  export const ADDON_PACKAGE_REFERENCES = [
22
- { id: 'com.IvanMurzak.ReflectorNet', version: '5.3.2' },
23
- { id: 'com.IvanMurzak.McpPlugin', version: '7.3.0' },
22
+ { id: 'com.IvanMurzak.ReflectorNet', version: '5.4.0' },
23
+ { id: 'com.IvanMurzak.McpPlugin', version: '7.5.2' },
24
24
  ];
25
25
  /**
26
26
  * The exact `<EmbeddedResource>`s the consumer's project `.csproj` needs, single-sourced
@@ -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>;
@@ -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}`;
@@ -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,iBAAiB,CAAC;AAe/C;;;;;GAKG;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"}
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.0";
8
+ export declare const DEFAULT_SERVER_VERSION = "9.2.4";
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.0';
21
+ export const DEFAULT_SERVER_VERSION = '9.2.4';
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. */
@@ -13,7 +13,7 @@ export interface SkillFamily {
13
13
  }[];
14
14
  }
15
15
  /**
16
- * The Godot-MCP tool-family catalog. Mirrors the 11 families documented in
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
@@ -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 11 families documented in
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
- { name: 'node-create', description: 'Create a new node (optionally instancing a sub-scene) under a parent.' },
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 dir of addonToolDirs(repoRoot)) {
292
- if (!fs.existsSync(dir))
293
- continue;
294
- for (const entry of fs.readdirSync(dir)) {
295
- if (!entry.endsWith('.cs'))
296
- continue;
297
- const src = fs.readFileSync(path.join(dir, entry), 'utf-8');
298
- let m;
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 dir of addonToolDirs(repoRoot)) {
338
- if (!fs.existsSync(dir))
339
- continue;
340
- for (const entry of fs.readdirSync(dir)) {
341
- if (!entry.endsWith('.cs'))
342
- continue;
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();
@@ -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.19.1",
3
+ "version": "0.20.1",
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",