Godot MCP Server — Tool Reference
Generated from the tool catalogue (src/registration/catalogue.ts) — regenerate with npm run docs:tools. This is the per-tool reference; for the subsystem explanation see Architecture.
112 built-in tools exposing 160 operations — an action-consolidated tool packs several operations behind one discriminator, so the operation count runs ahead of the tool count. Counts are a ceiling (“up to”); some tools and operations are Godot-version-gated and absent on older editors.
Startup surface (eager)
Registered up front — always in the initial tools/list. The two meta tools (discover_tools, extensions_refresh) are also eager but defined outside the catalogue.
34 tools, 48 operations.
editor_save_scene
Save the current edited scene. Optional file_path triggers save-as.
eager · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | no |
scene_open
Open a scene (.tscn / .scn) as the active edited scene. res:// only; NOT_FOUND if the file doesn’t exist.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
project_get_settings
| List ProjectSettings keys + values. Optional prefix filter. Keys matching /password | token | secret | key/i are dropped (MVP filter). |
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
prefix | string | no |
editor_get_console
Tail editor Output. source=’buffer’ (default): live editor console on 4.5+, game-log tail on 4.2-4.4. source=’file’: the game-written log (never editor output, any version). level_filter, since_id, text_filter (is_regex=true for regex). Carries returned/total_lines/has_more + next_id — page via since_id. Primary post-crash diagnostic tool — reads runtime errors even after game_stop.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
clear_buffer | boolean | no | Clear the log buffer before reading. Use when stale errors persist after successful script recompilation. |
is_regex | boolean | no | Treat text_filter as a regex pattern instead of a plain substring (default false). |
level_filter | union | no | Single level or array of levels to filter by |
limit | number | no | |
since_id | number | no | |
source | enum | no | |
text_filter | string | no | Substring to match against message text (case-insensitive). Set is_regex=true for regex patterns. |
project_set_setting
Write a ProjectSettings key and persist via ProjectSettings.save. Refuses mcp_toolkit/, mcp/, and editor/* prefixes. Returns previous_value. Update (no status).
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
setting | string | yes | ProjectSettings key (e.g. ‘application/config/name’) |
value | any | yes |
folder_create
Create directory at res:// path (recursive — parents auto-created). Idempotent: status created on fresh, returned if pre-existing.
eager · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
path | string | yes |
node_get_property
Read a property from the node at path. Returns { value } (engine types are dict-wrapped).
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes | |
property | string | yes | Property name. Use ‘:’ to chain into sub-resources (e.g. ‘material:shader_parameter/value’). |
node_set_property
Set a property on a node in the EDITOR scene tree (saved to .tscn files). Does NOT affect the running game — for runtime property changes during playtesting, use runtime_set_property. Node paths are relative to the edited scene root: “.” is root, “./Player” is a direct child, “./Player/Sprite2D” for deeper nodes. Engine types: {type:’Vector2’,x,y}. Inline sub-resources: {type:’NewResource’,class:’CircleShape2D’,properties:{radius:50}}. External resources (textures, audio, tilesets, materials): {type:’Resource’, path:’res://path/to/file.tres’}. Packed arrays: {type:’PackedVector2Array’, values:[{type:’Vector2’,x:0,y:0}, …]}. Collision layers: {type:’LayerMask’, layers:[1,4,6]} (by number) or {type:’LayerMask’, layers:[‘player’,’walls’]} (by name from layer_names_set); optional category defaults to ‘2d_physics’. All supported type tags: Vector2, Vector3, Vector4, Vector2i, Vector3i, Color, Rect2, Rect2i, Transform2D, Transform3D, NodePath, Resource, NewResource, PackedVector2Array, PackedVector3Array, PackedColorArray, LayerMask. Unknown type tags are rejected with an error listing supported types. Anchor presets: setting anchors_preset alone may not auto-apply underlying values. For reliable layout, set anchor_left/top/right/bottom and offset_left/top/right/bottom explicitly. Batch mode: pass batch:[{node_path, property, value, make_unique?}, …] to set multiple properties at once.
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
batch | array | no | Batch mode: array of {node_path, property, value, make_unique?}. Omit for single-property operations. When present, top-level node_path/property/value are ignored. |
make_unique | boolean | no | When true and the compound path targets an external (.tres) sub-resource, auto-duplicate it as an inline copy before setting. Equivalent to the Inspector’s ‘Make Unique’. Only needed for compound paths on external resources. |
node_path | string | no | Single mode: path to target node |
property | string | no | Single mode: property name. Compound ‘/’ paths supported. Use ‘:’ for sub-resource chaining (e.g. ‘material:shader_parameter/value’). |
value | any | no |
node_get_property_list
Introspect node properties. mask: common (default), all, groups, script. ‘script’ returns all script variables with public/private label; use visibility param to filter.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
mask | enum | no | Property filter. ‘common’ (default) returns 8-12 most-edited. ‘all’ returns full list. ‘groups’ returns names+usage only. ‘script’ returns script variables with visibility label. Prefer ‘common’ or node_get_property; ‘all’ returns the full list and is large. |
node_path | string | yes | |
visibility | enum | yes | Filter for mask=’script’. ‘public’ = no _ prefix, ‘private’ = _ prefix, ‘all’ = both. |
node_set_script
Attach a script (.gd/.cs) to a node. Returns @export properties exposed by the script. Empty script_path string detaches.
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes | |
script_path | string | yes |
control_set_layout
Set anchor preset + optional margins on a Control node in one call. Uses set_anchors_and_offsets_preset(). Returns final_rect.
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
margins | object | no | Additive offsets applied after the preset (in pixels). |
node_path | string | yes | |
preset | string | yes | Layout preset: PRESET_TOP_LEFT, PRESET_TOP_RIGHT, PRESET_BOTTOM_LEFT, PRESET_BOTTOM_RIGHT, PRESET_CENTER_LEFT, PRESET_CENTER_TOP, PRESET_CENTER_RIGHT, PRESET_CENTER_BOTTOM, PRESET_CENTER, PRESET_LEFT_WIDE, PRESET_TOP_WIDE, PRESET_RIGHT_WIDE, PRESET_BOTTOM_WIDE, PRESET_VCENTER_WIDE, PRESET_HCENTER_WIDE, PRESET_FULL_RECT |
resize_mode | enum | no | keep_size (default) preserves size; set_to_anchors resizes to anchor region. |
node_call_method
Call method with args on an edited-scene node (editor-only; for runtime nodes use execute_code).
eager · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
args | array | no | |
method_name | string | yes | |
node_path | string | yes |
node_manage
Structural node operations on the edited scene tree. action: rename — requires new_name. action: reparent — requires new_parent_path, optional keep_global_transform (default true). action: reorder — requires new_index (0-based sibling index). action: duplicate — optional new_name, parent_path, properties (overrides like {position:{x,y}}).
eager
4 operations (action): rename, reparent, reorder, duplicate
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
keep_global_transform | boolean | no | For reparent: preserve world transform. Default true. |
new_index | integer | no | For reorder: 0-based sibling index. |
new_name | string | no | Required for rename; optional for duplicate. |
new_parent_path | string | no | Required for reparent. |
node_path | string | yes | |
parent_path | string | no | For duplicate: target parent. Defaults to same parent. |
properties | object | no | For duplicate: property overrides on the copy (e.g. {position:{x:100,y:200}}). |
node_groups
Manage node group membership. Groups are the idiomatic Godot way to tag and query game objects (e.g. ‘coins’, ‘enemies’). Single mode: node_path + group (node_path required for add/remove/list). Batch mode: entries array of {node_path, group} carries per-item paths, and the top-level node_path/group are ignored. action: add — requires group. action: remove — requires group. action: list — returns all groups (single only).
eager
3 operations (action): add, remove, list
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
entries | array | no | Batch mode (add/remove only): array of {node_path, group}. When present, processes all entries as a batch.node_path and group params are ignored in batch mode. |
group | string | no | Group name. Required for single add/remove. |
node_path | string | no | Single mode: target node path. Required for single add/remove/list; omit in batch mode (provide entries instead). |
persistent | boolean | no | For add: save to .tscn. Default true. |
autoload_manage
Manage project autoload singletons (GameManager, AudioManager, etc.). Writes to project.godot; takes effect on next game launch. action: register — requires name + script_path. action: unregister — requires name. action: list — returns all.
eager
3 operations (action): register, unregister, list
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
enabled | boolean | no | For register: auto-initialize on startup. Default true. |
name | string | no | Autoload name (e.g. ‘GameManager’). Required for register/unregister. |
script_path | string | no | Script path (e.g. ‘res://scripts/game_manager.gd’). Required for register. |
game_start
| Start playtest. Blocks until runtime is ready by default; wait_for_runtime:false launches without blocking. scene_path:’main’ | ‘current’(default) | res://path. if_running:’return’ for idempotent mode. |
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
if_running | enum | no | |
runtime_poll | boolean | no | With if_running:’return’, re-check whether the already-running game’s runtime has since connected. Default false. |
scene_path | string | no | |
wait_for_runtime | boolean | yes | Defaults true — blocks until runtime connects (or times out) so runtime tools are immediately available. Pass wait_for_runtime:false to launch without blocking. |
game_stop
Stop the currently-playing scene (idempotent — returns was_running:false if nothing was running). No params.
eager · destructive
1 operation.
No parameters.
runtime_screenshot
Capture the running game window. Requires an active playtest (game_start). Use editor_screenshot for the editor viewport. image_response_mode ‘disk’ saves the PNG and returns only its path.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
force_foreground_game | boolean | no | If true, un-minimize + raise/focus the game window before capturing (default false). Set it when runtime_screenshot reports RUNTIME_WINDOW_MINIMIZED; leave false to avoid fighting for focus (esp. parallel game instances). |
image_detail | enum | no | Resolution of the returned inline image only. full = native; mid ≈ 1024 px long edge; low ≈ 512 px (gross layout/motion only — not for reading text). Does not affect files written to disk. |
image_response_mode | enum | no | How to return the capture: ‘inline’ (default) embeds the PNG; ‘disk’ persists it and returns only the path — use for very large captures or to conserve context tokens; ‘both’ does both. Files written to disk are always full resolution, regardless of image_detail. |
save_path | string | no | Destination .png used by image_response_mode disk/both (user://screenshots/ only); auto-named when omitted. |
debugger_get_log
| Game output log. Works during gameplay AND after crash (auto-serves cached output). print()/push_* from a running game are captured here on every version (4.2-4.7) — the ‘read my own prints to validate a flow’ path. Compile errors will NOT appear here (the game must run); use script_check (one file) or lsp_project_diagnostics (whole project). source=’buffer’ | ‘file’. limit=200. text_filter + is_regex for search. +returned/total_lines/has_more (capped tail). Right after game_stop the first call may return GAME_NOT_RUNNING while the session registry settles — retry once (the cache serves the next call). |
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
is_regex | boolean | no | Treat text_filter as a regex pattern instead of a plain substring (default false). |
limit | integer | no | |
source | enum | no | |
text_filter | string | no | Substring to match against log message text (case-insensitive). Set is_regex=true for regex. |
input_simulate
| Inject input into the running game. events: single {event_type, event_data?, delay_before_ms?, delay_after_ms?} for one action, or an array for a sequence of actions (prefer a single call with multiple events over separate calls). Types: key | mouse_button | mouse_motion | action | click | click_node | send_text. click is a composite: press + 50ms delay + release via push_input (no OS focus/warp; parallel-safe). click_node takes {node_path} — calls grab_focus + emits pressed on BaseButtons (no coordinate guessing). send_text types a string into the focused text field (or the event_data.node_path-targeted Control) by synthesizing per-character key events via push_input, firing the real text_changed/text_submitted signals that setting .text skips. send_text event_data: text (required), node_path? (a Control to focus first), submit? (append Enter); it returns focus_target, focus_source, text_changed, text_after (secret fields redacted), chars_sent, and a hint. Mouse coordinate modes: - position: {x, y} — raw viewport/screen coordinates (default). Use for UI elements (buttons, menus). - world_position: {x, y} — game-world coordinates, auto-translated via canvas transform (accounts for camera offset and zoom). Use for clicking at specific in-game locations. Mouse events route through push_input (position + global_position) for CanvasLayer/GUI hit-testing — no OS focus/warp, parallel-safe. Returns per-event diagnostics. |
eager
7 operations (operation): key, mouse_button, mouse_motion, action, click, click_node, send_text
| Param | Type | Required | Description |
|---|---|---|---|
events | union | yes | |
summary | boolean | no |
runtime_get_script_vars
Get script variables (names, values, public/private) for a live game node. Complements runtime_get_node_state (engine props only). visibility param filters.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes | |
visibility | enum | yes |
execute_code
DANGER: evaluates a GDScript expression. Expression-only — no var/return/if/for statements, no = assignment. channel: ‘runtime’ (default) runs in the running game, ‘editor’ runs in the editor process. To set properties: get_node(‘/root/Main/Player’).set(‘speed’, 400) To call methods: get_node(‘/root/Main/Player’).call(‘take_damage’, 25) To read values: get_node(‘/root/Main/Player’).position Prefer runtime_set_property for single property changes (safer, no expression syntax). Use execute_code for complex multi-step operations or method calls with specific arguments. If C# project, managed methods are callable at runtime (channel:’runtime’). LIMITATION: Expression cannot access engine singletons (EditorInterface, Engine, OS, Input) or call load()/preload(). Property chaining on method return values (get_node(‘X’).position) may fail due to Variant type erasure — use scope_path to bind the node as self, or use .get(‘property’) instead (get_node(‘X’).get(‘position’) works reliably).
eager · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
channel | enum | no | ‘runtime’ (default) evaluates in the running game — needs game_start first, else GAME_NOT_RUNNING; ‘editor’ evaluates in the editor process, no running game needed — use it for editor-state expressions. |
code | string | yes | |
scope_path | string | no |
scene_get_tree
Return the current edited scene’s node tree as nested JSON { name, class, path, children }. Paths use “.” for root — pass them directly to other editor commands.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
include_properties | boolean | no | Embed property snapshot per node. Default false. |
max_depth | number | no | Tree depth. Default 2. Use -1 for full tree. |
scene_create_node
Create a node of class_name under parent. Supports engine + user-defined class_name classes. Idempotent: ‘returned’ on collision, ‘created’ on fresh. Example: class_name: “CharacterBody2D”, parent_path: “.”, node_name: “Player”
eager · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
class_name | string | yes | |
layout_mode | number | no | Layout mode for Control nodes: 0=free, 1=anchors. Auto-sets 1 when parent is Container. |
node_name | string | no | |
parent_path | string | yes | |
properties | object | no | Inline property values set after creation. Same coercion as node_set_property. Partial failure keeps the node — check properties_failed. Dict iteration order is not guaranteed. |
unique_name | boolean | no | Mark as scene-unique node for %Name access in scripts. Warns if name collides with existing unique node. |
scene_delete_node
Delete the node at path (NodePath). Refuses to delete the edited scene root.
eager · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes |
scene_create
| Create .tscn at file_path. Root name = filename stem at ‘.’. root_type default Node. Idempotent: created | returned | replaced. if_exists: return | fail | replace. Use scene_open afterward to edit. |
eager · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | |
if_exists | enum | no | |
root_name | string | no | Root node name override (default: filename stem). |
root_type | string | no |
scene_query
Search scene tree with filters (class, group, name glob, property conditions). Returns matching nodes. Faster than scene_get_tree + manual filtering. Paged: returned, total_matches, has_more. When has_more, page via next_offset until has_more is false. Stable only if the source is unchanged between calls. Results are returned in deterministic depth-first order; nodes echoes offset/limit. limit is 1-200 (default 50, clamped above 200). If the tree changes between paged reads (nodes added, removed, or reordered) results may skip or repeat — re-query from offset 0.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
class_filter | string | no | Class name filter (inheritance-aware, e.g. ‘CollisionShape2D’, ‘Control’) |
group_filter | string | no | Node group membership filter |
include_properties | array | no | Property names to include in results |
limit | integer | no | Page size (default per tool); a request above the cap is clamped and limit_clamped is set. |
max_depth | integer | no | Max traversal depth (-1 = unlimited, default -1) |
name_pattern | string | no | Glob pattern for node name (e.g. ‘Enemy’, ‘Collision*’) |
offset | integer | no | Skip the first N (default 0); pass next_offset back as offset until has_more is false. |
property_filters | array | no | Property value conditions (AND logic) |
root_path | string | no | Subtree root path (default: scene root) |
script_read
Read a script file (res:// only). Returns the file content as text in an
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
end_line | integer | no | 1-based last line to read (inclusive). |
file_path | string | yes | |
start_line | integer | no | 1-based first line (default 1); pass next_start_line back as start_line to page. |
script_write
Write .gd/.cs/.gdshader/.gdshaderinc at file_path (res:// only, creates or overwrites). For .gd files, returns inline diagnostics (valid: bool, diagnostics: […]) — check valid before proceeding. Not idempotent. Use script.delete to remove; resource.create for .tres; scene.create for .tscn.
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
content | string | yes | |
file_path | string | yes |
script_edit
Surgically replace a span in an existing .gd/.cs/.gdshader/.gdshaderinc file (res:// only) — the MCP analogue of the native Edit tool. old_string must match the file byte-for-byte (whitespace and indentation included); no regex, no fuzzy match. old_string not found -> NOT_FOUND; matches more than once without replace_all -> NOT_UNIQUE. new_string:’’ deletes the span. replace_all replaces every occurrence and returns replacements:N. Prefer this over rewriting the whole file with script_write for a small change — it keeps the editor undo entry, reindexing, and inline diagnostics. For .gd files, returns inline diagnostics (valid: bool, diagnostics: […]) — check valid before proceeding.
eager
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | |
new_string | string | yes | replacement text; empty string deletes the span |
old_string | string | yes | exact byte-for-byte span to replace (whitespace/indent must match) |
replace_all | boolean | no | replace every occurrence instead of requiring a unique match (default false) |
script_check
Offline GDScript validation — pass/fail + diagnostics. On 4.5+ the error diagnostic carries the real line (1-based; omitted on 4.2-4.4). Columns are lsp_diagnostics’ domain. Works without editor.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | res:// path to a .gd file |
signal_list
List signals on a node. include_connections=true adds targets ({target_path, method_name, flags}). flags & 2 = CONNECT_PERSIST (saved in .tscn).
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
include_connections | boolean | no | |
node_path | string | yes |
signal_manage
Connect or disconnect a signal (editor-time, CONNECT_PERSIST — saved in .tscn, survives save/load). Idempotent connect (status ‘returned’ on collision).
eager · idempotent
2 operations (action): connect, disconnect
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
method_name | string | yes | |
node_path | string | yes | |
signal_name | string | yes | |
target_path | string | yes |
scene_spatial_map
Spatial layout of the current scene: per-node world position, bounds (2D Rect2 / 3D AABB), size, plus computed overlaps/gaps/containment. Call before placing or moving nodes to find clear space. Paged: returned, total_nodes, has_more. Cursor-less — narrow with subtree/class/region/radius or raise max_nodes for more.
eager · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
center | array | no | Center for radius filter: [x,y] (2D) or [x,y,z] (3D) |
class | string | no | Only include nodes of this class (ancestry-aware) |
detail | enum | no | brief = position/size only; normal = + bounds + overlaps; full = + containment + nearest-neighbour gaps |
max_nodes | number | no | Response cap (default 200, max 1000) |
radius | number | no | Only nodes within this distance of center |
region | array | no | Only nodes intersecting this box: [x,y,w,h] (2D) or [x,y,z,sx,sy,sz] (3D) |
subtree | string | no | Map only this node and its descendants (node path relative to the scene root) |
Group: runtime_advanced
Inspect live node state, set node properties, and control AnimationPlayer during playtests
3 tools, 6 operations.
runtime_get_node_state
Inspect a live node in the running game. Returns { name, class, path, properties } — primarily @export vars and inspector-visible fields.
on-demand (group: runtime_advanced) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes |
runtime_set_property
Set a property on a node in the running game. Requires a running game (use game_start first). For editor-time scene editing, use node_set_property instead. Examples: node_path: “/root/Main/Player”, property: “speed”, value: 400 node_path: “/root/Main/Enemy”, property: “health”, value: 0 node_path: “/root/Main/HUD/ScoreLabel”, property: “text”, value: “Score: 999”
on-demand (group: runtime_advanced)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes | Absolute path to the node in the running scene tree |
property | string | yes | Property name (supports compound paths like ‘position:x’) |
value | union | yes | Value to set — type is coerced to match the property’s existing type |
animation_player_control
| Drive an AnimationPlayer in the running game. operation: play | pause | stop | seek. Optional animation_name (play) or time (seek). Returns post-op state. |
on-demand (group: runtime_advanced)
4 operations (operation): play, pause, stop, seek
| Param | Type | Required | Description |
|---|---|---|---|
animation_name | string | no | |
node_path | string | yes | |
operation | enum | yes | |
time | number | no |
Group: signals
Emit signals on scene nodes at editor-time or runtime
1 tool, 1 operations.
signal_emit
Emit signal_name on node with optional args. channel=’editor’ (default, edited scene) or channel=’runtime’ (the running game).
on-demand (group: signals)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
args | array | no | |
channel | enum | no | |
node_path | string | yes | |
signal_name | string | yes |
Group: animation_authoring
Inspect and author keyframes, edit tracks, and configure AnimationTree state machines
4 tools, 10 operations.
animation_keyframe
Add/remove a keyframe on an existing animation’s track. animation must already exist; action=’add’ auto-creates the track only. Idempotent on exact-time dup.
on-demand (group: animation_authoring) · idempotent
2 operations (action): add, remove
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
animation_name | string | yes | |
player_path | string | yes | |
time | number | yes | |
track_path | string | yes | |
track_type | enum | no | Track type; only ‘value’ supported currently. |
value | any | no | Required for action=’add’. |
animation_get_keys
List keys on an AnimationPlayer track: { time, value, transition }. Read-only; no auto-track-create.
on-demand (group: animation_authoring) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
animation_name | string | yes | |
player_path | string | yes | |
track_path | string | yes |
animationtree_edit
Configure AnimationTree state machines: set root, add/remove nodes and transitions, or set properties.
on-demand (group: animation_authoring) · destructive · idempotent
6 operations (action): set_root, add_node, remove_node, add_transition, remove_transition, set_property
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | Operation to perform on the AnimationTree. |
advance_condition | string | no | For add_transition: condition name for conditional advance. |
advance_mode | enum | no | For add_transition: advance mode (disabled=0, enabled=1, auto=2). |
animation_name | string | no | For add_node with AnimationNodeAnimation: which animation to play. |
from | string | no | For transitions: source node name. |
node_name | string | no | For add_node/remove_node: name of the state machine node. |
node_path | string | yes | Path to an AnimationTree node in the edited scene. |
node_type | string | no | For add_node: AnimationNode subclass (e.g. AnimationNodeAnimation, AnimationNodeBlendSpace2D). |
position | object | no | For add_node: graph position { x, y }. |
property | string | no | For set_property: property name to set. |
root_type | enum | no | For set_root: type of root node to create. |
switch_mode | enum | no | For add_transition: when the transition fires. |
target_node | string | no | For set_property: node name in the state machine. |
to | string | no | For transitions: destination node name. |
value | any | no | For set_property: value to assign. |
animationtree_list
List an AnimationTree state machine’s structure: root type, nodes, and transitions. Read-only; no mutation.
on-demand (group: animation_authoring) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
node_path | string | yes | Path to an AnimationTree node in the edited scene. |
Group: input_map
List, create, and edit input actions and their key/controller bindings
2 tools, 4 operations.
input_map_action
Add or remove an InputMap action. action: ‘add’ or ‘remove’ (the operation). name: the input map name (e.g. ‘jump’, ‘move_left’). action=’add’ is idempotent with optional deadzone.
on-demand (group: input_map)
2 operations (action): add, remove
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
deadzone | number | no | |
name | string | yes |
input_map_event
Bind/unbind an input event to an action. action: ‘bind’ or ‘unbind’ (the operation). event: object — {type:’key’, keycode:’Space’}, {type:’mouse_button’, button_index:1}, {type:’joypad_button’, button_index:0}, {type:’joypad_motion’, axis:0, axis_value:1.0}. action=’bind’ is idempotent.
on-demand (group: input_map)
2 operations (action): bind, unbind
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | |
event | object | yes | |
name | string | yes |
Group: resource_io
Load and write Godot resources (.tres/.res) programmatically
2 tools, 2 operations.
resource_load
Load a res:// resource and return { class, path, properties, metadata }. Heavy fields (image, mesh_arrays) pruned; Texture2D gets size in metadata.
on-demand (group: resource_io) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
resource_write
Write/create a .tres/.res resource. If file exists, updates properties. If not, ‘type’ (class name) is required to create it. For TileSets, use tileset_create instead (handles atlas + physics setup).
on-demand (group: resource_io) · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | |
properties | object | no | Property values. Sub-resources in dicts: use {type:’NewResource’, class:’ClassName’, properties:{…}}. |
type | string | no | Resource class name. Required when creating a new resource. |
Group: asset_ops
List assets, query dependencies, and import binary files into the project
3 tools, 3 operations.
asset_list
Enumerate res:// assets with filters (path_prefix, name_glob, class_filter ancestry-aware, extension_filter). Returns [{path,class,modified_unix}]. Paged: returned, total_assets, has_more. Cursor-less — narrow filters or raise limit for more. limit caps at 2000 (default 500); a request above 2000 is clamped and limit_clamped is set (a non-positive limit is rejected).
on-demand (group: asset_ops) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
class_filter | string | no | |
extension_filter | array | no | |
limit | number | no | Max assets returned (default 500, clamped to 2000) |
name_glob | string | no | |
path_prefix | string | no |
asset_get_dependencies
Forward dependencies of a res:// resource/scene via EditorFileSystem cache. include_transitive walks deps-of-deps. Returns [{path,raw_path,class}]. Paged: returned, total_dependencies, has_more. Cursor-less — narrow the query or raise limit for more.
on-demand (group: asset_ops) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | |
include_transitive | boolean | no | |
limit | number | no | Max dependencies returned (default 200) |
asset_import
| Import binary asset (image/audio/font/3D) into res:// via exactly one of source_path (absolute or res:// path) or base64_data. Triggers EditorFileSystem scan. if_exists:return | fail | replace. |
on-demand (group: asset_ops) · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
base64_data | string | no | |
dest_path | string | yes | |
if_exists | enum | no | |
source_path | string | no | |
wait_for_scan_ms | number | no |
Group: placeholders
Generate placeholder/prototype assets procedurally — textures (shapes, patterns, labels) and sound effects (tones, noise). No art or network needed.
2 tools, 2 operations.
texture_generate
Generate a placeholder PNG (imports as Texture2D): a shape (solid/circle/triangle/diamond/arrow/checkerboard/grid) with fill/outline/background colours + an optional text label. Dimensions <=1024px.
on-demand (group: placeholders)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
background_color | union | no | Canvas colour behind the shape (default transparent) |
cell_size | number | no | Cell size for checkerboard/grid |
direction | enum | no | Arrow direction |
file_path | string | yes | res:// destination ending in .png |
fill_color | union | no | Interior colour; transparent = hollow shape |
height | number | no | Pixels, 1-1024 (default 64) |
if_exists | enum | no | |
label | string | no | Optional text overlaid centred on any shape |
label_color | union | no | |
outline_color | union | no | Border colour; transparent/omitted = no border |
outline_width | number | no | Border thickness in pixels (default 1) |
shape | enum | no | |
wait_for_scan_ms | number | no | |
width | number | no | Pixels, 1-1024 (default 64) |
sound_generate
Generate a placeholder sound effect (mono WAV): waveform sine/square/triangle/sawtooth/noise, frequency, duration <=5s, volume, optional pitch sweep + fade/decay envelope. SFX only, no music.
on-demand (group: placeholders)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
decay | number | no | Exponential decay time-constant in seconds (>0 = pluck/bell) |
duration | number | no | Seconds, max 5 (default 0.3) |
end_frequency | number | no | If set, pitch sweeps frequency -> end_frequency over the duration |
fade_in | number | no | Fade-in seconds (default ~0.003 de-click) |
fade_out | number | no | Fade-out seconds (default ~0.003 de-click) |
file_path | string | yes | res:// destination ending in .wav |
frequency | number | no | Hz (default 440; ignored for noise) |
if_exists | enum | no | |
volume | number | no | Peak amplitude 0-1 (default 0.8) |
wait_for_scan_ms | number | no | |
waveform | enum | no |
Group: cleanup
Delete files, scripts, scenes, resources, and folders; close open scenes
6 tools, 6 operations.
file_delete
Delete any file under res:// and its .import companion. Auto-closes .tscn/.scn editor tabs on 4.5+ (tab_closed:true). Use for assets not covered by scene/script/resource.delete.
on-demand (group: cleanup) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
scene_delete
Delete .tscn at path and .uid companion. Auto-closes editor tab on 4.5+ (tab_closed:true). 4.2-4.4: blocks active scene (EDITED_SCENE); non-active tabs get phantom warnings. Refuses non-.tscn.
on-demand (group: cleanup) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
script_delete
Delete .gd/.cs/.gdshader/.gdshaderinc at file_path (and .uid companion). Refuses non-script paths (INVALID_PATH). No open-in-editor guard.
on-demand (group: cleanup) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
resource_delete
Delete the .tres/.res and its .uid companion at file_path. No active-use guard (Godot refs survive file deletion; detect orphans via editor_get_console).
on-demand (group: cleanup) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
folder_delete
Delete directory. recursive:false(default) requires empty. On 4.5+ closes one open scene tab; multiple in stale_tabs - use scene_close. Refuses project root, addons, open scripts (PATH_IN_USE).
on-demand (group: cleanup) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
path | string | yes | |
recursive | boolean | no |
scene_close
Close an open scene tab by file_path. Discards unsaved edits — save with editor_save_scene first. Auto-creates an empty scene when the last tab closes. NOT_FOUND if not open. Requires Godot 4.5+.
on-demand (group: cleanup) · Godot 4.5+ · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes |
Group: user_data
Read, write, delete, and list user:// save files
4 tools, 4 operations.
save_read
Read user:// file (default 64 KB window; cap configurable, default 256 KB). Read large files in successive max_bytes windows via byte offset. Paged: returned, total_bytes, has_more. When has_more, page via next_offset until has_more is false. Returns UTF-8 content in
on-demand (group: user_data) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
max_bytes | integer | no | Bytes to read this window (default 64 KB; cap configurable, default 256 KB) |
offset | integer | no | Byte offset to start at (default 0); pass next_offset back to page. |
path | string | yes | user:// file path |
save_write
Write to user:// file. Not idempotent. Creates parent dirs. Plugin internals path denied.
on-demand (group: user_data) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
content | string | yes | |
path | string | yes |
save_delete
Delete user:// file. NOT_FOUND if missing. Plugin internals path denied.
on-demand (group: user_data) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
path | string | yes |
save_list
List files + subdirs in a user:// directory (path must end /). Names only — agent issues follow-up save.list for recursion.
on-demand (group: user_data) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
path | string | yes |
Group: scene_advanced
Diff scenes and batch-instantiate nodes from packed scenes
2 tools, 2 operations.
scene_diff
Compare a prior scene-tree snapshot against another snapshot (or current edited scene if ‘after’ omitted). Returns { changed, diff, added, removed }.
on-demand (group: scene_advanced) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
after | any | no | |
before | any | yes |
scene_instantiate
Instantiate PackedScene at scene_path under parent_path. Single mode: silent-return on name collision. Batch mode: pass instances array to spawn N copies with transforms. Single: scene_path: “res://coin.tscn”, parent_path: “.”, as_name: “Coin” Batch: scene_path: “res://coin.tscn”, parent_path: “.”, instances: [{name:”Coin1”,position:{x:100,y:200},properties:{coin_value:5}}, …]
on-demand (group: scene_advanced)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
as_name | string | no | Single mode: instance name. |
instances | array | no | Batch mode: array of {name?, position?, rotation?, scale?, properties?}. properties: arbitrary overrides applied after instantiation (e.g. {key_type: ‘Gold’}). When present, spawns N instances as a batch. as_name and transform are ignored in batch mode. |
parent_path | string | yes | |
scene_path | string | yes | |
transform | object | no | Single mode: property overrides. |
Group: editor_advanced
Capture editor screenshots, refresh the filesystem, and wait for idle
3 tools, 3 operations.
editor_screenshot
Capture the editor viewport (NOT the running game — use runtime_screenshot for that). Pass node_path to focus one node. image_response_mode ‘disk’ saves the PNG and returns only its path.
on-demand (group: editor_advanced) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
force_foreground_editor | boolean | no | If true, un-minimize + raise/focus the editor window before capturing (default false). Set it when driving from a terminal and editor_screenshot reports EDITOR_VIEWPORT_UNAVAILABLE; leave false in interactive use so your window isn’t raised. |
image_detail | enum | no | Resolution of the returned inline image only. full = native; mid ≈ 1024 px long edge; low ≈ 512 px (gross layout/motion only — not for reading text). Does not affect files written to disk. |
image_response_mode | enum | no | How to return the capture: ‘inline’ (default) embeds the PNG; ‘disk’ persists it and returns only the path — use for very large captures or to conserve context tokens; ‘both’ does both. Files written to disk are always full resolution, regardless of image_detail. |
node_path | string | no | Focus + capture a specific node instead of the full viewport |
save_path | string | no | Destination .png used by image_response_mode disk/both (res:// or user://screenshots/); auto-named under user://screenshots/ when omitted. |
editor_refresh
Refresh the editor’s view of the filesystem — picks up new, changed, or deleted files (images, scenes, scripts, resources) and reloads open scripts. Call after creating files externally (e.g. Python, Bash) or after batch edits. With file_paths, targets specific files (O(1) per file). Without, does a full project rescan + reimport.
on-demand (group: editor_advanced)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_paths | array | no | res:// paths to update; omit for full scan |
editor_wait_for_idle
Poll EditorFileSystem.is_scanning() until idle or timeout_ms (default 10s, cap 30s). Use after asset.import, editor.refresh, or file mutations.
on-demand (group: editor_advanced) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
timeout_ms | number | no |
Group: tilemap
Read and paint cells on TileMap/TileMapLayer nodes — cell queries, bulk fills, and region operations
2 tools, 2 operations.
tilemap_read_cells
Read placed tile data from a TileMapLayer (4.3+) or deprecated TileMap. Returns cell coords, source_id, atlas_coords. 500-cell cap. Paged: returned, total_cells, has_more. Cursor-less — narrow with region/source_id for more.
on-demand (group: tilemap) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
layer | integer | no | Layer index for deprecated TileMap (default 0) |
node_path | string | yes | Path to TileMapLayer or TileMap node |
region | object | no | Spatial filter: only cells within {x, y, width, height} |
source_id | integer | no | Filter to cells from this atlas source |
tilemap_set_cells
Batch-set cells on TileMap or TileMapLayer. Returns cells_written + cells_unchanged. source_id:-1 clears a cell. Use ‘regions’ for bulk rectangular fills (far more efficient than listing individual cells).
on-demand (group: tilemap)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
cells | array | no | Array of {x, y, source_id, atlas_x, atlas_y, alternative_tile?}. source_id:-1 clears. |
layer | number | no | |
node_path | string | yes | |
regions | array | no | Array of rectangular fills: [{x, y, width, height, source_id, atlas_x, atlas_y, alternative_tile?}]. Each region expands into width*height cells. Far more efficient than listing individual cells for room-scale fills. Can be combined with ‘cells’ — regions are appended to cells. |
Group: tileset
Create TileSet resources, add atlas sources, configure layers, and manage tile alternatives
6 tools, 6 operations.
tileset_create
Create a TileSet .tres from a texture. Generates atlas tiles with full-tile rectangular collision (physics on by default). Returns source_id + grid dims — use these with tilemap_set_cells.
on-demand (group: tileset)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
collision_layer | union | no | Physics collision layer. Integer bitmask OR array of layer numbers [1,6] or names [‘player’,’walls’]. Default 1 |
collision_mask | union | no | Physics collision mask. Integer bitmask OR array of layer numbers [2,4] or names [‘enemies’,’collectibles’]. Default 1 |
file_path | string | yes | Output path, e.g. ‘res://resources/tileset.tres’ |
physics | boolean | no | Add physics layer. Default true |
texture_path | string | yes | Texture for the atlas source, e.g. ‘res://assets/tiles.png’ |
tile_size | object | no | Tile size in pixels. Default {x:16, y:16} |
tileset_add_source
Add an atlas source to an existing TileSet. Auto-creates tiles for every grid cell in the texture. Returns the new source_id.
on-demand (group: tileset)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
texture_path | string | yes | Texture for the new atlas source |
tile_size | object | no | Tile size in pixels. Defaults to the TileSet’s tile_size |
tileset_remove_source
Remove an atlas source from a TileSet. This deletes all tile data for that source.
on-demand (group: tileset) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | yes | Atlas source id to remove |
tileset_add_alternative
Create an alternative tile variant (flip, rotate, recolor) for a base tile.
on-demand (group: tileset)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
atlas_x | integer | yes | Base tile X coordinate in the atlas |
atlas_y | integer | yes | Base tile Y coordinate in the atlas |
file_path | string | yes | Path to existing .tres TileSet |
flip_h | boolean | no | Flip horizontally |
flip_v | boolean | no | Flip vertically |
modulate | object | no | Color modulation {r, g, b, a} — each 0.0–1.0 |
source_id | integer | no | Atlas source id. Default 0 |
transpose | boolean | no | Transpose (swap X/Y) |
tileset_remove_alternative
Remove an alternative tile variant from a base tile.
on-demand (group: tileset) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
alternative_id | integer | yes | Alternative tile id to remove |
atlas_x | integer | yes | Base tile X coordinate in the atlas |
atlas_y | integer | yes | Base tile Y coordinate in the atlas |
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tileset_setup_layers
Configure TileSet layers: terrain sets (with named terrains), custom data layers, and physics/navigation/occlusion layer counts.
on-demand (group: tileset)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
custom_data | array | no | Custom data layers to add |
file_path | string | yes | Path to existing .tres TileSet |
navigation_layers | integer | no | Desired navigation layer count |
occlusion_layers | integer | no | Desired occlusion layer count |
physics_layers | integer | no | Desired physics layer count |
terrain_sets | array | no | Terrain sets to add |
Group: tileset_edit
Edit per-tile properties: physics, terrain, navigation, visuals, and custom data
5 tools, 5 operations.
tileset_edit_physics
Set collision polygons on TileSet tiles. Supports shortcuts (‘full’, ‘none’, ‘one_way’) or custom polygon arrays [{x, y}].
on-demand (group: tileset_edit)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tiles | array | yes | Per-tile edits: [{atlas_x, atlas_y, physics_polygon: ‘full’|’none’|’one_way’|[{x,y}], physics_layer?: int, one_way_collision?: bool}] |
tileset_edit_terrain
Assign terrain sets and peering bits to TileSet tiles for auto-tiling.
on-demand (group: tileset_edit)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tiles | array | yes | Per-tile edits: [{atlas_x, atlas_y, terrain_set: int, terrain?: int, terrain_peering?: {right?: int, bottom?: int, left?: int, top?: int, …}}] |
tileset_edit_navigation
Set navigation polygons on TileSet tiles. Supports ‘full’, ‘none’, or custom polygon arrays.
on-demand (group: tileset_edit)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tiles | array | yes | Per-tile edits: [{atlas_x, atlas_y, navigation_polygon: ‘full’|’none’|[{x,y}], navigation_layer?: int}] |
tileset_edit_visuals
Set occlusion polygons, tile animations, and probability weights on TileSet tiles.
on-demand (group: tileset_edit) · destructive
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tiles | array | yes | Per-tile edits: [{atlas_x, atlas_y, occlusion_polygon?: ‘full’|’none’|[{x,y}], occlusion_layer?: int, animation?: {frame_count, columns?, frame_duration?, separation?}, probability?: number}] |
tileset_edit_custom_data
Set custom data values on TileSet tiles. Custom data layers must be configured first with tileset_setup_layers.
on-demand (group: tileset_edit)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Path to existing .tres TileSet |
source_id | integer | no | Atlas source id. Default 0 |
tiles | array | yes | Per-tile edits: [{atlas_x, atlas_y, custom_data: {“layer_name”: value, …}}] |
Group: theme
Edit UI theme overrides: styleboxes, fonts, colors, and constants
1 tool, 1 operations.
theme_edit
Create or modify a Godot Theme resource (.tres). Batch-edit colors, constants, fonts, font sizes, icons, and styleboxes for any control type.
on-demand (group: theme)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
edits | array | yes | Array of theme property edits to apply |
file_path | string | yes | Theme resource path, e.g. ‘res://themes/ui_theme.tres’. Created if missing. |
Group: layer_naming
Get and set physics, render, and navigation layer names
2 tools, 2 operations.
layer_names_set
| Set physics/render layer names. category: 2d_physics | 2d_render | 3d_physics | 3d_render. layers: {1:’Ground’, 2:’Player’, …} (keys 1-32). |
on-demand (group: layer_naming)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
category | enum | yes | |
layers | object | yes | Layer number (1-32) to name |
layer_names_get
Read named physics/render layers. Returns only layers with non-empty names.
on-demand (group: layer_naming) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
category | enum | yes |
Group: path_editing
Edit Path2D curves and generate collision shapes from sprite textures
2 tools, 5 operations.
path2d_edit_curve
Edit a Path2D node’s Curve2D — set, add, or remove points with bezier control handles. For patrol routes, moving platforms, projectile curves, and camera rails.
on-demand (group: path_editing)
4 operations (action): set, add, remove, clear
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | set=replace all, add=append/insert, remove=delete at index, clear=remove all |
index | integer | no | Insert position (add) or point index to remove |
node_path | string | yes | Path2D node path in the scene tree |
points | array | no | Curve points with optional bezier handles |
collision_from_texture
Auto-generate CollisionPolygon2D from a Sprite2D’s texture alpha. Uses BitMap to trace opaque regions. For platformer terrain, character hitboxes, irregular shapes.
on-demand (group: path_editing)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
parent_path | string | no | Parent for the new CollisionPolygon2D (default: sprite’s parent) |
simplification | number | no | Polygon simplification epsilon 0.0-10.0 (default 2.0, higher=fewer points) |
sprite_path | string | yes | Path to a Sprite2D/TextureRect node with a texture |
target_name | string | no | Name for the CollisionPolygon2D (default: {sprite}_collision) |
Group: 3d_tools
Create 3D primitives, lights, cameras, and environment setups
4 tools, 4 operations.
3d_create_primitive
Create a 3D mesh primitive (box, sphere, cylinder, capsule, plane, prism) as a MeshInstance3D node. Optionally set size, material, and position.
on-demand (group: 3d_tools)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
material | object | no | Material to apply: {type:’StandardMaterial3D’, albedo_color?, metallic?, roughness?} |
name | string | no | Node name (default: ‘MeshInstance3D’) |
parent_path | string | yes | Parent node path (e.g. ‘.’ for scene root) |
position | object | no | World position {x,y,z} |
primitive | enum | yes | Mesh primitive type |
size | object | no | Size as {x,y,z}. Interpretation depends on primitive: box→size, sphere→x=diameter/y=height, etc. |
3d_setup_environment
Create a WorldEnvironment node with sky, ambient light, tonemapping, and fog. Sets up a complete 3D rendering environment.
on-demand (group: 3d_tools)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
ambient_light | object | no | Ambient light: {color?, energy?} |
fog | object | no | Fog settings: {enabled?, color?, density?} |
name | string | no | Node name (default: ‘WorldEnvironment’) |
parent_path | string | yes | Parent node path (e.g. ‘.’ for scene root) |
sky | object | no | Sky configuration |
tonemap | enum | no | Tonemapping mode |
3d_create_light
Create a 3D light node (DirectionalLight3D, OmniLight3D, or SpotLight3D). Optionally set color, energy, shadow, position, and rotation.
on-demand (group: 3d_tools)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
color | object | no | Light color {r,g,b} |
energy | number | no | Light energy/intensity |
light_type | enum | yes | Light type |
name | string | no | Node name (default: type-specific, e.g. ‘DirectionalLight3D’) |
parent_path | string | yes | Parent node path (e.g. ‘.’ for scene root) |
position | object | no | World position {x,y,z} |
rotation | object | no | Rotation in Euler degrees {x,y,z} |
shadow | boolean | no | Enable shadow casting |
3d_create_camera
Create a Camera3D node. Set projection mode (perspective/orthogonal), FOV, position, rotation, and whether it’s the current camera.
on-demand (group: 3d_tools)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
current | boolean | no | Set as the current active camera |
fov | number | no | Field of view in degrees (perspective mode) |
name | string | no | Node name (default: ‘Camera3D’) |
parent_path | string | yes | Parent node path (e.g. ‘.’ for scene root) |
position | object | no | World position {x,y,z} |
projection | enum | no | Projection mode (default: perspective) |
rotation | object | no | Rotation in Euler degrees {x,y,z} |
size | number | no | Viewport size (orthogonal mode) |
Group: procedural
Edit gradients, curves, and FastNoiseLite resources for procedural generation
3 tools, 8 operations.
procedural_edit_gradient
Create/edit a Gradient resource (.tres). Set color stops with offsets, add/remove points. For particles, sky, and visual effects.
on-demand (group: procedural)
3 operations (action): set, add_point, remove_point
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | no | set=replace all, add_point=add one, remove_point=delete by index (default: set) |
file_path | string | yes | Path for the .tres file (e.g. ‘res://materials/sky_gradient.tres’) |
index | integer | no | Point index (for remove_point) |
interpolation_mode | enum | no | Interpolation between stops |
points | array | no | Gradient color stops |
procedural_edit_curve
Create/edit a Curve resource (.tres). Set control points with tangents for easing, falloff, and value mapping.
on-demand (group: procedural)
4 operations (action): set, add_point, remove_point, clear
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | no | set=replace all, add_point=add one, remove_point=delete, clear=remove all (default: set) |
file_path | string | yes | Path for the .tres file |
index | integer | no | Point index (for remove_point) |
max_value | number | no | Curve maximum Y value |
min_value | number | no | Curve minimum Y value |
points | array | no | Curve control points |
procedural_edit_noise
Create/edit a FastNoiseLite resource (.tres). Configure noise type, fractal, cellular, and domain warp for procedural generation.
on-demand (group: procedural)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
cellular_distance_function | enum | no | |
cellular_return_type | enum | no | |
domain_warp_amplitude | number | no | |
domain_warp_enabled | boolean | no | |
file_path | string | yes | Path for the .tres file |
fractal_type | enum | no | Fractal type |
frequency | number | no | Base frequency (default 0.01) |
gain | number | no | Octave amplitude multiplier |
lacunarity | number | no | Octave frequency multiplier |
noise_type | enum | no | Noise algorithm |
octaves | integer | no | Fractal octaves 1-10 |
seed | integer | no | Random seed |
Group: scene_inheritance
Create inherited scenes (variants) from base scenes
1 tool, 1 operations.
scene_create_inherited
Create an inherited scene (.tscn) from a base scene — Godot’s prefab variant pattern. Writes minimal TSCN text, works on all 4.2-4.7.
on-demand (group: scene_inheritance)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
base_scene | string | yes | Base scene path (e.g. ‘res://scenes/enemy.tscn’) |
file_path | string | yes | Output .tscn path (e.g. ‘res://scenes/slime_enemy.tscn’) |
root_name | string | no | Root node name override (default: base scene’s root name) |
Group: audio
List and configure audio buses, effects, and volume settings
2 tools, 6 operations.
audiobus_edit
Manage audio buses: add/remove buses, set volume/send/solo/mute, add/remove effects. bus_name takes priority over bus_index. Effect type: full class (AudioEffectReverb) or suffix (Reverb).
on-demand (group: audio) · destructive
5 operations (action): add_bus, remove_bus, set_bus, add_effect, remove_effect
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | Bus operation |
bus_index | integer | no | Bus index (alternative to name) |
bus_name | string | no | Bus name |
effect | object | no | Effect to add/remove |
mute | boolean | no | Mute this bus |
send_to | string | no | Parent bus name (default: Master) |
solo | boolean | no | Solo this bus |
volume_db | number | no | Volume in dB |
audiobus_list
List all audio buses with volume/send/solo/mute and per-bus effects. Read-only snapshot of the bus layout.
on-demand (group: audio) · read-only
1 operation.
No parameters.
Group: spriteframes
List, create, and edit SpriteFrames animations and import from spritesheets
3 tools, 10 operations.
spriteframes_create
Create a SpriteFrames resource (.tres) with named animations and frame textures. For AnimatedSprite2D character/effect animation.
on-demand (group: spriteframes) · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
animations | array | yes | Animations with their frames |
file_path | string | yes | Output .tres file path (res://) |
spriteframes_edit
Edit an existing SpriteFrames resource: add/remove animations, add/remove/reorder frames, adjust fps/loop. ‘list’ returns all animations.
on-demand (group: spriteframes)
8 operations (action): add_animation, remove_animation, add_frame, remove_frame, set_fps, set_loop, reorder_frames, list
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | Edit operation |
animation_name | string | no | Target animation name |
file_path | string | yes | Path to existing SpriteFrames .tres |
fps | number | no | New FPS value (for set_fps) |
frame_index | integer | no | Frame index (for remove/reorder) |
frames | array | no | Frames to add |
loop | boolean | no | New loop value (for set_loop) |
new_index | integer | no | New position (for reorder) |
spriteframes_from_spritesheet
Auto-slice a spritesheet into SpriteFrames animations by grid. Each animation maps to a row/column range in the sheet.
on-demand (group: spriteframes) · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
animations | array | yes | Animation definitions mapping to spritesheet regions |
file_path | string | yes | Output .tres file path |
frame_size | object | yes | Size of each frame in the grid |
texture_path | string | yes | Spritesheet texture path (res://) |
Group: particles
Create and configure GPU particle systems for visual effects
1 tool, 1 operations.
particles_create
Create GPU particle system (2D/3D) with presets: fire, smoke, sparks, rain, snow, explosion, magic, dust. Inline color_ramp/scale_curve/alpha_curve. One call replaces 7+ manual steps.
on-demand (group: particles)
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
alpha_curve | union | no | Alpha curve over lifetime |
amount | integer | no | Particle count |
angle | union | no | |
angular_velocity | union | no | |
color | object | no | Flat particle color |
color_ramp | union | no | Color gradient over lifetime |
damping | union | no | |
direction | object | no | Emission direction |
emission_box_extents | object | no | Box emission half-extents |
emission_shape | enum | no | Emission shape |
emission_sphere_radius | number | no | |
explosiveness | number | no | 0-1, burst factor |
gravity | object | no | Gravity vector |
hue_variation | union | no | |
initial_velocity | union | no | Initial speed (fixed or {min,max}) |
lifetime | number | no | Particle lifetime (seconds) |
local_coords | boolean | no | Emit in local space |
mesh | enum | no | 3D draw pass mesh |
name | string | no | Node name |
one_shot | boolean | no | Single burst then stop |
orbit_velocity | union | no | |
parent_path | string | yes | Parent node path |
particle_flag_align_y | boolean | no | |
position | union | no | Node position |
preset | enum | no | Effect preset (overridable with explicit params) |
scale_curve | union | no | Scale curve over lifetime |
scale_range | union | no | Particle scale |
speed_scale | number | no | Simulation speed |
spread | number | no | Spread angle (degrees, 0-180) |
texture_path | string | no | Particle texture (2D, res:// path) |
turbulence_enabled | boolean | no | |
turbulence_noise_strength | number | no | |
type | enum | yes | GPUParticles2D or GPUParticles3D |
Group: navigation
Set up navigation regions, meshes, and obstacle avoidance
1 tool, 5 operations.
navigation_edit
Edit NavigationRegion2D polygon outlines: set all outlines, add/remove individual outlines, clear, or bake the navigation mesh. Required for AI pathfinding setup.
on-demand (group: navigation) · destructive
5 operations (action): set, add_outline, remove_outline, clear, bake
| Param | Type | Required | Description |
|---|---|---|---|
action | enum | yes | Polygon operation |
index | integer | no | For ‘remove_outline’: outline index |
node_path | string | yes | Path to NavigationRegion2D node |
outline | array | no | For ‘add_outline’: single outline as array of {x,y} points |
outlines | array | no | For ‘set’: array of outline arrays (each outline = array of {x,y} points) |
Group: lsp_code_analysis
GDScript diagnostics, symbols, hover info, and a project-wide compile check via the language server
4 tools, 4 operations.
lsp_diagnostics
Rich GDScript diagnostics with column positions and severity (Error/Warning/Info/Hint). Needs editor running. Call editor_refresh first if files were just created.
on-demand (group: lsp_code_analysis) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
lsp_symbols
List all symbols (functions, variables, classes, signals) in a .gd/.gdshader file. Structured tree — cheaper than reading full source.
on-demand (group: lsp_code_analysis) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
lsp_hover
Get type signature and docs for one symbol at a specific position. Use for targeted type checks, not bulk exploration.
on-demand (group: lsp_code_analysis) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
column | integer | yes | Zero-based column number |
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
line | integer | yes | Zero-based line number |
lsp_project_diagnostics
Compile-checks every .gd in the project via the LSP — a guaranteed whole-project compile check. EXPENSIVE (~30s/100+ files; editor may hitch). Use sparingly.
on-demand (group: lsp_code_analysis) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
include_addons | boolean | no | Also scan res://addons/ (default false; needed when the project’s scripts live under addons/). |
include_warnings | boolean | no | Count Warning/Info/Hint diagnostics too (default false = errors only). |
Group: lsp_code_navigation
Code completion, go-to-definition, and find references via the language server
3 tools, 3 operations.
lsp_completion
Completions at a position. Use limit=5 for targeted queries to save tokens. Only call when you need to discover available API.
on-demand (group: lsp_code_navigation) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
column | integer | yes | Zero-based column number |
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
limit | integer | yes | Max items to return (default 10) |
line | integer | yes | Zero-based line number |
lsp_definition
Go to definition: file + line where a symbol is defined. One position per call — use only when you need the source location.
on-demand (group: lsp_code_navigation) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
column | integer | yes | Zero-based column number |
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
line | integer | yes | Zero-based line number |
lsp_references
Find all references to a symbol across the project. Use before renaming/removing to assess impact. One symbol per call.
on-demand (group: lsp_code_navigation) · read-only · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
column | integer | yes | Zero-based column number |
file_path | string | yes | Godot resource path (must start with res://, e.g. res://scripts/player.gd). Only .gd and .gdshader — not .cs |
line | integer | yes | Zero-based line number |
Group: debugger
Inspect debugger state, manage breakpoints, and control execution flow
4 tools, 4 operations.
debug_state
Check debugger status: is a debug session active, is it paused at a breakpoint, can it be debugged. No params.
on-demand (group: debugger) · read-only · idempotent
1 operation.
No parameters.
debug_list_breakpoints
List all GDScript breakpoints currently set in the script editor. Returns file paths and line numbers. .gd only.
on-demand (group: debugger) · read-only · idempotent
1 operation.
No parameters.
debug_set_breakpoint
Set or clear a breakpoint at a specific file and line in the script editor. GDScript (.gd) files only.
on-demand (group: debugger) · idempotent
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
enabled | boolean | no | true to set, false to clear (default true) |
file_path | string | yes | res:// path to a .gd file (e.g. res://scripts/player.gd) |
line | integer | yes | 1-based line number |
debug_continue
Resume execution when the debugger is paused at a breakpoint. Fails if not breaked.
on-demand (group: debugger)
1 operation.
No parameters.
Group: classdb
Search and inspect Godot class hierarchy — properties, methods, signals, inheritance
2 tools, 2 operations.
classdb_get_info
Inspect any Godot class: properties, methods, signals, constants, inheritance. Supports engine + user class_name classes. Paged: returned, total_<section>, has_more. When has_more, page via next_offset until has_more is false. The envelope is per-section (properties, methods, signals, constants); offset and limit apply within each section (limit default 200, clamped above 200).
on-demand (group: classdb) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
class_name | string | yes | Engine class (e.g. RigidBody3D) or user-defined class_name. |
include_inherited | boolean | no | Include inherited members (default: false, own class only). |
limit | integer | no | Page size (default per tool); a request above the cap is clamped and limit_clamped is set. |
offset | integer | no | Skip the first N (default 0); pass next_offset back as offset until has_more is false. |
sections | array | no | Which sections to return (default: all). Limit to reduce token cost. |
classdb_search
Find Godot classes by inheritance and/or name pattern. Returns class list with parent + instantiability. Paged: returned, total_classes, has_more. When has_more, page via next_offset until has_more is false. limit default 200, clamped above 200.
on-demand (group: classdb) · read-only
1 operation.
| Param | Type | Required | Description |
|---|---|---|---|
base_class | string | no | Filter to subclasses of this class. |
include_global | boolean | no | Include user class_name classes (default: true). |
instantiable_only | boolean | no | Exclude abstract classes (default: true). |
limit | integer | no | Page size (default per tool); a request above the cap is clamped and limit_clamped is set. |
offset | integer | no | Skip the first N (default 0); pass next_offset back as offset until has_more is false. |
pattern | string | no | Case-insensitive substring match on class name. |