@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 +21 -12
- package/addon/plugin.cfg +1 -1
- package/dist/__tests__/helpers/mock-godot.d.ts +1 -0
- package/dist/__tests__/helpers/mock-godot.d.ts.map +1 -1
- package/dist/__tests__/helpers/mock-godot.js +7 -1
- package/dist/__tests__/helpers/mock-godot.js.map +1 -1
- package/dist/__tests__/tools/docs.test.d.ts +2 -0
- package/dist/__tests__/tools/docs.test.d.ts.map +1 -0
- package/dist/__tests__/tools/docs.test.js +135 -0
- package/dist/__tests__/tools/docs.test.js.map +1 -0
- package/dist/tools/docs.d.ts +23 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +161 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
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.
|
|
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
|
@@ -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;
|
|
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: {
|
|
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;
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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(/</g, '<')
|
|
91
|
+
.replace(/>/g, '>')
|
|
92
|
+
.replace(/&/g, '&')
|
|
93
|
+
.replace(/"/g, '"')
|
|
94
|
+
.replace(/'/g, "'")
|
|
95
|
+
.replace(/ /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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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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;
|
|
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"}
|