@beremaran/godot-agent-loop 1.0.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/LICENSE +23 -0
- package/README.md +925 -0
- package/addons/godot_agent_loop/LICENSE +23 -0
- package/addons/godot_agent_loop/README.md +31 -0
- package/addons/godot_agent_loop/plugin.cfg +8 -0
- package/addons/godot_agent_loop/plugin.gd +417 -0
- package/agent-plugin/.claude-plugin/plugin.json +19 -0
- package/agent-plugin/.codex-plugin/plugin.json +37 -0
- package/agent-plugin/.mcp.json +14 -0
- package/agent-plugin/adapter-manifest.json +45 -0
- package/agent-plugin/pi/extension.ts +136 -0
- package/agent-plugin/skills/build-godot-game/SKILL.md +41 -0
- package/agent-plugin/skills/debug-godot-game/SKILL.md +37 -0
- package/agent-plugin/skills/ship-godot-game/SKILL.md +46 -0
- package/agent-plugin/skills/ship-godot-game/agents/openai.yaml +4 -0
- package/agent-plugin/skills/verify-godot-change/SKILL.md +35 -0
- package/build/authoring-session-manager.js +237 -0
- package/build/domain-tool-registries.js +207 -0
- package/build/editor-bridge-protocol.js +1 -0
- package/build/editor-connection.js +112 -0
- package/build/editor-mutation-guard.js +30 -0
- package/build/editor-plugin-installer.js +220 -0
- package/build/engine-api/extension_api-4.7.stable.official.5b4e0cb0f.json +356830 -0
- package/build/game-command-service.js +49 -0
- package/build/game-connection.js +337 -0
- package/build/godot-executable.js +156 -0
- package/build/godot-process-manager.js +112 -0
- package/build/godot-subprocess.js +23 -0
- package/build/headless-operation-runner.js +68 -0
- package/build/headless-operation-service.js +65 -0
- package/build/index.js +478 -0
- package/build/interaction-server-installer.js +234 -0
- package/build/opencode-setup.js +199 -0
- package/build/project-support.js +219 -0
- package/build/runtime-protocol.js +202 -0
- package/build/scripts/godot_operations.gd +1534 -0
- package/build/scripts/mcp_editor_plugin.gd +417 -0
- package/build/scripts/mcp_interaction_server.gd +1255 -0
- package/build/scripts/mcp_runtime/audio_animation_domain.gd +568 -0
- package/build/scripts/mcp_runtime/command_params.gd +339 -0
- package/build/scripts/mcp_runtime/core_domain.gd +591 -0
- package/build/scripts/mcp_runtime/input_domain.gd +695 -0
- package/build/scripts/mcp_runtime/networking_domain.gd +356 -0
- package/build/scripts/mcp_runtime/physics_domain.gd +653 -0
- package/build/scripts/mcp_runtime/privileged_command_policy.gd +81 -0
- package/build/scripts/mcp_runtime/rendering_domain.gd +807 -0
- package/build/scripts/mcp_runtime/runtime_domain.gd +108 -0
- package/build/scripts/mcp_runtime/scene_2d_domain.gd +527 -0
- package/build/scripts/mcp_runtime/scene_3d_domain.gd +573 -0
- package/build/scripts/mcp_runtime/system_domain.gd +277 -0
- package/build/scripts/mcp_runtime/ui_domain.gd +619 -0
- package/build/scripts/mcp_runtime/variant_codec.gd +335 -0
- package/build/scripts/validate_script.gd +28 -0
- package/build/server-instructions.js +11 -0
- package/build/session-timing.js +20 -0
- package/build/tool-argument-validation.js +120 -0
- package/build/tool-definitions.js +2727 -0
- package/build/tool-handlers/game-tool-handlers.js +1345 -0
- package/build/tool-handlers/lifecycle-tool-handlers.js +346 -0
- package/build/tool-handlers/project-handler-services.js +1458 -0
- package/build/tool-handlers/project-tool-handlers.js +1506 -0
- package/build/tool-handlers/visual-regression-service.js +139 -0
- package/build/tool-manifest.js +1193 -0
- package/build/tool-mutation-policy.js +122 -0
- package/build/tool-registry.js +34 -0
- package/build/tool-surface.js +70 -0
- package/build/utils.js +273 -0
- package/package.json +110 -0
- package/product.json +52 -0
- package/scripts/prepare-package.js +42 -0
|
@@ -0,0 +1,2727 @@
|
|
|
1
|
+
export const toolDefinitions = [
|
|
2
|
+
{
|
|
3
|
+
name: 'godot_tools',
|
|
4
|
+
description: 'Search, inspect, or call tools outside the default core surface',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
action: { type: 'string', enum: ['search', 'describe', 'call'], description: 'Discovery or dispatch action' },
|
|
9
|
+
query: { type: 'string', maxLength: 200, description: 'Name/description/action search text' },
|
|
10
|
+
domain: { type: 'string', enum: ['lifecycle', 'project', 'game'], description: 'Optional domain filter' },
|
|
11
|
+
limit: { type: 'integer', minimum: 1, maximum: 50, description: 'Maximum search results. Default: 20' },
|
|
12
|
+
toolName: { type: 'string', pattern: '^[a-z][a-z0-9_]*$', description: 'Tool to describe or call' },
|
|
13
|
+
arguments: { type: 'object', description: 'Arguments passed to the selected tool' },
|
|
14
|
+
},
|
|
15
|
+
required: ['action'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'launch_editor',
|
|
20
|
+
description: 'Launch Godot editor for a specific project',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
projectPath: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Godot project path',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ['projectPath'],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'editor_control',
|
|
34
|
+
description: 'Inspect and edit open scenes through an authenticated editor bridge',
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
projectPath: { type: 'string', description: 'Godot project path whose editor is open' },
|
|
39
|
+
action: { type: 'string', enum: ['inspect', 'select', 'save', 'reload', 'open_scene', 'set_property', 'rename_node', 'undo', 'redo'], description: 'Editor action' },
|
|
40
|
+
nodePaths: { type: 'array', items: { type: 'string' }, maxItems: 128, description: 'Scene-relative node paths for select' },
|
|
41
|
+
scenePath: { type: 'string', description: 'Project-relative or res:// scene path' },
|
|
42
|
+
nodePath: { type: 'string', description: 'Scene-relative node path' },
|
|
43
|
+
property: { type: 'string', description: 'Property to edit' },
|
|
44
|
+
value: { description: 'New property value' },
|
|
45
|
+
name: { type: 'string', minLength: 1, maxLength: 128, description: 'New node name' },
|
|
46
|
+
},
|
|
47
|
+
required: ['projectPath', 'action'],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'run_project',
|
|
52
|
+
description: 'Run the Godot project and capture output',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
projectPath: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Godot project path',
|
|
59
|
+
},
|
|
60
|
+
scene: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description: 'Optional: Specific scene to run',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ['projectPath'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'verify_project',
|
|
70
|
+
description: 'Run bounded assertions and capture evidence with deterministic teardown',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
75
|
+
scene: { type: 'string', description: 'Optional scene to run' },
|
|
76
|
+
waitFrames: { type: 'integer', minimum: 1, maximum: 600, description: 'Frames to wait before assertions. Default: 2' },
|
|
77
|
+
assertions: {
|
|
78
|
+
type: 'array',
|
|
79
|
+
maxItems: 32,
|
|
80
|
+
description: 'Bounded assertions evaluated against the running game',
|
|
81
|
+
items: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
kind: { type: 'string', enum: ['node_exists', 'group_count', 'log_contains'], description: 'Assertion kind' },
|
|
85
|
+
nodePath: { type: 'string', description: 'Node path for node_exists' },
|
|
86
|
+
group: { type: 'string', description: 'Group name for group_count' },
|
|
87
|
+
count: { type: 'integer', minimum: 0, description: 'Expected group member count' },
|
|
88
|
+
text: { type: 'string', description: 'Required output substring for log_contains' },
|
|
89
|
+
},
|
|
90
|
+
required: ['kind'],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
captureScreenshot: { type: 'boolean', description: 'Capture a screenshot and return its SHA-256 digest. Default: false' },
|
|
94
|
+
teardown: { type: 'boolean', description: 'Stop the project after verification. Default: true' },
|
|
95
|
+
},
|
|
96
|
+
required: ['projectPath'],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'run_project_tests',
|
|
101
|
+
description: 'Discover or run native, GUT, and GdUnit4 project tests with structured results',
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
106
|
+
action: { type: 'string', enum: ['discover', 'run'], description: 'Discover tests or run them' },
|
|
107
|
+
framework: { type: 'string', enum: ['auto', 'native', 'gut', 'gdunit4'], description: 'Test framework. Default: auto' },
|
|
108
|
+
testPaths: { type: 'array', items: { type: 'string' }, maxItems: 64, description: 'Project-relative test files or directories' },
|
|
109
|
+
artifactPaths: { type: 'array', items: { type: 'string' }, maxItems: 32, description: 'Project-relative report files to return as artifact metadata' },
|
|
110
|
+
timeoutSeconds: { type: 'number', minimum: 1, maximum: 300, description: 'Per-run timeout. Default: 60' },
|
|
111
|
+
failFast: { type: 'boolean', description: 'Stop native execution after the first failed file. Default: false' },
|
|
112
|
+
},
|
|
113
|
+
required: ['projectPath', 'action'],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'manage_import_pipeline',
|
|
118
|
+
description: 'Inspect, change, reimport, and trace imported Godot source assets',
|
|
119
|
+
inputSchema: {
|
|
120
|
+
type: 'object',
|
|
121
|
+
properties: {
|
|
122
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
123
|
+
action: { type: 'string', enum: ['inspect', 'change', 'reimport', 'dependencies'], description: 'Import workflow action' },
|
|
124
|
+
sourcePath: { type: 'string', description: 'Project-relative source asset path' },
|
|
125
|
+
settings: { type: 'object', description: 'Importer parameter values for change (string, number, or boolean)' },
|
|
126
|
+
timeoutSeconds: { type: 'number', minimum: 1, maximum: 300, description: 'Reimport timeout. Default: 120' },
|
|
127
|
+
},
|
|
128
|
+
required: ['projectPath', 'action'],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'analyze_project_integrity',
|
|
133
|
+
description: 'Analyze dependencies and integrity or preview a safe resource rename',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
138
|
+
action: {
|
|
139
|
+
type: 'string',
|
|
140
|
+
enum: ['analyze', 'preview_rename', 'assets', 'localization', 'accessibility', 'extensions', 'leaks'],
|
|
141
|
+
description: 'Analysis action. Static audits are bounded and read-only; leaks reports runtime-independent orphan candidates.',
|
|
142
|
+
},
|
|
143
|
+
sourcePath: { type: 'string', description: 'Existing project-relative path for rename preview' },
|
|
144
|
+
destinationPath: { type: 'string', description: 'Proposed project-relative rename destination' },
|
|
145
|
+
maxFiles: { type: 'integer', minimum: 1, maximum: 50000, description: 'Resource scan limit. Default: 10000' },
|
|
146
|
+
},
|
|
147
|
+
required: ['projectPath', 'action'],
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'verify_export_readiness',
|
|
152
|
+
description: 'Validate presets/templates, export, inspect artifacts, and smoke-run builds',
|
|
153
|
+
inputSchema: {
|
|
154
|
+
type: 'object',
|
|
155
|
+
properties: {
|
|
156
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
157
|
+
action: { type: 'string', enum: ['inspect', 'export_smoke'], description: 'Inspect readiness or export and smoke-run' },
|
|
158
|
+
presetName: { type: 'string', description: 'Export preset name' },
|
|
159
|
+
outputPath: { type: 'string', description: 'Project-relative or allowed absolute export artifact path' },
|
|
160
|
+
debug: { type: 'boolean', description: 'Use debug export/templates. Default: false' },
|
|
161
|
+
smoke: { type: 'boolean', description: 'Smoke-run supported local outputs. Default: true' },
|
|
162
|
+
expectedOutput: { type: 'string', maxLength: 4096, description: 'Required smoke-run output substring' },
|
|
163
|
+
timeoutSeconds: { type: 'number', minimum: 1, maximum: 600, description: 'Export timeout. Default: 120' },
|
|
164
|
+
smokeTimeoutSeconds: { type: 'number', minimum: 1, maximum: 60, description: 'Smoke runtime before quit. Default: 5' },
|
|
165
|
+
},
|
|
166
|
+
required: ['projectPath', 'action', 'presetName'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'verify_dotnet_project',
|
|
171
|
+
description: 'Inspect, restore, build, and run a project with the matching Godot.NET.Sdk',
|
|
172
|
+
inputSchema: {
|
|
173
|
+
type: 'object',
|
|
174
|
+
properties: {
|
|
175
|
+
projectPath: { type: 'string', description: 'Godot .NET project path' },
|
|
176
|
+
action: { type: 'string', enum: ['inspect', 'restore', 'build', 'run'], description: '.NET workflow action' },
|
|
177
|
+
csprojPath: { type: 'string', description: 'Project-relative .csproj path; auto-detected when unique' },
|
|
178
|
+
configuration: { type: 'string', enum: ['Debug', 'Release'], description: 'Build configuration. Default: Debug' },
|
|
179
|
+
expectedOutput: { type: 'string', maxLength: 4096, description: 'Required game-run output substring' },
|
|
180
|
+
timeoutSeconds: { type: 'number', minimum: 1, maximum: 600, description: 'Restore/build timeout. Default: 120' },
|
|
181
|
+
runTimeoutSeconds: { type: 'number', minimum: 1, maximum: 60, description: 'Game runtime before quit. Default: 5' },
|
|
182
|
+
},
|
|
183
|
+
required: ['projectPath', 'action'],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'manage_addon',
|
|
188
|
+
description: 'Install and manage hash-pinned local EditorPlugins with reload validation',
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: 'object',
|
|
191
|
+
properties: {
|
|
192
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
193
|
+
action: { type: 'string', enum: ['inspect', 'install', 'update', 'remove', 'enable', 'disable'], description: 'Add-on lifecycle action' },
|
|
194
|
+
pluginName: { type: 'string', pattern: '^[A-Za-z0-9_.-]{1,80}$', description: 'Target addons directory name' },
|
|
195
|
+
sourcePath: { type: 'string', description: 'Allowed local source directory for install/update' },
|
|
196
|
+
expectedSha256: { type: 'string', pattern: '^[a-fA-F0-9]{64}$', description: 'Required deterministic source-tree SHA-256 pin' },
|
|
197
|
+
enable: { type: 'boolean', description: 'Enable after install/update. Default: false' },
|
|
198
|
+
expectedOutput: { type: 'string', maxLength: 4096, description: 'Required editor reload output substring' },
|
|
199
|
+
},
|
|
200
|
+
required: ['projectPath', 'action', 'pluginName'],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'get_debug_output',
|
|
205
|
+
description: 'Get the current debug output and errors',
|
|
206
|
+
inputSchema: {
|
|
207
|
+
type: 'object',
|
|
208
|
+
properties: {},
|
|
209
|
+
required: [],
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: 'stop_project',
|
|
214
|
+
description: 'Stop the currently running Godot project',
|
|
215
|
+
inputSchema: {
|
|
216
|
+
type: 'object',
|
|
217
|
+
properties: {},
|
|
218
|
+
required: [],
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'get_godot_version',
|
|
223
|
+
description: 'Get the installed Godot version',
|
|
224
|
+
inputSchema: {
|
|
225
|
+
type: 'object',
|
|
226
|
+
properties: {},
|
|
227
|
+
required: [],
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: 'list_projects',
|
|
232
|
+
description: 'List Godot projects in a directory',
|
|
233
|
+
inputSchema: {
|
|
234
|
+
type: 'object',
|
|
235
|
+
properties: {
|
|
236
|
+
directory: {
|
|
237
|
+
type: 'string',
|
|
238
|
+
description: 'Directory to search for Godot projects',
|
|
239
|
+
},
|
|
240
|
+
recursive: {
|
|
241
|
+
type: 'boolean',
|
|
242
|
+
description: 'Whether to search recursively (default: false)',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
required: ['directory'],
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
name: 'get_project_info',
|
|
250
|
+
description: 'Retrieve metadata about a Godot project',
|
|
251
|
+
inputSchema: {
|
|
252
|
+
type: 'object',
|
|
253
|
+
properties: {
|
|
254
|
+
projectPath: {
|
|
255
|
+
type: 'string',
|
|
256
|
+
description: 'Godot project path',
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
required: ['projectPath'],
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: 'create_scene',
|
|
264
|
+
description: 'Create a new Godot scene file',
|
|
265
|
+
inputSchema: {
|
|
266
|
+
type: 'object',
|
|
267
|
+
properties: {
|
|
268
|
+
projectPath: {
|
|
269
|
+
type: 'string',
|
|
270
|
+
description: 'Godot project path',
|
|
271
|
+
},
|
|
272
|
+
scenePath: {
|
|
273
|
+
type: 'string',
|
|
274
|
+
description: 'Path where the scene file will be saved (relative to project)',
|
|
275
|
+
},
|
|
276
|
+
rootNodeType: {
|
|
277
|
+
type: 'string',
|
|
278
|
+
description: 'Type of the root node (e.g., Node2D, Node3D)',
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
required: ['projectPath', 'scenePath'],
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'add_node',
|
|
286
|
+
description: 'Add a node to an existing scene',
|
|
287
|
+
inputSchema: {
|
|
288
|
+
type: 'object',
|
|
289
|
+
properties: {
|
|
290
|
+
projectPath: {
|
|
291
|
+
type: 'string',
|
|
292
|
+
description: 'Godot project path',
|
|
293
|
+
},
|
|
294
|
+
scenePath: {
|
|
295
|
+
type: 'string',
|
|
296
|
+
description: 'Scene file path (relative to project)',
|
|
297
|
+
},
|
|
298
|
+
parentNodePath: {
|
|
299
|
+
type: 'string',
|
|
300
|
+
description: 'Path to the parent node (e.g., "root" or "root/Player")',
|
|
301
|
+
},
|
|
302
|
+
nodeType: {
|
|
303
|
+
type: 'string',
|
|
304
|
+
description: 'Type of node to add (e.g., Sprite2D, CollisionShape2D)',
|
|
305
|
+
},
|
|
306
|
+
nodeName: {
|
|
307
|
+
type: 'string',
|
|
308
|
+
description: 'Name for the new node',
|
|
309
|
+
},
|
|
310
|
+
properties: {
|
|
311
|
+
type: 'object',
|
|
312
|
+
description: 'Optional properties to set on the node',
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
required: ['projectPath', 'scenePath', 'nodeType', 'nodeName'],
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: 'load_sprite',
|
|
320
|
+
description: 'Load a sprite into a Sprite2D node',
|
|
321
|
+
inputSchema: {
|
|
322
|
+
type: 'object',
|
|
323
|
+
properties: {
|
|
324
|
+
projectPath: {
|
|
325
|
+
type: 'string',
|
|
326
|
+
description: 'Godot project path',
|
|
327
|
+
},
|
|
328
|
+
scenePath: {
|
|
329
|
+
type: 'string',
|
|
330
|
+
description: 'Scene file path (relative to project)',
|
|
331
|
+
},
|
|
332
|
+
nodePath: {
|
|
333
|
+
type: 'string',
|
|
334
|
+
description: 'Path to the Sprite2D node (e.g., "root/Player/Sprite2D")',
|
|
335
|
+
},
|
|
336
|
+
texturePath: {
|
|
337
|
+
type: 'string',
|
|
338
|
+
description: 'Path to the texture file (relative to project)',
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
required: ['projectPath', 'scenePath', 'nodePath', 'texturePath'],
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: 'export_mesh_library',
|
|
346
|
+
description: 'Export a scene as a MeshLibrary resource',
|
|
347
|
+
inputSchema: {
|
|
348
|
+
type: 'object',
|
|
349
|
+
properties: {
|
|
350
|
+
projectPath: {
|
|
351
|
+
type: 'string',
|
|
352
|
+
description: 'Godot project path',
|
|
353
|
+
},
|
|
354
|
+
scenePath: {
|
|
355
|
+
type: 'string',
|
|
356
|
+
description: 'Path to the scene file (.tscn) to export',
|
|
357
|
+
},
|
|
358
|
+
outputPath: {
|
|
359
|
+
type: 'string',
|
|
360
|
+
description: 'Path where the mesh library (.res) will be saved',
|
|
361
|
+
},
|
|
362
|
+
meshItemNames: {
|
|
363
|
+
type: 'array',
|
|
364
|
+
items: {
|
|
365
|
+
type: 'string',
|
|
366
|
+
},
|
|
367
|
+
description: 'Optional: Names of specific mesh items to include (defaults to all)',
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
required: ['projectPath', 'scenePath', 'outputPath'],
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
name: 'save_scene',
|
|
375
|
+
description: 'Save changes to a scene file',
|
|
376
|
+
inputSchema: {
|
|
377
|
+
type: 'object',
|
|
378
|
+
properties: {
|
|
379
|
+
projectPath: {
|
|
380
|
+
type: 'string',
|
|
381
|
+
description: 'Godot project path',
|
|
382
|
+
},
|
|
383
|
+
scenePath: {
|
|
384
|
+
type: 'string',
|
|
385
|
+
description: 'Scene file path (relative to project)',
|
|
386
|
+
},
|
|
387
|
+
newPath: {
|
|
388
|
+
type: 'string',
|
|
389
|
+
description: 'Optional: New path to save the scene to (for creating variants)',
|
|
390
|
+
},
|
|
391
|
+
},
|
|
392
|
+
required: ['projectPath', 'scenePath'],
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: 'get_uid',
|
|
397
|
+
description: 'Get the UID for a specific file in a Godot project (for Godot 4.4+)',
|
|
398
|
+
inputSchema: {
|
|
399
|
+
type: 'object',
|
|
400
|
+
properties: {
|
|
401
|
+
projectPath: {
|
|
402
|
+
type: 'string',
|
|
403
|
+
description: 'Godot project path',
|
|
404
|
+
},
|
|
405
|
+
filePath: {
|
|
406
|
+
type: 'string',
|
|
407
|
+
description: 'Path to the file (relative to project) for which to get the UID',
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
required: ['projectPath', 'filePath'],
|
|
411
|
+
},
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
name: 'update_project_uids',
|
|
415
|
+
description: 'Update UID references by resaving resources (4.4+)',
|
|
416
|
+
inputSchema: {
|
|
417
|
+
type: 'object',
|
|
418
|
+
properties: {
|
|
419
|
+
projectPath: {
|
|
420
|
+
type: 'string',
|
|
421
|
+
description: 'Godot project path',
|
|
422
|
+
},
|
|
423
|
+
},
|
|
424
|
+
required: ['projectPath'],
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
name: 'game_screenshot',
|
|
429
|
+
description: 'Screenshot the running game (returns base64 PNG)',
|
|
430
|
+
inputSchema: {
|
|
431
|
+
type: 'object',
|
|
432
|
+
properties: {},
|
|
433
|
+
required: [],
|
|
434
|
+
},
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
name: 'game_visual_regression',
|
|
438
|
+
description: 'Capture or compare rendered PNGs with tolerances, masks, and diff artifacts',
|
|
439
|
+
inputSchema: {
|
|
440
|
+
type: 'object',
|
|
441
|
+
properties: {
|
|
442
|
+
action: { type: 'string', enum: ['capture_baseline', 'compare'], description: 'Capture a baseline or compare the current frame' },
|
|
443
|
+
baselinePath: { type: 'string', description: 'Project-relative baseline PNG path' },
|
|
444
|
+
maskPath: { type: 'string', description: 'Optional PNG mask; transparent pixels are ignored' },
|
|
445
|
+
diffArtifactPath: { type: 'string', description: 'Optional project-relative output PNG for retained diff evidence' },
|
|
446
|
+
channelTolerance: { type: 'integer', minimum: 0, maximum: 255, description: 'Maximum per-channel delta. Default: 0' },
|
|
447
|
+
maxDifferentPixelRatio: { type: 'number', minimum: 0, maximum: 1, description: 'Allowed different-pixel ratio. Default: 0' },
|
|
448
|
+
},
|
|
449
|
+
required: ['action', 'baselinePath'],
|
|
450
|
+
},
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
name: 'game_click',
|
|
454
|
+
description: 'Click at a position in the running Godot game window',
|
|
455
|
+
inputSchema: {
|
|
456
|
+
type: 'object',
|
|
457
|
+
properties: {
|
|
458
|
+
x: {
|
|
459
|
+
type: 'number',
|
|
460
|
+
description: 'X coordinate to click',
|
|
461
|
+
},
|
|
462
|
+
y: {
|
|
463
|
+
type: 'number',
|
|
464
|
+
description: 'Y coordinate to click',
|
|
465
|
+
},
|
|
466
|
+
button: {
|
|
467
|
+
type: 'integer',
|
|
468
|
+
description: 'Mouse button (1=left, 2=right, 3=middle). Default: 1',
|
|
469
|
+
},
|
|
470
|
+
},
|
|
471
|
+
required: ['x', 'y'],
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
name: 'game_key_press',
|
|
476
|
+
description: 'Send a key press or input action to the running game',
|
|
477
|
+
inputSchema: {
|
|
478
|
+
type: 'object',
|
|
479
|
+
properties: {
|
|
480
|
+
key: {
|
|
481
|
+
type: 'string',
|
|
482
|
+
description: 'Key name (e.g. "W", "Space", "Escape", "Enter")',
|
|
483
|
+
},
|
|
484
|
+
action: {
|
|
485
|
+
type: 'string',
|
|
486
|
+
description: 'Godot input action name (e.g. "move_forward", "ui_accept")',
|
|
487
|
+
},
|
|
488
|
+
pressed: {
|
|
489
|
+
type: 'boolean',
|
|
490
|
+
description: 'Press (true) or release (false). Default: true (auto-release)',
|
|
491
|
+
},
|
|
492
|
+
text: { type: 'string', minLength: 1, maxLength: 256, description: 'Unicode text to inject instead of a named key/action' },
|
|
493
|
+
physical: { type: 'boolean', description: 'Treat key as a physical key location' },
|
|
494
|
+
shift: { type: 'boolean', description: 'Shift modifier' },
|
|
495
|
+
ctrl: { type: 'boolean', description: 'Ctrl modifier' },
|
|
496
|
+
alt: { type: 'boolean', description: 'Alt modifier' },
|
|
497
|
+
meta: { type: 'boolean', description: 'Meta/Command modifier' },
|
|
498
|
+
},
|
|
499
|
+
required: [],
|
|
500
|
+
},
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
name: 'game_mouse_move',
|
|
504
|
+
description: 'Move the mouse in the running Godot game',
|
|
505
|
+
inputSchema: {
|
|
506
|
+
type: 'object',
|
|
507
|
+
properties: {
|
|
508
|
+
x: {
|
|
509
|
+
type: 'number',
|
|
510
|
+
description: 'Absolute X position',
|
|
511
|
+
},
|
|
512
|
+
y: {
|
|
513
|
+
type: 'number',
|
|
514
|
+
description: 'Absolute Y position',
|
|
515
|
+
},
|
|
516
|
+
relative_x: {
|
|
517
|
+
type: 'number',
|
|
518
|
+
description: 'Relative X movement',
|
|
519
|
+
},
|
|
520
|
+
relative_y: {
|
|
521
|
+
type: 'number',
|
|
522
|
+
description: 'Relative Y movement',
|
|
523
|
+
},
|
|
524
|
+
},
|
|
525
|
+
required: ['x', 'y'],
|
|
526
|
+
},
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
name: 'game_get_ui',
|
|
530
|
+
description: 'Get visible UI elements from the running game',
|
|
531
|
+
inputSchema: {
|
|
532
|
+
type: 'object',
|
|
533
|
+
properties: {},
|
|
534
|
+
required: [],
|
|
535
|
+
},
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
name: 'game_get_scene_tree',
|
|
539
|
+
description: 'Get scene tree structure of the running game',
|
|
540
|
+
inputSchema: {
|
|
541
|
+
type: 'object',
|
|
542
|
+
properties: {
|
|
543
|
+
maxNodes: { type: 'integer', minimum: 1, maximum: 10000, description: 'Maximum nodes returned in deterministic pre-order. Default: 1000' },
|
|
544
|
+
},
|
|
545
|
+
required: [],
|
|
546
|
+
},
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
name: 'game_eval',
|
|
550
|
+
description: 'Execute GDScript in the running game. Use "return" for values.',
|
|
551
|
+
inputSchema: {
|
|
552
|
+
type: 'object',
|
|
553
|
+
properties: {
|
|
554
|
+
code: {
|
|
555
|
+
type: 'string',
|
|
556
|
+
description: 'GDScript code to execute. Use "return" to return values.',
|
|
557
|
+
},
|
|
558
|
+
},
|
|
559
|
+
required: ['code'],
|
|
560
|
+
},
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: 'game_get_property',
|
|
564
|
+
description: 'Get a property value from any node in the running game by its path',
|
|
565
|
+
inputSchema: {
|
|
566
|
+
type: 'object',
|
|
567
|
+
properties: {
|
|
568
|
+
nodePath: {
|
|
569
|
+
type: 'string',
|
|
570
|
+
description: 'Path to the node (e.g., "/root/Player", "/root/Main/Enemy")',
|
|
571
|
+
},
|
|
572
|
+
property: {
|
|
573
|
+
type: 'string',
|
|
574
|
+
description: 'Property name to get (e.g., "position", "health", "visible")',
|
|
575
|
+
},
|
|
576
|
+
},
|
|
577
|
+
required: ['nodePath', 'property'],
|
|
578
|
+
},
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
name: 'game_set_property',
|
|
582
|
+
description: 'Set a property on a node in the running game',
|
|
583
|
+
inputSchema: {
|
|
584
|
+
type: 'object',
|
|
585
|
+
properties: {
|
|
586
|
+
nodePath: {
|
|
587
|
+
type: 'string',
|
|
588
|
+
description: 'Path to the node',
|
|
589
|
+
},
|
|
590
|
+
property: {
|
|
591
|
+
type: 'string',
|
|
592
|
+
description: 'Property name to set',
|
|
593
|
+
},
|
|
594
|
+
value: {
|
|
595
|
+
description: 'Value to set. Use objects for vectors/colors',
|
|
596
|
+
},
|
|
597
|
+
typeHint: {
|
|
598
|
+
type: 'string',
|
|
599
|
+
description: 'Optional type hint: "Vector2", "Vector3", "Color"',
|
|
600
|
+
},
|
|
601
|
+
},
|
|
602
|
+
required: ['nodePath', 'property', 'value'],
|
|
603
|
+
},
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
name: 'game_call_method',
|
|
607
|
+
description: 'Call a method on any node in the running game with optional arguments',
|
|
608
|
+
inputSchema: {
|
|
609
|
+
type: 'object',
|
|
610
|
+
properties: {
|
|
611
|
+
nodePath: {
|
|
612
|
+
type: 'string',
|
|
613
|
+
description: 'Path to the node',
|
|
614
|
+
},
|
|
615
|
+
method: {
|
|
616
|
+
type: 'string',
|
|
617
|
+
description: 'Method name to call',
|
|
618
|
+
},
|
|
619
|
+
args: {
|
|
620
|
+
type: 'array',
|
|
621
|
+
description: 'Optional array of arguments to pass to the method',
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
required: ['nodePath', 'method'],
|
|
625
|
+
},
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
name: 'game_get_node_info',
|
|
629
|
+
description: 'Get node info: class, properties, signals, methods, children',
|
|
630
|
+
inputSchema: {
|
|
631
|
+
type: 'object',
|
|
632
|
+
properties: {
|
|
633
|
+
nodePath: {
|
|
634
|
+
type: 'string',
|
|
635
|
+
description: 'Path to the node (e.g., "/root/Player")',
|
|
636
|
+
},
|
|
637
|
+
},
|
|
638
|
+
required: ['nodePath'],
|
|
639
|
+
},
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
name: 'game_instantiate_scene',
|
|
643
|
+
description: 'Load a PackedScene and add it as a child of a node in the running game',
|
|
644
|
+
inputSchema: {
|
|
645
|
+
type: 'object',
|
|
646
|
+
properties: {
|
|
647
|
+
scenePath: {
|
|
648
|
+
type: 'string',
|
|
649
|
+
description: 'Resource path to the scene (e.g., "res://scenes/enemy.tscn")',
|
|
650
|
+
},
|
|
651
|
+
parentPath: {
|
|
652
|
+
type: 'string',
|
|
653
|
+
description: 'Path to the parent node. Default: "/root"',
|
|
654
|
+
},
|
|
655
|
+
},
|
|
656
|
+
required: ['scenePath'],
|
|
657
|
+
},
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
name: 'game_remove_node',
|
|
661
|
+
description: 'Remove and free a node from the running game\'s scene tree',
|
|
662
|
+
inputSchema: {
|
|
663
|
+
type: 'object',
|
|
664
|
+
properties: {
|
|
665
|
+
nodePath: {
|
|
666
|
+
type: 'string',
|
|
667
|
+
description: 'Path to the node to remove',
|
|
668
|
+
},
|
|
669
|
+
},
|
|
670
|
+
required: ['nodePath'],
|
|
671
|
+
},
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
name: 'game_change_scene',
|
|
675
|
+
description: 'Switch to a different scene file in the running game',
|
|
676
|
+
inputSchema: {
|
|
677
|
+
type: 'object',
|
|
678
|
+
properties: {
|
|
679
|
+
scenePath: {
|
|
680
|
+
type: 'string',
|
|
681
|
+
description: 'Resource path to the scene (e.g., "res://scenes/levels/level2.tscn")',
|
|
682
|
+
},
|
|
683
|
+
},
|
|
684
|
+
required: ['scenePath'],
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
name: 'game_pause',
|
|
689
|
+
description: 'Pause or unpause the running game',
|
|
690
|
+
inputSchema: {
|
|
691
|
+
type: 'object',
|
|
692
|
+
properties: {
|
|
693
|
+
paused: {
|
|
694
|
+
type: 'boolean',
|
|
695
|
+
description: 'True to pause, false to unpause. Default: true',
|
|
696
|
+
},
|
|
697
|
+
},
|
|
698
|
+
required: [],
|
|
699
|
+
},
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
name: 'game_performance',
|
|
703
|
+
description: 'Sample live performance metrics or run a bounded profiler session',
|
|
704
|
+
inputSchema: {
|
|
705
|
+
type: 'object',
|
|
706
|
+
properties: {
|
|
707
|
+
action: { type: 'string', enum: ['sample', 'start', 'stop', 'report', 'leaks'], description: 'Profiler action. Default: sample' },
|
|
708
|
+
sampleCount: { type: 'integer', minimum: 1, maximum: 120, description: 'Number of samples for a bounded session. Default: 1' },
|
|
709
|
+
},
|
|
710
|
+
required: [],
|
|
711
|
+
},
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
name: 'game_wait',
|
|
715
|
+
description: 'Wait N frames in the running game',
|
|
716
|
+
inputSchema: {
|
|
717
|
+
type: 'object',
|
|
718
|
+
properties: {
|
|
719
|
+
frames: {
|
|
720
|
+
type: 'integer',
|
|
721
|
+
description: 'Positive integer number of frames to wait. Default: 1',
|
|
722
|
+
},
|
|
723
|
+
frameType: {
|
|
724
|
+
type: 'string',
|
|
725
|
+
enum: ['render', 'physics'],
|
|
726
|
+
description: 'Frame to wait on: "physics" (fixed 60Hz ticks) or "render". Default: render',
|
|
727
|
+
},
|
|
728
|
+
},
|
|
729
|
+
required: [],
|
|
730
|
+
},
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
name: 'read_scene',
|
|
734
|
+
description: 'Read scene file as JSON node tree (headless)',
|
|
735
|
+
inputSchema: {
|
|
736
|
+
type: 'object',
|
|
737
|
+
properties: {
|
|
738
|
+
projectPath: {
|
|
739
|
+
type: 'string',
|
|
740
|
+
description: 'Godot project path',
|
|
741
|
+
},
|
|
742
|
+
scenePath: {
|
|
743
|
+
type: 'string',
|
|
744
|
+
description: 'Scene file path (relative to project)',
|
|
745
|
+
},
|
|
746
|
+
},
|
|
747
|
+
required: ['projectPath', 'scenePath'],
|
|
748
|
+
},
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
name: 'modify_scene_node',
|
|
752
|
+
description: 'Modify node properties in a scene file (headless)',
|
|
753
|
+
inputSchema: {
|
|
754
|
+
type: 'object',
|
|
755
|
+
properties: {
|
|
756
|
+
projectPath: {
|
|
757
|
+
type: 'string',
|
|
758
|
+
description: 'Godot project path',
|
|
759
|
+
},
|
|
760
|
+
scenePath: {
|
|
761
|
+
type: 'string',
|
|
762
|
+
description: 'Scene file path (relative to project)',
|
|
763
|
+
},
|
|
764
|
+
nodePath: {
|
|
765
|
+
type: 'string',
|
|
766
|
+
description: 'Path to the node within the scene (e.g., "root/Player/Sprite2D")',
|
|
767
|
+
},
|
|
768
|
+
properties: {
|
|
769
|
+
type: 'object',
|
|
770
|
+
description: 'Properties to set on the node as key-value pairs',
|
|
771
|
+
},
|
|
772
|
+
},
|
|
773
|
+
required: ['projectPath', 'scenePath', 'nodePath', 'properties'],
|
|
774
|
+
},
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
name: 'remove_scene_node',
|
|
778
|
+
description: 'Remove a node from a scene file (headless)',
|
|
779
|
+
inputSchema: {
|
|
780
|
+
type: 'object',
|
|
781
|
+
properties: {
|
|
782
|
+
projectPath: {
|
|
783
|
+
type: 'string',
|
|
784
|
+
description: 'Godot project path',
|
|
785
|
+
},
|
|
786
|
+
scenePath: {
|
|
787
|
+
type: 'string',
|
|
788
|
+
description: 'Scene file path (relative to project)',
|
|
789
|
+
},
|
|
790
|
+
nodePath: {
|
|
791
|
+
type: 'string',
|
|
792
|
+
description: 'Path to the node to remove (e.g., "root/Player/OldNode")',
|
|
793
|
+
},
|
|
794
|
+
},
|
|
795
|
+
required: ['projectPath', 'scenePath', 'nodePath'],
|
|
796
|
+
},
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
name: 'read_project_settings',
|
|
800
|
+
description: 'Read project.godot as structured JSON',
|
|
801
|
+
inputSchema: {
|
|
802
|
+
type: 'object',
|
|
803
|
+
properties: {
|
|
804
|
+
projectPath: {
|
|
805
|
+
type: 'string',
|
|
806
|
+
description: 'Godot project path',
|
|
807
|
+
},
|
|
808
|
+
},
|
|
809
|
+
required: ['projectPath'],
|
|
810
|
+
},
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
name: 'modify_project_settings',
|
|
814
|
+
description: 'Modify a project.godot setting',
|
|
815
|
+
inputSchema: {
|
|
816
|
+
type: 'object',
|
|
817
|
+
properties: {
|
|
818
|
+
projectPath: {
|
|
819
|
+
type: 'string',
|
|
820
|
+
description: 'Godot project path',
|
|
821
|
+
},
|
|
822
|
+
section: {
|
|
823
|
+
type: 'string',
|
|
824
|
+
description: 'Section in project.godot (e.g., "application", "display", "rendering")',
|
|
825
|
+
},
|
|
826
|
+
key: {
|
|
827
|
+
type: 'string',
|
|
828
|
+
description: 'Setting key (e.g., "run/main_scene", "window/size/viewport_width")',
|
|
829
|
+
},
|
|
830
|
+
value: {
|
|
831
|
+
type: 'string',
|
|
832
|
+
description: 'Value to set (as a string, will be written as-is)',
|
|
833
|
+
},
|
|
834
|
+
},
|
|
835
|
+
required: ['projectPath', 'section', 'key', 'value'],
|
|
836
|
+
},
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
name: 'list_project_files',
|
|
840
|
+
description: 'List project files, optionally filtered by extension',
|
|
841
|
+
inputSchema: {
|
|
842
|
+
type: 'object',
|
|
843
|
+
properties: {
|
|
844
|
+
projectPath: {
|
|
845
|
+
type: 'string',
|
|
846
|
+
description: 'Godot project path',
|
|
847
|
+
},
|
|
848
|
+
extensions: {
|
|
849
|
+
type: 'array',
|
|
850
|
+
items: { type: 'string' },
|
|
851
|
+
description: 'Optional file extensions to filter by (e.g., [".gd", ".tscn"]). Include the dot.',
|
|
852
|
+
},
|
|
853
|
+
subdirectory: {
|
|
854
|
+
type: 'string',
|
|
855
|
+
description: 'Optional subdirectory to search in (e.g., "scripts/player")',
|
|
856
|
+
},
|
|
857
|
+
limit: {
|
|
858
|
+
type: 'integer',
|
|
859
|
+
minimum: 1,
|
|
860
|
+
maximum: 1000,
|
|
861
|
+
description: 'Maximum files returned per page. Default: 1000',
|
|
862
|
+
},
|
|
863
|
+
cursor: {
|
|
864
|
+
type: 'integer',
|
|
865
|
+
minimum: 0,
|
|
866
|
+
description: 'Zero-based cursor from a previous response. Default: 0',
|
|
867
|
+
},
|
|
868
|
+
},
|
|
869
|
+
required: ['projectPath'],
|
|
870
|
+
},
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
name: 'game_connect_signal',
|
|
874
|
+
description: 'Connect a signal from one node to a method on another node in the running game',
|
|
875
|
+
inputSchema: {
|
|
876
|
+
type: 'object',
|
|
877
|
+
properties: {
|
|
878
|
+
nodePath: { type: 'string', description: 'Path to the source node that emits the signal' },
|
|
879
|
+
signalName: { type: 'string', description: 'Name of the signal to connect' },
|
|
880
|
+
targetPath: { type: 'string', description: 'Path to the target node that receives the signal' },
|
|
881
|
+
method: { type: 'string', description: 'Method name to call on the target node' },
|
|
882
|
+
binds: { type: 'array', description: 'Optional arguments appended after emitted signal arguments' },
|
|
883
|
+
deferred: { type: 'boolean', description: 'Deliver the callable at the end of the current frame' },
|
|
884
|
+
oneShot: { type: 'boolean', description: 'Disconnect automatically after the first delivery' },
|
|
885
|
+
referenceCounted: { type: 'boolean', description: 'Allow duplicate connections using Godot reference counting' },
|
|
886
|
+
},
|
|
887
|
+
required: ['nodePath', 'signalName', 'targetPath', 'method'],
|
|
888
|
+
},
|
|
889
|
+
},
|
|
890
|
+
{
|
|
891
|
+
name: 'game_disconnect_signal',
|
|
892
|
+
description: 'Disconnect a signal connection in the running game',
|
|
893
|
+
inputSchema: {
|
|
894
|
+
type: 'object',
|
|
895
|
+
properties: {
|
|
896
|
+
nodePath: { type: 'string', description: 'Path to the source node' },
|
|
897
|
+
signalName: { type: 'string', description: 'Name of the signal' },
|
|
898
|
+
targetPath: { type: 'string', description: 'Path to the target node' },
|
|
899
|
+
method: { type: 'string', description: 'Method name on the target' },
|
|
900
|
+
binds: { type: 'array', description: 'Bound arguments used when the connection was created' },
|
|
901
|
+
},
|
|
902
|
+
required: ['nodePath', 'signalName', 'targetPath', 'method'],
|
|
903
|
+
},
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
name: 'game_emit_signal',
|
|
907
|
+
description: 'Emit a signal on a node in the running game, optionally with arguments',
|
|
908
|
+
inputSchema: {
|
|
909
|
+
type: 'object',
|
|
910
|
+
properties: {
|
|
911
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
912
|
+
signalName: { type: 'string', description: 'Name of the signal to emit' },
|
|
913
|
+
args: { type: 'array', description: 'Optional arguments to pass with the signal' },
|
|
914
|
+
},
|
|
915
|
+
required: ['nodePath', 'signalName'],
|
|
916
|
+
},
|
|
917
|
+
},
|
|
918
|
+
{
|
|
919
|
+
name: 'game_play_animation',
|
|
920
|
+
description: 'Control an AnimationPlayer node: play, stop, pause, or list animations',
|
|
921
|
+
inputSchema: {
|
|
922
|
+
type: 'object',
|
|
923
|
+
properties: {
|
|
924
|
+
nodePath: { type: 'string', description: 'Path to the AnimationPlayer node' },
|
|
925
|
+
action: { type: 'string', enum: ['play', 'stop', 'pause', 'get_list'], description: 'Playback action. Default: play' },
|
|
926
|
+
animation: { type: 'string', description: 'Animation name (required for "play" action)' },
|
|
927
|
+
},
|
|
928
|
+
required: ['nodePath'],
|
|
929
|
+
},
|
|
930
|
+
},
|
|
931
|
+
{
|
|
932
|
+
name: 'game_tween_property',
|
|
933
|
+
description: 'Tween a node property in the running game',
|
|
934
|
+
inputSchema: {
|
|
935
|
+
type: 'object',
|
|
936
|
+
properties: {
|
|
937
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
938
|
+
property: { type: 'string', description: 'Property to tween (e.g., "position", "modulate")' },
|
|
939
|
+
finalValue: { description: 'Target value. Use {x,y} for Vector2, {x,y,z} for Vector3, {r,g,b,a} for Color' },
|
|
940
|
+
duration: { type: 'number', minimum: 0.001, description: 'Duration in seconds. Default: 1.0' },
|
|
941
|
+
transType: { type: 'integer', minimum: 0, maximum: 11, description: 'Tween.TransitionType enum value. Default: 0 (LINEAR)' },
|
|
942
|
+
easeType: { type: 'integer', minimum: 0, maximum: 3, description: 'Tween.EaseType enum value. Default: 2 (IN_OUT)' },
|
|
943
|
+
},
|
|
944
|
+
required: ['nodePath', 'property', 'finalValue'],
|
|
945
|
+
},
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
name: 'game_get_nodes_in_group',
|
|
949
|
+
description: 'Get all nodes belonging to a specific group in the running game',
|
|
950
|
+
inputSchema: {
|
|
951
|
+
type: 'object',
|
|
952
|
+
properties: {
|
|
953
|
+
group: { type: 'string', description: 'Group name (e.g., "enemies", "player", "checkpoints")' },
|
|
954
|
+
},
|
|
955
|
+
required: ['group'],
|
|
956
|
+
},
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
name: 'game_find_nodes_by_class',
|
|
960
|
+
description: 'Find all nodes of a specific class type in the running game',
|
|
961
|
+
inputSchema: {
|
|
962
|
+
type: 'object',
|
|
963
|
+
properties: {
|
|
964
|
+
className: { type: 'string', description: 'Class name to search for (e.g., "CharacterBody3D", "Light3D")' },
|
|
965
|
+
rootPath: { type: 'string', description: 'Root node path to start searching from. Default: "/root"' },
|
|
966
|
+
},
|
|
967
|
+
required: ['className'],
|
|
968
|
+
},
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
name: 'game_reparent_node',
|
|
972
|
+
description: 'Move a node to a new parent in the running game\'s scene tree',
|
|
973
|
+
inputSchema: {
|
|
974
|
+
type: 'object',
|
|
975
|
+
properties: {
|
|
976
|
+
nodePath: { type: 'string', description: 'Path to the node to move' },
|
|
977
|
+
newParentPath: { type: 'string', description: 'Path to the new parent node' },
|
|
978
|
+
keepGlobalTransform: { type: 'boolean', description: 'Whether to keep the global transform. Default: true' },
|
|
979
|
+
},
|
|
980
|
+
required: ['nodePath', 'newParentPath'],
|
|
981
|
+
},
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
name: 'attach_script',
|
|
985
|
+
description: 'Attach a GDScript to a scene node (headless)',
|
|
986
|
+
inputSchema: {
|
|
987
|
+
type: 'object',
|
|
988
|
+
properties: {
|
|
989
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
990
|
+
scenePath: { type: 'string', description: 'Scene file path (relative to project)' },
|
|
991
|
+
nodePath: { type: 'string', description: 'Path to the node within the scene (e.g., "root/Player")' },
|
|
992
|
+
scriptPath: { type: 'string', description: 'Path to the .gd script file (relative to project)' },
|
|
993
|
+
},
|
|
994
|
+
required: ['projectPath', 'scenePath', 'nodePath', 'scriptPath'],
|
|
995
|
+
},
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
name: 'create_resource',
|
|
999
|
+
description: 'Create a .tres resource file (headless)',
|
|
1000
|
+
inputSchema: {
|
|
1001
|
+
type: 'object',
|
|
1002
|
+
properties: {
|
|
1003
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1004
|
+
resourceType: { type: 'string', description: 'Godot class name (e.g., "StandardMaterial3D", "Theme", "Environment")' },
|
|
1005
|
+
resourcePath: { type: 'string', description: 'Where to save the .tres file (relative to project)' },
|
|
1006
|
+
properties: { type: 'object', description: 'Optional properties to set on the resource' },
|
|
1007
|
+
},
|
|
1008
|
+
required: ['projectPath', 'resourceType', 'resourcePath'],
|
|
1009
|
+
},
|
|
1010
|
+
},
|
|
1011
|
+
// File I/O tools
|
|
1012
|
+
{
|
|
1013
|
+
name: 'read_file',
|
|
1014
|
+
description: 'Read a text file from a Godot project',
|
|
1015
|
+
inputSchema: {
|
|
1016
|
+
type: 'object',
|
|
1017
|
+
properties: {
|
|
1018
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1019
|
+
filePath: { type: 'string', description: 'File path relative to project root' },
|
|
1020
|
+
},
|
|
1021
|
+
required: ['projectPath', 'filePath'],
|
|
1022
|
+
},
|
|
1023
|
+
},
|
|
1024
|
+
{
|
|
1025
|
+
name: 'write_file',
|
|
1026
|
+
description: 'Create or overwrite a text file in a Godot project',
|
|
1027
|
+
inputSchema: {
|
|
1028
|
+
type: 'object',
|
|
1029
|
+
properties: {
|
|
1030
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1031
|
+
filePath: { type: 'string', description: 'File path relative to project root' },
|
|
1032
|
+
content: { type: 'string', description: 'File content to write' },
|
|
1033
|
+
},
|
|
1034
|
+
required: ['projectPath', 'filePath', 'content'],
|
|
1035
|
+
},
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
name: 'delete_file',
|
|
1039
|
+
description: 'Delete a file from a Godot project',
|
|
1040
|
+
inputSchema: {
|
|
1041
|
+
type: 'object',
|
|
1042
|
+
properties: {
|
|
1043
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1044
|
+
filePath: { type: 'string', description: 'File path relative to project root' },
|
|
1045
|
+
},
|
|
1046
|
+
required: ['projectPath', 'filePath'],
|
|
1047
|
+
},
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
name: 'create_directory',
|
|
1051
|
+
description: 'Create a directory inside a Godot project',
|
|
1052
|
+
inputSchema: {
|
|
1053
|
+
type: 'object',
|
|
1054
|
+
properties: {
|
|
1055
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1056
|
+
directoryPath: { type: 'string', description: 'Directory path relative to project root' },
|
|
1057
|
+
},
|
|
1058
|
+
required: ['projectPath', 'directoryPath'],
|
|
1059
|
+
},
|
|
1060
|
+
},
|
|
1061
|
+
// Error/Log capture tools
|
|
1062
|
+
{
|
|
1063
|
+
name: 'game_get_errors',
|
|
1064
|
+
description: 'Get new push_error/push_warning messages since last call',
|
|
1065
|
+
inputSchema: {
|
|
1066
|
+
type: 'object',
|
|
1067
|
+
properties: {
|
|
1068
|
+
maxItems: { type: 'integer', minimum: 1, maximum: 1000, description: 'Maximum unread error lines returned. Default: 1000' },
|
|
1069
|
+
},
|
|
1070
|
+
required: [],
|
|
1071
|
+
},
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
name: 'game_get_logs',
|
|
1075
|
+
description: 'Get new print output from the running game since last call',
|
|
1076
|
+
inputSchema: {
|
|
1077
|
+
type: 'object',
|
|
1078
|
+
properties: {
|
|
1079
|
+
maxItems: { type: 'integer', minimum: 1, maximum: 1000, description: 'Maximum unread log lines returned. Default: 1000' },
|
|
1080
|
+
},
|
|
1081
|
+
required: [],
|
|
1082
|
+
},
|
|
1083
|
+
},
|
|
1084
|
+
// Enhanced input tools
|
|
1085
|
+
{
|
|
1086
|
+
name: 'game_key_hold',
|
|
1087
|
+
description: 'Hold a key down without auto-releasing',
|
|
1088
|
+
inputSchema: {
|
|
1089
|
+
type: 'object',
|
|
1090
|
+
properties: {
|
|
1091
|
+
key: { type: 'string', description: 'Key name (e.g. "W", "Space", "Shift")' },
|
|
1092
|
+
action: { type: 'string', description: 'Godot input action name (e.g. "move_forward")' },
|
|
1093
|
+
},
|
|
1094
|
+
required: [],
|
|
1095
|
+
},
|
|
1096
|
+
},
|
|
1097
|
+
{
|
|
1098
|
+
name: 'game_key_release',
|
|
1099
|
+
description: 'Release a previously held key',
|
|
1100
|
+
inputSchema: {
|
|
1101
|
+
type: 'object',
|
|
1102
|
+
properties: {
|
|
1103
|
+
key: { type: 'string', description: 'Key name to release' },
|
|
1104
|
+
action: { type: 'string', description: 'Godot input action name to release' },
|
|
1105
|
+
},
|
|
1106
|
+
required: [],
|
|
1107
|
+
},
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
name: 'game_scroll',
|
|
1111
|
+
description: 'Send mouse scroll wheel event at position',
|
|
1112
|
+
inputSchema: {
|
|
1113
|
+
type: 'object',
|
|
1114
|
+
properties: {
|
|
1115
|
+
x: { type: 'number', description: 'X position for scroll event' },
|
|
1116
|
+
y: { type: 'number', description: 'Y position for scroll event' },
|
|
1117
|
+
direction: { type: 'string', enum: ['up', 'down', 'left', 'right'], description: 'Scroll direction. Default: up' },
|
|
1118
|
+
amount: { type: 'integer', minimum: 1, maximum: 1000, description: 'Scroll clicks. Default: 1' },
|
|
1119
|
+
},
|
|
1120
|
+
required: ['x', 'y'],
|
|
1121
|
+
},
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
name: 'game_mouse_drag',
|
|
1125
|
+
description: 'Drag mouse between two points over N frames',
|
|
1126
|
+
inputSchema: {
|
|
1127
|
+
type: 'object',
|
|
1128
|
+
properties: {
|
|
1129
|
+
fromX: { type: 'number', description: 'Start X coordinate' },
|
|
1130
|
+
fromY: { type: 'number', description: 'Start Y coordinate' },
|
|
1131
|
+
toX: { type: 'number', description: 'End X coordinate' },
|
|
1132
|
+
toY: { type: 'number', description: 'End Y coordinate' },
|
|
1133
|
+
button: { type: 'integer', description: 'Mouse button (1=left, 2=right, 3=middle, 8/9=extra). Default: 1' },
|
|
1134
|
+
steps: { type: 'integer', description: 'Positive number of frames for the drag. Default: 10' },
|
|
1135
|
+
},
|
|
1136
|
+
required: ['fromX', 'fromY', 'toX', 'toY'],
|
|
1137
|
+
},
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
name: 'game_gamepad',
|
|
1141
|
+
description: 'Send gamepad button or axis input event',
|
|
1142
|
+
inputSchema: {
|
|
1143
|
+
type: 'object',
|
|
1144
|
+
properties: {
|
|
1145
|
+
type: { type: 'string', enum: ['button', 'axis'], description: 'Input type' },
|
|
1146
|
+
index: { type: 'integer', minimum: 0, maximum: 15, description: 'Button or axis index' },
|
|
1147
|
+
value: { type: 'number', minimum: -1, maximum: 1, description: 'Button pressure or axis value' },
|
|
1148
|
+
device: { type: 'integer', minimum: 0, maximum: 7, description: 'Gamepad device index. Default: 0' },
|
|
1149
|
+
deadzone: { type: 'number', minimum: 0, maximum: 1, description: 'Axis values below this magnitude become zero' },
|
|
1150
|
+
},
|
|
1151
|
+
required: ['type', 'index', 'value'],
|
|
1152
|
+
},
|
|
1153
|
+
},
|
|
1154
|
+
// Project management tools
|
|
1155
|
+
{
|
|
1156
|
+
name: 'create_project',
|
|
1157
|
+
description: 'Create a new Godot project from scratch',
|
|
1158
|
+
inputSchema: {
|
|
1159
|
+
type: 'object',
|
|
1160
|
+
properties: {
|
|
1161
|
+
projectPath: { type: 'string', description: 'Directory where the project will be created' },
|
|
1162
|
+
projectName: { type: 'string', minLength: 1, maxLength: 128, description: 'Name of the project' },
|
|
1163
|
+
dotnet: { type: 'boolean', description: 'Scaffold a .NET (C#) project (.csproj + "C#" feature). Default: false' },
|
|
1164
|
+
},
|
|
1165
|
+
required: ['projectPath', 'projectName'],
|
|
1166
|
+
},
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
name: 'create_csharp_script',
|
|
1170
|
+
description: 'Create a C# script file in a Godot .NET project',
|
|
1171
|
+
inputSchema: {
|
|
1172
|
+
type: 'object',
|
|
1173
|
+
properties: {
|
|
1174
|
+
projectPath: { type: 'string', description: 'Godot .NET project path (must contain a .csproj)' },
|
|
1175
|
+
scriptPath: { type: 'string', description: 'Script file path relative to project (e.g. "scripts/Player.cs")' },
|
|
1176
|
+
className: { type: 'string', description: 'C# class name. Default: derived from the file name' },
|
|
1177
|
+
baseClass: { type: 'string', description: 'Godot base class to extend. Default: Node' },
|
|
1178
|
+
namespaceName: { type: 'string', description: 'Optional C# namespace' },
|
|
1179
|
+
methods: { type: 'array', items: { type: 'string' }, description: 'Method stubs (e.g. _Ready, _Process) to include' },
|
|
1180
|
+
source: { type: 'string', description: 'Full source code (overrides template)' },
|
|
1181
|
+
},
|
|
1182
|
+
required: ['projectPath', 'scriptPath'],
|
|
1183
|
+
},
|
|
1184
|
+
},
|
|
1185
|
+
{
|
|
1186
|
+
name: 'manage_autoloads',
|
|
1187
|
+
description: 'Add, remove, or list autoloads in a Godot project',
|
|
1188
|
+
inputSchema: {
|
|
1189
|
+
type: 'object',
|
|
1190
|
+
properties: {
|
|
1191
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1192
|
+
action: { type: 'string', description: '"list", "add", or "remove"' },
|
|
1193
|
+
name: { type: 'string', description: 'Autoload name (required for add/remove)' },
|
|
1194
|
+
path: { type: 'string', description: 'Script/scene path (required for add, e.g. "res://globals.gd")' },
|
|
1195
|
+
},
|
|
1196
|
+
required: ['projectPath', 'action'],
|
|
1197
|
+
},
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
name: 'manage_input_map',
|
|
1201
|
+
description: 'Add, remove, or list input actions and bindings',
|
|
1202
|
+
inputSchema: {
|
|
1203
|
+
type: 'object',
|
|
1204
|
+
properties: {
|
|
1205
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1206
|
+
action: { type: 'string', description: '"list", "add", or "remove"' },
|
|
1207
|
+
actionName: { type: 'string', description: 'Input action name (required for add/remove)' },
|
|
1208
|
+
key: { type: 'string', description: 'Key to bind (for add, e.g. "W", "Space")' },
|
|
1209
|
+
deadzone: { type: 'number', description: 'Deadzone for the action. Default: 0.5' },
|
|
1210
|
+
},
|
|
1211
|
+
required: ['projectPath', 'action'],
|
|
1212
|
+
},
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
name: 'manage_export_presets',
|
|
1216
|
+
description: 'Create or modify export preset configuration',
|
|
1217
|
+
inputSchema: {
|
|
1218
|
+
type: 'object',
|
|
1219
|
+
properties: {
|
|
1220
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1221
|
+
action: { type: 'string', description: '"list", "add", or "remove"' },
|
|
1222
|
+
name: { type: 'string', description: 'Preset name (required for add/remove)' },
|
|
1223
|
+
platform: { type: 'string', description: 'Platform (for add, e.g. "Windows Desktop", "Linux", "Web")' },
|
|
1224
|
+
runnable: { type: 'boolean', description: 'Whether this preset is runnable. Default: false' },
|
|
1225
|
+
},
|
|
1226
|
+
required: ['projectPath', 'action'],
|
|
1227
|
+
},
|
|
1228
|
+
},
|
|
1229
|
+
// Advanced runtime tools
|
|
1230
|
+
{
|
|
1231
|
+
name: 'game_get_camera',
|
|
1232
|
+
description: 'Get active camera position, rotation, and size',
|
|
1233
|
+
inputSchema: {
|
|
1234
|
+
type: 'object',
|
|
1235
|
+
properties: {},
|
|
1236
|
+
required: [],
|
|
1237
|
+
},
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
name: 'game_set_camera',
|
|
1241
|
+
description: 'Move or rotate the active camera',
|
|
1242
|
+
inputSchema: {
|
|
1243
|
+
type: 'object',
|
|
1244
|
+
properties: {
|
|
1245
|
+
position: { type: 'object', description: '{x,y} or {x,y,z} for camera position' },
|
|
1246
|
+
rotation: { type: 'object', description: '{x,y,z} rotation in degrees' },
|
|
1247
|
+
zoom: { type: 'object', description: '{x,y} zoom for Camera2D' },
|
|
1248
|
+
fov: { type: 'number', description: 'Field of view for Camera3D' },
|
|
1249
|
+
},
|
|
1250
|
+
required: [],
|
|
1251
|
+
},
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
name: 'game_raycast',
|
|
1255
|
+
description: 'Cast a ray and return collision results',
|
|
1256
|
+
inputSchema: {
|
|
1257
|
+
type: 'object',
|
|
1258
|
+
properties: {
|
|
1259
|
+
from: { type: 'object', description: 'Start point {x,y} or {x,y,z}' },
|
|
1260
|
+
to: { type: 'object', description: 'End point {x,y} or {x,y,z}' },
|
|
1261
|
+
collisionMask: { type: 'integer', description: 'Collision mask. Default: 0xFFFFFFFF' },
|
|
1262
|
+
},
|
|
1263
|
+
required: ['from', 'to'],
|
|
1264
|
+
},
|
|
1265
|
+
},
|
|
1266
|
+
{
|
|
1267
|
+
name: 'game_get_audio',
|
|
1268
|
+
description: 'Get audio bus layout and playing streams',
|
|
1269
|
+
inputSchema: {
|
|
1270
|
+
type: 'object',
|
|
1271
|
+
properties: {},
|
|
1272
|
+
required: [],
|
|
1273
|
+
},
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
name: 'game_spawn_node',
|
|
1277
|
+
description: 'Create a new node of any type at runtime',
|
|
1278
|
+
inputSchema: {
|
|
1279
|
+
type: 'object',
|
|
1280
|
+
properties: {
|
|
1281
|
+
type: { type: 'string', description: 'Node class name (e.g. "Sprite2D", "CharacterBody3D")' },
|
|
1282
|
+
name: { type: 'string', description: 'Name for the new node. Default: auto-generated' },
|
|
1283
|
+
parentPath: { type: 'string', description: 'Parent node path. Default: "/root"' },
|
|
1284
|
+
properties: { type: 'object', description: 'Properties to set on the new node' },
|
|
1285
|
+
},
|
|
1286
|
+
required: ['type'],
|
|
1287
|
+
},
|
|
1288
|
+
},
|
|
1289
|
+
// Shader, audio, navigation, tilemap, collision, environment tools
|
|
1290
|
+
{
|
|
1291
|
+
name: 'game_set_shader_param',
|
|
1292
|
+
description: 'Set a shader parameter on a node\'s material',
|
|
1293
|
+
inputSchema: {
|
|
1294
|
+
type: 'object',
|
|
1295
|
+
properties: {
|
|
1296
|
+
nodePath: { type: 'string', description: 'Path to the node with a ShaderMaterial' },
|
|
1297
|
+
paramName: { type: 'string', description: 'Shader parameter name' },
|
|
1298
|
+
value: { description: 'Value to set (number, object, array, etc.)' },
|
|
1299
|
+
typeHint: { type: 'string', description: 'Optional type hint (e.g. "Color", "Vector2")' },
|
|
1300
|
+
},
|
|
1301
|
+
required: ['nodePath', 'paramName', 'value'],
|
|
1302
|
+
},
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
name: 'game_audio_play',
|
|
1306
|
+
description: 'Play, stop, or pause an AudioStreamPlayer node',
|
|
1307
|
+
inputSchema: {
|
|
1308
|
+
type: 'object',
|
|
1309
|
+
properties: {
|
|
1310
|
+
nodePath: { type: 'string', description: 'Path to AudioStreamPlayer/2D/3D node' },
|
|
1311
|
+
action: { type: 'string', enum: ['play', 'stop', 'pause', 'resume'], description: 'Playback action. Default: play' },
|
|
1312
|
+
stream: { type: 'string', description: 'Optional res:// path to load a new stream' },
|
|
1313
|
+
volume: { type: 'number', description: 'Volume (linear 0-1)' },
|
|
1314
|
+
pitch: { type: 'number', description: 'Pitch scale' },
|
|
1315
|
+
bus: { type: 'string', description: 'Audio bus name' },
|
|
1316
|
+
fromPosition: { type: 'number', description: 'Start position in seconds' },
|
|
1317
|
+
},
|
|
1318
|
+
required: ['nodePath'],
|
|
1319
|
+
},
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
name: 'game_audio_bus',
|
|
1323
|
+
description: 'Set volume, mute, or solo on an audio bus',
|
|
1324
|
+
inputSchema: {
|
|
1325
|
+
type: 'object',
|
|
1326
|
+
properties: {
|
|
1327
|
+
busName: { type: 'string', description: 'Bus name. Default: "Master"' },
|
|
1328
|
+
volume: { type: 'number', description: 'Volume (linear 0-1)' },
|
|
1329
|
+
mute: { type: 'boolean', description: 'Mute the bus' },
|
|
1330
|
+
solo: { type: 'boolean', description: 'Solo the bus' },
|
|
1331
|
+
},
|
|
1332
|
+
required: [],
|
|
1333
|
+
},
|
|
1334
|
+
},
|
|
1335
|
+
{
|
|
1336
|
+
name: 'game_navigate_path',
|
|
1337
|
+
description: 'Query a navigation path between two points',
|
|
1338
|
+
inputSchema: {
|
|
1339
|
+
type: 'object',
|
|
1340
|
+
properties: {
|
|
1341
|
+
start: { type: 'object', description: 'Start point {x,y} or {x,y,z}' },
|
|
1342
|
+
end: { type: 'object', description: 'End point {x,y} or {x,y,z}' },
|
|
1343
|
+
optimize: { type: 'boolean', description: 'Use string-pulling optimization. Default: true' },
|
|
1344
|
+
},
|
|
1345
|
+
required: ['start', 'end'],
|
|
1346
|
+
},
|
|
1347
|
+
},
|
|
1348
|
+
{
|
|
1349
|
+
name: 'game_tilemap',
|
|
1350
|
+
description: 'Get or set cells in a TileMapLayer node',
|
|
1351
|
+
inputSchema: {
|
|
1352
|
+
type: 'object',
|
|
1353
|
+
properties: {
|
|
1354
|
+
nodePath: { type: 'string', description: 'Path to TileMapLayer node' },
|
|
1355
|
+
action: { type: 'string', enum: ['set_cells', 'get_cell', 'erase_cells', 'get_used_cells'], description: 'Action: set_cells, get_cell, erase_cells, get_used_cells' },
|
|
1356
|
+
x: { type: 'integer', description: 'Cell X coordinate (for get_cell)' },
|
|
1357
|
+
y: { type: 'integer', description: 'Cell Y coordinate (for get_cell)' },
|
|
1358
|
+
cells: {
|
|
1359
|
+
type: 'array',
|
|
1360
|
+
description: 'Cell objects for set_cells/erase_cells',
|
|
1361
|
+
items: {
|
|
1362
|
+
type: 'object',
|
|
1363
|
+
properties: {
|
|
1364
|
+
x: { type: 'integer', description: 'Cell X coordinate' },
|
|
1365
|
+
y: { type: 'integer', description: 'Cell Y coordinate' },
|
|
1366
|
+
sourceId: { type: 'integer', description: 'TileSet source ID' },
|
|
1367
|
+
atlasX: { type: 'integer', description: 'Atlas X coordinate' },
|
|
1368
|
+
atlasY: { type: 'integer', description: 'Atlas Y coordinate' },
|
|
1369
|
+
altTile: { type: 'integer', description: 'Alternative tile ID' },
|
|
1370
|
+
},
|
|
1371
|
+
required: ['x', 'y'],
|
|
1372
|
+
},
|
|
1373
|
+
},
|
|
1374
|
+
sourceId: { type: 'integer', description: 'Filter by source_id (for get_used_cells)' },
|
|
1375
|
+
},
|
|
1376
|
+
required: ['nodePath', 'action'],
|
|
1377
|
+
},
|
|
1378
|
+
},
|
|
1379
|
+
{
|
|
1380
|
+
name: 'game_add_collision',
|
|
1381
|
+
description: 'Add a collision shape to a physics body node',
|
|
1382
|
+
inputSchema: {
|
|
1383
|
+
type: 'object',
|
|
1384
|
+
properties: {
|
|
1385
|
+
parentPath: { type: 'string', description: 'Path to CollisionBody/Area node' },
|
|
1386
|
+
shapeType: { type: 'string', enum: ['box', 'sphere', 'circle', 'capsule', 'cylinder', 'ray', 'segment'], description: 'Shape: box, sphere/circle, capsule, cylinder, ray, segment' },
|
|
1387
|
+
shapeParams: { type: 'object', description: 'Shape dimensions (e.g. {radius, height})' },
|
|
1388
|
+
collisionLayer: { type: 'integer', description: 'Collision layer bitmask' },
|
|
1389
|
+
collisionMask: { type: 'integer', description: 'Collision mask bitmask' },
|
|
1390
|
+
disabled: { type: 'boolean', description: 'Start disabled' },
|
|
1391
|
+
},
|
|
1392
|
+
required: ['parentPath', 'shapeType'],
|
|
1393
|
+
},
|
|
1394
|
+
},
|
|
1395
|
+
{
|
|
1396
|
+
name: 'game_environment',
|
|
1397
|
+
description: 'Get or set environment and post-processing settings',
|
|
1398
|
+
inputSchema: {
|
|
1399
|
+
type: 'object',
|
|
1400
|
+
properties: {
|
|
1401
|
+
action: { type: 'string', enum: ['get', 'set'], description: 'Action: get or set. Default: set' },
|
|
1402
|
+
backgroundMode: { type: 'integer', description: '0=clear, 1=custom_color, 2=sky, 3=canvas' },
|
|
1403
|
+
backgroundColor: { type: 'object', description: 'Background color {r,g,b,a}' },
|
|
1404
|
+
ambientLightColor: { type: 'object', description: 'Ambient light color {r,g,b,a}' },
|
|
1405
|
+
ambientLightEnergy: { type: 'number', description: 'Ambient light energy' },
|
|
1406
|
+
fogEnabled: { type: 'boolean', description: 'Enable fog' },
|
|
1407
|
+
fogDensity: { type: 'number', description: 'Fog density' },
|
|
1408
|
+
fogLightColor: { type: 'object', description: 'Fog light color {r,g,b,a}' },
|
|
1409
|
+
glowEnabled: { type: 'boolean', description: 'Enable glow' },
|
|
1410
|
+
glowIntensity: { type: 'number', description: 'Glow intensity' },
|
|
1411
|
+
glowBloom: { type: 'number', description: 'Glow bloom' },
|
|
1412
|
+
tonemapMode: { type: 'integer', description: '0=linear, 1=reinhardt, 2=filmic, 3=aces' },
|
|
1413
|
+
ssaoEnabled: { type: 'boolean', description: 'Enable SSAO' },
|
|
1414
|
+
ssaoRadius: { type: 'number', description: 'SSAO radius' },
|
|
1415
|
+
ssaoIntensity: { type: 'number', description: 'SSAO intensity' },
|
|
1416
|
+
ssrEnabled: { type: 'boolean', description: 'Enable SSR' },
|
|
1417
|
+
brightness: { type: 'number', description: 'Brightness adjustment' },
|
|
1418
|
+
contrast: { type: 'number', description: 'Contrast adjustment' },
|
|
1419
|
+
saturation: { type: 'number', description: 'Saturation adjustment' },
|
|
1420
|
+
},
|
|
1421
|
+
required: [],
|
|
1422
|
+
},
|
|
1423
|
+
},
|
|
1424
|
+
// Group, timer, particles, animation, export, state, physics, joint, bone, theme, viewport, debug tools
|
|
1425
|
+
{
|
|
1426
|
+
name: 'game_manage_group',
|
|
1427
|
+
description: 'Add or remove a node from a group, or list groups',
|
|
1428
|
+
inputSchema: {
|
|
1429
|
+
type: 'object',
|
|
1430
|
+
properties: {
|
|
1431
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1432
|
+
action: { type: 'string', description: 'Action: add, remove, get_groups, clear_group' },
|
|
1433
|
+
group: { type: 'string', description: 'Group name' },
|
|
1434
|
+
},
|
|
1435
|
+
required: ['action'],
|
|
1436
|
+
},
|
|
1437
|
+
},
|
|
1438
|
+
{
|
|
1439
|
+
name: 'game_create_timer',
|
|
1440
|
+
description: 'Create a Timer node with configuration',
|
|
1441
|
+
inputSchema: {
|
|
1442
|
+
type: 'object',
|
|
1443
|
+
properties: {
|
|
1444
|
+
parentPath: { type: 'string', description: 'Parent node path. Default: "/root"' },
|
|
1445
|
+
waitTime: { type: 'number', description: 'Timer duration in seconds. Default: 1.0' },
|
|
1446
|
+
oneShot: { type: 'boolean', description: 'One-shot mode. Default: false' },
|
|
1447
|
+
autostart: { type: 'boolean', description: 'Auto-start the timer. Default: false' },
|
|
1448
|
+
name: { type: 'string', description: 'Optional timer node name' },
|
|
1449
|
+
},
|
|
1450
|
+
required: [],
|
|
1451
|
+
},
|
|
1452
|
+
},
|
|
1453
|
+
{
|
|
1454
|
+
name: 'game_set_particles',
|
|
1455
|
+
description: 'Configure GPUParticles2D/3D node properties',
|
|
1456
|
+
inputSchema: {
|
|
1457
|
+
type: 'object',
|
|
1458
|
+
properties: {
|
|
1459
|
+
nodePath: { type: 'string', description: 'Path to GPUParticles node' },
|
|
1460
|
+
emitting: { type: 'boolean', description: 'Enable/disable emission' },
|
|
1461
|
+
amount: { type: 'number', description: 'Number of particles' },
|
|
1462
|
+
lifetime: { type: 'number', description: 'Particle lifetime in seconds' },
|
|
1463
|
+
oneShot: { type: 'boolean', description: 'One-shot mode' },
|
|
1464
|
+
speedScale: { type: 'number', description: 'Speed scale' },
|
|
1465
|
+
explosiveness: { type: 'number', description: 'Explosiveness ratio (0-1)' },
|
|
1466
|
+
randomness: { type: 'number', description: 'Randomness ratio (0-1)' },
|
|
1467
|
+
processMaterial: { type: 'object', description: 'ParticleProcessMaterial settings: direction {x,y,z}, spread, gravity {x,y,z}, initialVelocityMin, initialVelocityMax, color {r,g,b,a}, scaleMin, scaleMax' },
|
|
1468
|
+
},
|
|
1469
|
+
required: ['nodePath'],
|
|
1470
|
+
},
|
|
1471
|
+
},
|
|
1472
|
+
{
|
|
1473
|
+
name: 'game_create_animation',
|
|
1474
|
+
description: 'Create an animation with tracks and keyframes',
|
|
1475
|
+
inputSchema: {
|
|
1476
|
+
type: 'object',
|
|
1477
|
+
properties: {
|
|
1478
|
+
nodePath: { type: 'string', description: 'Path to AnimationPlayer node' },
|
|
1479
|
+
animationName: { type: 'string', description: 'Name for the new animation' },
|
|
1480
|
+
length: { type: 'number', description: 'Animation length in seconds. Default: 1.0' },
|
|
1481
|
+
loopMode: { type: 'integer', minimum: 0, maximum: 2, description: '0=none, 1=linear, 2=pingpong' },
|
|
1482
|
+
tracks: { type: 'array', description: 'Array of track definitions' },
|
|
1483
|
+
library: { type: 'string', description: 'Animation library name. Default: ""' },
|
|
1484
|
+
},
|
|
1485
|
+
required: ['nodePath', 'animationName'],
|
|
1486
|
+
},
|
|
1487
|
+
},
|
|
1488
|
+
{
|
|
1489
|
+
name: 'export_project',
|
|
1490
|
+
description: 'Export a Godot project using a preset',
|
|
1491
|
+
inputSchema: {
|
|
1492
|
+
type: 'object',
|
|
1493
|
+
properties: {
|
|
1494
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
1495
|
+
presetName: { type: 'string', description: 'Export preset name' },
|
|
1496
|
+
outputPath: { type: 'string', description: 'Output file path for the exported build' },
|
|
1497
|
+
debug: { type: 'boolean', description: 'Use debug export. Default: false' },
|
|
1498
|
+
},
|
|
1499
|
+
required: ['projectPath', 'presetName', 'outputPath'],
|
|
1500
|
+
},
|
|
1501
|
+
},
|
|
1502
|
+
{
|
|
1503
|
+
name: 'game_serialize_state',
|
|
1504
|
+
description: 'Save or load node tree state as JSON',
|
|
1505
|
+
inputSchema: {
|
|
1506
|
+
type: 'object',
|
|
1507
|
+
properties: {
|
|
1508
|
+
nodePath: { type: 'string', description: 'Root node path. Default: "/root"' },
|
|
1509
|
+
action: { type: 'string', description: 'Action: save or load. Default: save' },
|
|
1510
|
+
data: { type: 'object', description: 'State data to restore (for load)' },
|
|
1511
|
+
maxDepth: { type: 'number', description: 'Max tree depth to serialize. Default: 5' },
|
|
1512
|
+
},
|
|
1513
|
+
required: [],
|
|
1514
|
+
},
|
|
1515
|
+
},
|
|
1516
|
+
{
|
|
1517
|
+
name: 'game_physics_body',
|
|
1518
|
+
description: 'Configure physics body properties (mass, velocity, etc.)',
|
|
1519
|
+
inputSchema: {
|
|
1520
|
+
type: 'object',
|
|
1521
|
+
properties: {
|
|
1522
|
+
nodePath: { type: 'string', description: 'Path to physics body node' },
|
|
1523
|
+
gravityScale: { type: 'number', description: 'Gravity scale' },
|
|
1524
|
+
mass: { type: 'number', description: 'Body mass' },
|
|
1525
|
+
linearVelocity: { type: 'object', description: 'Linear velocity {x,y} or {x,y,z}' },
|
|
1526
|
+
angularVelocity: { description: 'Angular velocity (float for 2D, {x,y,z} for 3D)' },
|
|
1527
|
+
linearDamp: { type: 'number', description: 'Linear damping' },
|
|
1528
|
+
angularDamp: { type: 'number', description: 'Angular damping' },
|
|
1529
|
+
friction: { type: 'number', description: 'Physics material friction' },
|
|
1530
|
+
bounce: { type: 'number', description: 'Physics material bounce' },
|
|
1531
|
+
freeze: { type: 'boolean', description: 'Freeze the body' },
|
|
1532
|
+
sleeping: { type: 'boolean', description: 'Put body to sleep' },
|
|
1533
|
+
},
|
|
1534
|
+
required: ['nodePath'],
|
|
1535
|
+
},
|
|
1536
|
+
},
|
|
1537
|
+
{
|
|
1538
|
+
name: 'game_create_joint',
|
|
1539
|
+
description: 'Create a physics joint between two bodies',
|
|
1540
|
+
inputSchema: {
|
|
1541
|
+
type: 'object',
|
|
1542
|
+
properties: {
|
|
1543
|
+
parentPath: { type: 'string', description: 'Parent node path for the joint' },
|
|
1544
|
+
jointType: { type: 'string', enum: ['pin_2d', 'spring_2d', 'groove_2d', 'pin_3d', 'hinge_3d', 'cone_3d', 'slider_3d'], description: 'Joint type: pin_2d, spring_2d, groove_2d, pin_3d, hinge_3d, cone_3d, slider_3d' },
|
|
1545
|
+
nodeAPath: { type: 'string', description: 'Path to first body' },
|
|
1546
|
+
nodeBPath: { type: 'string', description: 'Path to second body' },
|
|
1547
|
+
stiffness: { type: 'number', description: 'Spring stiffness (spring_2d)' },
|
|
1548
|
+
damping: { type: 'number', description: 'Spring damping (spring_2d)' },
|
|
1549
|
+
length: { type: 'number', description: 'Length (spring_2d, groove_2d)' },
|
|
1550
|
+
restLength: { type: 'number', description: 'Rest length (spring_2d)' },
|
|
1551
|
+
softness: { type: 'number', description: 'Softness (pin_2d)' },
|
|
1552
|
+
initialOffset: { type: 'number', description: 'Initial offset (groove_2d)' },
|
|
1553
|
+
},
|
|
1554
|
+
required: ['parentPath', 'jointType'],
|
|
1555
|
+
},
|
|
1556
|
+
},
|
|
1557
|
+
{
|
|
1558
|
+
name: 'game_bone_pose',
|
|
1559
|
+
description: 'Get or set bone poses on a Skeleton3D node',
|
|
1560
|
+
inputSchema: {
|
|
1561
|
+
type: 'object',
|
|
1562
|
+
properties: {
|
|
1563
|
+
nodePath: { type: 'string', description: 'Path to Skeleton3D node' },
|
|
1564
|
+
action: { type: 'string', enum: ['list', 'get', 'set'], description: 'Action. Default: list' },
|
|
1565
|
+
boneIndex: { type: 'integer', minimum: 0, description: 'Bone index' },
|
|
1566
|
+
boneName: { type: 'string', description: 'Bone name (alternative to index)' },
|
|
1567
|
+
position: { type: 'object', description: 'Bone position {x,y,z}' },
|
|
1568
|
+
rotation: { type: 'object', description: 'Bone rotation quaternion {x,y,z,w}' },
|
|
1569
|
+
scale: { type: 'object', description: 'Bone scale {x,y,z}' },
|
|
1570
|
+
},
|
|
1571
|
+
required: ['nodePath'],
|
|
1572
|
+
},
|
|
1573
|
+
},
|
|
1574
|
+
{
|
|
1575
|
+
name: 'game_ui_theme',
|
|
1576
|
+
description: 'Apply theme overrides to a Control node',
|
|
1577
|
+
inputSchema: {
|
|
1578
|
+
type: 'object',
|
|
1579
|
+
properties: {
|
|
1580
|
+
nodePath: { type: 'string', description: 'Path to Control node' },
|
|
1581
|
+
overrides: { type: 'object', description: 'Theme overrides: {colors, constants, fontSizes}' },
|
|
1582
|
+
},
|
|
1583
|
+
required: ['nodePath', 'overrides'],
|
|
1584
|
+
},
|
|
1585
|
+
},
|
|
1586
|
+
{
|
|
1587
|
+
name: 'game_viewport',
|
|
1588
|
+
description: 'Create or configure a SubViewport node',
|
|
1589
|
+
inputSchema: {
|
|
1590
|
+
type: 'object',
|
|
1591
|
+
properties: {
|
|
1592
|
+
action: { type: 'string', description: 'Action: create, configure, or get' },
|
|
1593
|
+
parentPath: { type: 'string', description: 'Parent path (for create)' },
|
|
1594
|
+
nodePath: { type: 'string', description: 'SubViewport path (for configure/get)' },
|
|
1595
|
+
width: { type: 'number', description: 'Viewport width' },
|
|
1596
|
+
height: { type: 'number', description: 'Viewport height' },
|
|
1597
|
+
msaa: { type: 'number', description: 'MSAA level (0=disabled, 1=2x, 2=4x, 3=8x)' },
|
|
1598
|
+
transparentBg: { type: 'boolean', description: 'Transparent background' },
|
|
1599
|
+
name: { type: 'string', description: 'Viewport name (for create)' },
|
|
1600
|
+
},
|
|
1601
|
+
required: [],
|
|
1602
|
+
},
|
|
1603
|
+
},
|
|
1604
|
+
{
|
|
1605
|
+
name: 'game_debug_draw',
|
|
1606
|
+
description: 'Draw debug lines, spheres, or boxes in 3D',
|
|
1607
|
+
inputSchema: {
|
|
1608
|
+
type: 'object',
|
|
1609
|
+
properties: {
|
|
1610
|
+
action: { type: 'string', enum: ['line', 'sphere', 'box', 'clear'], description: 'Action: line, sphere, box, or clear' },
|
|
1611
|
+
from: { type: 'object', description: 'Line start {x,y,z}' },
|
|
1612
|
+
to: { type: 'object', description: 'Line end {x,y,z}' },
|
|
1613
|
+
center: { type: 'object', description: 'Sphere/box center {x,y,z}' },
|
|
1614
|
+
radius: { type: 'number', minimum: 0, description: 'Sphere radius. Default: 0.5' },
|
|
1615
|
+
size: { type: 'object', description: 'Box size {x,y,z}' },
|
|
1616
|
+
color: { type: 'object', description: 'Draw color {r,g,b,a}. Default: red' },
|
|
1617
|
+
duration: { type: 'integer', minimum: 0, description: 'Frames to persist (0=permanent)' },
|
|
1618
|
+
},
|
|
1619
|
+
required: ['action'],
|
|
1620
|
+
},
|
|
1621
|
+
},
|
|
1622
|
+
// Batch 1: Networking + Input + System + Signals + Script
|
|
1623
|
+
{
|
|
1624
|
+
name: 'game_http_request',
|
|
1625
|
+
description: 'HTTP GET/POST/PUT/DELETE with headers and body',
|
|
1626
|
+
inputSchema: {
|
|
1627
|
+
type: 'object',
|
|
1628
|
+
properties: {
|
|
1629
|
+
url: { type: 'string', minLength: 1, maxLength: 8192, pattern: '^https?://', description: 'HTTP(S) request URL' },
|
|
1630
|
+
method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'DELETE'], description: 'HTTP method. Default: GET' },
|
|
1631
|
+
headers: { type: 'object', description: 'Request headers as key-value pairs' },
|
|
1632
|
+
body: { type: 'string', maxLength: 1048576, description: 'Request body string (maximum 1 MiB UTF-16 code units)' },
|
|
1633
|
+
timeout: { type: 'number', minimum: 0.01, maximum: 30, description: 'Timeout in seconds. Default: 30' },
|
|
1634
|
+
},
|
|
1635
|
+
required: ['url'],
|
|
1636
|
+
},
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
name: 'game_websocket',
|
|
1640
|
+
description: 'WebSocket client connect/disconnect/send messages',
|
|
1641
|
+
inputSchema: {
|
|
1642
|
+
type: 'object',
|
|
1643
|
+
properties: {
|
|
1644
|
+
action: { type: 'string', enum: ['connect', 'disconnect', 'send', 'receive', 'status'], description: 'Action: connect, disconnect, send, receive, status' },
|
|
1645
|
+
url: { type: 'string', description: 'WebSocket URL (for connect)' },
|
|
1646
|
+
message: { type: 'string', description: 'Message to send (for send)' },
|
|
1647
|
+
timeout: { type: 'number', minimum: 0, description: 'Connect or receive timeout in seconds. Default: 5' },
|
|
1648
|
+
},
|
|
1649
|
+
required: ['action'],
|
|
1650
|
+
},
|
|
1651
|
+
},
|
|
1652
|
+
{
|
|
1653
|
+
name: 'game_multiplayer',
|
|
1654
|
+
description: 'ENet multiplayer create server/client/disconnect',
|
|
1655
|
+
inputSchema: {
|
|
1656
|
+
type: 'object',
|
|
1657
|
+
properties: {
|
|
1658
|
+
action: { type: 'string', enum: ['create_server', 'create_client', 'disconnect', 'status'], description: 'Action: create_server, create_client, disconnect, status' },
|
|
1659
|
+
port: { type: 'integer', minimum: 1, maximum: 65535, description: 'Server port. Default: 7000' },
|
|
1660
|
+
address: { type: 'string', description: 'Server address for client. Default: 127.0.0.1' },
|
|
1661
|
+
maxClients: { type: 'integer', minimum: 1, description: 'Max clients for server. Default: 32' },
|
|
1662
|
+
},
|
|
1663
|
+
required: ['action'],
|
|
1664
|
+
},
|
|
1665
|
+
},
|
|
1666
|
+
{
|
|
1667
|
+
name: 'game_rpc',
|
|
1668
|
+
description: 'Call or configure RPC methods on nodes',
|
|
1669
|
+
inputSchema: {
|
|
1670
|
+
type: 'object',
|
|
1671
|
+
properties: {
|
|
1672
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1673
|
+
action: { type: 'string', enum: ['call', 'configure'], description: 'Action: call or configure' },
|
|
1674
|
+
method: { type: 'string', minLength: 1, maxLength: 256, description: 'RPC method name' },
|
|
1675
|
+
args: { type: 'array', maxItems: 64, description: 'Arguments for the RPC call' },
|
|
1676
|
+
peerId: { type: 'integer', minimum: 0, description: 'Target peer ID for call; 0 broadcasts' },
|
|
1677
|
+
mode: { type: 'string', enum: ['any_peer', 'authority'], description: 'RPC authority mode' },
|
|
1678
|
+
sync: { type: 'string', enum: ['call_local', 'call_remote'], description: 'Local invocation mode' },
|
|
1679
|
+
transferMode: { type: 'string', enum: ['unreliable', 'unreliable_ordered', 'reliable'], description: 'RPC transfer mode' },
|
|
1680
|
+
channel: { type: 'integer', minimum: 0, maximum: 255, description: 'Transfer channel' },
|
|
1681
|
+
},
|
|
1682
|
+
required: ['nodePath', 'action', 'method'],
|
|
1683
|
+
},
|
|
1684
|
+
},
|
|
1685
|
+
{
|
|
1686
|
+
name: 'game_touch',
|
|
1687
|
+
description: 'Simulate touch press/release/drag and gestures',
|
|
1688
|
+
inputSchema: {
|
|
1689
|
+
type: 'object',
|
|
1690
|
+
properties: {
|
|
1691
|
+
action: { type: 'string', enum: ['press', 'release', 'drag'], description: 'Touch action' },
|
|
1692
|
+
x: { type: 'number', description: 'Touch X position' },
|
|
1693
|
+
y: { type: 'number', description: 'Touch Y position' },
|
|
1694
|
+
index: { type: 'integer', minimum: 0, maximum: 31, description: 'Touch index. Default: 0' },
|
|
1695
|
+
toX: { type: 'number', description: 'Drag end X (for drag)' },
|
|
1696
|
+
toY: { type: 'number', description: 'Drag end Y (for drag)' },
|
|
1697
|
+
steps: { type: 'integer', minimum: 1, maximum: 1000, description: 'Drag steps. Default: 10' },
|
|
1698
|
+
},
|
|
1699
|
+
required: ['action', 'x', 'y'],
|
|
1700
|
+
},
|
|
1701
|
+
},
|
|
1702
|
+
{
|
|
1703
|
+
name: 'game_input_state',
|
|
1704
|
+
description: 'Query key, action, mouse, and connected joypad state or configure the mouse',
|
|
1705
|
+
inputSchema: {
|
|
1706
|
+
type: 'object',
|
|
1707
|
+
properties: {
|
|
1708
|
+
action: { type: 'string', enum: ['query', 'warp_mouse', 'set_mouse_mode'], description: 'Action: query, warp_mouse, set_mouse_mode' },
|
|
1709
|
+
x: { type: 'number', description: 'Mouse X (for warp_mouse)' },
|
|
1710
|
+
y: { type: 'number', description: 'Mouse Y (for warp_mouse)' },
|
|
1711
|
+
mouseMode: { type: 'string', enum: ['visible', 'hidden', 'captured', 'confined'], description: 'Mode: visible, hidden, captured, confined' },
|
|
1712
|
+
keys: { type: 'array', items: { type: 'string' }, maxItems: 128, description: 'Key names to inspect during query' },
|
|
1713
|
+
actions: { type: 'array', items: { type: 'string' }, maxItems: 128, description: 'InputMap actions to inspect during query' },
|
|
1714
|
+
mouseButtons: { type: 'array', items: { type: 'integer', minimum: 1, maximum: 9 }, maxItems: 9, description: 'Mouse button indices to inspect during query' },
|
|
1715
|
+
},
|
|
1716
|
+
required: [],
|
|
1717
|
+
},
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
name: 'game_input_action',
|
|
1721
|
+
description: 'Manage runtime InputMap actions and strength',
|
|
1722
|
+
inputSchema: {
|
|
1723
|
+
type: 'object',
|
|
1724
|
+
properties: {
|
|
1725
|
+
action: { type: 'string', enum: ['set_strength', 'add_action', 'remove_action', 'list'], description: 'Action: set_strength, add_action, remove_action, list' },
|
|
1726
|
+
actionName: { type: 'string', description: 'Input action name' },
|
|
1727
|
+
strength: { type: 'number', description: 'Action strength 0.0-1.0' },
|
|
1728
|
+
key: { type: 'string', description: 'Key name (for add_action)' },
|
|
1729
|
+
},
|
|
1730
|
+
required: ['action'],
|
|
1731
|
+
},
|
|
1732
|
+
},
|
|
1733
|
+
{
|
|
1734
|
+
name: 'game_list_signals',
|
|
1735
|
+
description: 'List all signals on a node with connections',
|
|
1736
|
+
inputSchema: {
|
|
1737
|
+
type: 'object',
|
|
1738
|
+
properties: {
|
|
1739
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1740
|
+
},
|
|
1741
|
+
required: ['nodePath'],
|
|
1742
|
+
},
|
|
1743
|
+
},
|
|
1744
|
+
{
|
|
1745
|
+
name: 'game_await_signal',
|
|
1746
|
+
description: 'Await a signal with timeout and return args',
|
|
1747
|
+
inputSchema: {
|
|
1748
|
+
type: 'object',
|
|
1749
|
+
properties: {
|
|
1750
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1751
|
+
signalName: { type: 'string', description: 'Signal name to await' },
|
|
1752
|
+
timeout: { type: 'number', minimum: 0.01, maximum: 30, description: 'Timeout in seconds. Default: 10' },
|
|
1753
|
+
},
|
|
1754
|
+
required: ['nodePath', 'signalName'],
|
|
1755
|
+
},
|
|
1756
|
+
},
|
|
1757
|
+
{
|
|
1758
|
+
name: 'game_script',
|
|
1759
|
+
description: 'Attach, detach, or get source of node scripts',
|
|
1760
|
+
inputSchema: {
|
|
1761
|
+
type: 'object',
|
|
1762
|
+
properties: {
|
|
1763
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1764
|
+
action: { type: 'string', description: 'Action: attach, detach, get_source' },
|
|
1765
|
+
source: { type: 'string', description: 'GDScript source code (for attach)' },
|
|
1766
|
+
className: { type: 'string', description: 'Class the script extends' },
|
|
1767
|
+
},
|
|
1768
|
+
required: ['nodePath', 'action'],
|
|
1769
|
+
},
|
|
1770
|
+
},
|
|
1771
|
+
{
|
|
1772
|
+
name: 'game_window',
|
|
1773
|
+
description: 'Get/set window size, fullscreen, title, position',
|
|
1774
|
+
inputSchema: {
|
|
1775
|
+
type: 'object',
|
|
1776
|
+
properties: {
|
|
1777
|
+
action: { type: 'string', description: 'Action: get or set. Default: get' },
|
|
1778
|
+
width: { type: 'number', description: 'Window width' },
|
|
1779
|
+
height: { type: 'number', description: 'Window height' },
|
|
1780
|
+
fullscreen: { type: 'boolean', description: 'Fullscreen mode' },
|
|
1781
|
+
borderless: { type: 'boolean', description: 'Borderless mode' },
|
|
1782
|
+
title: { type: 'string', description: 'Window title' },
|
|
1783
|
+
position: { type: 'object', description: 'Window position {x, y}' },
|
|
1784
|
+
vsync: { type: 'boolean', description: 'Enable vsync' },
|
|
1785
|
+
},
|
|
1786
|
+
required: [],
|
|
1787
|
+
},
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
name: 'game_os_info',
|
|
1791
|
+
description: 'Get platform, locale, screen, adapter, memory info',
|
|
1792
|
+
inputSchema: {
|
|
1793
|
+
type: 'object',
|
|
1794
|
+
properties: {},
|
|
1795
|
+
required: [],
|
|
1796
|
+
},
|
|
1797
|
+
},
|
|
1798
|
+
{
|
|
1799
|
+
name: 'game_time_scale',
|
|
1800
|
+
description: 'Get/set Engine.time_scale and timing info',
|
|
1801
|
+
inputSchema: {
|
|
1802
|
+
type: 'object',
|
|
1803
|
+
properties: {
|
|
1804
|
+
action: { type: 'string', description: 'Action: get or set. Default: get' },
|
|
1805
|
+
timeScale: { type: 'number', description: 'Time scale value (for set)' },
|
|
1806
|
+
},
|
|
1807
|
+
required: [],
|
|
1808
|
+
},
|
|
1809
|
+
},
|
|
1810
|
+
{
|
|
1811
|
+
name: 'game_process_mode',
|
|
1812
|
+
description: 'Set node process mode (pausable/always/disabled)',
|
|
1813
|
+
inputSchema: {
|
|
1814
|
+
type: 'object',
|
|
1815
|
+
properties: {
|
|
1816
|
+
nodePath: { type: 'string', description: 'Path to the node' },
|
|
1817
|
+
mode: { type: 'string', description: 'Mode: inherit, pausable, when_paused, always, disabled' },
|
|
1818
|
+
},
|
|
1819
|
+
required: ['nodePath', 'mode'],
|
|
1820
|
+
},
|
|
1821
|
+
},
|
|
1822
|
+
{
|
|
1823
|
+
name: 'game_world_settings',
|
|
1824
|
+
description: 'Get/set gravity, physics FPS, and world settings',
|
|
1825
|
+
inputSchema: {
|
|
1826
|
+
type: 'object',
|
|
1827
|
+
properties: {
|
|
1828
|
+
action: { type: 'string', description: 'Action: get or set. Default: get' },
|
|
1829
|
+
gravity: { type: 'number', description: 'Gravity magnitude' },
|
|
1830
|
+
gravityDirection: { type: 'object', description: 'Gravity direction vector {x,y,z}' },
|
|
1831
|
+
physicsFps: { type: 'number', description: 'Physics ticks per second' },
|
|
1832
|
+
},
|
|
1833
|
+
required: [],
|
|
1834
|
+
},
|
|
1835
|
+
},
|
|
1836
|
+
// Batch 2: 3D Rendering + Lighting + Sky + Physics
|
|
1837
|
+
{
|
|
1838
|
+
name: 'game_csg',
|
|
1839
|
+
description: 'Create/configure CSG nodes with boolean operations',
|
|
1840
|
+
inputSchema: {
|
|
1841
|
+
type: 'object',
|
|
1842
|
+
properties: {
|
|
1843
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1844
|
+
action: { type: 'string', description: 'Action: create or configure' },
|
|
1845
|
+
csgType: { type: 'string', description: 'CSG type: box, sphere, cylinder, mesh, combiner' },
|
|
1846
|
+
nodePath: { type: 'string', description: 'Node path (for configure)' },
|
|
1847
|
+
operation: { type: 'string', description: 'Boolean op: union, intersection, subtraction' },
|
|
1848
|
+
size: { type: 'object', description: 'Size {x,y,z} (box)' },
|
|
1849
|
+
radius: { type: 'number', description: 'Radius (sphere/cylinder)' },
|
|
1850
|
+
height: { type: 'number', description: 'Height (cylinder)' },
|
|
1851
|
+
material: { type: 'string', description: 'Material resource path' },
|
|
1852
|
+
name: { type: 'string', description: 'Node name' },
|
|
1853
|
+
},
|
|
1854
|
+
required: ['action'],
|
|
1855
|
+
},
|
|
1856
|
+
},
|
|
1857
|
+
{
|
|
1858
|
+
name: 'game_multimesh',
|
|
1859
|
+
description: 'Create/configure MultiMeshInstance3D for instancing',
|
|
1860
|
+
inputSchema: {
|
|
1861
|
+
type: 'object',
|
|
1862
|
+
properties: {
|
|
1863
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1864
|
+
action: { type: 'string', description: 'Action: create, set_instance, get_info' },
|
|
1865
|
+
nodePath: { type: 'string', description: 'Node path (for set_instance/get_info)' },
|
|
1866
|
+
meshType: { type: 'string', description: 'Mesh: box, sphere, cylinder, quad' },
|
|
1867
|
+
count: { type: 'number', description: 'Instance count' },
|
|
1868
|
+
index: { type: 'number', description: 'Instance index (for set_instance)' },
|
|
1869
|
+
transform: { type: 'object', description: 'Transform {origin:{x,y,z}, rotation:{x,y,z}}' },
|
|
1870
|
+
name: { type: 'string', description: 'Node name' },
|
|
1871
|
+
},
|
|
1872
|
+
required: ['action'],
|
|
1873
|
+
},
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
name: 'game_procedural_mesh',
|
|
1877
|
+
description: 'Generate meshes via ArrayMesh from vertex data',
|
|
1878
|
+
inputSchema: {
|
|
1879
|
+
type: 'object',
|
|
1880
|
+
properties: {
|
|
1881
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1882
|
+
vertices: { type: 'array', description: 'Vertex positions [[x,y,z],...]' },
|
|
1883
|
+
normals: { type: 'array', description: 'Vertex normals [[x,y,z],...]' },
|
|
1884
|
+
uvs: { type: 'array', description: 'UV coordinates [[u,v],...]' },
|
|
1885
|
+
indices: { type: 'array', description: 'Triangle indices [i0,i1,i2,...]' },
|
|
1886
|
+
name: { type: 'string', description: 'Node name' },
|
|
1887
|
+
},
|
|
1888
|
+
required: ['parentPath', 'vertices'],
|
|
1889
|
+
},
|
|
1890
|
+
},
|
|
1891
|
+
{
|
|
1892
|
+
name: 'game_light_3d',
|
|
1893
|
+
description: 'Create/configure 3D lights (directional/omni/spot)',
|
|
1894
|
+
inputSchema: {
|
|
1895
|
+
type: 'object',
|
|
1896
|
+
properties: {
|
|
1897
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1898
|
+
action: { type: 'string', description: 'Action: create or configure' },
|
|
1899
|
+
lightType: { type: 'string', description: 'Type: directional, omni, spot' },
|
|
1900
|
+
nodePath: { type: 'string', description: 'Node path (for configure)' },
|
|
1901
|
+
color: { type: 'object', description: 'Light color {r,g,b}' },
|
|
1902
|
+
energy: { type: 'number', description: 'Light energy/intensity' },
|
|
1903
|
+
range: { type: 'number', description: 'Light range (omni/spot)' },
|
|
1904
|
+
shadows: { type: 'boolean', description: 'Enable shadow casting' },
|
|
1905
|
+
spotAngle: { type: 'number', description: 'Spot cone angle in degrees' },
|
|
1906
|
+
name: { type: 'string', description: 'Node name' },
|
|
1907
|
+
},
|
|
1908
|
+
required: ['action'],
|
|
1909
|
+
},
|
|
1910
|
+
},
|
|
1911
|
+
{
|
|
1912
|
+
name: 'game_mesh_instance',
|
|
1913
|
+
description: 'Create MeshInstance3D with primitive meshes',
|
|
1914
|
+
inputSchema: {
|
|
1915
|
+
type: 'object',
|
|
1916
|
+
properties: {
|
|
1917
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1918
|
+
meshType: { type: 'string', enum: ['box', 'sphere', 'cylinder', 'capsule', 'plane', 'quad'], description: 'Mesh: box, sphere, cylinder, capsule, plane, quad' },
|
|
1919
|
+
size: { type: 'object', description: 'Mesh size {x,y,z}' },
|
|
1920
|
+
radius: { type: 'number', minimum: 0, description: 'Mesh radius' },
|
|
1921
|
+
height: { type: 'number', minimum: 0, description: 'Mesh height' },
|
|
1922
|
+
material: { type: 'string', description: 'Material resource path or color hex' },
|
|
1923
|
+
name: { type: 'string', description: 'Node name' },
|
|
1924
|
+
},
|
|
1925
|
+
required: ['parentPath', 'meshType'],
|
|
1926
|
+
},
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
name: 'game_gridmap',
|
|
1930
|
+
description: 'GridMap set/get/clear cells and query used cells',
|
|
1931
|
+
inputSchema: {
|
|
1932
|
+
type: 'object',
|
|
1933
|
+
properties: {
|
|
1934
|
+
nodePath: { type: 'string', description: 'Path to GridMap node' },
|
|
1935
|
+
action: { type: 'string', description: 'Action: set_cell, get_cell, clear, get_used' },
|
|
1936
|
+
x: { type: 'number', description: 'Cell X coordinate' },
|
|
1937
|
+
y: { type: 'number', description: 'Cell Y coordinate' },
|
|
1938
|
+
z: { type: 'number', description: 'Cell Z coordinate' },
|
|
1939
|
+
item: { type: 'number', description: 'MeshLibrary item index' },
|
|
1940
|
+
orientation: { type: 'number', description: 'Cell orientation index' },
|
|
1941
|
+
},
|
|
1942
|
+
required: ['nodePath', 'action'],
|
|
1943
|
+
},
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
name: 'game_3d_effects',
|
|
1947
|
+
description: 'Create ReflectionProbe, Decal, or FogVolume',
|
|
1948
|
+
inputSchema: {
|
|
1949
|
+
type: 'object',
|
|
1950
|
+
properties: {
|
|
1951
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1952
|
+
effectType: { type: 'string', description: 'Type: reflection_probe, decal, fog_volume' },
|
|
1953
|
+
size: { type: 'object', description: 'Effect size {x,y,z}' },
|
|
1954
|
+
intensity: { type: 'number', description: 'Effect intensity' },
|
|
1955
|
+
name: { type: 'string', description: 'Node name' },
|
|
1956
|
+
},
|
|
1957
|
+
required: ['parentPath', 'effectType'],
|
|
1958
|
+
},
|
|
1959
|
+
},
|
|
1960
|
+
{
|
|
1961
|
+
name: 'game_gi',
|
|
1962
|
+
description: 'Create/configure VoxelGI or LightmapGI',
|
|
1963
|
+
inputSchema: {
|
|
1964
|
+
type: 'object',
|
|
1965
|
+
properties: {
|
|
1966
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1967
|
+
giType: { type: 'string', description: 'Type: voxel_gi or lightmap_gi' },
|
|
1968
|
+
size: { type: 'object', description: 'Extents size {x,y,z}' },
|
|
1969
|
+
name: { type: 'string', description: 'Node name' },
|
|
1970
|
+
},
|
|
1971
|
+
required: ['parentPath', 'giType'],
|
|
1972
|
+
},
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
name: 'game_path_3d',
|
|
1976
|
+
description: 'Create Path3D/Curve3D and manage curve points',
|
|
1977
|
+
inputSchema: {
|
|
1978
|
+
type: 'object',
|
|
1979
|
+
properties: {
|
|
1980
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
1981
|
+
action: { type: 'string', enum: ['create', 'add_point', 'get_points', 'set_points'], description: 'Action: create, add_point, set_points, get_points' },
|
|
1982
|
+
nodePath: { type: 'string', description: 'Path3D node path (for add/set/get)' },
|
|
1983
|
+
points: { type: 'array', items: { type: 'object' }, description: 'Array of points [{x,y,z},...]' },
|
|
1984
|
+
point: { type: 'object', description: 'Single point {x,y,z}' },
|
|
1985
|
+
name: { type: 'string', description: 'Node name' },
|
|
1986
|
+
},
|
|
1987
|
+
required: ['action'],
|
|
1988
|
+
},
|
|
1989
|
+
},
|
|
1990
|
+
{
|
|
1991
|
+
name: 'game_sky',
|
|
1992
|
+
description: 'Create/configure Sky with procedural/physical sky',
|
|
1993
|
+
inputSchema: {
|
|
1994
|
+
type: 'object',
|
|
1995
|
+
properties: {
|
|
1996
|
+
action: { type: 'string', description: 'Action: create or configure' },
|
|
1997
|
+
skyType: { type: 'string', description: 'Type: procedural or physical' },
|
|
1998
|
+
topColor: { type: 'object', description: 'Sky top color {r,g,b}' },
|
|
1999
|
+
bottomColor: { type: 'object', description: 'Horizon bottom color {r,g,b}' },
|
|
2000
|
+
sunEnergy: { type: 'number', description: 'Sun energy/brightness' },
|
|
2001
|
+
groundColor: { type: 'object', description: 'Ground color {r,g,b}' },
|
|
2002
|
+
},
|
|
2003
|
+
required: ['action'],
|
|
2004
|
+
},
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
name: 'game_camera_attributes',
|
|
2008
|
+
description: 'Configure DOF, exposure, auto-exposure on camera',
|
|
2009
|
+
inputSchema: {
|
|
2010
|
+
type: 'object',
|
|
2011
|
+
properties: {
|
|
2012
|
+
action: { type: 'string', description: 'Action: get or set' },
|
|
2013
|
+
dofBlurFar: { type: 'number', description: 'DOF far blur distance' },
|
|
2014
|
+
dofBlurNear: { type: 'number', description: 'DOF near blur distance' },
|
|
2015
|
+
dofBlurAmount: { type: 'number', description: 'DOF blur amount' },
|
|
2016
|
+
exposureMultiplier: { type: 'number', description: 'Exposure multiplier' },
|
|
2017
|
+
autoExposure: { type: 'boolean', description: 'Enable auto exposure' },
|
|
2018
|
+
autoExposureScale: { type: 'number', description: 'Auto exposure scale' },
|
|
2019
|
+
},
|
|
2020
|
+
required: [],
|
|
2021
|
+
},
|
|
2022
|
+
},
|
|
2023
|
+
{
|
|
2024
|
+
name: 'game_navigation_3d',
|
|
2025
|
+
description: 'Create/configure NavigationRegion3D and bake',
|
|
2026
|
+
inputSchema: {
|
|
2027
|
+
type: 'object',
|
|
2028
|
+
properties: {
|
|
2029
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
2030
|
+
action: { type: 'string', enum: ['create', 'bake'], description: 'Action: create or bake' },
|
|
2031
|
+
nodePath: { type: 'string', description: 'Node path (for bake/configure)' },
|
|
2032
|
+
cellSize: { type: 'number', description: 'Navigation cell size' },
|
|
2033
|
+
agentRadius: { type: 'number', description: 'Agent radius' },
|
|
2034
|
+
agentHeight: { type: 'number', description: 'Agent height' },
|
|
2035
|
+
name: { type: 'string', description: 'Node name' },
|
|
2036
|
+
},
|
|
2037
|
+
required: ['action'],
|
|
2038
|
+
},
|
|
2039
|
+
},
|
|
2040
|
+
{
|
|
2041
|
+
name: 'game_physics_3d',
|
|
2042
|
+
description: 'Area3D queries and point/shape intersection tests',
|
|
2043
|
+
inputSchema: {
|
|
2044
|
+
type: 'object',
|
|
2045
|
+
properties: {
|
|
2046
|
+
action: { type: 'string', enum: ['ray', 'overlap', 'contacts', 'inspect_shape'], description: 'Action: ray, overlap, contacts, or inspect_shape' },
|
|
2047
|
+
nodePath: { type: 'string', description: 'Area3D/node path (for overlap)' },
|
|
2048
|
+
from: { type: 'object', description: 'Ray/point origin {x,y,z}' },
|
|
2049
|
+
to: { type: 'object', description: 'Ray end {x,y,z}' },
|
|
2050
|
+
collisionMask: { type: 'integer', description: 'Collision mask bitmask' },
|
|
2051
|
+
},
|
|
2052
|
+
required: ['action'],
|
|
2053
|
+
},
|
|
2054
|
+
},
|
|
2055
|
+
// Batch 3: 2D Systems + Animation Advanced + Audio Effects
|
|
2056
|
+
{
|
|
2057
|
+
name: 'game_canvas',
|
|
2058
|
+
description: 'Create/configure CanvasLayer and CanvasModulate',
|
|
2059
|
+
inputSchema: {
|
|
2060
|
+
type: 'object',
|
|
2061
|
+
properties: {
|
|
2062
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
2063
|
+
action: { type: 'string', enum: ['create_layer', 'create_modulate', 'configure'], description: 'Action: create_layer, create_modulate, configure' },
|
|
2064
|
+
nodePath: { type: 'string', description: 'Node path (for configure)' },
|
|
2065
|
+
layer: { type: 'integer', description: 'Canvas layer number' },
|
|
2066
|
+
offset: { type: 'object', description: 'CanvasLayer offset {x,y} (for configure)' },
|
|
2067
|
+
visible: { type: 'boolean', description: 'CanvasLayer visibility (for configure)' },
|
|
2068
|
+
color: { type: 'object', description: 'Modulate color {r,g,b,a}' },
|
|
2069
|
+
name: { type: 'string', description: 'Node name' },
|
|
2070
|
+
},
|
|
2071
|
+
required: ['action'],
|
|
2072
|
+
},
|
|
2073
|
+
},
|
|
2074
|
+
{
|
|
2075
|
+
name: 'game_canvas_draw',
|
|
2076
|
+
description: '2D drawing: line/rect/circle/polygon/text/clear',
|
|
2077
|
+
inputSchema: {
|
|
2078
|
+
type: 'object',
|
|
2079
|
+
properties: {
|
|
2080
|
+
parentPath: { type: 'string', description: 'Parent node path for draw node' },
|
|
2081
|
+
action: { type: 'string', enum: ['line', 'rect', 'circle', 'polygon', 'text', 'clear'], description: 'Action: line, rect, circle, polygon, text, clear' },
|
|
2082
|
+
from: { type: 'object', description: 'Start point {x,y}' },
|
|
2083
|
+
to: { type: 'object', description: 'End point {x,y}' },
|
|
2084
|
+
center: { type: 'object', description: 'Center point {x,y}' },
|
|
2085
|
+
radius: { type: 'number', description: 'Circle radius' },
|
|
2086
|
+
rect: { type: 'object', description: 'Rectangle {x,y,w,h}' },
|
|
2087
|
+
points: { type: 'array', description: 'Polygon points [{x,y},...]' },
|
|
2088
|
+
position: { type: 'object', description: 'Text position {x,y} (baseline, for text)' },
|
|
2089
|
+
text: { type: 'string', description: 'Text to draw' },
|
|
2090
|
+
fontSize: { type: 'integer', description: 'Text font size. Default: 16' },
|
|
2091
|
+
color: { type: 'object', description: 'Draw color {r,g,b,a}' },
|
|
2092
|
+
width: { type: 'number', description: 'Line width. Default: 2' },
|
|
2093
|
+
filled: { type: 'boolean', description: 'Fill shape. Default: true' },
|
|
2094
|
+
},
|
|
2095
|
+
required: ['action'],
|
|
2096
|
+
},
|
|
2097
|
+
},
|
|
2098
|
+
{
|
|
2099
|
+
name: 'game_light_2d',
|
|
2100
|
+
description: 'Create/configure 2D lights and light occluders',
|
|
2101
|
+
inputSchema: {
|
|
2102
|
+
type: 'object',
|
|
2103
|
+
properties: {
|
|
2104
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
2105
|
+
action: { type: 'string', enum: ['create_point', 'create_directional', 'create_occluder'], description: 'Action: create_point, create_directional, create_occluder' },
|
|
2106
|
+
nodePath: { type: 'string', description: 'Node path (for configure)' },
|
|
2107
|
+
color: { type: 'object', description: 'Light color {r,g,b,a}' },
|
|
2108
|
+
energy: { type: 'number', description: 'Light energy' },
|
|
2109
|
+
range: { type: 'number', description: 'Light texture range' },
|
|
2110
|
+
points: { type: 'array', description: 'Occluder polygon points [{x,y},...] (for create_occluder)' },
|
|
2111
|
+
name: { type: 'string', description: 'Node name' },
|
|
2112
|
+
},
|
|
2113
|
+
required: ['action'],
|
|
2114
|
+
},
|
|
2115
|
+
},
|
|
2116
|
+
{
|
|
2117
|
+
name: 'game_parallax',
|
|
2118
|
+
description: 'Create/configure ParallaxBackground and layers',
|
|
2119
|
+
inputSchema: {
|
|
2120
|
+
type: 'object',
|
|
2121
|
+
properties: {
|
|
2122
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
2123
|
+
action: { type: 'string', enum: ['create_background', 'add_layer', 'configure'], description: 'Action: create_background, add_layer, configure' },
|
|
2124
|
+
nodePath: { type: 'string', description: 'Node path (for configure)' },
|
|
2125
|
+
motionScale: { type: 'object', description: 'Motion scale {x,y} (ParallaxLayer)' },
|
|
2126
|
+
motionOffset: { type: 'object', description: 'Motion offset {x,y} (ParallaxLayer)' },
|
|
2127
|
+
mirroring: { type: 'object', description: 'Mirroring {x,y} (ParallaxLayer)' },
|
|
2128
|
+
scrollOffset: { type: 'object', description: 'Scroll offset {x,y} (ParallaxBackground configure)' },
|
|
2129
|
+
scrollBaseOffset: { type: 'object', description: 'Scroll base offset {x,y} (ParallaxBackground configure)' },
|
|
2130
|
+
name: { type: 'string', description: 'Node name' },
|
|
2131
|
+
},
|
|
2132
|
+
required: ['action'],
|
|
2133
|
+
},
|
|
2134
|
+
},
|
|
2135
|
+
{
|
|
2136
|
+
name: 'game_shape_2d',
|
|
2137
|
+
description: 'Line2D/Polygon2D point manipulation',
|
|
2138
|
+
inputSchema: {
|
|
2139
|
+
type: 'object',
|
|
2140
|
+
properties: {
|
|
2141
|
+
nodePath: { type: 'string', description: 'Path to Line2D/Polygon2D node' },
|
|
2142
|
+
action: { type: 'string', enum: ['add_point', 'set_points', 'clear', 'get_points'], description: 'Action: add_point, set_points, clear, get_points' },
|
|
2143
|
+
points: { type: 'array', description: 'Array of points [{x,y},...]' },
|
|
2144
|
+
point: { type: 'object', description: 'Single point {x,y}' },
|
|
2145
|
+
width: { type: 'number', description: 'Line width' },
|
|
2146
|
+
color: { type: 'object', description: 'Color {r,g,b,a}' },
|
|
2147
|
+
},
|
|
2148
|
+
required: ['nodePath', 'action'],
|
|
2149
|
+
},
|
|
2150
|
+
},
|
|
2151
|
+
{
|
|
2152
|
+
name: 'game_path_2d',
|
|
2153
|
+
description: 'Path2D and Curve2D point management',
|
|
2154
|
+
inputSchema: {
|
|
2155
|
+
type: 'object',
|
|
2156
|
+
properties: {
|
|
2157
|
+
action: { type: 'string', enum: ['create', 'add_point', 'get_points'], description: 'Action: create, add_point, get_points' },
|
|
2158
|
+
parentPath: { type: 'string', description: 'Parent node path (for create)' },
|
|
2159
|
+
nodePath: { type: 'string', description: 'Path2D node path' },
|
|
2160
|
+
points: { type: 'array', description: 'Array of points [{x,y},...]' },
|
|
2161
|
+
point: { type: 'object', description: 'Single point {x,y}' },
|
|
2162
|
+
name: { type: 'string', description: 'Node name' },
|
|
2163
|
+
},
|
|
2164
|
+
required: ['action'],
|
|
2165
|
+
},
|
|
2166
|
+
},
|
|
2167
|
+
{
|
|
2168
|
+
name: 'game_physics_2d',
|
|
2169
|
+
description: 'Area2D queries and 2D point/shape intersections',
|
|
2170
|
+
inputSchema: {
|
|
2171
|
+
type: 'object',
|
|
2172
|
+
properties: {
|
|
2173
|
+
action: { type: 'string', enum: ['ray', 'overlap', 'point_query', 'shape_query'], description: 'Action: overlap, point_query, shape_query, ray' },
|
|
2174
|
+
nodePath: { type: 'string', description: 'Area2D/node path (for overlap)' },
|
|
2175
|
+
from: { type: 'object', description: 'Origin point {x,y}' },
|
|
2176
|
+
to: { type: 'object', description: 'End point {x,y} (for ray)' },
|
|
2177
|
+
position: { type: 'object', description: 'Query position {x,y} (point_query/shape_query)' },
|
|
2178
|
+
radius: { type: 'number', description: 'Circle radius (shape_query circle)' },
|
|
2179
|
+
size: { type: 'object', description: 'Rectangle size {x,y} (shape_query rectangle)' },
|
|
2180
|
+
shapeType: { type: 'string', enum: ['circle', 'rectangle'], description: 'Shape: circle or rectangle (shape_query)' },
|
|
2181
|
+
maxResults: { type: 'integer', minimum: 1, description: 'Max results. Default: 32' },
|
|
2182
|
+
collisionMask: { type: 'integer', description: 'Collision mask bitmask' },
|
|
2183
|
+
},
|
|
2184
|
+
required: ['action'],
|
|
2185
|
+
},
|
|
2186
|
+
},
|
|
2187
|
+
{
|
|
2188
|
+
name: 'game_animation_tree',
|
|
2189
|
+
description: 'AnimationTree state machine travel and params',
|
|
2190
|
+
inputSchema: {
|
|
2191
|
+
type: 'object',
|
|
2192
|
+
properties: {
|
|
2193
|
+
nodePath: { type: 'string', description: 'Path to AnimationTree node' },
|
|
2194
|
+
action: { type: 'string', enum: ['travel', 'set_param', 'get_state'], description: 'State-machine action' },
|
|
2195
|
+
stateName: { type: 'string', description: 'State name (for travel)' },
|
|
2196
|
+
paramName: { type: 'string', description: 'Parameter name' },
|
|
2197
|
+
paramValue: { description: 'Parameter value' },
|
|
2198
|
+
},
|
|
2199
|
+
required: ['nodePath', 'action'],
|
|
2200
|
+
},
|
|
2201
|
+
},
|
|
2202
|
+
{
|
|
2203
|
+
name: 'game_animation_control',
|
|
2204
|
+
description: 'AnimationPlayer seek/queue/speed/info control',
|
|
2205
|
+
inputSchema: {
|
|
2206
|
+
type: 'object',
|
|
2207
|
+
properties: {
|
|
2208
|
+
nodePath: { type: 'string', description: 'Path to AnimationPlayer node' },
|
|
2209
|
+
action: { type: 'string', enum: ['seek', 'queue', 'set_speed', 'stop', 'get_info'], description: 'Action: seek, queue, set_speed, get_info, stop' },
|
|
2210
|
+
animationName: { type: 'string', description: 'Animation name' },
|
|
2211
|
+
position: { type: 'number', description: 'Seek position in seconds' },
|
|
2212
|
+
speed: { type: 'number', description: 'Playback speed scale' },
|
|
2213
|
+
},
|
|
2214
|
+
required: ['nodePath', 'action'],
|
|
2215
|
+
},
|
|
2216
|
+
},
|
|
2217
|
+
{
|
|
2218
|
+
name: 'game_skeleton_ik',
|
|
2219
|
+
description: 'SkeletonIK3D start/stop/set target position',
|
|
2220
|
+
inputSchema: {
|
|
2221
|
+
type: 'object',
|
|
2222
|
+
properties: {
|
|
2223
|
+
nodePath: { type: 'string', description: 'Path to SkeletonIK3D node' },
|
|
2224
|
+
action: { type: 'string', enum: ['start', 'stop', 'set_target'], description: 'IK action' },
|
|
2225
|
+
target: { type: 'object', description: 'Target position {x,y,z}' },
|
|
2226
|
+
},
|
|
2227
|
+
required: ['nodePath', 'action'],
|
|
2228
|
+
},
|
|
2229
|
+
},
|
|
2230
|
+
{
|
|
2231
|
+
name: 'game_audio_effect',
|
|
2232
|
+
description: 'Add/remove/configure audio bus effects',
|
|
2233
|
+
inputSchema: {
|
|
2234
|
+
type: 'object',
|
|
2235
|
+
properties: {
|
|
2236
|
+
busName: { type: 'string', description: 'Audio bus name. Default: Master' },
|
|
2237
|
+
action: { type: 'string', enum: ['list', 'add', 'remove', 'configure'], description: 'Effect action' },
|
|
2238
|
+
effectType: { type: 'string', enum: ['reverb', 'delay', 'chorus', 'eq', 'compressor', 'limiter'], description: 'Effect type' },
|
|
2239
|
+
index: { type: 'integer', minimum: 0, description: 'Effect index' },
|
|
2240
|
+
properties: { type: 'object', description: 'Effect properties to set (for configure)' },
|
|
2241
|
+
enabled: { type: 'boolean', description: 'Enable/disable the effect (for configure)' },
|
|
2242
|
+
},
|
|
2243
|
+
required: ['action'],
|
|
2244
|
+
},
|
|
2245
|
+
},
|
|
2246
|
+
{
|
|
2247
|
+
name: 'game_audio_bus_layout',
|
|
2248
|
+
description: 'Create/remove audio buses and routing',
|
|
2249
|
+
inputSchema: {
|
|
2250
|
+
type: 'object',
|
|
2251
|
+
properties: {
|
|
2252
|
+
action: { type: 'string', enum: ['list', 'add', 'remove', 'move', 'set_send'], description: 'Action: add, remove, move, set_send, list' },
|
|
2253
|
+
busName: { type: 'string', description: 'Bus name' },
|
|
2254
|
+
sendTo: { type: 'string', description: 'Send target bus name' },
|
|
2255
|
+
index: { type: 'integer', minimum: 1, description: 'Destination bus index for move' },
|
|
2256
|
+
},
|
|
2257
|
+
required: ['action'],
|
|
2258
|
+
},
|
|
2259
|
+
},
|
|
2260
|
+
{
|
|
2261
|
+
name: 'game_audio_spatial',
|
|
2262
|
+
description: 'Configure AudioStreamPlayer3D spatial properties',
|
|
2263
|
+
inputSchema: {
|
|
2264
|
+
type: 'object',
|
|
2265
|
+
properties: {
|
|
2266
|
+
nodePath: { type: 'string', description: 'Path to AudioStreamPlayer3D' },
|
|
2267
|
+
action: { type: 'string', enum: ['configure', 'get_info'], description: 'Spatial-audio action' },
|
|
2268
|
+
maxDistance: { type: 'number', description: 'Maximum audible distance' },
|
|
2269
|
+
unitSize: { type: 'number', description: 'Unit size for distance attenuation' },
|
|
2270
|
+
maxDb: { type: 'number', description: 'Maximum volume in dB' },
|
|
2271
|
+
attenuationModel: { type: 'string', enum: ['inverse', 'inverse_square', 'logarithmic'], description: 'Distance attenuation model' },
|
|
2272
|
+
},
|
|
2273
|
+
required: ['nodePath', 'action'],
|
|
2274
|
+
},
|
|
2275
|
+
},
|
|
2276
|
+
// Batch 4: Editor/Headless + Localization + Resource
|
|
2277
|
+
{
|
|
2278
|
+
name: 'rename_file',
|
|
2279
|
+
description: 'Rename or move a file within the project',
|
|
2280
|
+
inputSchema: {
|
|
2281
|
+
type: 'object',
|
|
2282
|
+
properties: {
|
|
2283
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2284
|
+
filePath: { type: 'string', description: 'Current file path (relative to project)' },
|
|
2285
|
+
newPath: { type: 'string', description: 'New file path (relative to project)' },
|
|
2286
|
+
},
|
|
2287
|
+
required: ['projectPath', 'filePath', 'newPath'],
|
|
2288
|
+
},
|
|
2289
|
+
},
|
|
2290
|
+
{
|
|
2291
|
+
name: 'manage_resource',
|
|
2292
|
+
description: 'Read or modify .tres/.res resource files',
|
|
2293
|
+
inputSchema: {
|
|
2294
|
+
type: 'object',
|
|
2295
|
+
properties: {
|
|
2296
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2297
|
+
resourcePath: { type: 'string', description: 'Resource file path (relative to project)' },
|
|
2298
|
+
action: { type: 'string', description: 'Action: read or modify' },
|
|
2299
|
+
properties: { type: 'object', description: 'Properties to modify' },
|
|
2300
|
+
},
|
|
2301
|
+
required: ['projectPath', 'resourcePath', 'action'],
|
|
2302
|
+
},
|
|
2303
|
+
},
|
|
2304
|
+
{
|
|
2305
|
+
name: 'validate_script',
|
|
2306
|
+
description: 'Check a GDScript file for syntax/type errors (headless, no run)',
|
|
2307
|
+
inputSchema: {
|
|
2308
|
+
type: 'object',
|
|
2309
|
+
properties: {
|
|
2310
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2311
|
+
scriptPath: { type: 'string', description: 'GDScript file path relative to project (e.g. "scripts/player.gd")' },
|
|
2312
|
+
},
|
|
2313
|
+
required: ['projectPath', 'scriptPath'],
|
|
2314
|
+
},
|
|
2315
|
+
},
|
|
2316
|
+
{
|
|
2317
|
+
name: 'validate_scripts',
|
|
2318
|
+
description: 'Batch-check GDScript files (git-changed by default, or all)',
|
|
2319
|
+
inputSchema: {
|
|
2320
|
+
type: 'object',
|
|
2321
|
+
properties: {
|
|
2322
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2323
|
+
scope: { type: 'string', enum: ['changed', 'all'], description: '"changed" = git-changed .gd (default); "all" = every .gd in project' },
|
|
2324
|
+
scriptPaths: { type: 'array', items: { type: 'string' }, description: 'Optional explicit list of .gd paths to check (overrides scope)' },
|
|
2325
|
+
},
|
|
2326
|
+
required: ['projectPath'],
|
|
2327
|
+
},
|
|
2328
|
+
},
|
|
2329
|
+
{
|
|
2330
|
+
name: 'create_script',
|
|
2331
|
+
description: 'Create a GDScript file from a template',
|
|
2332
|
+
inputSchema: {
|
|
2333
|
+
type: 'object',
|
|
2334
|
+
properties: {
|
|
2335
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2336
|
+
scriptPath: { type: 'string', description: 'Script file path (relative to project)' },
|
|
2337
|
+
extends: { type: 'string', description: 'Base class to extend. Default: Node' },
|
|
2338
|
+
className: { type: 'string', description: 'Optional class_name' },
|
|
2339
|
+
methods: { type: 'array', description: 'Method stubs to include' },
|
|
2340
|
+
source: { type: 'string', description: 'Full source code (overrides template)' },
|
|
2341
|
+
},
|
|
2342
|
+
required: ['projectPath', 'scriptPath'],
|
|
2343
|
+
},
|
|
2344
|
+
},
|
|
2345
|
+
{
|
|
2346
|
+
name: 'manage_scene_signals',
|
|
2347
|
+
description: 'List/add/remove signal connections in .tscn files',
|
|
2348
|
+
inputSchema: {
|
|
2349
|
+
type: 'object',
|
|
2350
|
+
properties: {
|
|
2351
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2352
|
+
scenePath: { type: 'string', description: 'Scene file path (relative to project)' },
|
|
2353
|
+
action: { type: 'string', description: 'Action: list, add, remove' },
|
|
2354
|
+
signalName: { type: 'string', description: 'Signal name' },
|
|
2355
|
+
sourcePath: { type: 'string', description: 'Source node path' },
|
|
2356
|
+
targetPath: { type: 'string', description: 'Target node path' },
|
|
2357
|
+
method: { type: 'string', description: 'Target method name' },
|
|
2358
|
+
},
|
|
2359
|
+
required: ['projectPath', 'scenePath', 'action'],
|
|
2360
|
+
},
|
|
2361
|
+
},
|
|
2362
|
+
{
|
|
2363
|
+
name: 'manage_layers',
|
|
2364
|
+
description: 'List/set named layer definitions in project',
|
|
2365
|
+
inputSchema: {
|
|
2366
|
+
type: 'object',
|
|
2367
|
+
properties: {
|
|
2368
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2369
|
+
action: { type: 'string', description: 'Action: list or set' },
|
|
2370
|
+
layerType: { type: 'string', description: 'Type: render, physics_2d, physics_3d, navigation' },
|
|
2371
|
+
layer: { type: 'number', description: 'Layer number (1-32)' },
|
|
2372
|
+
name: { type: 'string', description: 'Layer name' },
|
|
2373
|
+
},
|
|
2374
|
+
required: ['projectPath', 'action'],
|
|
2375
|
+
},
|
|
2376
|
+
},
|
|
2377
|
+
{
|
|
2378
|
+
name: 'manage_plugins',
|
|
2379
|
+
description: 'List/enable/disable editor plugins',
|
|
2380
|
+
inputSchema: {
|
|
2381
|
+
type: 'object',
|
|
2382
|
+
properties: {
|
|
2383
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2384
|
+
action: { type: 'string', description: 'Action: list, enable, disable' },
|
|
2385
|
+
pluginName: { type: 'string', description: 'Plugin name' },
|
|
2386
|
+
},
|
|
2387
|
+
required: ['projectPath', 'action'],
|
|
2388
|
+
},
|
|
2389
|
+
},
|
|
2390
|
+
{
|
|
2391
|
+
name: 'manage_shader',
|
|
2392
|
+
description: 'Create or read .gdshader files',
|
|
2393
|
+
inputSchema: {
|
|
2394
|
+
type: 'object',
|
|
2395
|
+
properties: {
|
|
2396
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2397
|
+
shaderPath: { type: 'string', description: 'Shader file path (relative to project)' },
|
|
2398
|
+
action: { type: 'string', description: 'Action: create or read' },
|
|
2399
|
+
shaderType: { type: 'string', description: 'Type: spatial, canvas_item, particles, sky' },
|
|
2400
|
+
source: { type: 'string', description: 'Shader source code (for create)' },
|
|
2401
|
+
},
|
|
2402
|
+
required: ['projectPath', 'shaderPath', 'action'],
|
|
2403
|
+
},
|
|
2404
|
+
},
|
|
2405
|
+
{
|
|
2406
|
+
name: 'manage_theme_resource',
|
|
2407
|
+
description: 'Create/read/modify Theme .tres resources',
|
|
2408
|
+
inputSchema: {
|
|
2409
|
+
type: 'object',
|
|
2410
|
+
properties: {
|
|
2411
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2412
|
+
resourcePath: { type: 'string', description: 'Theme file path (relative to project)' },
|
|
2413
|
+
action: { type: 'string', description: 'Action: create, read, modify' },
|
|
2414
|
+
properties: { type: 'object', description: 'Theme properties to set' },
|
|
2415
|
+
},
|
|
2416
|
+
required: ['projectPath', 'resourcePath', 'action'],
|
|
2417
|
+
},
|
|
2418
|
+
},
|
|
2419
|
+
{
|
|
2420
|
+
name: 'set_main_scene',
|
|
2421
|
+
description: 'Set the main scene in project.godot',
|
|
2422
|
+
inputSchema: {
|
|
2423
|
+
type: 'object',
|
|
2424
|
+
properties: {
|
|
2425
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2426
|
+
scenePath: { type: 'string', description: 'Scene path (relative to project)' },
|
|
2427
|
+
},
|
|
2428
|
+
required: ['projectPath', 'scenePath'],
|
|
2429
|
+
},
|
|
2430
|
+
},
|
|
2431
|
+
{
|
|
2432
|
+
name: 'manage_scene_structure',
|
|
2433
|
+
description: 'Rename/duplicate/move nodes within .tscn scenes',
|
|
2434
|
+
inputSchema: {
|
|
2435
|
+
type: 'object',
|
|
2436
|
+
properties: {
|
|
2437
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2438
|
+
scenePath: { type: 'string', description: 'Scene file path (relative to project)' },
|
|
2439
|
+
action: { type: 'string', description: 'Action: rename, duplicate, move' },
|
|
2440
|
+
nodePath: { type: 'string', description: 'Source node path in scene' },
|
|
2441
|
+
newName: { type: 'string', description: 'New name (for rename)' },
|
|
2442
|
+
newParentPath: { type: 'string', description: 'New parent path (for move)' },
|
|
2443
|
+
},
|
|
2444
|
+
required: ['projectPath', 'scenePath', 'action', 'nodePath'],
|
|
2445
|
+
},
|
|
2446
|
+
},
|
|
2447
|
+
{
|
|
2448
|
+
name: 'manage_translations',
|
|
2449
|
+
description: 'List/add/remove translation files in project',
|
|
2450
|
+
inputSchema: {
|
|
2451
|
+
type: 'object',
|
|
2452
|
+
properties: {
|
|
2453
|
+
projectPath: { type: 'string', description: 'Godot project path' },
|
|
2454
|
+
action: { type: 'string', description: 'Action: list, add, remove' },
|
|
2455
|
+
translationPath: { type: 'string', description: 'Translation file path' },
|
|
2456
|
+
},
|
|
2457
|
+
required: ['projectPath', 'action'],
|
|
2458
|
+
},
|
|
2459
|
+
},
|
|
2460
|
+
{
|
|
2461
|
+
name: 'game_locale',
|
|
2462
|
+
description: 'Set/get locale and translate strings at runtime',
|
|
2463
|
+
inputSchema: {
|
|
2464
|
+
type: 'object',
|
|
2465
|
+
properties: {
|
|
2466
|
+
action: { type: 'string', description: 'Action: get, set, translate' },
|
|
2467
|
+
locale: { type: 'string', description: 'Locale code (e.g. en, es, fr)' },
|
|
2468
|
+
key: { type: 'string', description: 'Translation key (for translate)' },
|
|
2469
|
+
},
|
|
2470
|
+
required: ['action'],
|
|
2471
|
+
},
|
|
2472
|
+
},
|
|
2473
|
+
// Batch 5: UI Controls + Rendering + Resource Runtime
|
|
2474
|
+
{
|
|
2475
|
+
name: 'game_ui_control',
|
|
2476
|
+
description: 'Set focus, anchors, tooltip, mouse filter on Control',
|
|
2477
|
+
inputSchema: {
|
|
2478
|
+
type: 'object',
|
|
2479
|
+
properties: {
|
|
2480
|
+
nodePath: { type: 'string', description: 'Path to Control node' },
|
|
2481
|
+
action: { type: 'string', enum: ['grab_focus', 'release_focus', 'configure', 'get_info'], description: 'Action: configure, grab_focus, release_focus, get_info' },
|
|
2482
|
+
anchorPreset: {
|
|
2483
|
+
oneOf: [
|
|
2484
|
+
{ type: 'integer', minimum: 0, maximum: 15 },
|
|
2485
|
+
{ type: 'string', enum: ['top_left', 'top_right', 'bottom_left', 'bottom_right', 'center_left', 'center_top', 'center_right', 'center_bottom', 'center', 'left_wide', 'top_wide', 'right_wide', 'bottom_wide', 'vcenter_wide', 'hcenter_wide', 'full_rect'] },
|
|
2486
|
+
],
|
|
2487
|
+
description: 'Anchor preset value or name',
|
|
2488
|
+
},
|
|
2489
|
+
tooltip: { type: 'string', description: 'Tooltip text' },
|
|
2490
|
+
mouseFilter: { type: 'string', enum: ['stop', 'pass', 'ignore'], description: 'Mouse filter: stop, pass, ignore' },
|
|
2491
|
+
minSize: { type: 'object', description: 'Minimum size {x,y}' },
|
|
2492
|
+
},
|
|
2493
|
+
required: ['nodePath', 'action'],
|
|
2494
|
+
},
|
|
2495
|
+
},
|
|
2496
|
+
{
|
|
2497
|
+
name: 'game_ui_text',
|
|
2498
|
+
description: 'LineEdit/TextEdit/RichTextLabel text operations',
|
|
2499
|
+
inputSchema: {
|
|
2500
|
+
type: 'object',
|
|
2501
|
+
properties: {
|
|
2502
|
+
nodePath: { type: 'string', description: 'Path to text control' },
|
|
2503
|
+
action: { type: 'string', enum: ['get', 'set', 'append', 'clear', 'bbcode'], description: 'Action: get, set, append, clear, bbcode' },
|
|
2504
|
+
text: { type: 'string', description: 'Text content' },
|
|
2505
|
+
caretPosition: { type: 'integer', minimum: 0, description: 'Caret column position' },
|
|
2506
|
+
selectionFrom: { type: 'integer', minimum: 0, description: 'Selection start' },
|
|
2507
|
+
selectionTo: { type: 'integer', minimum: 0, description: 'Selection end' },
|
|
2508
|
+
},
|
|
2509
|
+
required: ['nodePath', 'action'],
|
|
2510
|
+
},
|
|
2511
|
+
},
|
|
2512
|
+
{
|
|
2513
|
+
name: 'game_ui_popup',
|
|
2514
|
+
description: 'Show/hide/popup for Popup/Dialog/Window nodes',
|
|
2515
|
+
inputSchema: {
|
|
2516
|
+
type: 'object',
|
|
2517
|
+
properties: {
|
|
2518
|
+
nodePath: { type: 'string', description: 'Path to Popup/Dialog/Window' },
|
|
2519
|
+
action: { type: 'string', enum: ['popup_centered', 'popup', 'hide', 'get_info'], description: 'Action: popup_centered, popup, hide, get_info' },
|
|
2520
|
+
size: { type: 'object', description: 'Popup size {x,y}' },
|
|
2521
|
+
title: { type: 'string', description: 'Dialog title text' },
|
|
2522
|
+
text: { type: 'string', description: 'Dialog body text' },
|
|
2523
|
+
},
|
|
2524
|
+
required: ['nodePath', 'action'],
|
|
2525
|
+
},
|
|
2526
|
+
},
|
|
2527
|
+
{
|
|
2528
|
+
name: 'game_ui_tree',
|
|
2529
|
+
description: 'Tree control: get/select/collapse/add/remove items',
|
|
2530
|
+
inputSchema: {
|
|
2531
|
+
type: 'object',
|
|
2532
|
+
properties: {
|
|
2533
|
+
nodePath: { type: 'string', description: 'Path to Tree control' },
|
|
2534
|
+
action: { type: 'string', enum: ['get_items', 'add', 'select', 'collapse', 'expand', 'remove'], description: 'Action: get_items, select, collapse, expand, add, remove' },
|
|
2535
|
+
itemPath: { type: 'string', description: 'Item path (slash-separated indices)' },
|
|
2536
|
+
text: { type: 'string', description: 'Item text (for add)' },
|
|
2537
|
+
column: { type: 'integer', minimum: 0, description: 'Column index. Default: 0' },
|
|
2538
|
+
},
|
|
2539
|
+
required: ['nodePath', 'action'],
|
|
2540
|
+
},
|
|
2541
|
+
},
|
|
2542
|
+
{
|
|
2543
|
+
name: 'game_ui_item_list',
|
|
2544
|
+
description: 'ItemList/OptionButton: get/select/add/remove items',
|
|
2545
|
+
inputSchema: {
|
|
2546
|
+
type: 'object',
|
|
2547
|
+
properties: {
|
|
2548
|
+
nodePath: { type: 'string', description: 'Path to ItemList/OptionButton' },
|
|
2549
|
+
action: { type: 'string', enum: ['get_items', 'select', 'add', 'remove', 'clear'], description: 'Action: get_items, select, add, remove, clear' },
|
|
2550
|
+
index: { type: 'integer', minimum: 0, description: 'Item index' },
|
|
2551
|
+
text: { type: 'string', description: 'Item text (for add)' },
|
|
2552
|
+
},
|
|
2553
|
+
required: ['nodePath', 'action'],
|
|
2554
|
+
},
|
|
2555
|
+
},
|
|
2556
|
+
{
|
|
2557
|
+
name: 'game_ui_tabs',
|
|
2558
|
+
description: 'TabContainer/TabBar: get/set current tab',
|
|
2559
|
+
inputSchema: {
|
|
2560
|
+
type: 'object',
|
|
2561
|
+
properties: {
|
|
2562
|
+
nodePath: { type: 'string', description: 'Path to TabContainer/TabBar' },
|
|
2563
|
+
action: { type: 'string', enum: ['get_tabs', 'set_current', 'set_title'], description: 'Action: get_tabs, set_current, set_title' },
|
|
2564
|
+
index: { type: 'integer', minimum: 0, description: 'Tab index' },
|
|
2565
|
+
title: { type: 'string', description: 'Tab title' },
|
|
2566
|
+
},
|
|
2567
|
+
required: ['nodePath', 'action'],
|
|
2568
|
+
},
|
|
2569
|
+
},
|
|
2570
|
+
{
|
|
2571
|
+
name: 'game_ui_menu',
|
|
2572
|
+
description: 'PopupMenu: add/remove/get menu items and shortcuts',
|
|
2573
|
+
inputSchema: {
|
|
2574
|
+
type: 'object',
|
|
2575
|
+
properties: {
|
|
2576
|
+
nodePath: { type: 'string', description: 'Path to PopupMenu/MenuBar' },
|
|
2577
|
+
action: { type: 'string', enum: ['get_items', 'add', 'remove', 'set_checked', 'clear'], description: 'Action: get_items, add, remove, set_checked, clear' },
|
|
2578
|
+
index: { type: 'integer', minimum: 0, description: 'Item index' },
|
|
2579
|
+
text: { type: 'string', description: 'Item text (for add)' },
|
|
2580
|
+
checked: { type: 'boolean', description: 'Checked state' },
|
|
2581
|
+
id: { type: 'integer', description: 'Item ID' },
|
|
2582
|
+
shortcutKey: { type: 'string', description: 'Keyboard shortcut key name for a new item' },
|
|
2583
|
+
},
|
|
2584
|
+
required: ['nodePath', 'action'],
|
|
2585
|
+
},
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
name: 'game_ui_range',
|
|
2589
|
+
description: 'ProgressBar/Slider/SpinBox/ColorPicker get/set',
|
|
2590
|
+
inputSchema: {
|
|
2591
|
+
type: 'object',
|
|
2592
|
+
properties: {
|
|
2593
|
+
nodePath: { type: 'string', description: 'Path to Range/ColorPicker node' },
|
|
2594
|
+
action: { type: 'string', enum: ['get', 'set'], description: 'Action: get or set' },
|
|
2595
|
+
value: { type: 'number', description: 'Value (for Range nodes)' },
|
|
2596
|
+
minValue: { type: 'number', description: 'Minimum value' },
|
|
2597
|
+
maxValue: { type: 'number', description: 'Maximum value' },
|
|
2598
|
+
step: { type: 'number', description: 'Step value' },
|
|
2599
|
+
color: { type: 'object', description: 'Color {r,g,b,a} (for ColorPicker)' },
|
|
2600
|
+
},
|
|
2601
|
+
required: ['nodePath', 'action'],
|
|
2602
|
+
},
|
|
2603
|
+
},
|
|
2604
|
+
{
|
|
2605
|
+
name: 'game_render_settings',
|
|
2606
|
+
description: 'Get/set MSAA, FXAA, TAA, scaling mode/scale',
|
|
2607
|
+
inputSchema: {
|
|
2608
|
+
type: 'object',
|
|
2609
|
+
properties: {
|
|
2610
|
+
action: { type: 'string', description: 'Action: get or set' },
|
|
2611
|
+
msaa2d: { type: 'number', description: 'MSAA 2D mode (0-3)' },
|
|
2612
|
+
msaa3d: { type: 'number', description: 'MSAA 3D mode (0-3)' },
|
|
2613
|
+
fxaa: { type: 'boolean', description: 'Enable FXAA' },
|
|
2614
|
+
taa: { type: 'boolean', description: 'Enable TAA' },
|
|
2615
|
+
scalingMode: { type: 'number', description: 'Scaling mode (0=bilinear, 1=FSR1, 2=FSR2)' },
|
|
2616
|
+
scalingScale: { type: 'number', description: 'Render scale (0.0-1.0)' },
|
|
2617
|
+
},
|
|
2618
|
+
required: [],
|
|
2619
|
+
},
|
|
2620
|
+
},
|
|
2621
|
+
{
|
|
2622
|
+
name: 'game_resource',
|
|
2623
|
+
description: 'Load, threaded-preload, save, or inspect project resources at runtime',
|
|
2624
|
+
inputSchema: {
|
|
2625
|
+
type: 'object',
|
|
2626
|
+
properties: {
|
|
2627
|
+
action: { type: 'string', enum: ['load', 'preload', 'save', 'exists'], description: 'Action: load, preload, save, or exists' },
|
|
2628
|
+
path: { type: 'string', description: 'Resource path (res://)' },
|
|
2629
|
+
nodePath: { type: 'string', description: 'Node path whose resource property is saved' },
|
|
2630
|
+
property: { type: 'string', description: 'Resource-valued property to save' },
|
|
2631
|
+
},
|
|
2632
|
+
required: ['action', 'path'],
|
|
2633
|
+
},
|
|
2634
|
+
},
|
|
2635
|
+
// Batch 6: Visual Shader + Terrain + Video + CI/CD
|
|
2636
|
+
{
|
|
2637
|
+
name: 'game_visual_shader',
|
|
2638
|
+
description: 'Create and edit VisualShader graphs: add/connect/disconnect nodes',
|
|
2639
|
+
inputSchema: {
|
|
2640
|
+
type: 'object',
|
|
2641
|
+
properties: {
|
|
2642
|
+
action: { type: 'string', enum: ['create', 'add_node', 'connect', 'disconnect', 'get_nodes', 'apply'], description: 'Action: create, add_node, connect, disconnect, get_nodes, apply' },
|
|
2643
|
+
nodePath: { type: 'string', description: 'Target node path (for apply)' },
|
|
2644
|
+
shaderType: { type: 'string', description: 'Shader type: spatial, canvas_item, particles, sky, fog' },
|
|
2645
|
+
nodeClass: { type: 'string', description: 'VisualShaderNode class name (for add_node)' },
|
|
2646
|
+
position: { type: 'object', description: 'Node position {x, y} (for add_node)' },
|
|
2647
|
+
fromNode: { type: 'integer', minimum: 0, description: 'Source node ID (for connect/disconnect)' },
|
|
2648
|
+
fromPort: { type: 'integer', minimum: 0, description: 'Source port index' },
|
|
2649
|
+
toNode: { type: 'integer', minimum: 0, description: 'Destination node ID (for connect/disconnect)' },
|
|
2650
|
+
toPort: { type: 'integer', minimum: 0, description: 'Destination port index' },
|
|
2651
|
+
shaderId: { type: 'integer', minimum: 1, description: 'Shader resource ID (for multi-shader scenes)' },
|
|
2652
|
+
},
|
|
2653
|
+
required: ['action'],
|
|
2654
|
+
},
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
name: 'game_terrain',
|
|
2658
|
+
description: 'Create/modify terrain meshes from heightmap data',
|
|
2659
|
+
inputSchema: {
|
|
2660
|
+
type: 'object',
|
|
2661
|
+
properties: {
|
|
2662
|
+
action: { type: 'string', enum: ['create', 'get_height', 'modify', 'paint'], description: 'Action: create, modify, get_height, paint' },
|
|
2663
|
+
parentPath: { type: 'string', description: 'Parent node path' },
|
|
2664
|
+
nodePath: { type: 'string', description: 'Terrain node path' },
|
|
2665
|
+
heightData: { type: 'array', description: 'Array of float height values (for create)', items: { type: 'number' } },
|
|
2666
|
+
width: { type: 'integer', minimum: 2, description: 'Terrain width in vertices' },
|
|
2667
|
+
depth: { type: 'integer', minimum: 2, description: 'Terrain depth in vertices' },
|
|
2668
|
+
maxHeight: { type: 'number', description: 'Maximum terrain height' },
|
|
2669
|
+
x: { type: 'number', description: 'X position (for modify/get_height/paint)' },
|
|
2670
|
+
z: { type: 'number', description: 'Z position (for modify/get_height/paint)' },
|
|
2671
|
+
radius: { type: 'number', minimum: 0, description: 'Brush radius (for modify/paint)' },
|
|
2672
|
+
heightDelta: { type: 'number', description: 'Height change amount (for modify)' },
|
|
2673
|
+
color: { type: 'object', description: 'Vertex color {r,g,b,a} (for paint)' },
|
|
2674
|
+
name: { type: 'string', description: 'Node name' },
|
|
2675
|
+
},
|
|
2676
|
+
required: ['action'],
|
|
2677
|
+
},
|
|
2678
|
+
},
|
|
2679
|
+
{
|
|
2680
|
+
name: 'game_video',
|
|
2681
|
+
description: 'Video playback control: play, pause, stop, seek on VideoStreamPlayer',
|
|
2682
|
+
inputSchema: {
|
|
2683
|
+
type: 'object',
|
|
2684
|
+
properties: {
|
|
2685
|
+
action: { type: 'string', description: 'Action: create, play, pause, stop, seek, get_status' },
|
|
2686
|
+
nodePath: { type: 'string', description: 'Path to VideoStreamPlayer node' },
|
|
2687
|
+
parentPath: { type: 'string', description: 'Parent node path (for create)' },
|
|
2688
|
+
videoPath: { type: 'string', description: 'res:// path to video file' },
|
|
2689
|
+
position: { type: 'number', description: 'Seek position in seconds' },
|
|
2690
|
+
volume: { type: 'number', description: 'Volume (linear 0-1)' },
|
|
2691
|
+
loop: { type: 'boolean', description: 'Enable looping' },
|
|
2692
|
+
autoplay: { type: 'boolean', description: 'Auto-play on ready' },
|
|
2693
|
+
name: { type: 'string', description: 'Node name (for create)' },
|
|
2694
|
+
},
|
|
2695
|
+
required: ['action'],
|
|
2696
|
+
},
|
|
2697
|
+
},
|
|
2698
|
+
{
|
|
2699
|
+
name: 'manage_ci_pipeline',
|
|
2700
|
+
description: 'Create/read GitHub Actions workflow for automated Godot exports',
|
|
2701
|
+
inputSchema: {
|
|
2702
|
+
type: 'object',
|
|
2703
|
+
properties: {
|
|
2704
|
+
projectPath: { type: 'string', description: 'Absolute path to Godot project' },
|
|
2705
|
+
action: { type: 'string', enum: ['create', 'read'], description: 'Action: create or read' },
|
|
2706
|
+
platforms: { type: 'array', description: 'Target platforms: windows, linux, macos, web', items: { type: 'string', enum: ['windows', 'linux', 'macos', 'web'] } },
|
|
2707
|
+
godotVersion: { type: 'string', pattern: '^4\\.\\d+(?:\\.\\d+)?(?:-stable)?$', description: 'Godot 4 version (e.g. 4.3-stable)' },
|
|
2708
|
+
},
|
|
2709
|
+
required: ['projectPath', 'action'],
|
|
2710
|
+
},
|
|
2711
|
+
},
|
|
2712
|
+
{
|
|
2713
|
+
name: 'manage_docker_export',
|
|
2714
|
+
description: 'Create Dockerfile for headless Godot export',
|
|
2715
|
+
inputSchema: {
|
|
2716
|
+
type: 'object',
|
|
2717
|
+
properties: {
|
|
2718
|
+
projectPath: { type: 'string', description: 'Absolute path to Godot project' },
|
|
2719
|
+
action: { type: 'string', enum: ['create', 'read'], description: 'Action: create or read' },
|
|
2720
|
+
godotVersion: { type: 'string', pattern: '^4\\.\\d+(?:\\.\\d+)?(?:-stable)?$', description: 'Godot 4 version (e.g. 4.3-stable)' },
|
|
2721
|
+
exportPreset: { type: 'string', pattern: '^[A-Za-z0-9][A-Za-z0-9 _./-]{0,127}$', description: 'Export preset name (letters, digits, spaces, _, ., /, and -)' },
|
|
2722
|
+
baseImage: { type: 'string', enum: ['ubuntu:22.04', 'ubuntu:24.04'], description: 'Supported base Docker image (default: ubuntu:22.04)' },
|
|
2723
|
+
},
|
|
2724
|
+
required: ['projectPath', 'action'],
|
|
2725
|
+
},
|
|
2726
|
+
},
|
|
2727
|
+
];
|