@satelliteoflove/godot-mcp 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,17 +4,24 @@ An MCP server that gives Claude direct visibility into your Godot editor and run
4
4
 
5
5
  ## Core Capabilities
6
6
 
7
- - Live editor state - what scene is open, what's selected, which panel you're in
8
- - Runtime debug output from the running game
9
- - Viewport awareness - where the camera is pointed (2D and 3D)
10
- - Screenshots of the editor or running game
11
- - Scene tree and node properties at runtime
12
-
13
- ## Design Goals
14
-
15
- - **Observation over automation** - help Claude understand what's happening so it can help you solve problems
16
- - **Minimal token footprint** - more room for actual conversation
17
- - **Friction-free maintenance** - version mismatch detection and one-command updates
7
+ **Observe** - Claude sees what you see
8
+ - Live editor state, selection, and open scenes
9
+ - Screenshots from editor viewports or running game
10
+ - Debug output and performance metrics from runtime
11
+ - Camera position and viewport in 2D and 3D
12
+
13
+ **Inspect** - Deep access to your project
14
+ - Scene tree traversal with node properties
15
+ - 3D spatial data: transforms, bounding boxes, visibility
16
+ - Resource introspection: SpriteFrames, TileSets, Materials
17
+ - Project settings and input mappings
18
+
19
+ **Modify** - Direct manipulation when needed
20
+ - Create, update, delete, and reparent nodes
21
+ - Attach and detach scripts
22
+ - Edit TileMapLayers and GridMaps cell-by-cell
23
+ - Control animation playback and edit tracks/keyframes
24
+ - Run and stop the game from the editor
18
25
 
19
26
  ## Quick Start
20
27
 
@@ -58,7 +65,7 @@ Then enable the addon in Godot: Project Settings > Plugins > Godot MCP.
58
65
 
59
66
  Open your Godot project (with addon enabled), restart your AI assistant, and start building.
60
67
 
61
- **Version Sync:** The MCP server auto-updates via npx. If the addon version falls behind, use `project` tool with `addon_status` action to check compatibility, then re-run the install command to update.
68
+ **Version Sync:** The MCP server auto-updates via npx. Version mismatches are detected automatically on connection. If prompted, re-run the install command to update the addon.
62
69
 
63
70
  ## Tools
64
71
 
@@ -72,6 +79,8 @@ Open your Godot project (with addon enabled), restart your AI assistant, and sta
72
79
  | `tilemap` | Query and edit TileMapLayer data: list layers, get info, get/set cells, convert coordinates |
73
80
  | `gridmap` | Query and edit GridMap data: list gridmaps, get info, get/set cells |
74
81
  | `resource` | Manage Godot resources: inspect Resource files by path |
82
+ | `scene3d` | Get spatial information for 3D nodes: global transforms, bounding boxes, visibility |
83
+ | `godot_docs` | Fetch Godot Engine documentation |
75
84
 
76
85
  See [docs/](docs/) for detailed API reference, including the [Claude Code Setup Guide](docs/claude-code-setup.md).
77
86
 
package/addon/plugin.cfg CHANGED
@@ -3,6 +3,6 @@
3
3
  name="Godot MCP"
4
4
  description="Model Context Protocol server for AI assistant integration"
5
5
  author="godot-mcp"
6
- version="2.4.1"
6
+ version="2.5.0"
7
7
  script="plugin.gd"
8
8
  godot_version_min="4.5"
@@ -9,6 +9,7 @@ export interface MockGodotConnection {
9
9
  calls: CommandCall[];
10
10
  mockResponse: (response: unknown) => void;
11
11
  mockError: (error: Error) => void;
12
+ godotVersion: string | null;
12
13
  }
13
14
  export declare function createMockGodot(): MockGodotConnection;
14
15
  export declare function createToolContext(mock: MockGodotConnection): {
@@ -1 +1 @@
1
- {"version":3,"file":"mock-godot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/mock-godot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,eAAe,IAAI,mBAAmB,CA2BrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB;WAEA,eAAe;EAEzE"}
1
+ {"version":3,"file":"mock-godot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/mock-godot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,eAAe,IAAI,mBAAmB,CA4BrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB;WAOvC,eAAe;EAElC"}
@@ -23,11 +23,17 @@ export function createMockGodot() {
23
23
  mockError: (error) => {
24
24
  nextError = error;
25
25
  },
26
+ godotVersion: null,
26
27
  };
27
28
  }
28
29
  export function createToolContext(mock) {
29
30
  return {
30
- godot: { sendCommand: mock.sendCommand },
31
+ godot: {
32
+ sendCommand: mock.sendCommand,
33
+ get godotVersion() {
34
+ return mock.godotVersion;
35
+ },
36
+ },
31
37
  };
32
38
  }
33
39
  //# sourceMappingURL=mock-godot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-godot.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/mock-godot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAe5B,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,YAAY,GAAY,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAiB,IAAI,CAAC;IAEnC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,SAAkC,EAAE,EAAE,EAAE;QACxF,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC9B,YAAY,GAAG,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,KAAK;QACL,YAAY,EAAE,CAAC,QAAiB,EAAE,EAAE;YAClC,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QACD,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;YAC1B,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,OAAO;QACL,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAgC;KACvE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mock-godot.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/mock-godot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAgB5B,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,YAAY,GAAY,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAiB,IAAI,CAAC;IAEnC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,SAAkC,EAAE,EAAE,EAAE;QACxF,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC9B,YAAY,GAAG,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,KAAK;QACL,YAAY,EAAE,CAAC,QAAiB,EAAE,EAAE;YAClC,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QACD,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;YAC1B,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,OAAO;QACL,KAAK,EAAE;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,YAAY;gBACd,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;SAC4B;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=docs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/tools/docs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createMockGodot, createToolContext } from '../helpers/mock-godot.js';
3
+ import { docs, docsTools } from '../../tools/docs.js';
4
+ describe('godot_docs tool', () => {
5
+ describe('tool definitions', () => {
6
+ it('exports one tool', () => {
7
+ expect(docsTools).toHaveLength(1);
8
+ });
9
+ it('has correct name and description', () => {
10
+ expect(docs.name).toBe('godot_docs');
11
+ expect(docs.description).toContain('Godot Engine documentation');
12
+ });
13
+ });
14
+ describe('schema validation', () => {
15
+ it('requires action', () => {
16
+ expect(docs.schema.safeParse({}).success).toBe(false);
17
+ });
18
+ it('requires class_name for fetch_class', () => {
19
+ const result = docs.schema.safeParse({ action: 'fetch_class' });
20
+ expect(result.success).toBe(true);
21
+ });
22
+ it('requires path for fetch_page', () => {
23
+ const result = docs.schema.safeParse({ action: 'fetch_page' });
24
+ expect(result.success).toBe(true);
25
+ });
26
+ it('accepts valid version values', () => {
27
+ const versions = ['stable', 'latest', '4.5', '4.4', '4.3', '4.2'];
28
+ for (const version of versions) {
29
+ const result = docs.schema.safeParse({
30
+ action: 'fetch_class',
31
+ class_name: 'Node2D',
32
+ version,
33
+ });
34
+ expect(result.success).toBe(true);
35
+ }
36
+ });
37
+ it('rejects invalid version', () => {
38
+ const result = docs.schema.safeParse({
39
+ action: 'fetch_class',
40
+ class_name: 'Node2D',
41
+ version: '3.5',
42
+ });
43
+ expect(result.success).toBe(false);
44
+ });
45
+ it('accepts valid section values', () => {
46
+ const sections = ['full', 'description', 'properties', 'methods', 'signals'];
47
+ for (const section of sections) {
48
+ const result = docs.schema.safeParse({
49
+ action: 'fetch_class',
50
+ class_name: 'Node2D',
51
+ section,
52
+ });
53
+ expect(result.success).toBe(true);
54
+ }
55
+ });
56
+ });
57
+ describe('fetch_class action (live integration)', () => {
58
+ it('fetches CharacterBody2D class reference', async () => {
59
+ const mock = createMockGodot();
60
+ const ctx = createToolContext(mock);
61
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'CharacterBody2D', version: 'stable', section: 'description' }, ctx);
62
+ expect(result).toContain('CharacterBody2D');
63
+ expect(result).toContain('Source: https://docs.godotengine.org');
64
+ expect(result).toContain('Approx tokens:');
65
+ });
66
+ it('returns smaller content with section filter', async () => {
67
+ const mock = createMockGodot();
68
+ const ctx = createToolContext(mock);
69
+ const fullResult = (await docs.execute({ action: 'fetch_class', class_name: 'Node2D', version: 'stable', section: 'full' }, ctx));
70
+ const descResult = (await docs.execute({ action: 'fetch_class', class_name: 'Node2D', version: 'stable', section: 'description' }, ctx));
71
+ expect(descResult.length).toBeLessThan(fullResult.length);
72
+ expect(descResult).toContain('Node2D');
73
+ expect(descResult).toContain('Description');
74
+ });
75
+ it('handles class name case insensitively', async () => {
76
+ const mock = createMockGodot();
77
+ const ctx = createToolContext(mock);
78
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'SPRITE2D', version: 'stable', section: 'description' }, ctx);
79
+ expect(result).toContain('Sprite2D');
80
+ });
81
+ it('throws error for non-existent class', async () => {
82
+ const mock = createMockGodot();
83
+ const ctx = createToolContext(mock);
84
+ await expect(docs.execute({ action: 'fetch_class', class_name: 'NotARealClass12345', version: 'stable', section: 'full' }, ctx)).rejects.toThrow('not found');
85
+ });
86
+ it('fetches from specific version', async () => {
87
+ const mock = createMockGodot();
88
+ const ctx = createToolContext(mock);
89
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'TileMapLayer', version: '4.5', section: 'description' }, ctx);
90
+ expect(result).toContain('https://docs.godotengine.org/en/4.5/');
91
+ expect(result).toContain('TileMapLayer');
92
+ });
93
+ });
94
+ describe('fetch_page action (live integration)', () => {
95
+ it('fetches tutorial page', async () => {
96
+ const mock = createMockGodot();
97
+ const ctx = createToolContext(mock);
98
+ const result = (await docs.execute({
99
+ action: 'fetch_page',
100
+ path: '/tutorials/2d/2d_movement.html',
101
+ version: 'stable',
102
+ section: 'full',
103
+ }, ctx));
104
+ expect(result).toContain('Source: https://docs.godotengine.org');
105
+ expect(result.length).toBeGreaterThan(1000);
106
+ });
107
+ });
108
+ describe('version auto-detection', () => {
109
+ it('uses detected version from Godot connection', async () => {
110
+ const mock = createMockGodot();
111
+ mock.godotVersion = '4.5.1';
112
+ const ctx = createToolContext(mock);
113
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'Node2D', section: 'description' }, ctx);
114
+ expect(result).toContain('(auto-detected: 4.5)');
115
+ expect(result).toContain('/en/4.5/');
116
+ });
117
+ it('falls back to stable when not connected', async () => {
118
+ const mock = createMockGodot();
119
+ mock.godotVersion = null;
120
+ const ctx = createToolContext(mock);
121
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'Node2D', section: 'description' }, ctx);
122
+ expect(result).toContain('(auto-detected: stable)');
123
+ expect(result).toContain('/en/stable/');
124
+ });
125
+ it('uses explicit version over auto-detected', async () => {
126
+ const mock = createMockGodot();
127
+ mock.godotVersion = '4.5.1';
128
+ const ctx = createToolContext(mock);
129
+ const result = await docs.execute({ action: 'fetch_class', class_name: 'Node2D', version: '4.4', section: 'description' }, ctx);
130
+ expect(result).not.toContain('auto-detected');
131
+ expect(result).toContain('/en/4.4/');
132
+ });
133
+ });
134
+ });
135
+ //# sourceMappingURL=docs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/docs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEtD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oBACnC,MAAM,EAAE,aAAa;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBACnC,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oBACnC,MAAM,EAAE,aAAa;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EACnG,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CACpC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EACnF,GAAG,CACJ,CAAW,CAAC;YAEb,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CACpC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAC1F,GAAG,CACJ,CAAW,CAAC;YAEb,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAC5F,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,CACV,IAAI,CAAC,OAAO,CACV,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAC/F,GAAG,CACJ,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAC7F,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAChC;gBACE,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,gCAAgC;gBACtC,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,MAAM;aAChB,EACD,GAAG,CACJ,CAAW,CAAC;YAEb,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EACvE,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EACvE,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EACvF,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import type { AnyToolDefinition } from '../core/types.js';
3
+ export declare const docs: import("../core/types.js").ToolDefinition<z.ZodObject<{
4
+ action: z.ZodEnum<["fetch_class", "fetch_page"]>;
5
+ class_name: z.ZodOptional<z.ZodString>;
6
+ path: z.ZodOptional<z.ZodString>;
7
+ version: z.ZodOptional<z.ZodEnum<["stable", "latest", "4.5", "4.4", "4.3", "4.2"]>>;
8
+ section: z.ZodDefault<z.ZodOptional<z.ZodEnum<["full", "description", "properties", "methods", "signals"]>>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ action: "fetch_class" | "fetch_page";
11
+ section: "description" | "properties" | "full" | "methods" | "signals";
12
+ path?: string | undefined;
13
+ class_name?: string | undefined;
14
+ version?: "stable" | "latest" | "4.5" | "4.4" | "4.3" | "4.2" | undefined;
15
+ }, {
16
+ action: "fetch_class" | "fetch_page";
17
+ path?: string | undefined;
18
+ class_name?: string | undefined;
19
+ version?: "stable" | "latest" | "4.5" | "4.4" | "4.3" | "4.2" | undefined;
20
+ section?: "description" | "properties" | "full" | "methods" | "signals" | undefined;
21
+ }>>;
22
+ export declare const docsTools: AnyToolDefinition[];
23
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/tools/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,kBAAkB,CAAC;AA8IvE,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;GAwCf,CAAC;AAEH,eAAO,MAAM,SAAS,EAAa,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../core/define-tool.js';
3
+ const GODOT_DOCS_BASE = 'https://docs.godotengine.org/en';
4
+ const FETCH_TIMEOUT_MS = 15000;
5
+ const SUPPORTED_VERSIONS = ['stable', 'latest', '4.5', '4.4', '4.3', '4.2'];
6
+ const DocsSchema = z.object({
7
+ action: z
8
+ .enum(['fetch_class', 'fetch_page'])
9
+ .describe('Action: fetch_class (get class reference by name), fetch_page (get any docs page by path)'),
10
+ class_name: z
11
+ .string()
12
+ .optional()
13
+ .describe('Class name to fetch, e.g. "CharacterBody2D" (fetch_class only)'),
14
+ path: z
15
+ .string()
16
+ .optional()
17
+ .describe('Documentation path, e.g. "/tutorials/2d/2d_movement.html" (fetch_page only)'),
18
+ version: z
19
+ .enum(SUPPORTED_VERSIONS)
20
+ .optional()
21
+ .describe('Godot docs version. If omitted, auto-detects from connected Godot editor or defaults to "stable"'),
22
+ section: z
23
+ .enum(['full', 'description', 'properties', 'methods', 'signals'])
24
+ .optional()
25
+ .default('full')
26
+ .describe('Which section to return (default: full). Use specific sections to reduce token usage.'),
27
+ });
28
+ function detectVersionFromGodot(ctx) {
29
+ const godotVersion = ctx.godot.godotVersion;
30
+ if (!godotVersion)
31
+ return null;
32
+ const match = godotVersion.match(/^(\d+\.\d+)/);
33
+ if (!match)
34
+ return null;
35
+ const majorMinor = match[1];
36
+ if (SUPPORTED_VERSIONS.includes(majorMinor)) {
37
+ return majorMinor;
38
+ }
39
+ return null;
40
+ }
41
+ async function fetchHtml(url) {
42
+ const controller = new AbortController();
43
+ const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
44
+ try {
45
+ const response = await fetch(url, { signal: controller.signal });
46
+ clearTimeout(timeoutId);
47
+ if (response.status === 404) {
48
+ throw new Error(`Documentation page not found: ${url}`);
49
+ }
50
+ if (!response.ok) {
51
+ throw new Error(`Failed to fetch documentation: HTTP ${response.status}`);
52
+ }
53
+ return response.text();
54
+ }
55
+ catch (error) {
56
+ clearTimeout(timeoutId);
57
+ if (error instanceof Error) {
58
+ if (error.name === 'AbortError') {
59
+ throw new Error(`Request timed out after ${FETCH_TIMEOUT_MS / 1000}s: ${url}`);
60
+ }
61
+ throw error;
62
+ }
63
+ throw new Error(`Failed to fetch documentation: ${url}`);
64
+ }
65
+ }
66
+ function extractMainContent(html) {
67
+ const mainMatch = html.match(/<div role="main"[^>]*>([\s\S]*?)<div role="contentinfo"/);
68
+ if (!mainMatch) {
69
+ throw new Error('Could not extract main content from documentation page. The page structure may have changed.');
70
+ }
71
+ return mainMatch[1];
72
+ }
73
+ function htmlToMarkdown(html) {
74
+ let md = html
75
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
76
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
77
+ .replace(/<h1[^>]*>([\s\S]*?)<\/h1>/gi, '# $1\n\n')
78
+ .replace(/<h2[^>]*>([\s\S]*?)<\/h2>/gi, '## $1\n\n')
79
+ .replace(/<h3[^>]*>([\s\S]*?)<\/h3>/gi, '### $1\n\n')
80
+ .replace(/<h4[^>]*>([\s\S]*?)<\/h4>/gi, '#### $1\n\n')
81
+ .replace(/<strong[^>]*>([\s\S]*?)<\/strong>/gi, '**$1**')
82
+ .replace(/<em[^>]*>([\s\S]*?)<\/em>/gi, '*$1*')
83
+ .replace(/<code[^>]*>([\s\S]*?)<\/code>/gi, '`$1`')
84
+ .replace(/<pre[^>]*>([\s\S]*?)<\/pre>/gi, '```\n$1\n```\n')
85
+ .replace(/<a[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi, '[$2]($1)')
86
+ .replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, '- $1\n')
87
+ .replace(/<\/?(?:ul|ol|div|span|p|table|tr|td|th|thead|tbody|section|article|nav|aside|header|footer|dl|dt|dd)[^>]*>/gi, '\n')
88
+ .replace(/<br\s*\/?>/gi, '\n')
89
+ .replace(/<[^>]+>/g, '')
90
+ .replace(/&lt;/g, '<')
91
+ .replace(/&gt;/g, '>')
92
+ .replace(/&amp;/g, '&')
93
+ .replace(/&quot;/g, '"')
94
+ .replace(/&#39;/g, "'")
95
+ .replace(/&nbsp;/g, ' ')
96
+ .replace(/\n{3,}/g, '\n\n')
97
+ .trim();
98
+ return md;
99
+ }
100
+ function extractSection(markdown, section) {
101
+ if (section === 'full')
102
+ return markdown;
103
+ const sections = markdown.split(/(?=^## )/m);
104
+ const sectionMap = {
105
+ description: ['Description'],
106
+ properties: ['Properties', 'Property'],
107
+ methods: ['Methods', 'Method'],
108
+ signals: ['Signals', 'Signal'],
109
+ };
110
+ const targetHeaders = sectionMap[section];
111
+ if (!targetHeaders)
112
+ return markdown;
113
+ if (section === 'description') {
114
+ const descSection = sections.find(s => s.startsWith('## Description'));
115
+ if (descSection) {
116
+ const titleMatch = markdown.match(/^# [^\n]+\n+(?:\*\*Inherits:[^\n]+\n+)?/);
117
+ const title = titleMatch ? titleMatch[0] : '';
118
+ return title + descSection.trim();
119
+ }
120
+ return `Section "description" not found in this class reference.`;
121
+ }
122
+ const matchingSection = sections.find(s => targetHeaders.some(h => s.startsWith(`## ${h}`)));
123
+ return matchingSection ? matchingSection.trim() : `Section "${section}" not found in this class reference.`;
124
+ }
125
+ export const docs = defineTool({
126
+ name: 'godot_docs',
127
+ description: 'Fetch Godot Engine documentation. Use fetch_class for class references (e.g. CharacterBody2D), fetch_page for tutorials/guides. Auto-detects Godot version from editor connection. Returns clean markdown.',
128
+ schema: DocsSchema,
129
+ async execute(args, ctx) {
130
+ const version = args.version ?? detectVersionFromGodot(ctx) ?? 'stable';
131
+ let url;
132
+ switch (args.action) {
133
+ case 'fetch_class': {
134
+ if (!args.class_name) {
135
+ throw new Error('class_name is required for fetch_class action');
136
+ }
137
+ const className = args.class_name.toLowerCase();
138
+ url = `${GODOT_DOCS_BASE}/${version}/classes/class_${className}.html`;
139
+ break;
140
+ }
141
+ case 'fetch_page': {
142
+ if (!args.path) {
143
+ throw new Error('path is required for fetch_page action');
144
+ }
145
+ const path = args.path.startsWith('/') ? args.path : '/' + args.path;
146
+ url = `${GODOT_DOCS_BASE}/${version}${path}`;
147
+ break;
148
+ }
149
+ }
150
+ const html = await fetchHtml(url);
151
+ const mainContent = extractMainContent(html);
152
+ const markdown = htmlToMarkdown(mainContent);
153
+ const result = extractSection(markdown, args.section || 'full');
154
+ const charCount = result.length;
155
+ const approxTokens = Math.round(charCount / 4);
156
+ const versionNote = args.version ? '' : ` (auto-detected: ${version})`;
157
+ return `Source: ${url}${versionNote}\nApprox tokens: ${approxTokens}\n\n---\n\n${result}`;
158
+ },
159
+ });
160
+ export const docsTools = [docs];
161
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/tools/docs.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,5 @@ export { animationTools } from './animation.js';
7
7
  export { tilemapTools } from './tilemap.js';
8
8
  export { resourceTools } from './resource.js';
9
9
  export { scene3dTools } from './scene3d.js';
10
+ export { docsTools } from './docs.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAUA,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAWA,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
@@ -7,6 +7,7 @@ import { animationTools } from './animation.js';
7
7
  import { tilemapTools } from './tilemap.js';
8
8
  import { resourceTools } from './resource.js';
9
9
  import { scene3dTools } from './scene3d.js';
10
+ import { docsTools } from './docs.js';
10
11
  export function registerAllTools() {
11
12
  registry.registerTools(sceneTools);
12
13
  registry.registerTools(nodeTools);
@@ -16,6 +17,7 @@ export function registerAllTools() {
16
17
  registry.registerTools(tilemapTools);
17
18
  registry.registerTools(resourceTools);
18
19
  registry.registerTools(scene3dTools);
20
+ registry.registerTools(docsTools);
19
21
  }
20
22
  export { sceneTools } from './scene.js';
21
23
  export { nodeTools } from './node.js';
@@ -25,4 +27,5 @@ export { animationTools } from './animation.js';
25
27
  export { tilemapTools } from './tilemap.js';
26
28
  export { resourceTools } from './resource.js';
27
29
  export { scene3dTools } from './scene3d.js';
30
+ export { docsTools } from './docs.js';
28
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@satelliteoflove/godot-mcp",
3
- "version": "2.4.1",
3
+ "version": "2.5.0",
4
4
  "description": "MCP server for Godot Engine integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",