@n24q02m/better-godot-mcp 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  **Composite MCP Server for Godot Engine - Optimized for AI Agents**
4
4
 
5
5
  [![CI](https://github.com/n24q02m/better-godot-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/n24q02m/better-godot-mcp/actions/workflows/ci.yml)
6
- [![Codecov](https://img.shields.io/codecov/c/github/n24q02m/better-godot-mcp?logo=codecov&logoColor=white)](https://codecov.io/gh/n24q02m/better-godot-mcp)
6
+ [![codecov](https://codecov.io/gh/n24q02m/better-godot-mcp/graph/badge.svg?token=PF94LT0K2L)](https://codecov.io/gh/n24q02m/better-godot-mcp)
7
7
  [![npm](https://img.shields.io/npm/v/@n24q02m/better-godot-mcp?logo=npm&logoColor=white)](https://www.npmjs.com/package/@n24q02m/better-godot-mcp)
8
8
  [![Docker](https://img.shields.io/docker/v/n24q02m/better-godot-mcp?label=docker&logo=docker&logoColor=white&sort=semver)](https://hub.docker.com/r/n24q02m/better-godot-mcp)
9
9
  [![License: MIT](https://img.shields.io/github/license/n24q02m/better-godot-mcp)](LICENSE)
package/bin/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @n24q02m/better-godot-mcp v1.2.1
2
+ // @n24q02m/better-godot-mcp v1.2.2
3
3
  // Auto-generated CLI bundle - do not edit directly
4
4
 
5
5
 
@@ -500,6 +500,13 @@ async function handleConfig(action, args, config) {
500
500
  if (!validKeys.includes(key)) {
501
501
  throw new GodotMCPError(`Invalid config key: ${key}`, "INVALID_ARGS", `Valid keys: ${validKeys.join(", ")}`);
502
502
  }
503
+ if ((key === "project_path" || key === "godot_path") && /[;&|`$(){}]/.test(value)) {
504
+ throw new GodotMCPError(
505
+ `Invalid characters in ${key}`,
506
+ "INVALID_ARGS",
507
+ "Path must not contain shell metacharacters: ; & | ` $ ( ) { }"
508
+ );
509
+ }
503
510
  runtimeConfig[key] = value;
504
511
  if (key === "project_path") {
505
512
  config.projectPath = value;
@@ -518,7 +525,7 @@ async function handleConfig(action, args, config) {
518
525
  }
519
526
 
520
527
  // src/tools/composite/editor.ts
521
- import { exec } from "node:child_process";
528
+ import { execFile } from "node:child_process";
522
529
  import { resolve as resolve3 } from "node:path";
523
530
  import { promisify } from "node:util";
524
531
 
@@ -568,11 +575,11 @@ function launchGodotEditor(godotPath, projectPath) {
568
575
  }
569
576
 
570
577
  // src/tools/composite/editor.ts
571
- var execAsync = promisify(exec);
578
+ var execFileAsync = promisify(execFile);
572
579
  async function getGodotProcessesAsync() {
573
580
  try {
574
581
  if (process.platform === "win32") {
575
- const { stdout: stdout2 } = await execAsync('tasklist /FI "IMAGENAME eq godot*" /FO CSV /NH', {
582
+ const { stdout: stdout2 } = await execFileAsync("tasklist", ["/FI", "IMAGENAME eq godot*", "/FO", "CSV", "/NH"], {
576
583
  encoding: "utf-8"
577
584
  });
578
585
  return stdout2.split("\n").filter((line) => line.includes("godot")).map((line) => {
@@ -580,7 +587,7 @@ async function getGodotProcessesAsync() {
580
587
  return { pid: parts[1] || "unknown", name: parts[0] || "godot" };
581
588
  });
582
589
  }
583
- const { stdout } = await execAsync("pgrep -la godot", {
590
+ const { stdout } = await execFileAsync("pgrep", ["-la", "godot"], {
584
591
  encoding: "utf-8"
585
592
  });
586
593
  return stdout.split("\n").filter(Boolean).map((line) => {
@@ -1778,12 +1785,29 @@ ${result.stdout}`);
1778
1785
 
1779
1786
  // src/tools/composite/resources.ts
1780
1787
  import { existsSync as existsSync10, readdirSync as readdirSync2, readFileSync as readFileSync10, statSync, unlinkSync } from "node:fs";
1781
- import { extname, join as join6, relative, resolve as resolve9 } from "node:path";
1788
+ import { extname, join as join6, relative as relative2, resolve as resolve10 } from "node:path";
1789
+
1790
+ // src/tools/helpers/paths.ts
1791
+ import { isAbsolute, relative, resolve as resolve9 } from "node:path";
1792
+ function safeResolve(baseDir, targetPath) {
1793
+ const resolvedBase = resolve9(baseDir);
1794
+ const resolvedTarget = resolve9(resolvedBase, targetPath);
1795
+ const relativePath = relative(resolvedBase, resolvedTarget);
1796
+ if (relativePath.startsWith("..") || isAbsolute(relativePath)) {
1797
+ throw new GodotMCPError(
1798
+ `Access denied: Path '${targetPath}' resolves to '${resolvedTarget}' which is outside the project root '${resolvedBase}'.`,
1799
+ "INVALID_ARGS",
1800
+ "Ensure all file paths are within the project directory."
1801
+ );
1802
+ }
1803
+ return resolvedTarget;
1804
+ }
1805
+
1806
+ // src/tools/composite/resources.ts
1782
1807
  var RESOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
1783
1808
  ".tres",
1784
1809
  ".res",
1785
1810
  ".tscn",
1786
- ".tscn",
1787
1811
  ".png",
1788
1812
  ".jpg",
1789
1813
  ".jpeg",
@@ -1798,19 +1822,17 @@ var RESOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
1798
1822
  ".gdshaderinc",
1799
1823
  ".import"
1800
1824
  ]);
1801
- function findResourceFiles(dir, extensions) {
1825
+ function findResourceFiles(dir, extensions, results = []) {
1802
1826
  const exts = extensions || RESOURCE_EXTENSIONS;
1803
- const results = [];
1804
1827
  try {
1805
- const entries = readdirSync2(dir);
1828
+ const entries = readdirSync2(dir, { withFileTypes: true });
1806
1829
  for (const entry of entries) {
1807
- if (entry.startsWith(".") || entry === "node_modules" || entry === "build") continue;
1808
- const fullPath = join6(dir, entry);
1809
- const stat = statSync(fullPath);
1810
- if (stat.isDirectory()) {
1811
- results.push(...findResourceFiles(fullPath, exts));
1812
- } else if (exts.has(extname(entry).toLowerCase())) {
1813
- results.push({ path: fullPath, size: stat.size });
1830
+ if (entry.name.startsWith(".") || entry.name === "node_modules" || entry.name === "build") continue;
1831
+ const fullPath = join6(dir, entry.name);
1832
+ if (entry.isDirectory()) {
1833
+ findResourceFiles(fullPath, exts, results);
1834
+ } else if (exts.has(extname(entry.name).toLowerCase())) {
1835
+ results.push({ path: fullPath, size: statSync(fullPath).size });
1814
1836
  }
1815
1837
  }
1816
1838
  } catch {
@@ -1822,7 +1844,7 @@ async function handleResources(action, args, config) {
1822
1844
  switch (action) {
1823
1845
  case "list": {
1824
1846
  if (!projectPath) throw new GodotMCPError("No project path specified", "INVALID_ARGS", "Provide project_path.");
1825
- const resolvedPath = resolve9(projectPath);
1847
+ const resolvedPath = resolve10(projectPath);
1826
1848
  const filterType = args.type;
1827
1849
  let exts;
1828
1850
  if (filterType) {
@@ -1838,7 +1860,7 @@ async function handleResources(action, args, config) {
1838
1860
  }
1839
1861
  const resources = findResourceFiles(resolvedPath, exts);
1840
1862
  const relativePaths = resources.map((r) => ({
1841
- path: relative(resolvedPath, r.path).replace(/\\/g, "/"),
1863
+ path: relative2(resolvedPath, r.path).replace(/\\/g, "/"),
1842
1864
  ext: extname(r.path),
1843
1865
  size: r.size
1844
1866
  }));
@@ -1847,7 +1869,7 @@ async function handleResources(action, args, config) {
1847
1869
  case "info": {
1848
1870
  const resPath = args.resource_path;
1849
1871
  if (!resPath) throw new GodotMCPError("No resource_path specified", "INVALID_ARGS", "Provide resource_path.");
1850
- const fullPath = projectPath ? resolve9(projectPath, resPath) : resolve9(resPath);
1872
+ const fullPath = projectPath ? safeResolve(projectPath, resPath) : resolve10(resPath);
1851
1873
  if (!existsSync10(fullPath))
1852
1874
  throw new GodotMCPError(`Resource not found: ${resPath}`, "RESOURCE_ERROR", "Check the file path.");
1853
1875
  const stat = statSync(fullPath);
@@ -1870,7 +1892,7 @@ async function handleResources(action, args, config) {
1870
1892
  case "delete": {
1871
1893
  const resPath = args.resource_path;
1872
1894
  if (!resPath) throw new GodotMCPError("No resource_path specified", "INVALID_ARGS", "Provide resource_path.");
1873
- const fullPath = projectPath ? resolve9(projectPath, resPath) : resolve9(resPath);
1895
+ const fullPath = projectPath ? safeResolve(projectPath, resPath) : resolve10(resPath);
1874
1896
  if (!existsSync10(fullPath))
1875
1897
  throw new GodotMCPError(`Resource not found: ${resPath}`, "RESOURCE_ERROR", "Check the file path.");
1876
1898
  unlinkSync(fullPath);
@@ -1881,7 +1903,7 @@ async function handleResources(action, args, config) {
1881
1903
  case "import_config": {
1882
1904
  const resPath = args.resource_path;
1883
1905
  if (!resPath) throw new GodotMCPError("No resource_path specified", "INVALID_ARGS", "Provide resource_path.");
1884
- const importPath = projectPath ? resolve9(projectPath, `${resPath}.import`) : resolve9(`${resPath}.import`);
1906
+ const importPath = projectPath ? safeResolve(projectPath, `${resPath}.import`) : resolve10(`${resPath}.import`);
1885
1907
  if (!existsSync10(importPath)) {
1886
1908
  return formatJSON({ path: resPath, imported: false, message: "No .import file found." });
1887
1909
  }
@@ -1900,18 +1922,9 @@ ${content}`);
1900
1922
  }
1901
1923
 
1902
1924
  // src/tools/composite/scenes.ts
1903
- import {
1904
- copyFileSync,
1905
- existsSync as existsSync11,
1906
- mkdirSync,
1907
- readdirSync as readdirSync3,
1908
- readFileSync as readFileSync11,
1909
- statSync as statSync2,
1910
- unlinkSync as unlinkSync2,
1911
- writeFileSync as writeFileSync9
1912
- } from "node:fs";
1925
+ import { copyFileSync, existsSync as existsSync11, mkdirSync, readdirSync as readdirSync3, readFileSync as readFileSync11, unlinkSync as unlinkSync2, writeFileSync as writeFileSync9 } from "node:fs";
1913
1926
  import { readFile as readFile3 } from "node:fs/promises";
1914
- import { basename, dirname, extname as extname2, join as join7, relative as relative2, resolve as resolve10 } from "node:path";
1927
+ import { basename, dirname, extname as extname2, join as join7, relative as relative3, resolve as resolve11 } from "node:path";
1915
1928
  async function parseTscnFile(filePath) {
1916
1929
  const content = await readFile3(filePath, "utf-8");
1917
1930
  const lines = content.split("\n");
@@ -1951,18 +1964,15 @@ async function parseTscnFile(filePath) {
1951
1964
  }
1952
1965
  return { path: filePath, rootNode, rootType, nodeCount: nodes.length, nodes, resources };
1953
1966
  }
1954
- function findSceneFiles(dir) {
1955
- const results = [];
1967
+ function findSceneFiles(dir, results = []) {
1956
1968
  try {
1957
- const entries = readdirSync3(dir);
1969
+ const entries = readdirSync3(dir, { withFileTypes: true });
1958
1970
  for (const entry of entries) {
1959
- if (entry.startsWith(".") || entry === "node_modules" || entry === "build") continue;
1960
- const fullPath = join7(dir, entry);
1961
- const stat = statSync2(fullPath);
1962
- if (stat.isDirectory()) {
1963
- results.push(...findSceneFiles(fullPath));
1964
- } else if (extname2(entry) === ".tscn") {
1965
- results.push(fullPath);
1971
+ if (entry.name.startsWith(".") || entry.name === "node_modules" || entry.name === "build") continue;
1972
+ if (entry.isDirectory()) {
1973
+ findSceneFiles(join7(dir, entry.name), results);
1974
+ } else if (extname2(entry.name) === ".tscn") {
1975
+ results.push(join7(dir, entry.name));
1966
1976
  }
1967
1977
  }
1968
1978
  } catch {
@@ -1992,8 +2002,9 @@ function validateSceneArgs(action, args, config) {
1992
2002
  }
1993
2003
  return { projectPath, scenePath, newPath };
1994
2004
  }
1995
- function resolvePath(base, relative6) {
1996
- return base ? resolve10(base, relative6) : resolve10(relative6);
2005
+ function resolvePath(base, relativePath) {
2006
+ if (base) return safeResolve(base, relativePath);
2007
+ return resolve11(relativePath);
1997
2008
  }
1998
2009
  async function handleScenes(action, args, config) {
1999
2010
  const { projectPath, scenePath, newPath } = validateSceneArgs(action, args, config);
@@ -2001,7 +2012,7 @@ async function handleScenes(action, args, config) {
2001
2012
  case "create": {
2002
2013
  const rootType = args.root_type || "Node2D";
2003
2014
  const rootName = args.root_name || basename(scenePath, ".tscn");
2004
- const fullPath = resolve10(projectPath, scenePath);
2015
+ const fullPath = resolve11(projectPath, scenePath);
2005
2016
  if (existsSync11(fullPath)) {
2006
2017
  throw new GodotMCPError(
2007
2018
  `Scene already exists: ${scenePath}`,
@@ -2016,9 +2027,9 @@ async function handleScenes(action, args, config) {
2016
2027
  Root: ${rootName} (${rootType})`);
2017
2028
  }
2018
2029
  case "list": {
2019
- const resolvedPath = resolve10(projectPath);
2030
+ const resolvedPath = resolve11(projectPath);
2020
2031
  const scenes = findSceneFiles(resolvedPath);
2021
- const relativePaths = scenes.map((s) => relative2(resolvedPath, s).replace(/\\/g, "/"));
2032
+ const relativePaths = scenes.map((s) => relative3(resolvedPath, s).replace(/\\/g, "/"));
2022
2033
  return formatJSON({
2023
2034
  project: resolvedPath,
2024
2035
  count: relativePaths.length,
@@ -2059,7 +2070,7 @@ Root: ${rootName} (${rootType})`);
2059
2070
  return formatSuccess(`Duplicated: ${scenePath} -> ${newPath}`);
2060
2071
  }
2061
2072
  case "set_main": {
2062
- const configPath = join7(resolve10(projectPath), "project.godot");
2073
+ const configPath = join7(resolve11(projectPath), "project.godot");
2063
2074
  if (!existsSync11(configPath)) {
2064
2075
  throw new GodotMCPError("No project.godot found", "PROJECT_NOT_FOUND", "Verify the project path.");
2065
2076
  }
@@ -2079,26 +2090,8 @@ Root: ${rootName} (${rootType})`);
2079
2090
  }
2080
2091
 
2081
2092
  // src/tools/composite/scripts.ts
2082
- import { existsSync as existsSync12, mkdirSync as mkdirSync2, readdirSync as readdirSync4, readFileSync as readFileSync12, statSync as statSync3, unlinkSync as unlinkSync3, writeFileSync as writeFileSync10 } from "node:fs";
2093
+ import { existsSync as existsSync12, mkdirSync as mkdirSync2, readdirSync as readdirSync4, readFileSync as readFileSync12, unlinkSync as unlinkSync3, writeFileSync as writeFileSync10 } from "node:fs";
2083
2094
  import { dirname as dirname2, extname as extname3, join as join8, relative as relative4, resolve as resolve12 } from "node:path";
2084
-
2085
- // src/tools/helpers/paths.ts
2086
- import { isAbsolute, relative as relative3, resolve as resolve11 } from "node:path";
2087
- function safeResolve(baseDir, targetPath) {
2088
- const resolvedBase = resolve11(baseDir);
2089
- const resolvedTarget = resolve11(resolvedBase, targetPath);
2090
- const relativePath = relative3(resolvedBase, resolvedTarget);
2091
- if (relativePath.startsWith("..") || isAbsolute(relativePath)) {
2092
- throw new GodotMCPError(
2093
- `Access denied: Path '${targetPath}' resolves to '${resolvedTarget}' which is outside the project root '${resolvedBase}'.`,
2094
- "INVALID_ARGS",
2095
- "Ensure all file paths are within the project directory."
2096
- );
2097
- }
2098
- return resolvedTarget;
2099
- }
2100
-
2101
- // src/tools/composite/scripts.ts
2102
2095
  var SCRIPT_TEMPLATES = {
2103
2096
  Node: `extends Node
2104
2097
 
@@ -2192,15 +2185,14 @@ func _ready() -> void:
2192
2185
  }
2193
2186
  function findScriptFiles(dir, results = []) {
2194
2187
  try {
2195
- const entries = readdirSync4(dir);
2188
+ const entries = readdirSync4(dir, { withFileTypes: true });
2196
2189
  for (const entry of entries) {
2197
- if (entry.startsWith(".") || entry === "node_modules" || entry === "build" || entry === "addons") continue;
2198
- const fullPath = join8(dir, entry);
2199
- const stat = statSync3(fullPath);
2200
- if (stat.isDirectory()) {
2201
- findScriptFiles(fullPath, results);
2202
- } else if (extname3(entry) === ".gd") {
2203
- results.push(fullPath);
2190
+ if (entry.name.startsWith(".") || entry.name === "node_modules" || entry.name === "build" || entry.name === "addons")
2191
+ continue;
2192
+ if (entry.isDirectory()) {
2193
+ findScriptFiles(join8(dir, entry.name), results);
2194
+ } else if (extname3(entry.name) === ".gd") {
2195
+ results.push(join8(dir, entry.name));
2204
2196
  }
2205
2197
  }
2206
2198
  } catch {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAMvD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GA8CpG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAMvD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GAuDpG"}
@@ -28,6 +28,10 @@ export async function handleConfig(action, args, config) {
28
28
  if (!validKeys.includes(key)) {
29
29
  throw new GodotMCPError(`Invalid config key: ${key}`, 'INVALID_ARGS', `Valid keys: ${validKeys.join(', ')}`);
30
30
  }
31
+ // Validate paths don't contain shell metacharacters
32
+ if ((key === 'project_path' || key === 'godot_path') && /[;&|`$(){}]/.test(value)) {
33
+ throw new GodotMCPError(`Invalid characters in ${key}`, 'INVALID_ARGS', 'Path must not contain shell metacharacters: ; & | ` $ ( ) { }');
34
+ }
31
35
  runtimeConfig[key] = value;
32
36
  // Apply to active config
33
37
  if (key === 'project_path') {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/tools/composite/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAE/E,yBAAyB;AACzB,MAAM,aAAa,GAA2B,EAAE,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,IAA6B,EAAE,MAAmB;IACnG,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,UAAU,CAAC;gBAChB,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,cAAc;gBAC9C,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,IAAI,SAAS;gBACpD,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;gBAC7C,iBAAiB,EAAE,aAAa;aACjC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAA;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAA;YAElC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,cAAc,EAAE,0CAA0C,CAAC,CAAA;YACzG,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,cAAc,EAAE,4BAA4B,CAAC,CAAA;YAC7F,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;YAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CAAC,uBAAuB,GAAG,EAAE,EAAE,cAAc,EAAE,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC9G,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAE1B,yBAAyB;YACzB,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAC3B,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;YAC5B,CAAC;iBAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAA;YAC1B,CAAC;YAED,OAAO,aAAa,CAAC,mBAAmB,GAAG,MAAM,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED;YACE,MAAM,IAAI,aAAa,CACrB,mBAAmB,MAAM,EAAE,EAC3B,gBAAgB,EAChB,0DAA0D,CAC3D,CAAA;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/tools/composite/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAE/E,yBAAyB;AACzB,MAAM,aAAa,GAA2B,EAAE,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,IAA6B,EAAE,MAAmB;IACnG,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,UAAU,CAAC;gBAChB,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,cAAc;gBAC9C,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,IAAI,SAAS;gBACpD,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;gBAC7C,iBAAiB,EAAE,aAAa;aACjC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAA;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAA;YAElC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,cAAc,EAAE,0CAA0C,CAAC,CAAA;YACzG,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,cAAc,EAAE,4BAA4B,CAAC,CAAA;YAC7F,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;YAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CAAC,uBAAuB,GAAG,EAAE,EAAE,cAAc,EAAE,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC9G,CAAC;YAED,oDAAoD;YACpD,IAAI,CAAC,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClF,MAAM,IAAI,aAAa,CACrB,yBAAyB,GAAG,EAAE,EAC9B,cAAc,EACd,+DAA+D,CAChE,CAAA;YACH,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAE1B,yBAAyB;YACzB,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAC3B,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;YAC5B,CAAC;iBAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAA;YAC1B,CAAC;YAED,OAAO,aAAa,CAAC,mBAAmB,GAAG,MAAM,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED;YACE,MAAM,IAAI,aAAa,CACrB,mBAAmB,MAAM,EAAE,EAC3B,gBAAgB,EAChB,0DAA0D,CAC3D,CAAA;IACL,CAAC;AACH,CAAC"}
@@ -2,19 +2,19 @@
2
2
  * Editor tool - Godot editor management
3
3
  * Actions: launch | status
4
4
  */
5
- import { exec } from 'node:child_process';
5
+ import { execFile } from 'node:child_process';
6
6
  import { resolve } from 'node:path';
7
7
  import { promisify } from 'node:util';
8
8
  import { launchGodotEditor } from '../../godot/headless.js';
9
9
  import { formatJSON, formatSuccess, GodotMCPError } from '../helpers/errors.js';
10
- const execAsync = promisify(exec);
10
+ const execFileAsync = promisify(execFile);
11
11
  /**
12
12
  * Check if any Godot processes are running
13
13
  */
14
14
  async function getGodotProcessesAsync() {
15
15
  try {
16
16
  if (process.platform === 'win32') {
17
- const { stdout } = await execAsync('tasklist /FI "IMAGENAME eq godot*" /FO CSV /NH', {
17
+ const { stdout } = await execFileAsync('tasklist', ['/FI', 'IMAGENAME eq godot*', '/FO', 'CSV', '/NH'], {
18
18
  encoding: 'utf-8',
19
19
  });
20
20
  return stdout
@@ -25,7 +25,7 @@ async function getGodotProcessesAsync() {
25
25
  return { pid: parts[1] || 'unknown', name: parts[0] || 'godot' };
26
26
  });
27
27
  }
28
- const { stdout } = await execAsync('pgrep -la godot', {
28
+ const { stdout } = await execFileAsync('pgrep', ['-la', 'godot'], {
29
29
  encoding: 'utf-8',
30
30
  });
31
31
  return stdout
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/tools/composite/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/tools/composite/editor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAiDvD,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GA+FvG"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA+CvD,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GA+FvG"}
@@ -5,11 +5,11 @@
5
5
  import { existsSync, readdirSync, readFileSync, statSync, unlinkSync } from 'node:fs';
6
6
  import { extname, join, relative, resolve } from 'node:path';
7
7
  import { formatJSON, formatSuccess, GodotMCPError } from '../helpers/errors.js';
8
+ import { safeResolve } from '../helpers/paths.js';
8
9
  const RESOURCE_EXTENSIONS = new Set([
9
10
  '.tres',
10
11
  '.res',
11
12
  '.tscn',
12
- '.tscn',
13
13
  '.png',
14
14
  '.jpg',
15
15
  '.jpeg',
@@ -24,21 +24,19 @@ const RESOURCE_EXTENSIONS = new Set([
24
24
  '.gdshaderinc',
25
25
  '.import',
26
26
  ]);
27
- function findResourceFiles(dir, extensions) {
27
+ function findResourceFiles(dir, extensions, results = []) {
28
28
  const exts = extensions || RESOURCE_EXTENSIONS;
29
- const results = [];
30
29
  try {
31
- const entries = readdirSync(dir);
30
+ const entries = readdirSync(dir, { withFileTypes: true });
32
31
  for (const entry of entries) {
33
- if (entry.startsWith('.') || entry === 'node_modules' || entry === 'build')
32
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'build')
34
33
  continue;
35
- const fullPath = join(dir, entry);
36
- const stat = statSync(fullPath);
37
- if (stat.isDirectory()) {
38
- results.push(...findResourceFiles(fullPath, exts));
34
+ const fullPath = join(dir, entry.name);
35
+ if (entry.isDirectory()) {
36
+ findResourceFiles(fullPath, exts, results);
39
37
  }
40
- else if (exts.has(extname(entry).toLowerCase())) {
41
- results.push({ path: fullPath, size: stat.size });
38
+ else if (exts.has(extname(entry.name).toLowerCase())) {
39
+ results.push({ path: fullPath, size: statSync(fullPath).size });
42
40
  }
43
41
  }
44
42
  }
@@ -80,7 +78,7 @@ export async function handleResources(action, args, config) {
80
78
  const resPath = args.resource_path;
81
79
  if (!resPath)
82
80
  throw new GodotMCPError('No resource_path specified', 'INVALID_ARGS', 'Provide resource_path.');
83
- const fullPath = projectPath ? resolve(projectPath, resPath) : resolve(resPath);
81
+ const fullPath = projectPath ? safeResolve(projectPath, resPath) : resolve(resPath);
84
82
  if (!existsSync(fullPath))
85
83
  throw new GodotMCPError(`Resource not found: ${resPath}`, 'RESOURCE_ERROR', 'Check the file path.');
86
84
  const stat = statSync(fullPath);
@@ -107,7 +105,7 @@ export async function handleResources(action, args, config) {
107
105
  const resPath = args.resource_path;
108
106
  if (!resPath)
109
107
  throw new GodotMCPError('No resource_path specified', 'INVALID_ARGS', 'Provide resource_path.');
110
- const fullPath = projectPath ? resolve(projectPath, resPath) : resolve(resPath);
108
+ const fullPath = projectPath ? safeResolve(projectPath, resPath) : resolve(resPath);
111
109
  if (!existsSync(fullPath))
112
110
  throw new GodotMCPError(`Resource not found: ${resPath}`, 'RESOURCE_ERROR', 'Check the file path.');
113
111
  unlinkSync(fullPath);
@@ -121,7 +119,7 @@ export async function handleResources(action, args, config) {
121
119
  const resPath = args.resource_path;
122
120
  if (!resPath)
123
121
  throw new GodotMCPError('No resource_path specified', 'INVALID_ARGS', 'Provide resource_path.');
124
- const importPath = projectPath ? resolve(projectPath, `${resPath}.import`) : resolve(`${resPath}.import`);
122
+ const importPath = projectPath ? safeResolve(projectPath, `${resPath}.import`) : resolve(`${resPath}.import`);
125
123
  if (!existsSync(importPath)) {
126
124
  return formatJSON({ path: resPath, imported: false, message: 'No .import file found.' });
127
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../src/tools/composite/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../src/tools/composite/resources.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scenes.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/scenes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,sBAAsB,CAAA;AA6H7E,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GAuGpG"}
1
+ {"version":3,"file":"scenes.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/scenes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,sBAAsB,CAAA;AA0H7E,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GAuGpG"}
@@ -2,10 +2,11 @@
2
2
  * Scenes tool - Scene file management
3
3
  * Actions: create | list | info | delete | duplicate | set_main
4
4
  */
5
- import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
5
+ import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
6
6
  import { readFile } from 'node:fs/promises';
7
7
  import { basename, dirname, extname, join, relative, resolve } from 'node:path';
8
8
  import { formatJSON, formatSuccess, GodotMCPError } from '../helpers/errors.js';
9
+ import { safeResolve } from '../helpers/paths.js';
9
10
  import { setSettingInContent } from '../helpers/project-settings.js';
10
11
  /**
11
12
  * Parse a .tscn file to extract scene information
@@ -52,20 +53,17 @@ async function parseTscnFile(filePath) {
52
53
  /**
53
54
  * Recursively find all .tscn files in a directory
54
55
  */
55
- function findSceneFiles(dir) {
56
- const results = [];
56
+ function findSceneFiles(dir, results = []) {
57
57
  try {
58
- const entries = readdirSync(dir);
58
+ const entries = readdirSync(dir, { withFileTypes: true });
59
59
  for (const entry of entries) {
60
- if (entry.startsWith('.') || entry === 'node_modules' || entry === 'build')
60
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'build')
61
61
  continue;
62
- const fullPath = join(dir, entry);
63
- const stat = statSync(fullPath);
64
- if (stat.isDirectory()) {
65
- results.push(...findSceneFiles(fullPath));
62
+ if (entry.isDirectory()) {
63
+ findSceneFiles(join(dir, entry.name), results);
66
64
  }
67
- else if (extname(entry) === '.tscn') {
68
- results.push(fullPath);
65
+ else if (extname(entry.name) === '.tscn') {
66
+ results.push(join(dir, entry.name));
69
67
  }
70
68
  }
71
69
  }
@@ -102,8 +100,10 @@ function validateSceneArgs(action, args, config) {
102
100
  }
103
101
  return { projectPath, scenePath, newPath };
104
102
  }
105
- function resolvePath(base, relative) {
106
- return base ? resolve(base, relative) : resolve(relative);
103
+ function resolvePath(base, relativePath) {
104
+ if (base)
105
+ return safeResolve(base, relativePath);
106
+ return resolve(relativePath);
107
107
  }
108
108
  export async function handleScenes(action, args, config) {
109
109
  const { projectPath, scenePath, newPath } = validateSceneArgs(action, args, config);
@@ -1 +1 @@
1
- {"version":3,"file":"scenes.js","sourceRoot":"","sources":["../../../../src/tools/composite/scenes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenes.js","sourceRoot":"","sources":["../../../../src/tools/composite/scenes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/scripts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA+GvD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GAqIrG"}
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/scripts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAmHvD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW;;;;;GAqIrG"}
@@ -2,7 +2,7 @@
2
2
  * Scripts tool - GDScript file management
3
3
  * Actions: create | read | write | attach | list | delete
4
4
  */
5
- import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
5
+ import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
6
6
  import { dirname, extname, join, relative, resolve } from 'node:path';
7
7
  import { formatJSON, formatSuccess, GodotMCPError } from '../helpers/errors.js';
8
8
  import { safeResolve } from '../helpers/paths.js';
@@ -94,17 +94,18 @@ function getTemplate(extendsType) {
94
94
  }
95
95
  function findScriptFiles(dir, results = []) {
96
96
  try {
97
- const entries = readdirSync(dir);
97
+ const entries = readdirSync(dir, { withFileTypes: true });
98
98
  for (const entry of entries) {
99
- if (entry.startsWith('.') || entry === 'node_modules' || entry === 'build' || entry === 'addons')
99
+ if (entry.name.startsWith('.') ||
100
+ entry.name === 'node_modules' ||
101
+ entry.name === 'build' ||
102
+ entry.name === 'addons')
100
103
  continue;
101
- const fullPath = join(dir, entry);
102
- const stat = statSync(fullPath);
103
- if (stat.isDirectory()) {
104
- findScriptFiles(fullPath, results);
104
+ if (entry.isDirectory()) {
105
+ findScriptFiles(join(dir, entry.name), results);
105
106
  }
106
- else if (extname(entry) === '.gd') {
107
- results.push(fullPath);
107
+ else if (extname(entry.name) === '.gd') {
108
+ results.push(join(dir, entry.name));
108
109
  }
109
110
  }
110
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../src/tools/composite/scripts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../src/tools/composite/scripts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n24q02m/better-godot-mcp",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Enhanced MCP server for Godot Engine with composite mega-tools and comprehensive game development tooling.",
5
5
  "type": "module",
6
6
  "main": "build/src/init-server.js",
@@ -33,13 +33,13 @@
33
33
  "zod": "^4.3.6"
34
34
  },
35
35
  "devDependencies": {
36
- "@biomejs/biome": "^2.4.4",
37
- "@types/node": "^24.11.0",
38
- "@vitest/coverage-v8": "^3.2.4",
36
+ "@biomejs/biome": "^2.4.6",
37
+ "@types/node": "^25.3.3",
38
+ "@vitest/coverage-v8": "^4.0.18",
39
39
  "esbuild": "^0.27.3",
40
40
  "tsx": "^4.21.0",
41
41
  "typescript": "^5.9.3",
42
- "vitest": "^3.2.4"
42
+ "vitest": "^4.0.18"
43
43
  },
44
44
  "trustedDependencies": [
45
45
  "esbuild"