@keeveeg/godot-mcp 1.0.1 → 1.0.3

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.
Files changed (224) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/server/dist/config.js +1 -1
  4. package/server/dist/godot-bridge.d.ts.map +1 -1
  5. package/server/dist/godot-bridge.js +264 -261
  6. package/server/dist/godot-bridge.js.map +1 -1
  7. package/server/dist/index.js +46 -45
  8. package/server/dist/server.d.ts.map +1 -1
  9. package/server/dist/server.js +25 -23
  10. package/server/dist/server.js.map +1 -1
  11. package/server/dist/tools/addon_management.d.ts.map +1 -1
  12. package/server/dist/tools/addon_management.js +37 -57
  13. package/server/dist/tools/addon_management.js.map +1 -1
  14. package/server/dist/tools/analysis.d.ts.map +1 -1
  15. package/server/dist/tools/analysis.js +21 -37
  16. package/server/dist/tools/analysis.js.map +1 -1
  17. package/server/dist/tools/animation.d.ts.map +1 -1
  18. package/server/dist/tools/animation.js +95 -135
  19. package/server/dist/tools/animation.js.map +1 -1
  20. package/server/dist/tools/audio.d.ts.map +1 -1
  21. package/server/dist/tools/audio.js +81 -109
  22. package/server/dist/tools/audio.js.map +1 -1
  23. package/server/dist/tools/audio_config.d.ts.map +1 -1
  24. package/server/dist/tools/audio_config.js +50 -76
  25. package/server/dist/tools/audio_config.js.map +1 -1
  26. package/server/dist/tools/batch.d.ts.map +1 -1
  27. package/server/dist/tools/batch.js +57 -89
  28. package/server/dist/tools/batch.js.map +1 -1
  29. package/server/dist/tools/build_config.d.ts.map +1 -1
  30. package/server/dist/tools/build_config.js +59 -91
  31. package/server/dist/tools/build_config.js.map +1 -1
  32. package/server/dist/tools/debug_config.d.ts.map +1 -1
  33. package/server/dist/tools/debug_config.js +46 -70
  34. package/server/dist/tools/debug_config.js.map +1 -1
  35. package/server/dist/tools/debugging.d.ts.map +1 -1
  36. package/server/dist/tools/debugging.js +51 -83
  37. package/server/dist/tools/debugging.js.map +1 -1
  38. package/server/dist/tools/editor.d.ts.map +1 -1
  39. package/server/dist/tools/editor.js +54 -90
  40. package/server/dist/tools/editor.js.map +1 -1
  41. package/server/dist/tools/editor_config.d.ts.map +1 -1
  42. package/server/dist/tools/editor_config.js +53 -85
  43. package/server/dist/tools/editor_config.js.map +1 -1
  44. package/server/dist/tools/export.d.ts.map +1 -1
  45. package/server/dist/tools/export.js +46 -74
  46. package/server/dist/tools/export.js.map +1 -1
  47. package/server/dist/tools/gameplay_automation.d.ts.map +1 -1
  48. package/server/dist/tools/gameplay_automation.js +70 -102
  49. package/server/dist/tools/gameplay_automation.js.map +1 -1
  50. package/server/dist/tools/index.js +42 -42
  51. package/server/dist/tools/input.d.ts.map +1 -1
  52. package/server/dist/tools/input.js +68 -100
  53. package/server/dist/tools/input.js.map +1 -1
  54. package/server/dist/tools/memory_profiling.d.ts.map +1 -1
  55. package/server/dist/tools/memory_profiling.js +31 -51
  56. package/server/dist/tools/memory_profiling.js.map +1 -1
  57. package/server/dist/tools/navigation.d.ts.map +1 -1
  58. package/server/dist/tools/navigation.js +86 -126
  59. package/server/dist/tools/navigation.js.map +1 -1
  60. package/server/dist/tools/node.d.ts.map +1 -1
  61. package/server/dist/tools/node.js +134 -202
  62. package/server/dist/tools/node.js.map +1 -1
  63. package/server/dist/tools/node_config.d.ts.map +1 -1
  64. package/server/dist/tools/node_config.js +58 -90
  65. package/server/dist/tools/node_config.js.map +1 -1
  66. package/server/dist/tools/particles.d.ts.map +1 -1
  67. package/server/dist/tools/particles.js +75 -111
  68. package/server/dist/tools/particles.js.map +1 -1
  69. package/server/dist/tools/physics.d.ts.map +1 -1
  70. package/server/dist/tools/physics.js +67 -99
  71. package/server/dist/tools/physics.js.map +1 -1
  72. package/server/dist/tools/physics_config.d.ts.map +1 -1
  73. package/server/dist/tools/physics_config.js +56 -88
  74. package/server/dist/tools/physics_config.js.map +1 -1
  75. package/server/dist/tools/platform_export.d.ts.map +1 -1
  76. package/server/dist/tools/platform_export.js +45 -69
  77. package/server/dist/tools/platform_export.js.map +1 -1
  78. package/server/dist/tools/platform_specific.d.ts.map +1 -1
  79. package/server/dist/tools/platform_specific.js +61 -85
  80. package/server/dist/tools/platform_specific.js.map +1 -1
  81. package/server/dist/tools/profiling.d.ts.map +1 -1
  82. package/server/dist/tools/profiling.js +13 -21
  83. package/server/dist/tools/profiling.js.map +1 -1
  84. package/server/dist/tools/project.d.ts.map +1 -1
  85. package/server/dist/tools/project.js +51 -79
  86. package/server/dist/tools/project.js.map +1 -1
  87. package/server/dist/tools/project_config.d.ts.map +1 -1
  88. package/server/dist/tools/project_config.js +88 -136
  89. package/server/dist/tools/project_config.js.map +1 -1
  90. package/server/dist/tools/project_creation.d.ts.map +1 -1
  91. package/server/dist/tools/project_creation.js +96 -140
  92. package/server/dist/tools/project_creation.js.map +1 -1
  93. package/server/dist/tools/rendering_config.d.ts.map +1 -1
  94. package/server/dist/tools/rendering_config.js +67 -103
  95. package/server/dist/tools/rendering_config.js.map +1 -1
  96. package/server/dist/tools/resource.js +77 -117
  97. package/server/dist/tools/resource_config.d.ts.map +1 -1
  98. package/server/dist/tools/resource_config.js +45 -69
  99. package/server/dist/tools/resource_config.js.map +1 -1
  100. package/server/dist/tools/runtime.d.ts.map +1 -1
  101. package/server/dist/tools/runtime.js +148 -224
  102. package/server/dist/tools/runtime.js.map +1 -1
  103. package/server/dist/tools/save_load.d.ts.map +1 -1
  104. package/server/dist/tools/save_load.js +36 -56
  105. package/server/dist/tools/save_load.js.map +1 -1
  106. package/server/dist/tools/scene.d.ts.map +1 -1
  107. package/server/dist/tools/scene.js +78 -122
  108. package/server/dist/tools/scene.js.map +1 -1
  109. package/server/dist/tools/scene3d.d.ts.map +1 -1
  110. package/server/dist/tools/scene3d.js +51 -75
  111. package/server/dist/tools/scene3d.js.map +1 -1
  112. package/server/dist/tools/scene_config.d.ts.map +1 -1
  113. package/server/dist/tools/scene_config.js +48 -72
  114. package/server/dist/tools/scene_config.js.map +1 -1
  115. package/server/dist/tools/script.js +68 -104
  116. package/server/dist/tools/script.js.map +1 -1
  117. package/server/dist/tools/shader.d.ts.map +1 -1
  118. package/server/dist/tools/shader.js +75 -111
  119. package/server/dist/tools/shader.js.map +1 -1
  120. package/server/dist/tools/shared-types.d.ts +2 -2
  121. package/server/dist/tools/shared-types.d.ts.map +1 -1
  122. package/server/dist/tools/shared-types.js +38 -36
  123. package/server/dist/tools/shared-types.js.map +1 -1
  124. package/server/dist/tools/testing.d.ts.map +1 -1
  125. package/server/dist/tools/testing.js +47 -69
  126. package/server/dist/tools/testing.js.map +1 -1
  127. package/server/dist/tools/theme.js +62 -90
  128. package/server/dist/tools/tilemap.js +58 -82
  129. package/server/dist/tools/visual_testing.d.ts.map +1 -1
  130. package/server/dist/tools/visual_testing.js +50 -74
  131. package/server/dist/tools/visual_testing.js.map +1 -1
  132. package/server/dist/types.js +15 -15
  133. package/server/dist/tools/accessibility.d.ts +0 -7
  134. package/server/dist/tools/accessibility.d.ts.map +0 -1
  135. package/server/dist/tools/accessibility.js +0 -71
  136. package/server/dist/tools/accessibility.js.map +0 -1
  137. package/server/dist/tools/analytics.d.ts +0 -7
  138. package/server/dist/tools/analytics.d.ts.map +0 -1
  139. package/server/dist/tools/analytics.js +0 -76
  140. package/server/dist/tools/analytics.js.map +0 -1
  141. package/server/dist/tools/asset_pipeline.d.ts +0 -7
  142. package/server/dist/tools/asset_pipeline.d.ts.map +0 -1
  143. package/server/dist/tools/asset_pipeline.js +0 -102
  144. package/server/dist/tools/asset_pipeline.js.map +0 -1
  145. package/server/dist/tools/asset_scaffolding.d.ts +0 -7
  146. package/server/dist/tools/asset_scaffolding.d.ts.map +0 -1
  147. package/server/dist/tools/asset_scaffolding.js +0 -113
  148. package/server/dist/tools/asset_scaffolding.js.map +0 -1
  149. package/server/dist/tools/cicd_pipeline.d.ts +0 -7
  150. package/server/dist/tools/cicd_pipeline.d.ts.map +0 -1
  151. package/server/dist/tools/cicd_pipeline.js +0 -125
  152. package/server/dist/tools/cicd_pipeline.js.map +0 -1
  153. package/server/dist/tools/cloud_services.d.ts +0 -7
  154. package/server/dist/tools/cloud_services.d.ts.map +0 -1
  155. package/server/dist/tools/cloud_services.js +0 -97
  156. package/server/dist/tools/cloud_services.js.map +0 -1
  157. package/server/dist/tools/code_generation.d.ts +0 -7
  158. package/server/dist/tools/code_generation.d.ts.map +0 -1
  159. package/server/dist/tools/code_generation.js +0 -79
  160. package/server/dist/tools/code_generation.js.map +0 -1
  161. package/server/dist/tools/code_quality.d.ts +0 -7
  162. package/server/dist/tools/code_quality.d.ts.map +0 -1
  163. package/server/dist/tools/code_quality.js +0 -98
  164. package/server/dist/tools/code_quality.js.map +0 -1
  165. package/server/dist/tools/collaboration.d.ts +0 -7
  166. package/server/dist/tools/collaboration.d.ts.map +0 -1
  167. package/server/dist/tools/collaboration.js +0 -73
  168. package/server/dist/tools/collaboration.js.map +0 -1
  169. package/server/dist/tools/documentation_tools.d.ts +0 -7
  170. package/server/dist/tools/documentation_tools.d.ts.map +0 -1
  171. package/server/dist/tools/documentation_tools.js +0 -89
  172. package/server/dist/tools/documentation_tools.js.map +0 -1
  173. package/server/dist/tools/game_template.d.ts +0 -7
  174. package/server/dist/tools/game_template.d.ts.map +0 -1
  175. package/server/dist/tools/game_template.js +0 -112
  176. package/server/dist/tools/game_template.js.map +0 -1
  177. package/server/dist/tools/git_integration.d.ts +0 -7
  178. package/server/dist/tools/git_integration.d.ts.map +0 -1
  179. package/server/dist/tools/git_integration.js +0 -75
  180. package/server/dist/tools/git_integration.js.map +0 -1
  181. package/server/dist/tools/headless_testing.d.ts +0 -7
  182. package/server/dist/tools/headless_testing.d.ts.map +0 -1
  183. package/server/dist/tools/headless_testing.js +0 -65
  184. package/server/dist/tools/headless_testing.js.map +0 -1
  185. package/server/dist/tools/iap_monetization.d.ts +0 -7
  186. package/server/dist/tools/iap_monetization.d.ts.map +0 -1
  187. package/server/dist/tools/iap_monetization.js +0 -70
  188. package/server/dist/tools/iap_monetization.js.map +0 -1
  189. package/server/dist/tools/localization.d.ts +0 -7
  190. package/server/dist/tools/localization.d.ts.map +0 -1
  191. package/server/dist/tools/localization.js +0 -97
  192. package/server/dist/tools/localization.js.map +0 -1
  193. package/server/dist/tools/marketing.d.ts +0 -7
  194. package/server/dist/tools/marketing.d.ts.map +0 -1
  195. package/server/dist/tools/marketing.js +0 -87
  196. package/server/dist/tools/marketing.js.map +0 -1
  197. package/server/dist/tools/mod_support.d.ts +0 -7
  198. package/server/dist/tools/mod_support.d.ts.map +0 -1
  199. package/server/dist/tools/mod_support.js +0 -93
  200. package/server/dist/tools/mod_support.js.map +0 -1
  201. package/server/dist/tools/networking.d.ts +0 -7
  202. package/server/dist/tools/networking.d.ts.map +0 -1
  203. package/server/dist/tools/networking.js +0 -94
  204. package/server/dist/tools/networking.js.map +0 -1
  205. package/server/dist/tools/performance_optimization.d.ts +0 -7
  206. package/server/dist/tools/performance_optimization.d.ts.map +0 -1
  207. package/server/dist/tools/performance_optimization.js +0 -75
  208. package/server/dist/tools/performance_optimization.js.map +0 -1
  209. package/server/dist/tools/scene_scaffolding.d.ts +0 -7
  210. package/server/dist/tools/scene_scaffolding.d.ts.map +0 -1
  211. package/server/dist/tools/scene_scaffolding.js +0 -110
  212. package/server/dist/tools/scene_scaffolding.js.map +0 -1
  213. package/server/dist/tools/script_scaffolding.d.ts +0 -7
  214. package/server/dist/tools/script_scaffolding.d.ts.map +0 -1
  215. package/server/dist/tools/script_scaffolding.js +0 -115
  216. package/server/dist/tools/script_scaffolding.js.map +0 -1
  217. package/server/dist/tools/security.d.ts +0 -7
  218. package/server/dist/tools/security.d.ts.map +0 -1
  219. package/server/dist/tools/security.js +0 -73
  220. package/server/dist/tools/security.js.map +0 -1
  221. package/server/dist/tools/version_control_advanced.d.ts +0 -7
  222. package/server/dist/tools/version_control_advanced.d.ts.map +0 -1
  223. package/server/dist/tools/version_control_advanced.js +0 -100
  224. package/server/dist/tools/version_control_advanced.js.map +0 -1
package/README.md CHANGED
@@ -166,7 +166,7 @@ Example `opencode.json`:
166
166
  "mcp": {
167
167
  "godot": {
168
168
  "type": "local",
169
- "command": ["npx", "-y", "--registry=https://npm.pkg.github.com", "@keeveeg/godot-mcp"]
169
+ "command": ["npx", "-y", "@keeveeg/godot-mcp"]
170
170
  }
171
171
  }
172
172
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keeveeg/godot-mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "MCP server for Godot Engine — 300+ AI-powered tools for game development",
5
5
  "author": "KeeVeeG",
6
6
  "license": "MIT",
@@ -25,4 +25,4 @@ export const RECONNECT_DELAY_MS = 1_000;
25
25
  export const MAX_RECONNECT_ATTEMPTS = 5;
26
26
  /** Current log level */
27
27
  export const LOG_LEVEL = 'info';
28
- //# sourceMappingURL=config.js.map
28
+ //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"godot-bridge.d.ts","sourceRoot":"","sources":["../src/godot-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAMV,eAAe,EAChB,MAAM,YAAY,CAAC;AA6BpB;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,IAAI,GAAE,MAAqB;IAIvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAe9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAyBjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyCzF;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAe5E;;OAEG;IACH,OAAO,CAAC,OAAO;IAaf;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAahC"}
1
+ {"version":3,"file":"godot-bridge.d.ts","sourceRoot":"","sources":["../src/godot-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAA8F,eAAe,EAAE,MAAM,YAAY,CAAC;AAyB9I;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,IAAI,GAAE,MAAqB;IAIvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAa9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAyBjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyCzF;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAe5E;;OAEG;IACH,OAAO,CAAC,OAAO;IAaf;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAahC"}
@@ -10,24 +10,24 @@ import { WS_BASE_PORT, MAX_SESSIONS, REQUEST_TIMEOUT_MS, PING_INTERVAL_MS, PING_
10
10
  import { isSuccessResponse, isErrorResponse } from './types.js';
11
11
  /** Logger helper */
12
12
  function log(level, message, ...args) {
13
- const timestamp = new Date().toISOString();
14
- const prefix = `[GodotBridge ${timestamp}]`;
15
- switch (level) {
16
- case 'error':
17
- console.error(prefix, message, ...args);
18
- break;
19
- case 'warn':
20
- console.warn(prefix, message, ...args);
21
- break;
22
- case 'debug':
23
- // Only log debug in development
24
- if (process.env.GODOT_MCP_DEBUG) {
25
- console.error(prefix, message, ...args);
26
- }
27
- break;
28
- default:
29
- console.error(prefix, message, ...args);
30
- }
13
+ const timestamp = new Date().toISOString();
14
+ const prefix = `[GodotBridge ${timestamp}]`;
15
+ switch (level) {
16
+ case 'error':
17
+ console.error(prefix, message, ...args);
18
+ break;
19
+ case 'warn':
20
+ console.warn(prefix, message, ...args);
21
+ break;
22
+ case 'debug':
23
+ // Only log debug in development
24
+ if (process.env.GODOT_MCP_DEBUG) {
25
+ console.error(prefix, message, ...args);
26
+ }
27
+ break;
28
+ default:
29
+ console.error(prefix, message, ...args);
30
+ }
31
31
  }
32
32
  /**
33
33
  * WebSocket bridge that manages communication with Godot EditorPlugin.
@@ -36,259 +36,262 @@ function log(level, message, ...args) {
36
36
  * Each tool request is forwarded as a JSON-RPC 2.0 call.
37
37
  */
38
38
  export class GodotBridge {
39
- wss = null;
40
- client = null;
41
- port;
42
- state = 'disconnected';
43
- pendingRequests = new Map();
44
- pingInterval = null;
45
- lastPongTime = 0;
46
- requestIdCounter = 0;
47
- constructor(port = WS_BASE_PORT) {
48
- this.port = port;
49
- }
50
- /**
51
- * Start the WebSocket server, trying ports 6505-6514 if busy.
52
- */
53
- async start() {
54
- for (let portOffset = 0; portOffset < MAX_SESSIONS; portOffset++) {
55
- const tryPort = this.port + portOffset;
56
- const success = await this.tryListen(tryPort);
57
- if (success) {
58
- this.port = tryPort;
59
- log('info', `Listening on port ${tryPort}`);
60
- return tryPort;
61
- }
39
+ wss = null;
40
+ client = null;
41
+ port;
42
+ state = 'disconnected';
43
+ pendingRequests = new Map();
44
+ pingInterval = null;
45
+ lastPongTime = 0;
46
+ requestIdCounter = 0;
47
+ constructor(port = WS_BASE_PORT) {
48
+ this.port = port;
62
49
  }
63
- throw new Error(`Failed to bind to any port in range ${WS_BASE_PORT}-${WS_BASE_PORT + MAX_SESSIONS - 1}`);
64
- }
65
- /**
66
- * Try to listen on a specific port.
67
- */
68
- tryListen(port) {
69
- return new Promise((resolve) => {
70
- const wss = new WebSocketServer({
71
- port,
72
- maxPayload: MAX_MESSAGE_SIZE,
73
- });
74
- wss.on('listening', () => {
75
- this.wss = wss;
76
- this.setupServer(wss);
77
- resolve(true);
78
- });
79
- wss.on('error', (err) => {
80
- if (err.code === 'EADDRINUSE') {
81
- log('debug', `Port ${port} is busy`);
82
- resolve(false);
83
- } else {
84
- log('error', `Server error on port ${port}:`, err.message);
85
- resolve(false);
50
+ /**
51
+ * Start the WebSocket server, trying ports 6505-6514 if busy.
52
+ */
53
+ async start() {
54
+ for (let portOffset = 0; portOffset < MAX_SESSIONS; portOffset++) {
55
+ const tryPort = this.port + portOffset;
56
+ const success = await this.tryListen(tryPort);
57
+ if (success) {
58
+ this.port = tryPort;
59
+ log('info', `Listening on port ${tryPort}`);
60
+ return tryPort;
61
+ }
86
62
  }
87
- });
88
- });
89
- }
90
- /**
91
- * Set up the WebSocket server event handlers.
92
- */
93
- setupServer(wss) {
94
- wss.on('connection', (ws) => {
95
- // Only allow one client at a time
96
- if (this.client && this.client.readyState === WebSocket.OPEN) {
97
- log('warn', 'Rejecting new client - one client already connected');
98
- ws.close(1013, 'Another client is already connected');
99
- return;
100
- }
101
- this.client = ws;
102
- this.state = 'connected';
103
- this.lastPongTime = Date.now();
104
- log('info', 'Godot editor connected');
105
- this.setupClientHandlers(ws);
106
- this.startPingInterval(ws);
107
- });
108
- wss.on('error', (err) => {
109
- log('error', 'WebSocket server error:', err.message);
110
- });
111
- }
112
- /**
113
- * Set up event handlers for a connected client.
114
- */
115
- setupClientHandlers(ws) {
116
- ws.on('message', (data) => {
117
- this.handleMessage(data);
118
- });
119
- ws.on('close', (code, reason) => {
120
- log('info', `Godot editor disconnected (code: ${code}, reason: ${reason.toString()})`);
121
- this.cleanup();
122
- });
123
- ws.on('error', (err) => {
124
- log('error', 'Client WebSocket error:', err.message);
125
- });
126
- ws.on('pong', () => {
127
- this.lastPongTime = Date.now();
128
- });
129
- }
130
- /**
131
- * Start the ping/pong keepalive interval.
132
- */
133
- startPingInterval(ws) {
134
- this.stopPingInterval();
135
- this.pingInterval = setInterval(() => {
136
- if (ws.readyState !== WebSocket.OPEN) {
63
+ throw new Error(`Failed to bind to any port in range ${WS_BASE_PORT}-${WS_BASE_PORT + MAX_SESSIONS - 1}`);
64
+ }
65
+ /**
66
+ * Try to listen on a specific port.
67
+ */
68
+ tryListen(port) {
69
+ return new Promise((resolve) => {
70
+ const wss = new WebSocketServer({
71
+ port,
72
+ maxPayload: MAX_MESSAGE_SIZE,
73
+ });
74
+ wss.on('listening', () => {
75
+ this.wss = wss;
76
+ this.setupServer(wss);
77
+ resolve(true);
78
+ });
79
+ wss.on('error', (err) => {
80
+ if (err.code === 'EADDRINUSE') {
81
+ log('debug', `Port ${port} is busy`);
82
+ resolve(false);
83
+ }
84
+ else {
85
+ log('error', `Server error on port ${port}:`, err.message);
86
+ resolve(false);
87
+ }
88
+ });
89
+ });
90
+ }
91
+ /**
92
+ * Set up the WebSocket server event handlers.
93
+ */
94
+ setupServer(wss) {
95
+ wss.on('connection', (ws) => {
96
+ // Only allow one client at a time
97
+ if (this.client && this.client.readyState === WebSocket.OPEN) {
98
+ log('warn', 'Rejecting new client - one client already connected');
99
+ ws.close(1013, 'Another client is already connected');
100
+ return;
101
+ }
102
+ this.client = ws;
103
+ this.state = 'connected';
104
+ this.lastPongTime = Date.now();
105
+ log('info', 'Godot editor connected');
106
+ this.setupClientHandlers(ws);
107
+ this.startPingInterval(ws);
108
+ });
109
+ wss.on('error', (err) => {
110
+ log('error', 'WebSocket server error:', err.message);
111
+ });
112
+ }
113
+ /**
114
+ * Set up event handlers for a connected client.
115
+ */
116
+ setupClientHandlers(ws) {
117
+ ws.on('message', (data) => {
118
+ this.handleMessage(data);
119
+ });
120
+ ws.on('close', (code, reason) => {
121
+ log('info', `Godot editor disconnected (code: ${code}, reason: ${reason.toString()})`);
122
+ this.cleanup();
123
+ });
124
+ ws.on('error', (err) => {
125
+ log('error', 'Client WebSocket error:', err.message);
126
+ });
127
+ ws.on('pong', () => {
128
+ this.lastPongTime = Date.now();
129
+ });
130
+ }
131
+ /**
132
+ * Start the ping/pong keepalive interval.
133
+ */
134
+ startPingInterval(ws) {
137
135
  this.stopPingInterval();
138
- return;
139
- }
140
- // Check if last pong was too long ago
141
- const timeSinceLastPong = Date.now() - this.lastPongTime;
142
- if (timeSinceLastPong > PING_INTERVAL_MS + PING_TIMEOUT_MS) {
143
- log('warn', 'No pong received, closing connection');
144
- ws.terminate();
145
- return;
146
- }
147
- ws.ping();
148
- }, PING_INTERVAL_MS);
149
- }
150
- /**
151
- * Stop the ping interval.
152
- */
153
- stopPingInterval() {
154
- if (this.pingInterval) {
155
- clearInterval(this.pingInterval);
156
- this.pingInterval = null;
136
+ this.pingInterval = setInterval(() => {
137
+ if (ws.readyState !== WebSocket.OPEN) {
138
+ this.stopPingInterval();
139
+ return;
140
+ }
141
+ // Check if last pong was too long ago
142
+ const timeSinceLastPong = Date.now() - this.lastPongTime;
143
+ if (timeSinceLastPong > PING_INTERVAL_MS + PING_TIMEOUT_MS) {
144
+ log('warn', 'No pong received, closing connection');
145
+ ws.terminate();
146
+ return;
147
+ }
148
+ ws.ping();
149
+ }, PING_INTERVAL_MS);
157
150
  }
158
- }
159
- /**
160
- * Handle an incoming WebSocket message.
161
- */
162
- handleMessage(data) {
163
- let message;
164
- try {
165
- message = JSON.parse(data.toString());
166
- } catch {
167
- log('error', 'Failed to parse message as JSON');
168
- return;
151
+ /**
152
+ * Stop the ping interval.
153
+ */
154
+ stopPingInterval() {
155
+ if (this.pingInterval) {
156
+ clearInterval(this.pingInterval);
157
+ this.pingInterval = null;
158
+ }
159
+ }
160
+ /**
161
+ * Handle an incoming WebSocket message.
162
+ */
163
+ handleMessage(data) {
164
+ let message;
165
+ try {
166
+ message = JSON.parse(data.toString());
167
+ }
168
+ catch {
169
+ log('error', 'Failed to parse message as JSON');
170
+ return;
171
+ }
172
+ // Check if this is a response to a pending request
173
+ if ('id' in message && message.id !== undefined && message.id !== null) {
174
+ const pending = this.pendingRequests.get(message.id);
175
+ if (pending) {
176
+ this.pendingRequests.delete(message.id);
177
+ clearTimeout(pending.timer);
178
+ const response = message;
179
+ if (isSuccessResponse(response)) {
180
+ log('debug', `Response for ${pending.method}: success`);
181
+ pending.resolve(response.result);
182
+ }
183
+ else if (isErrorResponse(response)) {
184
+ const err = response;
185
+ const error = new Error(err.error.message);
186
+ error.code = err.error.code;
187
+ error.data = err.error.data;
188
+ log('debug', `Response for ${pending.method}: error - ${err.error.message}`);
189
+ pending.reject(error);
190
+ }
191
+ return;
192
+ }
193
+ }
194
+ // Otherwise it might be a notification from Godot (e.g., scene_changed)
195
+ log('debug', 'Received notification:', message);
169
196
  }
170
- // Check if this is a response to a pending request
171
- if ('id' in message && message.id !== undefined && message.id !== null) {
172
- const pending = this.pendingRequests.get(message.id);
173
- if (pending) {
174
- this.pendingRequests.delete(message.id);
175
- clearTimeout(pending.timer);
176
- const response = message;
177
- if (isSuccessResponse(response)) {
178
- log('debug', `Response for ${pending.method}: success`);
179
- pending.resolve(response.result);
180
- } else if (isErrorResponse(response)) {
181
- const err = response;
182
- const error = new Error(err.error.message);
183
- error.code = err.error.code;
184
- error.data = err.error.data;
185
- log('debug', `Response for ${pending.method}: error - ${err.error.message}`);
186
- pending.reject(error);
197
+ /**
198
+ * Send a JSON-RPC 2.0 request to Godot and wait for a response.
199
+ */
200
+ async sendRequest(method, params = {}) {
201
+ if (!this.client || this.client.readyState !== WebSocket.OPEN) {
202
+ throw new Error('Godot editor is not connected');
187
203
  }
188
- return;
189
- }
204
+ const id = `mcp_${++this.requestIdCounter}_${randomUUID().slice(0, 8)}`;
205
+ const request = {
206
+ jsonrpc: JSONRPC_VERSION,
207
+ id,
208
+ method,
209
+ params,
210
+ };
211
+ return new Promise((resolve, reject) => {
212
+ const timer = setTimeout(() => {
213
+ this.pendingRequests.delete(id);
214
+ reject(new Error(`Request ${method} timed out after ${REQUEST_TIMEOUT_MS}ms`));
215
+ }, REQUEST_TIMEOUT_MS);
216
+ this.pendingRequests.set(id, {
217
+ id,
218
+ method,
219
+ resolve,
220
+ reject,
221
+ timer,
222
+ });
223
+ const message = JSON.stringify(request);
224
+ log('debug', `Sending request: ${method} (id: ${id})`);
225
+ this.client.send(message, (err) => {
226
+ if (err) {
227
+ this.pendingRequests.delete(id);
228
+ clearTimeout(timer);
229
+ reject(new Error(`Failed to send request: ${err.message}`));
230
+ }
231
+ });
232
+ });
190
233
  }
191
- // Otherwise it might be a notification from Godot (e.g., scene_changed)
192
- log('debug', 'Received notification:', message);
193
- }
194
- /**
195
- * Send a JSON-RPC 2.0 request to Godot and wait for a response.
196
- */
197
- async sendRequest(method, params = {}) {
198
- if (!this.client || this.client.readyState !== WebSocket.OPEN) {
199
- throw new Error('Godot editor is not connected');
234
+ /**
235
+ * Send a JSON-RPC 2.0 notification (no response expected).
236
+ */
237
+ sendNotification(method, params = {}) {
238
+ if (!this.client || this.client.readyState !== WebSocket.OPEN) {
239
+ log('warn', `Cannot send notification ${method}: Godot not connected`);
240
+ return;
241
+ }
242
+ const notification = {
243
+ jsonrpc: JSONRPC_VERSION,
244
+ method,
245
+ params,
246
+ };
247
+ this.client.send(JSON.stringify(notification));
200
248
  }
201
- const id = `mcp_${++this.requestIdCounter}_${randomUUID().slice(0, 8)}`;
202
- const request = {
203
- jsonrpc: JSONRPC_VERSION,
204
- id,
205
- method,
206
- params,
207
- };
208
- return new Promise((resolve, reject) => {
209
- const timer = setTimeout(() => {
210
- this.pendingRequests.delete(id);
211
- reject(new Error(`Request ${method} timed out after ${REQUEST_TIMEOUT_MS}ms`));
212
- }, REQUEST_TIMEOUT_MS);
213
- this.pendingRequests.set(id, {
214
- id,
215
- method,
216
- resolve,
217
- reject,
218
- timer,
219
- });
220
- const message = JSON.stringify(request);
221
- log('debug', `Sending request: ${method} (id: ${id})`);
222
- this.client.send(message, (err) => {
223
- if (err) {
224
- this.pendingRequests.delete(id);
225
- clearTimeout(timer);
226
- reject(new Error(`Failed to send request: ${err.message}`));
249
+ /**
250
+ * Clean up connection state.
251
+ */
252
+ cleanup() {
253
+ this.state = 'disconnected';
254
+ this.client = null;
255
+ this.stopPingInterval();
256
+ // Reject all pending requests
257
+ for (const [, pending] of this.pendingRequests) {
258
+ clearTimeout(pending.timer);
259
+ pending.reject(new Error('Connection closed'));
227
260
  }
228
- });
229
- });
230
- }
231
- /**
232
- * Send a JSON-RPC 2.0 notification (no response expected).
233
- */
234
- sendNotification(method, params = {}) {
235
- if (!this.client || this.client.readyState !== WebSocket.OPEN) {
236
- log('warn', `Cannot send notification ${method}: Godot not connected`);
237
- return;
261
+ this.pendingRequests.clear();
238
262
  }
239
- const notification = {
240
- jsonrpc: JSONRPC_VERSION,
241
- method,
242
- params,
243
- };
244
- this.client.send(JSON.stringify(notification));
245
- }
246
- /**
247
- * Clean up connection state.
248
- */
249
- cleanup() {
250
- this.state = 'disconnected';
251
- this.client = null;
252
- this.stopPingInterval();
253
- // Reject all pending requests
254
- for (const [, pending] of this.pendingRequests) {
255
- clearTimeout(pending.timer);
256
- pending.reject(new Error('Connection closed'));
263
+ /**
264
+ * Get the current connection state.
265
+ */
266
+ getState() {
267
+ return this.state;
257
268
  }
258
- this.pendingRequests.clear();
259
- }
260
- /**
261
- * Get the current connection state.
262
- */
263
- getState() {
264
- return this.state;
265
- }
266
- /**
267
- * Check if a Godot client is connected.
268
- */
269
- isConnected() {
270
- return this.client !== null && this.client.readyState === WebSocket.OPEN;
271
- }
272
- /**
273
- * Get the port the server is listening on.
274
- */
275
- getPort() {
276
- return this.port;
277
- }
278
- /**
279
- * Shut down the bridge and close all connections.
280
- */
281
- async shutdown() {
282
- log('info', 'Shutting down bridge...');
283
- this.cleanup();
284
- if (this.wss) {
285
- await new Promise((resolve) => {
286
- this.wss.close(() => {
287
- this.wss = null;
288
- resolve();
289
- });
290
- });
269
+ /**
270
+ * Check if a Godot client is connected.
271
+ */
272
+ isConnected() {
273
+ return this.client !== null && this.client.readyState === WebSocket.OPEN;
274
+ }
275
+ /**
276
+ * Get the port the server is listening on.
277
+ */
278
+ getPort() {
279
+ return this.port;
280
+ }
281
+ /**
282
+ * Shut down the bridge and close all connections.
283
+ */
284
+ async shutdown() {
285
+ log('info', 'Shutting down bridge...');
286
+ this.cleanup();
287
+ if (this.wss) {
288
+ await new Promise((resolve) => {
289
+ this.wss.close(() => {
290
+ this.wss = null;
291
+ resolve();
292
+ });
293
+ });
294
+ }
291
295
  }
292
- }
293
296
  }
294
- //# sourceMappingURL=godot-bridge.js.map
297
+ //# sourceMappingURL=godot-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"godot-bridge.js","sourceRoot":"","sources":["../src/godot-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"godot-bridge.js","sourceRoot":"","sources":["../src/godot-bridge.ts"],"names":[],"mappings":"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"}