godot-omni
This server is a free, local MCP bridge that lets AI agents automate and extend the Godot editor—scenes, nodes, scripts, assets, gameplay, UI, and more—directly through natural-language tool calls.
Scene & node editing: create/open/save scenes, spawn, reparent, rename, duplicate, delete, rotate/scale/translate nodes, edit properties, and walk the scene tree.
Scripting: create, patch, attach, validate, read, outline, and delete GDScript files.
Filesystem & resources: browse/search files, read/write text, delete/move/reimport, scan the project, download CC0 assets, create and assign .tres/.res resources.
Project control: run/stop the game, set main scene, and modify ProjectSettings.
Tile/Grid/CSG authoring: place tiles directly into TileMap/TileMapLayer, generate genre layouts, inspect tilesets, fill GridMaps, and carve CSG geometry.
Animation & effects: create AnimationPlayers and clips, add property/method tracks, presets (fade, slide, shake, pulse), plus materials, particles, cameras, and audio.
UI/theme work: build Control layouts, set anchors/text, apply themes, and even drive the editor's own UI.
Runtime debugging & input: inspect the running game tree, send key/mouse/gamepad/action input, suspend/resume, and execute GDScript in-game.
Diagnostics: read logs, capture editor/game screenshots, run GDScript tests, check editor state and performance monitors.
General introspection: query ClassDB API metadata, node properties, signals, autoloads, and InputMap actions.
Batch & custom tooling: compose multi-step edits atomically via batch_execute, and invoke custom tools registered by third-party addons.
Provides automation for the Godot Engine editor, enabling AI agents to author scenes, edit nodes, manage tilemaps, materials, resources, animations, and run GDScript directly within the editor and running game.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@godot-omniCreate a bouncing ball scene with a SphereMesh and add a bounce animation."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Godot MCP
Free and Open-Source Model Context Protocol Automation Plugin for the Godot Engine
100% Free & Open Source | Fully Local | No External Websites | No npm Packages | No Cloud Logins
Compatible AI Clients
Claude Code | Cursor | Antigravity | VS Code / Cline | Windsurf | GitHub Copilot | OpenAI Codex
Overview
Godot MCP is a completely free, local, open-source automation plugin that connects AI coding assistants to the Godot Editor through the standard Model Context Protocol (MCP).
Unlike other solutions that rely on external websites, cloud subscriptions, device logins, or custom npm CLI wrappers, Godot MCP is designed to be a straightforward in-engine Godot plugin:
100% Free and Open Source: Released under the permissive MIT license. No subscriptions, no paid tiers, and no paywalls.
Completely Local and Private: No external website accounts, no cloud relays, and no OAuth device logins. All communication stays strictly on your local machine.
Pure Godot Plugin: Drop the addons into your project and enable them in Godot. No npm packages to install, no global node.js tooling, and no external account setup.
Universal Engine Support: Operates via native GDScript inside Godot, supporting both Standard (GDScript) and .NET (Mono) editions of Godot 4.1 through 4.8+ Dev on Windows, macOS, and Linux.
59 Tool Families & 1,820+ Operations: Comprehensive scene building, node transformations, procedural animation, tilemap editing, collision creation, and direct GDScript evaluation.
Single Native Dock: Seamlessly integrated tab directly beside your Inspector with live activity monitoring, connection diagnostics, and memory indicators.
Related MCP server: AI-godot-mcp
Tool Families and Capabilities Matrix
Godot MCP provides full engine automation across 59 domain families:
Family | Key Operations | Description |
ping |
| Diagnostic readiness probe echoing engine status, version, process frames, and memory metrics. |
node |
| Find, spawn, modify, reparent, reorder, duplicate, delete, rotate, scale, and translate nodes in 2D and 3D with undo/redo. |
scene |
| Open, save, create, close, inspect root hierarchies, and instantiate PackedScene prefabs. |
script |
| Create, anchor-patch, read, detach, inspect symbols, validate syntax/compilation, and delete GDScript files. |
filesystem |
| List files, read/write text, delete, move, reimport, trigger scans, download assets from URL, and search free CC0 assets. |
resource |
| Search, load, assign, introspect, create, delete, and move .tres/.res assets, curve profiles, and environment setups. |
screenshot |
| High-fidelity captures of the 3D viewport, 2D viewport, active cameras, running game frames, and isolated node framing. |
editor |
| Read editor lifecycle, inspect/set node selections, query performance monitors, clear logs, and execute safe restarts. |
console |
| Real-time structured log streaming from plugin events, editor output, debugger errors, and game runtime stdout/stderr. |
reflection |
| Universal object reflection, dynamic method invocation, property getters/setters, and ClassDB discovery. |
tilemap |
| Direct editor tile painting, D4 rotation (0, 90, 180, 270 deg), flips, layer queries, and smart multi-genre layout generation. |
tileset |
| Inspect atlas source tiles, extract texture slices, and introspect physics and navigation layers. |
animation |
| Create AnimationPlayers, add property/method tracks, insert keyframes, set autoplay, and apply procedural motion presets. |
physics |
| Generate 2D and 3D collision bodies, autofit shapes to visual mesh bounds, and configure collision layers. |
mesh |
| Procedural generation of BoxMesh, SphereMesh, CylinderMesh, PlaneMesh, CapsuleMesh, and PrismMesh objects with materials. |
shader |
| Author GDShader files, create ShaderMaterials, set uniforms, and assign materials to CanvasItem or MeshInstance3D nodes. |
game |
| Launch, stop, restart, and command the running game instance with game helper diagnostics. |
input |
| Configure InputMap actions, bind keyboard and gamepad events, and query registered input actions. |
ui |
| Inspect the semantic control hierarchy of the editor UI, click buttons/tabs, and simulate input keystrokes. |
Quick Start: 3 Simple Steps
You do not need to register on any website or install any npm packages.
Step 1: Download and Extract the Plugin
Download the free release archive
godot-mcp-v5.0.5.zipfrom GitHub Releases.Extract the archive into your Godot project root so that the
addons/folder is placed directly in your project:
your-godot-project/
└── addons/
├── godot_ai/
│ ├── plugin.cfg
│ ├── plugin.gd
│ ├── godot_mcp_dock.gd
│ ├── connection.gd
│ ├── dispatcher.gd
│ └── handlers/
└── godot_omni/
├── plugin.cfg
├── plugin.gd
├── omni_dock.gd
├── omni_reflection.gd
└── omni_ui_tree.gdStep 2: Enable the Plugin in Godot
Open your project in Godot.
Open Project -> Project Settings -> Plugins.
Enable Godot MCP Core and Godot MCP Omni.
The Godot MCP tab will appear beside your Inspector on the right-hand side.
Step 3: Configure Your AI Client
Add Godot MCP to your AI editor of choice. The server runs directly via standard uvx without needing manual installation:
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"godot-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/bebabinlarsson-blip/Godot-MCP.git",
"godot-ai"
]
}
}
}Claude Desktop
Add to claude_desktop_config.json (Windows: %APPDATA%\Claude\claude_desktop_config.json | macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"godot-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/bebabinlarsson-blip/Godot-MCP.git",
"godot-ai"
]
}
}
}Google Antigravity
In Antigravity or Gemini CLI configuration:
{
"mcpServers": {
"godot-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/bebabinlarsson-blip/Godot-MCP.git",
"godot-ai"
]
}
}
}VS Code (Cline / Roo Code)
Add to Cline MCP settings:
{
"mcpServers": {
"godot-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/bebabinlarsson-blip/Godot-MCP.git",
"godot-ai"
]
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"godot-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/bebabinlarsson-blip/Godot-MCP.git",
"godot-ai"
]
}
}
}That is all. Start prompting your AI to build scenes, write scripts, paint tiles, or animate objects in Godot.
TileMap Authoring and Direct Editor Placement Directive
The Direct Editor Placement Contract
AI agents connected via Godot MCP follow a strict architectural rule:
Always place tiles directly into the open editor scene: Use
tilemap_manage(place_tile,set_cell,set_cells_rect,generate_layout) to place tiles directly down into theTileMaporTileMapLayernode.Never write runtime procedural generation scripts in
_ready()unless the user explicitly requested runtime procedural level generation.Why this matters: Direct placement in the editor gives immediate visual feedback, enables manual tweaking in the editor viewport, configures native Godot 2D physics collisions, and saves clean
.tscnscene files without runtime overhead.
Dihedral D4 Rotation and Symmetry
Tiles can be rotated clockwise by 90, 180, or 270 degrees and flipped horizontally or vertically with complete mathematical precision using an 8-state transition table that prevents bit-drift:
0 degrees: Default orientation (alt = 0)
90 degrees: Clockwise rotation (
transpose | flip_h)180 degrees: Half rotation (
flip_h | flip_v)270 degrees: Counter-clockwise rotation (
transpose | flip_v)
Smart Genre Layout Generation
The generate_layout operation can build complete genre-specific level layouts directly in the active editor scene:
platformer: Ground blocks with jump gaps, vertical boundary walls, stepping platforms at reachable jump heights, and floating challenge accents.topdown/rpg: Perimeter stone walls with open doorway transitions, walkable floor tiles, and corner architectural accents.dungeon: Thick perimeter walls with corridor access, walkable stone paths, and central structural columns.arena: Symmetrical battle arena boundaries with strategic cover pillars.
Asset Downloader and Free CC0 Search
AI assistants and developers can search for free CC0 assets and download them directly into the Godot project with automatic editor reimport:
Search Free CC0 Game Assets
Search the built-in catalog of curated CC0 public domain game packs (Kenney tilesets, retro sound effects, UI elements, textures, and 3D models):
{
"op": "search_assets",
"params": {
"query": "platformer",
"category": "tileset",
"limit": 10
}
}Download Assets into res://
Download any asset from a direct URL (or archive package) straight into your project:
{
"op": "download_asset",
"params": {
"url": "https://raw.githubusercontent.com/KenneyNL/Starter-Kits/master/2D%20Platformer/assets/tilemap-characters_packed.png",
"path": "res://assets/tilesets/platformer_packed.png",
"reimport": true
}
}Single files are written directly and immediately queued for
reimport.ZIP archives (
extract: true) are safely uncompressed into the destination folder, followed by a fullscan_filesystemto index all unpacked assets.
The Godot MCP Dock
The single native Godot MCP dock lives beside the Inspector in Godot:
Live Status: Visual badge displaying connection status ([OK], [IDLE], [WAIT], [ERROR]).
Tool Call Feed: Live stream of AI commands as they are executed in the engine with millisecond timing.
Probe Diagnostics: Built-in ping and self-test trigger buttons to verify connection without leaving Godot.
Memory Metrics: Process frame count, active scene root, and static memory usage metrics.
Free Port Button: In case port 8000 is held by an orphaned process, a single click clears it and resets the local server.
System Architecture
flowchart TD
subgraph AI_Clients [Local AI Clients]
Claude[Claude Code / Desktop]
Cursor[Cursor IDE]
Antigravity[Google Antigravity]
VSCode[VS Code / Cline / Roo]
Windsurf[Windsurf IDE]
end
subgraph MCP_Server [Local MCP Server]
Stdio[Standard I/O Pipe]
Router[Adaptive Domain Router]
DirectRuntime[Direct Runtime Bridge]
end
subgraph Godot_Editor [Godot Engine Editor]
WSBridge[Local WebSocket :8000]
Dispatcher[McpDispatcher]
OmniHandler[Omni & Reflection Handler]
DomainHandlers[59 Domain Handlers]
EditorDock[Godot MCP Inspector Dock]
end
AI_Clients -->|MCP JSON-RPC| Stdio
Stdio --> Router
Router --> DirectRuntime
DirectRuntime <-->|Local Loopback Only| WSBridge
WSBridge <--> Dispatcher
Dispatcher --> OmniHandler
Dispatcher --> DomainHandlers
Dispatcher --> EditorDockVerification and Diagnostics
You can verify the local setup directly from the command line:
# Run the complete test suite
uv run godot-omni self-test
# Inspect tool registry metrics across all 59 domains
uv run godot-omni tools statsTroubleshooting
Port 8000 In Use
Click Free Port & Replace Server in the Godot MCP dock tab, or run in PowerShell:
Get-NetTCPConnection -LocalPort 8000 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }Headless Execution
To allow the plugin to run during headless testing or CI:
$env:GODOT_AI_ALLOW_HEADLESS="1"Author and License
Author: bebabin (
bebabinlarsson@gmail.com)License: MIT License (100% Free and Open Source)
Available Tools
47 toolsanimation_createA
Create a new Animation clip inside an AnimationPlayer's default library.
After creating the clip, add tracks via animation_manage ops
add_property_track / add_method_track / create_simple.
Track node paths are stored relative to the AnimationPlayer's
root_node (default: its parent), not to the scene root — see
animation_manage preset ops for a forgiving target_path that
accepts either form.
If player_path doesn't resolve, an AnimationPlayer is auto-created
at that path (parent must exist).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Animation clip name (e.g. "idle", "pulse"). | |
| length | Yes | Duration in seconds. | |
| loop_mode | No | "none" (default) | "linear" | "pingpong". | none |
| overwrite | No | Replace an existing animation with the same name. | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| player_path | Yes | Scene path to the AnimationPlayer node. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses important behaviors: it creates in the default library, auto-creates AnimationPlayer if the path doesn't resolve (with parent requirement), and explains the root_node-relative track path handling. These are critical side effects and context not inferable from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight, well-structured paragraph. It opens with the primary action, then the follow-up steps, and then crucial path semantics. No redundant or vague sentences exist.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and an output schema, the description covers the main workflow, prerequisites (parent exists), and side effects. It does not explicitly describe failure behavior for existing clips when overwrite is false, but the overall context is sufficient for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the default library context, the auto-creation behavior tied to player_path, and the root_node relative path handling, which are not detailed in the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb (Create), object (Animation clip), and context (inside an AnimationPlayer's default library). It differentiates from sibling tools like animation_manage by specifying that this creates the clip, not the tracks, and even directs users to proper follow-up operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context by stating that after creating the clip, tracks are added via animation_manage ops. It also notes the auto-creation behavior for non-existent paths, though it could be more explicit about when not to use this tool compared to others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
animation_manageA
AnimationPlayer authoring (player, tracks, autoplay, presets, playback).
Ops: • player_create(parent_path, name="AnimationPlayer") Create an AnimationPlayer with empty default library. • delete(player_path, animation_name) Delete an animation clip from the default library. Undoable. • validate(player_path, animation_name) Check all track paths resolve. Returns broken_count + per-track issues. • add_property_track(player_path, animation_name, track_path, keyframes, interpolation="linear") Add a property track. track_path: "NodeName:property". keyframes: [{time, value, transition?}, ...]. interpolation: linear|nearest|cubic. • add_method_track(player_path, animation_name, target_node_path, keyframes) Add a method track. keyframes: [{time, method, args?}, ...]. • set_autoplay(player_path, animation_name="") Set autoplay. Empty animation_name clears. • play(player_path, animation_name="") Editor preview. Not saved with scene. • stop(player_path) Stop editor preview. Not saved with scene. • list(player_path) List animations with length, loop_mode, track_count. • get(player_path, animation_name) Inspect a clip's tracks and keyframes in detail. • create_simple(player_path, name, tweens, length=None, loop_mode="none", overwrite=False) High-level: build a multi-track clip from tween specs in one call. tweens: [{target, property, from, to, duration, delay?, transition?}]. • preset_fade(player_path, target_path, mode="in", duration=0.5, animation_name="", overwrite=False) One-call fade-in/out (modulate.a). • preset_slide(player_path, target_path, direction="left", mode="in", distance=None, duration=0.4, animation_name="", overwrite=False) One-call slide-in/out (position). • preset_shake(player_path, target_path, intensity=None, duration=0.3, frequency=30.0, seed=0, animation_name="", overwrite=False) One-call shake (jittered position). • preset_pulse(player_path, target_path, from_scale=1.0, to_scale=1.1, duration=0.4, animation_name="", overwrite=False) One-call pulse / hover-bounce (3-keyframe scale ping-pong).
Preset target_path: accepts either a scene-absolute path (e.g. "/Main/World/Cube",
matching every other scene tool) or a path relative to the AnimationPlayer's
root_node (e.g. "World/Cube", matching how Animation tracks store node paths).
Scene-absolute targets outside the player's root_node subtree are converted to
a ..-prefixed track path via root_node.get_path_to(target), the same shape
the relative form already accepts.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and largely succeeds: it discloses that delete is undoable, play/stop are editor previews not saved with the scene, validate returns issues, and presets support overwrite. It also explains target_path resolution and the canonical call shape. However, preset_bounce and preset_spin appear in the op enum but are missing from the description, leaving those behaviors undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but appropriately structured: a scannable bulleted op list with compact signatures, followed by essential clarifications about target_path and call shape. Each line carries necessary information, and the formatting makes complex multi-op semantics easy to navigate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with a sparse schema and no annotations, the description covers most operations thoroughly and even mentions return values for list/get/validate. However, it omits two valid operations from the schema enum, preset_bounce and preset_spin, making the definition incomplete for an agent that needs to invoke every available operation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is nearly empty (op enum plus a generic params object, 0% coverage), so the description is the only parameter documentation. It provides full signatures, defaults, valid interpolation values, keyframe object shapes, tween specs, preset parameters, and path conventions. For every documented operation, the parameters are specified precisely enough to call correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'AnimationPlayer authoring' and enumerates specific operations (player_create, add_property_track, set_autoplay, presets, playback, etc.), each with a verb and target resource. It clearly distinguishes itself from generic animation/resource tools by focusing on AnimationPlayer node authoring and manipulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the 'AnimationPlayer authoring' scope and intra-tool distinctions like 'High-level' for create_simple and 'One-call' for presets. However, there is no explicit guidance on when to choose this tool over sibling tools such as animation_create, and no when-not-to-use or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_manageA
Inspect Godot API documentation-shaped metadata from the connected editor's ClassDB: "what properties does X have", method signatures, signals, enums, constants, defaults, and property hint strings.
Resource form (prefer for active-session reads): godot://class/{class_name}
Ops:
get_class(class_name, sections=None, include_inherited=False, include_inheritors=False, offset=0, limit=100) Return selected class-reference sections without creating a scene instance. sections may be a comma-separated string or list containing properties, methods, signals, enums, constants, inheritors. Defaults to ["properties"] only — a bare get_class answers "what properties does X have" without the multi-thousand-token full dump. Pass the sections you want by name, or "all" for the full set (properties, methods, signals, enums, constants). "all" does NOT include the heavier "inheritors" section — request that by name. For pagination, request one section at a time so offset/limit apply only to the list you are paging.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that no scene instance is created, that 'all' does not include inheritors, and that pagination works per section. It does not mention potential errors or permissions, but for a read-only inspection tool the disclosed behavior is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with resource form, ops, and call-shape sections, and every sentence adds value. It is somewhat lengthy due to detailed parameter explanations, but this is justified given the schema gap. It avoids repetition and stays organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, and the description provides complete operational context: purpose, usage, parameter details, pagination behavior, and call format. It leaves little ambiguity for an agent to select and invoke the tool correctly, even among many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain parameters. It does so extensively: sections can be a comma-separated string or list, defaults to ['properties'] only, 'all' excludes inheritors, and offset/limit apply per section. The op signature and call shape are also explained, fully compensating for the generic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects Godot API documentation-shaped metadata from the ClassDB, with specific examples like 'what properties does X have' and method signatures. It distinguishes itself from runtime node inspection by noting it works 'without creating a scene instance', making it distinct from sibling tools like node_get_properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool, such as 'prefer for active-session reads' and details the resource form. It explains section selection and pagination but does not explicitly name alternative tools or exclusion scenarios, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audio_manageA
Sound effects, music, ambience (AudioStreamPlayer / 2D / 3D).
Ops: • player_create(parent_path, name="AudioStreamPlayer", type="1d") Create an AudioStreamPlayer / 2D / 3D node. type: "1d" | "2d" | "3d". • player_set_stream(player_path, stream_path) Assign an AudioStream resource (.ogg/.wav/.mp3 or .tres). Returns duration_seconds. • player_set_playback(player_path, volume_db?, pitch_scale?, autoplay?, bus?) Update common playback properties atomically. Pass only fields to change; at least one of volume_db/pitch_scale/autoplay/bus required. • play(player_path, from_position=0.0) Start real editor preview playback. Not undoable. • stop(player_path) Stop editor preview playback. Not undoable. • list(root="res://", include_duration=True) Scan project for AudioStream resources (every subclass + .tres/.res).
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description compensates by flagging 'Not undoable' for play/stop, noting 'real editor preview playback', and stating atomicity for player_set_playback. It could go further by disclosing side effects of create/set operations, but the provided behavioral notes are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, using a bulleted list with one-line ops. Every sentence earns its place, and the canonical call-shape note is necessary for a multi-op tool. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All six operations are documented with parameters and some return info (e.g., duration_seconds for player_set_stream). The description lacks explicit error/edge-case behavior, but the presence of an output schema reduces the need to explain return formats, making this sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The top-level schema has zero descriptions, but the description fully specifies each sub-command's parameters, types, defaults, and requirements (e.g., 'at least one of volume_db/pitch_scale/autoplay/bus required'). This adds essential meaning beyond the schema, making it highly effective.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Sound effects, music, ambience (AudioStreamPlayer / 2D / 3D)', clearly identifying the tool as audio management. It then enumerates six concrete operations (player_create, player_set_stream, etc.), making the purpose specific and well-distinguished from sibling tools like node_manage or resource_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear domain context ('sound effects, music, ambience') and operation-level details, such as when to use player_create vs play. However, it does not explicitly compare with alternative tools (e.g., resource_manage for loading streams), so alternatives are not named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
autoload_manageA
Autoload (global singleton) management. Autoloads are scripts or scenes
loaded automatically at project start, accessible globally by name when
singleton=True. Persisted to project.godot.
Ops:
• list()
List autoloads with name, path, and singleton flag.
• add(name, path, singleton=True)
Register an autoload (script or PackedScene) by res:// path.
• remove(name)
Unregister an autoload by name. The underlying file is not deleted.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It discloses that autoloads are persisted to project.godot, that singleton=True enables global access by name, that remove() does not delete the underlying file, and describes the canonical call shape. These side effects and operational details are clearly communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but extremely well-structured with a clear opening definition, a bulleted list of operations, and a final note on call shape. Every sentence serves a purpose, and the format makes it easy for an AI agent to parse. It is concise relative to the complexity of a multiplexed operation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's scope: it explains the concept of autoloads, lists all operations with their parameters, notes persistence behavior, and clarifies the calling convention. Given that an output schema is present, the description need not explain return values. No critical gaps remain for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and only shows op, params, and session_id with no parameter documentation. The description compensates by listing the exact parameters for each operation: add(name, path, singleton=True), remove(name), and list() with no args. It also explains that flat op parameters are accepted as a compatibility alias, adding meaning entirely beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Autoload (global singleton) management' and provides a concise overview of autoloads. It lists the specific operations (list, add, remove) with signatures, which uniquely identifies the tool's function and distinguishes it from sibling tools like scene_manage or resource_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for managing autoloads by defining what autoloads are and how they behave. It gives clear context for when to use the tool (to register, list, or unregister autoloads), but does not explicitly state when not to use it or name alternative tools for other resource types. The lack of exclusions keeps it at a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_executeA
Execute a list of editor sub-commands in order, stopping on first error.
Each item must be {"command": "<plugin_command>", "params": {...}}.
Use the underlying plugin command names (e.g. create_node, set_property,
delete_node, attach_script), not the MCP tool names. Commands run
sequentially; execution stops at the first error. When undo is True
(default), any successful sub-commands are rolled back via the scene's
undo history if a later sub-command fails, producing atomic-on-failure
semantics.
Use this to compose multi-step edits (create node + set property +
attach script) into a single tool call. Rollback works for sub-commands
that modify the currently edited scene. batch_execute itself is not
allowed as a sub-command.
Scene paths are relative to the edited scene root (e.g. "/Main/Enemy"), NOT runtime "/root/..." paths. The example below assumes the scene root is named "Main" — substitute the actual root name.
| Name | Required | Description | Default |
|---|---|---|---|
| undo | No | Roll back succeeded sub-commands on failure. Default True. | |
| commands | Yes | List of `{"command": str, "params": dict}` items. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job. It discloses execution stops at first error, rollback semantics, sequential processing, requirement to use underlying plugin command names, path notation relative to the edited scene root, and the restriction against nested batch_execute calls. This goes beyond what any annotation schema would typically provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but each sentence adds necessary detail about format, behavior, and use cases. It is well-structured with a clear opening, a formatted example, and topic-specific sentences. While it could be slightly tightened, it remains efficient and informative without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (which handles return values), the description is complete: it covers input item structure, valid command names, execution ordering, failure handling, rollback semantics, path conventions, and a concrete example. No critical gaps are apparent for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all three parameters (100% coverage), the description adds substantial meaning: it specifies the precise structure of each commands array item (`{"command": "<plugin_command>", "params": {...}}`), enumerates example command names, explains the rollback effect of the `undo` parameter, and clarifies path semantics relative to the scene root. This is far beyond the schema's minimal parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute a list of editor sub-commands in order, stopping on first error,' which is a specific verb+resource with an explicit behavioral constraint. It distinguishes itself from sibling single-operation tools by focusing on batch composition and sequencing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to compose multi-step edits (create node + set property + attach script) into a single tool call,' providing a clear use case. It also notes that `batch_execute` itself cannot be a sub-command and explains the undo/rollback behavior, which guides correct usage, though it doesn't explicitly name alternative single-command tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
camera_manageA
Camera2D / Camera3D authoring (zoom, FOV, projection, smoothing, follow).
Ops: • create(parent_path, name="Camera", type="2d", make_current=False) Create a Camera2D ("2d") or Camera3D ("3d"). When make_current=True, unmarks previously current cameras of the same class in one undo. • configure(camera_path, properties) Batch-set camera-specific properties (zoom, fov, projection, smoothing, drag, limits …). Class-aware. Enum-by-name (projection, keep_aspect, anchor_mode, doppler_tracking, process_callback). Vector2 dict coercion for zoom/offset. Transforms (position, rotation, scale, transform, global_*) live on the Node — set those via node_set_property, not here. • set_limits_2d(camera_path, left?, right?, top?, bottom?, smoothed?) Set Camera2D bounds. Pass only the edges to change. • set_damping_2d(camera_path, position_speed?, rotation_speed?, drag_margins?, drag_horizontal_enabled?, drag_vertical_enabled?) Smooth Camera2D motion (position/rotation smoothing speeds + drag deadzone). drag_margins: {left,top,right,bottom} fractions [0,1]. • follow_2d(camera_path, target_path, smoothing_speed=5.0, zero_transform=True) Reparent camera under target with smoothing — Godot-native follow. • get(camera_path="") Inspect a camera (class, current flag, all properties). Empty path resolves to the currently-active camera, falling back to the first. • list() List every Camera2D/Camera3D in the scene. • apply_preset(parent_path, name, preset, type=None, make_current=True, overrides=None) Spawn with opinionated defaults. Presets: topdown_2d, platformer_2d, cinematic_3d, action_3d. overrides merge over preset values.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses behavioral details such as make_current unmarking previous cameras in one undo, class-aware configure behavior, Vector2 coercion, empty path resolution for get, and the flat-parameter compatibility alias. This is more than a minimal description, though it omits some edge-case side effects like invalid path handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a one-line summary, then bullet-pointed operations with signatures. Each bullet adds distinct operational detail or a caveat (e.g., 'Pass only the edges to change'). There is no fluff or repetition, and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's multi-operation complexity, the description is complete: it covers all eight operations, their parameters, edge cases like empty path for get, and the call shape. An output schema is indicated as present, so return values need not be explained. The description fully equips an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines op as an enum, params as a free-form object, and session_id, providing almost no parameter information. The description compensates fully by listing each operation's parameters with names, types, defaults, optional markers, and special semantics (e.g., drag_margins fractions, overrides merging). This is essential for correct use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Camera2D / Camera3D authoring' and enumerates eight specific operations with signatures, making the tool's purpose explicit. It also differentiates from sibling tools by stating that transforms belong to node_set_property, not here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear negative guidance: transforms should be set via node_set_property, not camera_manage. Also explains the canonical call shape and compatibility alias for parameter passing. However, it does not explicitly state when to prefer camera_manage over the many sibling scene/camera-related tools beyond this one exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_manageA
Configure AI clients to use this Godot AI MCP server. Writes / removes client config files (Claude Code, Codex, Antigravity, Cursor, Devin Desktop (Windsurf), Zed, etc.).
Ops:
• status()
List every supported client with id, display_name, status
(configured | not_configured | configured_mismatch | error),
and installed flag.
• configure(client)
Write the MCP server entry into the named client's config file.
client is one of the ids returned by status().
• remove(client)
Remove this server's entry from the named client's config.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states that the tool 'Writes / removes client config files' and details each op's effect, including the destructive nature of 'remove'. It also hints at error states via the 'error' status in status(). It does not mention permissions or backup behavior, but the core side effects are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise intro, a bulleted Ops list, and a clear canonical call shape. Every sentence adds meaningful information, with no redundancy or filler. The use of code formatting and list structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers the essential behavior: supported clients, ops, call shape, and compatibility. An output schema exists, so the lack of return-value details is not a gap. The description is sufficient for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It effectively explains the 'op' enum via the Ops list, describes the 'params' object shape (including that 'client' is an id from status()), and clarifies the flat-parameters compatibility alias and top-level 'session_id'. This is strong parameter semantics despite no schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Configure') and resource ('AI clients... Godot AI MCP server'), and enumerates supported clients. The 'Ops' section further clarifies the distinct actions (status, configure, remove), making it easily distinguishable from sibling tools like editor_manage or scene_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates that the tool is for managing client config files and provides usage context for each op (status, configure, remove). It does not explicitly name alternatives or exclusions, but the purpose is so specific that usage intent is unambiguous. The canonical call shape and compatibility alias are also helpful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
csg_manageA
CSG authoring (create boolean shapes, set their operation).
Create CSG shapes (box, sphere, cylinder, torus, polygon) under a Node3D parent in the currently edited scene and set their boolean operation (union / intersection / subtraction) so geometry like holes, caves and tunnels can be carved directly in the editor. All write ops are undoable via EditorUndoRedoManager. Sibling CSG shapes under the same parent combine automatically; use a CSGCombiner3D parent for explicit grouping. Size, position and material live on the created node — set them with node_set_property / material_manage after creation.
Ops: • csg_create(parent_path, name="", shape="box", operation="union") Create a CSG shape under a Node3D parent (empty parent_path = scene root). shape: box | sphere | cylinder | torus | polygon. operation: union | intersection | subtraction. Returns: {path, name, shape, operation}
• csg_set_operation(path, operation) Set the boolean operation of a CSG shape. operation: union | intersection | subtraction. Returns: {operation}
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden. It reveals that all write ops are undoable via EditorUndoRedoManager, and that sibling CSG shapes auto-combine—useful behavioral context beyond the basic operation. It could mention error cases, but current disclosures are solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-liner summary, a detailed explanatory paragraph, and clearly formatted op bullets. It is slightly longer than necessary but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers operation semantics, parameter details, return values, undo behavior, grouping constraints, and property handling. Given the tool's two-OP scope, this is fully sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is generic (op/params/session_id) with 0% coverage of inner parameters. The description fully documents both ops: parameter names, defaults, enums, and return values, providing complete semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'CSG authoring' and clearly states it creates boolean shapes and sets their operations. It specifies resource types (box, sphere, cylinder, etc.) and differentiates from sibling tools like node_create by focusing on CSG-specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the use case (carving holes/caves/tunnels in the editor) and gives guidance on grouping with CSGCombiner3D. It also directs users to node_set_property/material_manage for post-creation edits, but does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
custom_manageA
List or invoke custom tools registered by third-party addons.
Active session only. Use op="list" to discover registered tools. op="invoke" requires params: tool_name (string); optional: params (dict, forwarded to the addon handler unvalidated — shape per the tool's params_schema from op="list"). Inside batch_execute, address a custom tool as "custom_tool:" (deferred tools cannot run in batches). Some custom tools are also registered first-class as "custom_" with their own schema — prefer those when present.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does well: it reveals session-only scoping, that params are 'forwarded unvalidated' to the addon handler, batch incompatibility for deferred tools, and the flat-parameter compatibility alias. It stops short of covering error behavior for an unknown tool_name, a minor gap given the dynamic nature of the tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every paragraph earns its place (op semantics, batch interaction, alternative routing, call-shape alias). It is dense but not padded; the only minor inefficiency is repeating 'custom' terminology across closely-packed paragraphs that could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, dynamic tool with no annotations and zero schema coverage, the description covers purpose, both operations, parameter shape, batching constraints, alternative first-class registration, and call format. An output schema exists, so return-value omission is excused. It falls just short of perfect only by not describing failure modes for invalid tool names or session handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does thoroughly. It explains the meaning of each op enum value, specifies that op='invoke' requires a tool_name string plus an optional params dict whose shape follows the params_schema returned by op='list', and even provides the canonical JSON call shape. This adds far more meaning than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line, 'List or invoke custom tools registered by third-party addons,' pairs specific verbs (list/invoke) with a specific resource (custom tools from third-party addons), unambiguously distinguishing it from the many sibling *_manage tools. The purpose is concrete and immediately usable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: state when to use it, and name the alternative — 'Some custom tools are also registered first-class as custom_<name> with their own schema — prefer those when present.' It also sets preconditions ('Active session only') and constraints for the sibling batch_execute (deferred tools cannot run in batches).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_manageA
Editor selection, performance monitors, quit, log clearing, game eval.
Resource forms (prefer for active-session reads): godot://editor/state, godot://selection/current, godot://performance
Ops: • state() Editor version, project name, current scene, readiness, play state. • selection_get() Currently selected node paths in the editor. • selection_set(paths) Replace the selection with the given list of scene paths. • monitors_get(monitors=None) Performance singleton values (FPS, memory, draw calls, etc.). Pass a list of monitor names to filter; None returns everything. • quit() Gracefully quit the Godot editor on next frame. • logs_clear(clear_debugger_errors=False) Clear the MCP log buffer. Returns cleared_count. Pass clear_debugger_errors=True to also clear the Debugger dock's visible Errors-tab rows (user-facing UI, so opt-in only); the response then includes debugger_errors_cleared. • game_eval(code) Execute GDScript in the running game with return values. Uses 'await' so user code can await internally. Errors return fast and actionable: EVAL_COMPILE_ERROR for a syntax/parse error, EVAL_RUNTIME_ERROR (with the real message + line) for a runtime error; EVAL_GAME_NOT_READY if the game can't service evals — still launching (retry once it's up), the _mcp_game_helper autoload is missing/disabled, its main loop is not advancing (focus the game), or its debugger session closed; EVAL_HUNG for a live game's genuine infinite loop / never-firing await; EVAL_RESULT_TOO_LARGE if the returned value serializes past the debugger channel's capacity (return a smaller slice).
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden—and it does: it discloses that quit() is graceful and next-frame, logs_clear returns counts and only clears the visible Debugger errors when explicitly requested, selection_set replaces the selection, and game_eval enumerates fast, actionable error codes including hung and oversized results. This is high-value behavioral disclosure beyond what the generic schema could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but organized with a summary, resource-form note, bulleted ops, and a canonical call shape. Each section adds needed information; it is front-loaded and scannable, though a little more trimming around resource-form vs op duplication would tighten it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-op dispatcher with no annotations and a generic input schema, the description covers call shape, operation semantics, defaults, and error behavior thoroughly; an output schema exists so return-value details need not be repeated. It still leaves some contextual gaps such as session_id usage and explicit prerequisites for selection_set, but nothing critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and params is only a free-form object, so the description is the only source of parameter meaning. It defines every operation signature, defaults, value types, and effects (paths list, monitors list or None, clear_debugger_errors boolean, code string), fully compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a compact enumeration of the tool's domains (selection, performance monitors, quit, log clearing, game eval) and then names each operation with a clear verb and target. It does not explicitly differentiate itself from sibling tools like editor_state or logs_read, so it stops short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete routing cues: resource forms are preferred for active-session reads, logs_clear requires opt-in for the user-facing Debugger dock, and game_eval explains retry conditions for EVAL_GAME_NOT_READY. However, it never explicitly names sibling tools or states 'use this tool when X instead of Y', leaving some alternation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_reload_pluginA
Reload the Godot editor plugin.
Disables and re-enables the plugin on the next frame. The response shape depends on whether this MCP server was spawned by the plugin or launched externally:
Plugin-managed (default install): returns a pre-flight ack
{status: "reload_initiated", transport_will_drop: true, old_session_id, guidance}immediately. The reload kills this server, so the WebSocket transport drops; reconnect and callsession_manage(op="list")to find the new session_id.Externally launched (e.g.
python -m godot_ai --transport streamable-http --port 8000 --reload): waits for the new session to register and returns{status: "reloaded", old_session_id, new_session_id}. If the old bridge disappears and no replacement registers within 90 seconds, raisesPLUGIN_DISCONNECTEDwithdata.reason == "reload_timeout"and recovery diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral disclosure burden. It openly states that a plugin-managed reload kills the server, drops the WebSocket transport, requires reconnect and session lookup, can time out after 90 seconds, and returns recovery diagnostics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but earns its length: it is front-loaded with a one-line purpose and then organized into clear bulleted modes. Every sentence conveys necessary operational detail, and the structure makes conditional behavior easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity and the absence of annotations, the description is remarkably complete: it covers both execution contexts, response shapes, timeout behavior, error semantics, and recovery steps. Nothing meaningful is missing for an agent to call and handle the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter session_id is already 100% covered by the schema, including its default and empty-means-active semantics. The description adds no additional parameter detail, but none is needed because the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reload the Godot editor plugin') and immediately defines the concrete behavior: disables and re-enables the plugin on the next frame. The two-mode breakdown further differentiates this from sibling maintenance tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides very clear execution context by explaining both launch modes and the expected response in each, which effectively tells an agent when this tool is appropriate. It does not explicitly name alternatives or exclusions, but the modal detail makes selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_screenshotA
Capture a screenshot of the Godot editor viewport or running game.
Picking a source: the default "viewport" captures the editor's 3D
viewport, which is empty if the edited scene has no Node3D anywhere in
the tree (or no scene is open). Those cases return EDITOR_NOT_READY
with error.data = {editor_state: "viewport_not_3d", scene_root_type}
and an actionable error.message — switch to "cinematic" if the
scene has a Camera3D, or open a scene with 3D content.
Sources:
"viewport" (default): editor 3D viewport. Requires Node3D content in the edited scene (root or any descendant); see above for the no-3D-content / no-scene error shape.
"viewport_2d": editor 2D viewport. Use for 2D scenes. Not compatible with view_target/coverage/elevation/azimuth/fov.
"cinematic": render edited scene through its active Camera3D (no editor gizmos). Prefers a Camera3D marked
current; falls back to the first Camera3D found in a depth-first walk. NODE_NOT_FOUND only when the scene contains no Camera3D at all."game": running game's framebuffer (only when project is running). A backgrounded/minimized game window freezes its main loop; the capture then returns the last rendered frame with
stale_frame: trueand anotein the metadata — focus the game window and retry for a current frame.GAME_HELPER_TIMEOUTmeans the game process never replied at all (nothing rendered yet, main thread blocked, or helper dead) — focus the window and retry, or use game_command to confirm liveness.
include_image=True (default) returns an MCP ImageContent block.
view_target (comma-separated Node3D paths) reframes editor camera;
AABB metadata always returned. coverage=True with view_target
captures perspective + orthographic top-down references.
| Name | Required | Description | Default |
|---|---|---|---|
| fov | No | Camera FOV in degrees. Tight 20-30 = zoom; 60-75 = context. | |
| source | No | "viewport" | "viewport_2d" | "cinematic" | "game". Default "viewport". | viewport |
| azimuth | No | Camera azimuth in degrees (0=front, 90=right). | |
| coverage | No | With view_target, capture two reference shots + AABB. | |
| elevation | No | Camera elevation in degrees (0=level, 90=overhead). | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| user_prompt | No | Optional context from the agent that requested the capture. With Vision Routing enabled it is sent alongside the image so the vision model can describe what the agent is looking for. | |
| view_target | No | Node3D scene path(s) to frame, comma-separated. | |
| include_image | No | Return image data. Default True. | |
| max_resolution | No | Longest-edge resolution. Default 640. 0 = full res. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and excels: it documents error shapes (EDITOR_NOT_READY, NODE_NOT_FOUND, GAME_HELPER_TIMEOUT), the stale_frame note for backgrounded games, camera selection fallback for cinematic, and return behaviors like include_image and AABB metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a lead sentence, a guidance paragraph, a bulleted source list, and a closing note on parameters. Each section earns its place; the length is justified by the tool's four modes and ten parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains what callers receive (MCP ImageContent, AABB metadata, error data) and covers edge cases (no scene, no 3D content, no Camera3D, game not running, backgrounded game). It is fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds significant meaning: it explains that view_target takes comma-separated Node3D paths and reframes the editor camera, that coverage=True captures perspective + orthographic top-down references alongside AABB, and clarifies the behavior of include_image and default source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Capture a screenshot of the Godot editor viewport or running game.' It clearly delineates four sources and is distinct from any sibling tool, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit source-selection guidance: default 'viewport' requires Node3D content, 'viewport_2d' for 2D scenes, 'cinematic' requires a Camera3D, and 'game' requires a running project. It also gives exclusionary constraints, e.g., 'viewport_2d' is 'Not compatible with view_target/coverage/elevation/azimuth/fov.' and advises switching to 'cinematic' under specific conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_stateA
Get current Godot editor state: version, readiness, open scene, play state.
Resource form: godot://editor/state — prefer for active-session reads.
Also reachable as editor_manage(op="state") (same handler) for clients
that prefer a single rolled-up tool.
Code-mode MCP adapters keep the server and tool names separate:
call('godot-ai', 'editor_state', {}). Never pass a server-prefixed
tool name such as godot-ai/get_editor_state; that is neither the
adapter's call signature nor a registered tool. For dedicated current-
scene data, use readResource('godot-ai', 'godot://scene/current').
Side effect: refreshes the server's session readiness cache from the
live editor reply. Useful as a recovery step after a write call is
rejected as EDITOR_NOT_READY (state=playing) when you already know
the game has stopped — calling editor_state once syncs the cache
and the next write proceeds. Issue #262.
Response includes game_status for authoritative game liveness,
plus helper_live (status == "live") and session_active
(status not in {"not_live", "stopped"}) mirrored from the same fields
inside game_status. is_playing remains raw editor play-state;
use game_status.status for liveness decisions.
game_status.status="break" means the game process is parked in a
remote-debugger break (boot-time parse errors do this before the game
helper registers); it will not resume on its own — call
project_manage(op="stop").
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the side effect (refreshes session readiness cache), the non-mutating nature of the call, and nuanced field semantics like game_status.status='break' requiring a follow-up project_manage(op='stop'). No annotation contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but extremely dense; every paragraph adds necessary operational details (resource form, adapter call conventions, side effect, field semantics). It is front-loaded with purpose and structured logically, though slightly longer than the minimum needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with an output schema present, the description provides essential context the schema cannot: the resource form preference, cache-refresh side effect, adapter calling quirks, and the special 'break' state handling. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter, session_id, is already well-documented in the schema ('Optional Godot session to target. Empty = active session.'). The description does not add further parameter guidance, but the schema fully covers it, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states the verb ('Get'), the resource ('current Godot editor state'), and the key fields (version, readiness, open scene, play state). It clearly distinguishes from siblings like project_manage and scene_open by referencing the dedicated current-scene resource for that need.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to prefer the resource form for active-session reads, names readResource('godot-ai', 'godot://scene/current') as the alternative for scene-only data, and gives a concrete recovery use case after EDITOR_NOT_READY. It also includes a 'never' instruction for server-prefixed tool names, so the agent knows exactly when and how to call this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem_manageA
Project filesystem access via the Godot editor's EditorFileSystem.
Ops:
• read_text(path)
Read a text file at a res:// path. Returns content, size,
line_count.
• write_text(path, content="")
Create or overwrite a text file. Updates the editor filesystem
entry for that one file (single-file update, not a full scan).
Newly-created files include data.cleanup.rm for transient
smoke tests; overwrite omits the field.
• reimport(paths)
Force-reimport the listed files via EditorFileSystem.update_file.
paths is a list of res:// paths.
Intended for imported assets such as textures, models, and audio.
Paths that are not imported resources (.gd scripts, .tscn,
hand-written .tres, or an asset the editor has not imported yet)
report under skipped_non_imported rather than reimported: their
filesystem entry is refreshed, but no import runs, so a success there is
not evidence that a script parsed or that diagnostics were produced. Use
script_patch/script_create to save a script and receive fresh
diagnostics, or scan for an asset awaiting its first import.
Returns reimported, skipped_non_imported, not_found and their
counts.
• list(path="res://", recursive=False, max_depth=1)
Browse the project's res:// tree (files, sizes, UIDs, and directories).
• delete(path)
Delete a file or directory from the project along with its .uid and .import sidecars.
• move(from_path, to_path)
Move or rename a file in the project, keeping sidecars consistent.
• scan()
Force a full EditorFileSystem.scan() and wait for it to settle.
This is the headless equivalent of the editor regaining window focus:
write_text/script_create register single files but do NOT
rebuild the global class_name table, so a freshly-created
class_name MyThing extends Resource is invisible to
resource_manage/type references until a scan runs. Call this once
after adding class_name scripts when the editor isn't focused.
Single-flight (awaits any in-progress scan rather than stacking another).
Returns scan_completed and global_classes_registered_delta.
• search(name="", type="", path="", offset=0, limit=100)
Find files by name, resource type, or path substring. At least one
filter must be set. Paginated.
• download_asset(url, path, extract=False, reimport=True)
Download an asset or zip archive from the internet directly into the
Godot project (res:// path). If extract=True or archive is zip, extracts
into target directory. Automatically triggers editor reimport and scan.
Returns: {url, path, size_bytes, is_archive, extracted_files, reimport_result}
• search_assets(query="", category="all", limit=20)
Search curated free/CC0 game assets (tilesets, audio, textures, UI, 3D models).
Categories: "all", "tileset", "audio", "texture", "ui".
Returns matching assets with direct download URLs ready for download_asset.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral disclosure and does so thoroughly: write_text is a single-file update, scan is single-flight and waits to settle, delete removes .uid/.import sidecars, move keeps sidecars consistent, and download_asset automatically triggers reimport and scan. It also reveals the class_name-table limitation and the data.cleanup.rm smoke-test detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but highly structured: a one-line scope, bulleted operations, and a closing canonical call shape. Each caveat earns its place, especially the nuanced reimport and scan warnings, so the length is justified rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For the documented operations, the description is remarkably complete: it covers return values, side effects, aliases, sync behavior, and canonical call format. It is not fully complete because the input schema allows asset_search and download_file as valid ops, yet those are neither described nor identified as aliases, so an agent cannot confidently invoke them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema_description_coverage is 0%, the description compensates well by giving operation signatures, defaults, and types (e.g., list(path='res://', recursive=False, max_depth=1), search(name, type, path, offset, limit)). It loses a point because two schema enum values, asset_search and download_file, have no documented parameters or behavior, leaving an agent to guess at their call shapes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific scope: 'Project filesystem access via the Godot editor's EditorFileSystem.' It then enumerates concrete operations (read_text, write_text, reimport, list, delete, move, scan, search, download_asset, search_assets), each with a verb and target, making the tool clearly distinct from sibling resource/script/project managers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong per-operation usage guidance, such as explicitly recommending script_patch/script_create for scripts and scan for assets awaiting first import, and explaining when reimport is not evidence of success. However, it does not provide tool-level when-to-use guidance versus sibling tools, and the schema exposes asset_search/download_file ops that the description never explains or disambiguates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_manageA
Runtime game inspection and input simulation.
These ops target the running game process through Godot's EngineDebugger bridge. Start the project first with project_run and poll editor_state until game_capture_ready=true.
Ops:
get_scene_tree(depth=10, root_path="") Inspect the running scene tree. root_path accepts an absolute runtime path or a scene-relative path rooted at the current scene.
get_node_info(path, include_properties=True) Inspect one running node's metadata and optional property snapshot.
get_ui_elements(root_path="", include_hidden=False, include_disabled=True, max_depth=10) Inspect visible runtime Control nodes for UI testing. Includes path, type, text where present, disabled state, and rect metadata.
suspend() Suspend the running game through Godot's native debugger path.
resume() Resume a suspended game. Idempotent when it is already running.
next_frame() Advance exactly one process tick while suspended. The response reports verification and any Embedded Game View focus handoff. Runtime-control mutations also report path="embed_signal" or "direct_session"; the direct fallback works without embedding but cannot synchronize the Game View suspend button's visual pressed state.
debug_status() Probe suspend state and the game-helper process tick counter through the debugger capture, including while SceneTree processing is suspended.
input_key(key, pressed=True, echo=False) Send a key press/release to the running game.
input_mouse(event, position=None, button="left", pressed=True) Send a mouse motion or button event. event: "motion" | "button". position is a {x, y} object or [x, y] array; omit it to use the game's current cursor position. A present but malformed position is rejected rather than silently falling back to the cursor.
input_gamepad(device=0, control="button", index=0, pressed=True, value=0.0) Send a joypad button or axis event. control: "button" | "axis".
input_action(action, pressed=True, strength=1.0) Set a project action's pressed state directly in the running game.
input_sequence(steps, settle_frames=0) Apply a frame-timed action timeline in one call — the frame-accurate, multi-step form of input_action. Each step is {at_frame, action, pressed=True, strength=1.0}; the game applies each step's action on its scheduled frame, awaits settle_frames more, then replies once. Use this instead of separate input_action calls whenever timing matters (jump arcs, combos, walk-into-trigger): per-call network latency makes hitting a target frame impossible otherwise. Steps must be ordered by non-decreasing at_frame; frames (not ms) are the timing basis. Action-based input is focus-independent, so it works on a backgrounded game window. Cannot run inside batch_execute.
input_state(actions=None) Read current action pressed states. Empty actions = all project actions.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job: it discloses focus-independent input behavior, the direct fallback limitation for suspend state synchronization, rejection of malformed positions, and frame-timing semantics. These are meaningful behavioral details beyond a simple operation list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but efficiently organized: a two-line summary, a scannable bullet list of operations with parameter details, and a brief canonical call-shape note. Each sentence serves a clear purpose, and the structure makes 13 operations easy to navigate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's multi-operation complexity, the description provides complete operational context: prerequisites, input methods, restrictions, and compatibility aliases. Since an output schema exists, omitting per-op return types is acceptable, and the description covers the remaining use context thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is generic (only op, params, session_id), so the description compensates thoroughly by documenting every operation's parameters, defaults, allowed values, and special cases such as position accepting an object or array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise summary—'Runtime game inspection and input simulation'—and names the specific resource (the running game via Godot's EngineDebugger bridge). It clearly distinguishes this tool from static scene/editor tools by focusing on runtime state and input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit prerequisites ('Start the project first with project_run and poll editor_state until game_capture_ready=true') and explicit restrictions ('Cannot run inside batch_execute'). It also provides internal guidance such as using input_sequence instead of separate input_action calls when timing matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gridmap_manageA
GridMap authoring (set items, fill 3D regions, clear, read cells + library items).
All operations target GridMap nodes in the currently edited scene by scene-relative path (e.g. "/Main/Terrain"). All write ops are undoable via EditorUndoRedoManager.
item is the item id from the GridMap's MeshLibrary. Use gridmap_list_library_items to discover valid ids and names before placing cells (the 3D analogue of tileset atlas inspection). orientation is the GridMap baked rotation index (0..24).
Ops: • gridmap_set_item(path, item, map_x, map_y, map_z, orientation=0) Set a single cell item at (map_x, map_y, map_z). item=-1 erases. Returns: {map_x, map_y, map_z, item, orientation}
• gridmap_fill(path, item, rect_x, rect_y, rect_z, rect_w, rect_h, rect_d, orientation=0) Fill a rect_w × rect_h × rect_d region starting at (rect_x, rect_y, rect_z) with one item in a single undo action. Returns: {cells_filled, rect: {x, y, z, w, h, d}}
• gridmap_clear(path) Remove all cells from the GridMap. Returns: {cleared: true}
• gridmap_get_used_cells(path) Return all used cell coordinates. Returns: {cells: [{x, y, z}, ...], count: int}
• gridmap_list_library_items(path) List the MeshLibrary items available to the GridMap. Returns: {library, items: [{item, name, mesh}...], count: int}
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It reveals that write operations are undoable via EditorUndoRedoManager, explains item=-1 erase semantics and orientation range 0..24, and specifies return structures for every operation. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, a 'Ops:' bulleted list, and a closing canonical call-shape note. Each sentence adds value, and the bullet format makes complex multi-operation details easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all five sub-operations with parameters and returns, the call shape, scene targeting, and undo behavior. Given the tool's complexity and lack of annotations, this is fully complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by documenting every operation's parameters (path, item, map coordinates, rect dimensions, orientation) and giving semantic details like valid item discovery and orientation index meaning. It adds far more meaning than the sparse schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'GridMap authoring (set items, fill 3D regions, clear, read cells + library items)', naming specific verbs and a concrete resource (GridMap nodes). It distinguishes itself from sibling 2D tile/tileset tools by explicitly focusing on 3D GridMap operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that all operations target GridMap nodes in the currently edited scene by scene-relative path, and it recommends using gridmap_list_library_items before placing cells. It doesn't explicitly exclude alternative tools, but the '3D analogue of tileset atlas inspection' note gives contextual differentiation from sibling 2D tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_map_manageA
InputMap actions and bindings (keyboard, mouse, gamepad). Persisted to
project.godot.
Resource form: godot://input_map — prefer for active-session reads.
Ops:
• list(include_builtin=False)
List input actions and their bound events. By default only
user-authored actions (those persisted in project.godot under
input/<name>) are returned; pass include_builtin=True to
also surface Godot's ui_* and editor-runtime actions
(spatial_editor/*, etc.). The is_builtin field on each
entry is true for any action not authored by the user.
• add_action(action, deadzone=0.5)
Create a new empty input action. deadzone must be in
[0.0, 1.0] — Godot uses it as the analog-stick dead-zone
threshold; values outside this range are rejected with
VALUE_OUT_OF_RANGE. Typical values are 0.2-0.5; leave the
default 0.5 unless you have a reason. Not a key-repeat delay.
• ensure_action(action, deadzone=0.5)
Idempotently create or persist an input action. If the action exists
in live InputMap or in project.godot, the existing state is preserved.
• remove_action(action)
Remove an action and all its event bindings. Also removes actions
persisted in project.godot but not loaded in the live InputMap
(loaded_in_input_map: false in list), e.g. actions created
by a previous editor session.
• bind_event(action, event_type, keycode="", ctrl=False, alt=False,
shift=False, meta=False, button=None, axis=None,
axis_value=1.0)
Bind a key/mouse/gamepad event to an action. The action must
already exist (call add_action first). event_type is
"key" | "mouse_button" | "joy_button" |
"joy_axis".
- key: keycode is a Godot keycode name string like
"A", "Space", "Enter", "Escape", "F1",
"Left" — not an integer and not KEY_*. Modifier
booleans ctrl / alt / shift / meta optional.
- mouse_button: button is an int — 1=left, 2=right,
3=middle, 4=wheel up, 5=wheel down.
- joy_button: button is the JoyButton index
(e.g. 0=A/Cross, 1=B/Circle).
- joy_axis: axis is the JoyAxis index and
axis_value is the direction/value, usually -1.0 or 1.0.
• ensure_binding(action, event_type, ...)
Idempotently ensure the action exists and has the requested binding.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of disclosure. It details persistence to project.godot, idempotency, removal of actions not loaded in live InputMap, validation of deadzone with VALUE_OUT_OF_RANGE, and clarifies that deadzone is not a key-repeat delay. It also explains the canonical call shape and flat parameter alias.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with a clear list of operations and nested parameter details. It uses bullet points, code formatting, and concise explanations. Every sentence adds value, and the structure makes it easy to scan for specific operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers all necessary aspects: all six operations, their parameters, return behavior (is_builtin field), error conditions, and persistence details. The output schema exists and the description complements it by adding behavioral context that structured data cannot convey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document parameters. It does so extensively: for each op, it lists parameter meanings, types, formats (e.g., keycode as name string not integer), valid ranges (deadzone 0.0-1.0), and specific mappings (mouse buttons, JoyButton indices). This far exceeds mere schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool manages InputMap actions and bindings (keyboard, mouse, gamepad) and persists to project.godot. It lists specific operations (list, add_action, bind_event, etc.), distinguishing it from sibling tools like resource_manage or node_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context like 'prefer for active-session reads' for the resource form and explains idempotency for ensure_* operations. However, it does not explicitly mention when to use this tool versus an alternative, though the specificity of InputMap operations makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logs_readA
Read recent log lines from the Godot editor, plugin, or running game.
Resource form: godot://logs/recent — prefer for active-session reads.
Sources:
"plugin" (default): MCP plugin recv/send/event traffic. Buffer 500.
"game": stdout/stderr/push_error/push_warning from playing game via
_mcp_game_helperautoload. Buffer 2000, with lines retained across runs and tagged by run_id. Default reads return current-run lines only; passsince_run_idfrom an earlier response to read that prior run. Entries: {source, level, text, run_id}; response carries run_id, current_run_id, game_status, helper_live, session_active, dropped_count, stale_run_id. helper_live and session_active mirror the same fields inside game_status; is_running is retained as a compatibility alias of session_active. Boot-time parse/load errors fire before the game helper's logger attaches, so they are NEVER in this buffer; when editor-side errors were recorded during the current run the response addseditor_errors_countandeditor_errors_hintpointing at source="editor" — treat a clean game log carrying that hint as a run that lost scripts, not a clean launch."editor": editor-process script errors and the Debugger dock's visible Errors-tab rows — parse errors, GDScript reload warnings, @tool/EditorPlugin runtime errors, push_error/push_warning. Logger-backed entries and Errors-tab rows are read from the editor UI when available. Use when the editor Output or Debugger Errors panel shows red/yellow rows but other sources turned up nothing. Buffer 500 for logger-backed entries; Debugger rows are live UI state. Entries: {source, level, text, path, line, function}. Filtered to .gd/.cs in the user project for Logger-backed entries; addons/godot_ai/ dropped. Logger entries fired before plugin enable are not captured.
"all": plugin → editor → game lines (with source per entry).
Tail pattern: for game logs, poll the current run with offset=N and
keep the returned run_id. current_run_id identifies the active run;
run_id identifies the run being read. Passing
since_run_id=old_run_id reads retained lines for that prior run, and
stale_run_id: true means the requested run is not the current run.
For editor logs, read once to capture
next_cursor and pass it back as since_cursor on later calls.
since_cursor reads Logger-backed editor entries only; live Debugger
Errors-tab rows are included in regular source="editor" reads but do
not have stable cursors. When since_cursor is set, it supersedes
offset. truncated: true means older entries fell out of the
ring before the poll; continue from the returned next_cursor and
treat oldest_cursor as the earliest retained sequence.
Set include_details=True for Errors-tab style metadata on game/editor
entries: original code/rationale, error type, resolved source, and
stack frames. Default false preserves compact responses.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max lines to return. Default 50. | |
| offset | No | Lines to skip. Default 0. | |
| source | No | "plugin" | "game" | "editor" | "all". Default "plugin". | plugin |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| since_cursor | No | Editor-log cursor from a previous source="editor" response. | |
| since_run_id | No | Game-log run id from a previous response; reads that retained run instead of the current run. | |
| include_details | No | Include rich error metadata for game/editor entries. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers extensively: buffer sizes (500/2000), retention across runs, boot-time parse errors never included, editor_errors_count/hint semantics, filtering rules, addons dropped, cursor superseding offset, and truncation behavior. This is exemplary behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every block earns its place given the tool's complexity and the absence of annotations. It is front-loaded with a one-sentence purpose, then structured into source categories and tail-pattern guidance. It is dense rather than padded, though slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers return-field semantics (run_id, current_run_id, stale_run_id, dropped_count, editor_errors_hint), source-specific entry shapes, cursor/run lifecycle, edge cases like lost scripts, and polling patterns. Combined with the existing output schema, an agent has everything needed to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all 7 parameters (100%), the description adds substantial meaning beyond the schema: since_cursor supersedes offset, since_run_id reads retained prior runs, include_details returns Errors-tab metadata, and source determines entry shape. It transforms the parameters into a coherent replay/pagination model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read recent log lines from the Godot editor, plugin, or running game.' It then enumerates the exact source modes (plugin/game/editor/all) and the resource form, making the tool's scope unambiguous and clearly distinct from the unrelated sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance, e.g., 'Use when the editor Output or Debugger Errors panel shows red/yellow rows but other sources turned up nothing.' It also explains the default source, when to use since_run_id versus since_cursor, and how to poll game logs with offset and run_id. This is far beyond minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_manageA
Material authoring (StandardMaterial3D, ORMMaterial3D, ShaderMaterial, CanvasItemMaterial). Albedo, metallic/roughness, emission, transparency, shader uniforms.
Resource form: godot://materials — prefer for active-session reads.
Ops:
• create(path, type="standard", shader_path="", overwrite=False)
Create + save a material .tres at a res:// path. type:
"standard" | "orm" | "canvas_item" | "shader". For "shader",
shader_path points to the .gdshader.
• set_param(path, param, value)
Set a built-in property on a .tres material. Enum-valued params
accept names ("alpha" -> TRANSPARENCY_ALPHA). Color/Vector dicts.
Texture properties accept res:// paths.
• set_shader_param(path, param, value)
Set a shader uniform on a ShaderMaterial.
• get(path)
Inspect a material (type, params, uniforms, current values).
• list(root="res://", type="")
List materials under root, optional type filter.
• assign(node_path, resource_path="", slot="override", create_if_missing=False,
type="standard")
Assign a material to a node slot. Slots: "override" |
"surface_" | "canvas" | "process". When create_if_missing=True
and no resource_path, makes an inline material of type.
• apply_to_node(node_path, type="standard", params=None, slot="override",
save_to="", overwrite=False)
High-level: build + set params + assign in one undo.
save_to optionally persists to disk; errors if the file already
exists unless overwrite=True.
• apply_preset(preset, path="", node_path="", overrides=None)
Curated looks: metal, glass, emissive, unlit, matte, ceramic.
path saves to disk; node_path assigns to a node; overrides merge.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully carries the transparency burden, and it does so excellently. Each op lists its side effects: save to disk, assign to node, inline material creation, error when file exists unless overwrite=True, and one undo action for apply_to_node. The compatibility alias for flat parameters is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but extremely well-structured: it opens with the tool's scope, then uses bullet-pointed op signatures, and closes with a note on call shape. Every sentence carries necessary information for a multi-op tool, though a couple of lines could be tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (eight operations, many parameter combinations) and the generic schema, the description leaves no critical gaps. It covers all ops, their parameters, error semantics, resource-form usage, and edge cases. Since an output schema exists, the lack of return-value descriptions is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only exposes op, params, and session_id with 0% coverage of actual parameters. The description compensates comprehensively by providing full pseudo-signatures for every operation, including defaults, enum values, and domain-specific rules like texture properties accepting res:// paths and enum-valued params accepting names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a material authoring and management tool, listing specific material types (StandardMaterial3D, ORMMaterial3D, ShaderMaterial, CanvasItemMaterial) and eight concrete operations. It uses strong verbs like create, set_param, get, list, assign, apply_to_node, and apply_preset, making the tool's purpose very distinct from the vague 'material_manage' name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides detailed per-operation guidance, including parameter signatures, valid types, and behavior like overwrite errors and undo grouping. It also notes the canonical call shape and a compatibility alias. However, it does not explicitly compare this tool to siblings like resource_manage, so alternatives are not discussed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_createA
Create (spawn) a new node in the scene tree.
Creates a node of the given type and adds it to the parent, or
instantiates a PackedScene from scene_path. type and scene_path
are mutually exclusive — when scene_path is given, type is ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name; Godot auto-names if empty. | |
| type | No | Godot node class (e.g. "Node3D", "MeshInstance3D"). | |
| scene_file | No | Optional editor-scene guard (EDITED_SCENE_MISMATCH). | |
| scene_path | No | Optional res:// path of a PackedScene to instantiate. | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| parent_path | No | Parent path relative to the edited scene root (e.g. "/Main"), NOT runtime "/root/...". Empty = scene root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose core behavior (creates, adds to parent, instantiates scene) and the mutual exclusivity rule. However, it omits potential side effects like modifying the scene file, needing to save, or error conditions. More transparency would be beneficial for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and contains no filler. It efficiently covers both modes of operation and the key interaction rule. A model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6-parameter tool with an output schema present, the description is reasonably complete. It explains the two modes and the parent relationship. It could mention error handling or save requirements, but the core behavior and parameter semantics are adequately covered, and the output schema handles return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters are fully described in the schema (100% coverage), so the baseline is 3. The description adds valuable parameter semantics by explaining that type and scene_path are mutually exclusive and that scene_path takes precedence, which is not stated in the schema. This pushes the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create (spawn) a new node in the scene tree.' It clearly distinguishes itself from sibling tools like node_find and node_set_property by focusing on creation, and further clarifies the two modes of operation (type vs. scene instantiation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need to create a new node or instantiate a PackedScene. It also offers a usage caveat about type/scene_path mutual exclusivity. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_findA
Find nodes in the scene tree by name, type, or group.
At least one filter must be provided. Filters AND together. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring match on node name (case-insensitive). | |
| type | No | Exact Godot class name (e.g. "MeshInstance3D"). | |
| group | No | Group name the node must belong to. | |
| limit | No | Max number of results. Default 100. | |
| offset | No | Number of results to skip. Default 0. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It appropriately discloses that pagination is in effect and that filters are combined with AND, which are important semantics not present in the schema. It does not mention side effects or error conditions, but the read-only nature of 'Find' is reasonably implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two short sentences to convey purpose and core constraints. It is front-loaded with the action and resource, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of a detailed output schema, the description adequately covers the key usage constraints (required filter, AND semantics, pagination) and purpose. It is complete enough for an agent to select and invoke this tool correctly, especially with the rich input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does mention the three filter types (name, type, group) and pagination, but these are already fully documented in the input schema. It adds no extra nuance about parameter values beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' and identifies the resource 'nodes in the scene tree' with filters by name, type, or group. This clearly distinguishes it from siblings like scene_get_hierarchy, which lists the hierarchy, and node_get_properties, which inspects a specific node's properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the requirement 'At least one filter must be provided' and explains that filters AND together, giving clear usage constraints. It also mentions pagination, implying use of limit/offset for large results. However, it does not name alternative tools or specify when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_get_propertiesA
Get properties of a node.
Resource form: godot://node/{path}/properties — prefer for
active-session reads (returns the full property set).
The default returns every editor-visible property, which can be
50-150 entries. Pass fields to return only the properties you
need — a large response-size cut on this hot read. The response
always carries total_count (all editor-visible properties)
alongside count (returned): an unfiltered call returns the full
set, so count == total_count; only the fields filter can
make count smaller. Requested names that match no
editor-visible property are listed in unknown_fields, so a
nonexistent name is distinguishable from a property that exists
with a null value.
Null-valued properties are included: an unset object/resource slot
(script on an unscripted node, an empty mesh or
material, …) returns "value": null with its declared type.
An attached script serializes to its res:// path; built-in
scripts (no resource path) fall back to their string
representation.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Scene path relative to the edited scene root (e.g. "/Main/Camera3D"), NOT runtime "/root/..." paths. Derive from prior tool responses or scene_get_hierarchy. | |
| fields | No | When non-empty, return only these property names. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It thoroughly discloses behavior: default response size (50-150 entries), the meaning of count/total_count, handling of unknown fields, inclusion of null-valued properties, and script serialization details. This goes far beyond basic transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then progressively adds detail. It is longer than minimal but every sentence adds value, with clear paragraph breaks for readability. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers edge cases (null values, unknown fields, script paths), response semantics, and performance considerations. While an output schema exists, the description still adds essential context that the schema alone would not provide, making it fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics beyond the schema by explaining how the fields parameter affects the response, the relationship between count and total_count, and the unknown_fields behavior, enriching parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get properties of a node,' using a specific verb and resource. It clearly differentiates from sibling tools like node_set_property (set) and node_find (search), making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use this tool ('prefer for active-session reads') and offers performance guidance on using the fields filter. It does not explicitly exclude alternatives, but the mention of hot reads and filtering implies practical usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_manageA
Node tree manipulation (delete, duplicate, rename, reorder, reparent, groups, hierarchy reads).
Resource forms (prefer for active-session reads): godot://node/{path}/properties, godot://node/{path}/children, godot://node/{path}/groups
Ops: • get_children(path) Direct children of a node (name, type, path each). • get_groups(path) Group names the node belongs to. • delete(path, scene_file="") Remove the node. Cannot delete scene root. Undoable. • duplicate(path, name="", scene_file="") Deep-copy a node + children as a sibling. Cannot duplicate scene root. • rename(path, new_name, scene_file="") Rename a node. Sibling-name collision and "/" / ":" / "@" rules apply. • move(path, index, scene_file="") Reorder among siblings. Index 0 = first. • reparent(path, new_parent, scene_file="") Move under a new parent. Children preserved. Cannot move into descendants. • add_to_group(path, group, scene_file="") Add the node to a group. • remove_from_group(path, group, scene_file="") Remove the node from a group. • rotate(path, degrees, axis="y", relative=false, scene_file="") Rotate a 2D or 3D node by degrees. Undoable. • scale(path, scale, relative=false, scene_file="") Scale a 2D or 3D node or Control. Undoable. • translate(path, offset, relative=true, scene_file="") Move / offset a node position. Undoable.
All write ops accept the optional scene_file guard — if non-empty, the
mutation fails with EDITED_SCENE_MISMATCH when the editor's current scene
doesn't match.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses undoability for delete/rotate/scale/translate, restrictions like 'Cannot delete scene root' and 'Cannot move into descendants', naming collision rules, and the EDITED_SCENE_MISMATCH guard behavior for scene_file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: a one-line summary, a compact resource-forms section, a bulleted operation list with one line per op, and a short call-shape note. Each sentence adds operational value, and the content is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex 12-operation tool with no annotations and 0% schema description coverage, yet the description covers each operation's parameters, key restrictions, undoability, error guard, and invocation shape. An output schema exists, so return-value details are not required from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. Every operation lists its parameters with defaults and semantics: e.g., 'move(path, index, scene_file="") — Reorder among siblings. Index 0 = first.' It also explains the canonical call shape and the flat-parameter compatibility alias.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear summary: 'Node tree manipulation (delete, duplicate, rename, reorder, reparent, groups, hierarchy reads).' The verb-plus-resource framing and the enumerated operations make the tool's purpose unambiguous and distinguish it from siblings like node_get_properties, node_create, and node_set_property.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: it covers node tree mutations and hierarchy reads, and it notes 'Resource forms (prefer for active-session reads)' and the optional scene_file guard for write ops. However, it does not explicitly state when not to use this tool versus overlapping siblings such as node_get_properties or scene_get_hierarchy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_set_propertyA
Set a property on a node.
Verify the property name first — call node_get_properties (or read
godot://node/{path}/properties) to confirm the exact name and type
before writing. Guessing common Godot names often fails with
PROPERTY_NOT_ON_CLASS because Godot's actual properties differ from
intuition (e.g. Camera3D uses fov/current, not field_of_view;
Sprite2D uses texture, not image; Node3D uses
position/rotation/scale, not transform.origin).
Coerces value to the property's type:
Vector2/Vector3: dict with x/y/z keys.
Color: dict {r,g,b,a} or hex string ("#ff0000").
NodePath: string ("../Other/Node").
Resource: res:// path string (loads + assigns); null/"" clears.
{"__class__": "BoxMesh", ...}creates a built-in resource owned by this property. After scene_save it is serialized in-place as a[sub_resource]inside the .tscn; it is not a reusable .tres. For sharing, first callresource_manage(op="create", params={"type": "BoxMesh", "properties": {...}, "resource_path": "res://meshes/box.tres"}), then pass that res:// path here (or use resource_manage(op="assign")).StringName: plain string. Array/Dictionary: JSON list/object.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Scene path relative to the edited scene root (e.g. "/Main/Camera3D"), NOT runtime "/root/..." paths. | |
| value | Yes | New value. Pass null (or "" for resources) to clear. | |
| property | Yes | Property name (e.g. "fov", "position", "mesh"). Must match Godot's exact identifier — introspect with ``node_get_properties`` if unsure rather than guessing. | |
| scene_file | No | Optional editor-scene guard. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers: it discloses type coercion formats for Vector, Color, NodePath, Resource, StringName, and Array/Dictionary, and explains resource ownership, serialization as [sub_resource], and that null/'' clears. This is rich behavioral disclosure beyond the obvious 'setter' semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then uses compact bullet-like sections for coercion and resource behavior. Every sentence adds operational value, and the organization makes the long content scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the critical failure mode (PROPERTY_NOT_ON_CLASS), value clearing, resource lifecycle, sharing strategy, and serialization timing. With an output schema available to describe return values, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description substantially extends the schema by explaining how to encode Godot property values (e.g., Vector3 dict keys, Color hex strings, res:// paths, __class__ resource creation). It also clarifies the path parameter's relative-to-scene-root meaning and property-name exactness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a clear verb+resource statement ('Set a property on a node'), then reinforces scope by contrasting with node_get_properties and giving Godot-specific examples. It is easily distinguished from sibling tools like node_create or node_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to verify property names with node_get_properties before writing, and explains when to use resource_manage(op='create') instead of inline resource creation for shareable resources. This gives concrete selection and sequencing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_manageA
Particle systems (GPUParticles2D/3D, CPUParticles2D/3D). All write ops create the node + sub-resources (ProcessMaterial, default QuadMesh draw pass) in a single undo action.
Ops: • create(parent_path, name="Particles", type="gpu_3d") Create an emitter. type: "gpu_3d" | "gpu_2d" | "cpu_3d" | "cpu_2d". For GPU emitters, auto-creates ProcessMaterial; for gpu_3d, also a default QuadMesh draw pass. • set_main(node_path, properties) Node-level props: amount, lifetime, one_shot, explosiveness, preprocess, speed_scale, randomness, fixed_fps, emitting, local_coords, interp_to_end. • set_process(node_path, properties) Behavior props (auto-creates ProcessMaterial for GPU). Emission shape, velocity, gravity, color_ramp, scale_curve, turbulence. See full property list in the Godot reference. GPU gravity is a Vector3 — pass {x, y, z} or [x, y, z], including for gpu_2d (the shared ProcessMaterial is 3D; z is ignored in 2D). • set_draw_pass(node_path, pass_=1, mesh="", texture="", material="") What gets drawn per particle. GPU 3D: mesh in draw_pass_N + optional material override. GPU 2D / CPU 2D: texture. CPU 3D: mesh. • restart(node_path) Restart emission. Runtime-only, not undoable. • get(node_path) Inspect main props, process material, draw passes. • apply_preset(parent_path, name, preset, type="gpu_3d", overrides=None) Curated effects: fire, smoke, spark_burst, magic_swirl, rain, explosion, lightning. One-shot presets re-trigger via restart. overrides = {"main": {...}, "process": {...}, "draw": {...}}; bare keys are auto-routed to main (amount, lifetime, one_shot, ...) or process — draw keys must be nested under "draw". draw configures the gpu_3d draw-pass StandardMaterial3D (blend_mode, albedo_color, emission, ...); on gpu_2d only draw.texture (res:// path) applies; cpu_* types reject draw overrides. Unknown or malformed override keys return INVALID_PARAMS (never silently dropped); response reports applied_main / applied_process / applied_draw. GPU gravity requires {x, y, z} (or [x, y, z]) even for gpu_2d.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes full responsibility for disclosing behavior. It does this thoroughly: mentions that all write ops create nodes and sub-resources in a single undo action, that restart is runtime-only and not undoable, and that unknown override keys return INVALID_PARAMS rather than being silently dropped. It also details auto-creation of ProcessMaterial and QuadMesh, which is crucial for understanding side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries specific technical content. It is well-structured with bullet points per operation, making it easy to scan. While it could be trimmed slightly (e.g., repeating 'auto-creates ProcessMaterial' for GPU emitters), the density of useful information justifies its length. It is front-loaded with the core purpose and then elaborates appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all operations, parameter semantics, error behavior, response reporting ('response reports applied_main / applied_process / applied_draw'), and cross-type constraints (GPU vs CPU, 2D vs 3D). It handles edge cases like overrides routing and invalid keys. Given the tool's complexity and the minimal schema, this description is exceptionally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is minimal (op, params, session_id) with 0% schema description coverage. The description compensates magnificently by explaining every operation's parameters in detail, including property names, types, defaults, and per-type variations (e.g., 'GPU gravity requires {x, y, z} even for gpu_2d'). It also explains the canonical call shape and flat-op compatibility alias, providing meaning far beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Particle systems (GPUParticles2D/3D, CPUParticles2D/3D)', immediately identifying the specific resource. It then enumerates all operations (create, set_main, set_process, etc.) with a clear verb for each, making it unambiguous what the tool does and distinguishing it from sibling manage tools like animation_manage or material_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: whenever particle emitters need to be created, configured, or restarted. It provides context for particle-specific behavior (e.g., GPU vs CPU, 2D vs 3D) and even notes edge cases like 'GPU gravity is a Vector3' and 'cpu_* types reject draw overrides.' However, it does not explicitly state 'use this instead of X' or provide exclusions versus sibling tools, so it falls slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Lightweight readiness probe echoing engine status, version, and memory metrics.
Verifies the end-to-end MCP communication path between the AI agent, the local MCP server, and the active Godot Editor session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the behavioral burden. It transparently discloses that the tool is non-mutating (a probe) and that it returns engine status, version, and memory metrics while verifying the communication path. It could add explicit 'no side effects' phrasing, but the intent is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The core purpose—probe and returned metrics—is front-loaded, and the supporting sentence explains why the tool exists, making every word purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ping tool, the description covers what it does, what it returns, and its verification role. The optional session_id parameter is not explained, but the presence of an output schema and the lightweight nature reduce the need for deeper detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage for the session_id parameter, and the description does not directly explain session_id. The phrase 'active Godot Editor session' hints at the parameter's context but does not clarify values, defaults, or behavior, so the description adds only minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a lightweight readiness probe that echoes engine status, version, and memory metrics, and it states the end-to-end verification purpose. This specific verb+resource framing distinguishes it from heavier management siblings like editor_state, logs_read, or session_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: as a lightweight readiness check before relying on the MCP connection to the Godot Editor. However, it does not explicitly state when not to use it or name alternatives, leaving some inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_manageA
Project run/stop and project.godot settings.
Resource form: godot://project/info and godot://project/settings
— prefer for active-session reads.
Ops:
• stop()
Stop the running project (game). Takes no params — call as
project_manage(op="stop") or with params={}. Idempotent:
succeeds with was_running=false if the project isn't running.
Do NOT pass extra fields like force or reason inside
params — only the registered keys are accepted (here, none).
For multi-editor setups, pass session_id as a sibling of
op/params, not inside params.
• settings_get(key)
Read a ProjectSettings key (e.g. "application/config/name").
• settings_set(key, value)
Write a ProjectSettings key and persist to project.godot.
Refuses the startup-execution keys (autoload/*,
editor_plugins/*, application/run/main_scene,
editor/run/main_run_args, editor/script/templates_search_path);
use set_main_scene / autoload_manage(op="add") for the two
that have a validated route.
• set_main_scene(path)
Set the project's main scene — the scene project_run(mode="main")
boots and the engine loads at startup. Writes
application/run/main_scene and persists to project.godot. path
must be a res:// scene inside the project that already exists and
loads as a PackedScene, so a scaffolded project can be made runnable
without opening the generic startup-execution surface.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: stop is idempotent and reports was_running=false; settings_set persists to project.godot and refuses a named list of keys; set_main_scene requires an existing res:// scene loadable as PackedScene and persists the change. It also discloses strict params validation and compatibility alias behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with a header, resource-form note, per-op bullets, and a canonical call-shape summary, making it scannable. It is long, but the density is justified for a four-operation tool; the resource-form sentence is the least tightly integrated element and contributes to the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-op tool with no annotations, the description is complete: it covers all ops, parameter shapes, persistence behavior, refused keys, session handling, and call format, with an output schema available for return values. Nothing an agent needs to select or invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define parameter semantics, and it does: stop takes no params, settings_get takes key, settings_set takes key/value, and set_main_scene takes a res:// path. It also clarifies constraints like only registered keys being accepted and session_id being a top-level sibling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates four concrete operations (stop, settings_get, settings_set, set_main_scene) and names related tools, so an agent can tell what the tool manages. However, the opening line 'Project run/stop' is slightly imprecise because there is no operation to start/run a project (project_run is a sibling), which creates minor ambiguity until the op list is read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: prefer resource forms for active-session reads, do not pass extra fields to stop, and use set_main_scene/autoload_manage(op='add') instead of settings_set for refused startup-execution keys. It also explains the canonical call shape and where session_id belongs, so an agent knows exactly when and how to invoke each op.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_runA
Run (play) the Godot project from the editor.
Modes:
"main": Run the project's main scene (default).
"current": Run the currently open scene.
"custom": Run a specific scene (requires
scene).
Idempotent: if the project is already running, returns success with
data.was_already_running=true (no scene switch). To switch scenes,
call project_manage(op="stop") first, then project_run again.
After starting playback, waits briefly for the Godot AI game helper to
check in. The response includes game_status, helper_live
(status == "live"), session_active (status not in {"not_live",
"stopped"}), and any recent_errors observed during the run window.
The top-level booleans mirror the same fields inside game_status.
game_status.status="not_live" means playback launched but the game
did not become live before the helper-ready window elapsed;
"no_helper" means the project has no _mcp_game_helper autoload, as
with some headless/custom-main-loop setups (helper_live=false,
session_active=true); "stopped" means playback stopped or never
became active before liveness could be confirmed (helper_live=false,
session_active=false); "break" means the game process is parked in
a remote-debugger break — during boot this is a GDScript parse/load
error that froze the game before the helper could register, and the
response names the failing script when captured
(game_status.break = {reason, can_debug, pre_live}). A game at
a break cannot continue on its own: call project_manage(op="stop"),
fix the error, and relaunch. Poll editor_state to see late
transitions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "main" | "current" | "custom". Default "main". | main |
| scene | No | Scene path (e.g. "res://levels/level1.tscn"). Required for "custom". | |
| autosave | No | When True (default), Godot persists in-memory MCP scene mutations to disk before running. Pass False for smoke tests where MCP edits should stay in memory. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses idempotency, waits briefly for the helper, defines all status values (not_live, no_helper, stopped, break), explains the implications of a break state, and advises on recovery. Autosave side effects are also mentioned. This is exceptionally transparent behavior disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence adds essential information. It is well-structured with paragraphs for modes, idempotency, and response statuses. While the status explanation is detailed, it's necessary for correct interpretation. No fluff, but the length pushes the boundary of conciseness; still, it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple modes, statuses, helper interaction, error states), the description is comprehensive. It covers edge cases like no helper autoload, break during boot with script errors, and late transitions via editor_state. The output schema exists, so return values are structured, but the description explains their semantics fully. This is a complete picture for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter already has a description. The description adds extra context by explaining the meaning of mode values (e.g., custom requires scene), the autosave use case for smoke tests, and the role of session_id (though not explicitly named, the schema covers it). This adds value beyond the schema without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run (play) the Godot project from the editor.' It then lists specific modes (main, current, custom) and distinguishes from the sibling tool project_manage by explaining when to stop the project first. This is a specific verb+resource that stands out from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: when to use each mode, how to switch scenes (call project_manage(op="stop") first), and the optional autosave behavior for smoke tests. The description also explains what happens if the project is already running, guiding the agent on whether to stop first. This clearly differentiates when to use project_run vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resource_manageA
Resource (asset) search, inspection, assignment, and creation. Covers generic Resource subclasses plus specialized authoring (Curve, Environment, physics shapes, gradient/noise textures).
Ops: • search(type="", path="", offset=0, limit=100) Search for resources by type or path. Type matching includes subclasses. At least one filter required. Paginated. • load(path) Inspect a .tres / .res — returns type and editor-visible properties. • assign(path, property, resource_path) Load and assign a resource to a node property. Undoable. • get_info(type) Introspect a Resource class — properties, parent, abstract flag, concrete_subclasses (for abstract bases). Read-only. • create(type, properties=None, path="", property="", resource_path="", overwrite=False) Instantiate a Resource subclass. Either path+property (assign to a node, undoable) or resource_path (save to .tres). For specific families (Curve, Environment, etc.) prefer the dedicated ops. • curve_set_points(points, path="", property="", resource_path="") Replace all points on a Curve / Curve2D / Curve3D. Auto-creates the curve resource if the slot is empty (curve_created flag). • environment_create(path="", preset="default", properties=None, sky=None, resource_path="", overwrite=False) Build Environment + Sky chain. Presets: default | clear | sunset | night | fog. sky may be bool or a procedural sky dict such as {"sky_material": "procedural", "sky_top_color": "#0f172a"}. Either assign to a WorldEnvironment node or save .tres. • physics_shape_autofit(path, source_path="", shape_type="") Size a CollisionShape2D/3D to a nearby visual's bounds. Searches direct siblings then parent-siblings (handles nested Body→Collision layouts). Ambiguous matches return candidate paths in error.data.candidates. Auto-creates the concrete Shape subclass if needed. shape_type accepts either the short form ("box", "sphere", "capsule", "cylinder" for 3D; "rectangle", "circle", "capsule" for 2D) or the matching Godot class name ("BoxShape3D", "RectangleShape2D", etc.). • physics_shape_generate(paths, shape_type="box", body_type="static", scene_file="") Generate a StaticBody3D or Area3D sibling (named Collider) with a CollisionShape3D for every MeshInstance3D path. Shapes are fitted in body-local space; a mesh that already has a collider sibling, a duplicate path, or a scene-root mesh is refused before anything is written. shape_type: box | sphere | capsule | cylinder (or the class name); a sphere/capsule/cylinder under a non-uniformly scaled parent is refused. body_type: static | area. scene_file pins the request to that edited scene. Up to 1024 paths are processed in bounded work across editor frames; inside batch_execute at most 16. The bulk write is one undo action. Returns: {created: [{mesh_path, body_path, shape_path, shape_type, body_type}], undoable: true}. • gradient_texture_create(stops, width=256, height=1, fill="linear", path="", property="", resource_path="", overwrite=False) Build GradientTexture2D from color stops. fill: linear | radial | square. • noise_texture_create(noise_type="simplex_smooth", width=512, height=512, frequency=0.01, seed=0, fractal_octaves=0, path="", property="", resource_path="", overwrite=False) Build NoiseTexture2D wrapping FastNoiseLite. Noise types: simplex | simplex_smooth | perlin | cellular | value | value_cubic.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well: it discloses undoable writes, read-only get_info, auto-creation behavior, refusal cases, bounded work, and single-undo writes. However, the op enum also includes delete and move, which are completely undocumented, so behavior is not fully transparent for all operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with a summary, per-operation signatures, and explanatory bullets. Each section is dense with necessary detail, though the missing delete/move coverage and the trailing compatibility note add some bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with a generic schema, the description is unusually complete, covering operation signatures, side effects, edge cases, and even one return shape. The notable gap is the omission of delete and move from the documented operations despite them being valid enum values; an agent could not invoke those safely without more information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is generic—only op, params, and session_id—with 0% schema description coverage, so the description must define parameter semantics. It does so thoroughly for nearly every operation, including allowed values for presets, fill modes, noise types, and shape_type short/class names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear statement of scope—resource search, inspection, assignment, and creation—and enumerates the specific operations. It distinguishes the tool from siblings by focusing on Resource assets and specialized authoring families, which prevents confusion with filesystem_manage or node_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical when-to-use guidance, such as requiring at least one filter for search, choosing between path+property and resource_path for create, and preferring dedicated ops for Curve/Environment families. It does not name sibling tools explicitly, but the context is clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_get_hierarchyA
Get the scene tree hierarchy from the open scene.
Returns a paginated flat list of nodes with name, type, path, and child count. Walks up to the specified depth.
Resource form: godot://scene/hierarchy — prefer for active-session
reads.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Maximum walk depth. Default 10. | |
| limit | No | Max number of nodes to return. Default 100. | |
| offset | No | Number of nodes to skip. Default 0. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the return is a paginated flat list with specific fields (name, type, path, child count), that it walks to a specified depth, and that it operates on the active scene. This gives good behavioral insight, though it doesn't explicitly state read-only or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a resource form line, with the core purpose stated first. Every sentence adds value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and fully documented parameters, the description covers the key behavioral aspects (pagination, depth, flat list, active scene). It doesn't mention error handling or explicit read-only safety, but those are less critical for a get-style tool with an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context by explaining the result is a paginated flat list and that depth controls walk depth, but this largely restates what the schema already provides. It does not significantly extend parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get the scene tree hierarchy from the open scene' with a specific verb and resource, and clearly distinguishes from sibling tools like node_find by focusing on the full hierarchy rather than searching. The resource form adds further specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'prefer for active-session reads', providing clear context on when to use the resource form. However, it does not explicitly name alternative tools or state when not to use it, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_manageA
Scene authoring (create, save_as, list open roots).
Resource form: godot://scene/current and godot://scene/hierarchy
— prefer for active-session reads.
Ops: • create(path, root_type="Node3D", root_name="") Create the initial .tscn with the given root and open it. root_name defaults to filename basename when empty. This initial root is written immediately, but later node_create/node_set_property mutations remain in editor memory until scene_save or save_as is called. • save_as(path) Save the currently edited scene to a new file path. • get_roots() List scenes currently open in the editor; flag the edited one.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it discloses that create writes the initial root immediately but later mutations remain in editor memory until scene_save or save_as, that save_as writes to a new path, and that get_roots flags the edited scene. It also documents the canonical call shape and the flat-parameter compatibility alias.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: a one-line summary, a resource-form note, a concise list of ops, and then call-shape details. Each section earns its place and there is no redundant restating of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-op authoring tool with no annotations, the description covers the key operational differences, persistence behavior, and call shape. It does not discuss edge cases such as overwrite behavior when saving to an existing path or invalid root_type values, but the output schema covers return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by defining create(path, root_type='Node3D', root_name=''), explaining root_name defaults to filename basename, and listing save_as(path) and get_roots(). session_id is not semantically explained, but the core parameters are well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Scene authoring (create, save_as, list open roots)', which names specific verbs and the resource domain, and each operation is individually explained. It is clear what the tool does, though it does not explicitly compare itself to closely related siblings like scene_save or scene_open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one concrete usage exclusion: 'prefer for active-session reads' for the godot://scene/current and godot://scene/hierarchy resource forms. It does not explicitly explain when to choose scene_manage over scene_save or scene_open, so guidance is present but not fully comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_openA
Open an existing scene file (.tscn) in the editor.
If path is already the currently edited scene this is a no-op
— the in-memory state (including any unsaved MCP mutations) is
preserved. Pass force_reload=True when the file on disk is the
authority and the editor should discard the open in-memory copy and
re-read the scene from disk.
The reply is sent only after the editor has actually switched to the
requested scene (switched: true), so follow-up writes are safe
immediately. switched: false with settle: "timeout" means the
switch had not landed within the wait window. In synchronous contexts
(e.g. inside batch_execute) the reply returns immediately with
switched: false and settle: "not_waited". In both of those
cases, re-check editor_state before issuing follow-up writes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File path of the scene to open (e.g. "res://main.tscn"). | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| force_reload | No | Re-read the scene from disk even when it is already open. This discards unsaved in-memory edits to that scene. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden. It discloses that force_reload discards unsaved in-memory edits, that the reply is sent only after the switch lands, and describes the two non-success paths (switched:false with settle timeout or not_waited) with a recommendation to re-check editor_state. This is exemplary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficiently structured. The first sentence gives the purpose, the second paragraph explains edge cases and force_reload, and the third covers reply timing and safe write conditions. Every sentence contributes to decision-making, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with moderate parameters and significant behavioral nuance, the description covers all critical aspects: synchronous vs asynchronous behavior, timeout semantics, discard behavior, and follow-up safety. An output schema exists, so return values are handled elsewhere. This is fully complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning: it gives a concrete path example (res://main.tscn), explains the no-op default, and details the force_reload parameter's destructive semantics (discarding unsaved edits). It also clarifies the interaction between path, force_reload, and settle behavior, going well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Open an existing scene file (.tscn) in the editor.' This clearly identifies the tool's function and distinguishes it from siblings like scene_save or scene_manage. The .tscn extension and 'existing scene file' add precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong contextual guidance: explains the no-op behavior when the path is already the current scene, instructs when to use force_reload, and clarifies the reply timing and settle semantics. It does not explicitly name alternative tools or state when-not-to-use, but the context is unambiguous and actionable, missing only a direct comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_saveA
Save the currently edited scene to disk.
Node and property mutation tools change the editor's in-memory scene; call this explicitly to persist those mutations to the existing path.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool writes the in-memory scene to disk and targets the 'existing path,' implying overwrite. It could be more explicit about destructive overwrite or prerequisites, but it is substantially transparent for a simple save operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main purpose is front-loaded in the first sentence, and the second sentence earns its place by explaining when and why to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one optional parameter and an output schema, the description covers the core workflow well: after mutations, save to the existing path. Some edge context such as overwrite warning or needing an open scene is not explicit, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the only parameter, session_id, and the schema already documents 'Optional Godot session to target. Empty = active session.' The description adds no parameter-specific meaning, but the baseline of 3 applies when the schema handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Save the currently edited scene to disk.' It also distinguishes this tool from sibling mutation tools by explaining that node/property mutations only alter the in-memory scene, while scene_save persists them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to call the tool: after node/property mutations, 'call this explicitly to persist those mutations to the existing path.' This is clear contextual guidance, though it does not name specific alternatives or explicit when-not-to-use conditions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_attachA
Attach a script to a node in the scene tree.
Replaces any existing script on the node. Undoable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Scene path of the node (e.g. "/Main/Player"). | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| script_path | Yes | res:// path of the .gd (e.g. "res://scripts/player.gd"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description appropriately discloses the key destructive behavior ('Replaces any existing script') and assures undoability. This goes beyond minimal and covers the most impactful side effects, though it omits details like permission requirements or session behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. It front-loads the primary action and immediately states the crucial caveat, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool, the description covers the core purpose, the replacement behavior, and undoability. An output schema exists, so return details are likely covered elsewhere. It might benefit from mentioning node existence validation, but overall it is sufficiently complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions and examples. The description does not add any extra parameter-level semantics beyond what the schema already provides, so it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('attach') and identifies the resource ('script' to a 'node'), making the tool's purpose unmistakable. It clearly distinguishes from sibling tools like script_create or script_patch by focusing on the act of attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool is for attaching a script to a node. The phrase 'Replaces any existing script' hints that it can also be used to swap scripts. However, it does not explicitly mention alternatives or exclusion cases, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_createA
Create a new GDScript source file (.gd) on disk.
Writes content to a .gd file in the project. Overwrites if it exists.
Triggers a filesystem scan. New files include data.cleanup.rm
listing the .gd + .gd.uid sidecar; overwrite omits it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | res:// path (e.g. "res://scripts/player.gd"). | |
| content | No | GDScript source. Empty creates a blank file. | |
| session_id | No | Optional Godot session to target. Empty = active session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavior disclosure. It explicitly mentions overwrite behavior, filesystem scan triggering, and the sidecar listing in data.cleanup.rm. This is substantial, though it omits permission/session context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with a clear purpose, and every sentence contributes behavior or side-effect information. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity and the presence of an output schema, the description is complete enough: it covers core functionality, overwrite semantics, and side effects. Minor gaps exist around session targeting and alternative tool guidance, but these are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for all three parameters, including descriptions for path, content, and session_id. The description adds no parameter-specific detail beyond this, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a .gd file on disk, explicitly naming the resource type and the action. It also distinguishes from siblings like script_patch by focusing on creation rather than patching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for creating new GDScript source files, but it does not explicitly state when to prefer this over alternatives like script_patch or script_manage. There are no clear exclusions or when-not-to-use notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_manageA
Script (.gd) reading, detachment, and outline.
Resource form: godot://script/{path} — prefer for active-session reads.
Ops: • read(path) Read full source, line count, file size. • detach(path) Remove the currently attached script from a node. Undoable. • find_symbols(path) Outline a .gd — class_name, extends, functions, signals, @export vars. • validate(path="", content="") Validate a GDScript file or source string and return compiler diagnostics. • delete(path) Delete a script file and its .uid sidecar from the project.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses important side effects: detach is undoable, delete removes both the file and its .uid sidecar, read returns full source plus line count and file size, and validate returns compiler diagnostics. It does not cover permissions or irreversible-change warnings beyond delete, but the provided behavioral detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: a short scope header, a resource-form tip, a controlled bullet list of operations with their parameters and return summaries, and a compact call-shape note. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation tool with no annotations and minimal schema descriptions, this is substantially complete: all operations, parameter shapes, defaults, call convention, and key output/side effects are covered. The main gap is that session_id semantics are not explained, and there is no explicit statement about whether detach or delete require an active session beyond the read-preference note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document parameters. It does: each operation lists its parameter names, validate provides defaults for both path and content, and the canonical call shape explains how op and params relate. The compatibility alias for flat parameters and the reminder that op and session_id stay top-level add crucial semantic clarity beyond the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource type (.gd scripts) and enumerates five distinct operations with specific verbs: read, detach, find_symbols, validate, delete. It is easy to tell what the tool does, though the opening summary omits validate and delete, and it does not explicitly differentiate from sibling tools like script_patch or script_attach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation list and the note that the godot://script resource form is preferred for active-session reads. However, there is no explicit guidance about when to choose this tool over script_create, script_patch, script_attach, or other script-related siblings, and no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_patchA
Anchor-based string-replace edit on a .gd file.
Finds an exact old_text and replaces with new_text. Fails
on multiple matches unless replace_all=True; fails on zero matches.
Exact byte match (whitespace significant). Triggers filesystem scan and
refreshes an already-loaded GDScript in place so the next call runs the
new code (response reloaded=true; otherwise reload_reason says why).
Not undoable via Ctrl+Z.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | res:// path ending in .gd. | |
| new_text | Yes | Replacement (empty deletes). | |
| old_text | Yes | Exact substring to find. Must be unique unless replace_all. | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| replace_all | No | Replace every occurrence. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states failure modes (multiple/zero matches), exact byte matching, whitespace significance, filesystem scan behavior, in-place reload of loaded scripts, the reloaded/reload_reason response signal, and non-undoability. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence adds essential operational detail. There is no filler, repetition, or unnecessary context. It fits substantial behavioral information into a tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's modest complexity, full schema coverage, and an output schema, the description is complete. It covers matching behavior, failure conditions, side effects on loaded scripts, response hints, and undoability. An agent has enough context to invoke the tool correctly and anticipate outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the uniqueness requirement for old_text, the replace_all fallback, the exact-match/whitespace-sensitive semantics, and the reload consequence of a patch. This exceeds the schema's simple property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Anchor-based string-replace edit on a .gd file.' It further specifies the exact operation (find old_text, replace with new_text) and distinguishes this from siblings like script_create or script_manage by focusing on in-place patching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly situates the tool as an editing operation on existing GDScript files, with detailed constraints about matches and reload behavior. It does not explicitly name alternatives or exclusion conditions, but the intended use case is strongly implied and unlikely to be confused with creation or management tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_activateA
Set the active Godot editor session for subsequent tool calls.
Accepts either an exact session_id or a substring hint matched against the session's short name (project folder basename), project_path, or session_id. An exact id match always wins; a substring must resolve to exactly one session or the tool returns an error listing the candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | An exact session id (``<project-slug>@<16hex>``, e.g. ``my_game@7f9c3a10d8e426b1``, from ``session_manage`` with op="list") OR a substring hint like a project folder name ("test_project", "my_game"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains behavior beyond simply stating the function: exact ID matches always win, substring matches must resolve to exactly one session, and ambiguous matches return an error with candidates. This is valuable because no annotations are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It front-loads the purpose, then explains input matching rules in clear, minimal sentences with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter tool with an output schema, the description fully covers what the tool does, how input is interpreted, and the error behavior for ambiguous matches. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful matching semantics: the exact versus substring matching behavior and the fields matched (short name, project_path, session_id). This goes beyond the schema's parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'Set the active Godot editor session for subsequent tool calls.' This distinguishes it from session_manage and other session-related operations, making the tool's role immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for subsequent tool calls' gives clear context for when the tool should be used, but there is no explicit guidance on when to use this versus session_manage or other session operations. No alternatives or exclusionary conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_manageC
Session listing.
Resource form: godot://sessions — prefer for resource-aware clients.
Ops:
• list()
List every connected Godot editor with metadata: session_id, short
name, godot_version, project_path, plugin_version, server_version,
editor_pid, server_launch_mode, current_scene, play_state, readiness,
connected_at, last_seen, is_active. The response also carries the
server-global exclude_domains (tool domains not registered on
this server via --exclude-domains).
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does disclose substantial behavior: the full metadata field list for list(), the server-global exclude_domains field, and the canonical vs. flat call-shape compatibility. However, the ping operation is completely undocumented, and there is no explicit statement about side effects or read-only behavior beyond the word 'listing.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear 'Ops' bullet, a concise resource-form note, and a detailed but relevant metadata list. It is front-loaded with the core 'Session listing' purpose, though the omission of ping makes the structure feel incomplete rather than intentionally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The list() path is described in detail, but the tool is a dual-op tool according to the schema and the description covers only one op. The missing ping semantics, undefined session_id usage, and lack of differentiation from the sibling ping tool leave an agent without enough information to use the full tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only explains the call-shape convention and leaves session_id and params semantically undefined. The op parameter's valid values are mentioned only in the schema, and the meaning of the 'ping' op is not explained at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the list() operation and the session metadata it returns, which establishes a specific resource and action. However, the tool is named session_manage and the schema also exposes a 'ping' operation that the description never mentions, so the stated purpose ('Session listing') is incomplete and does not cover the full tool surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is 'prefer for resource-aware clients,' which addresses transport style rather than when to choose this tool over alternatives. It provides no guidance on when to use list() versus ping(), nor how session_manage relates to sibling tools like session_activate or ping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_manageA
Signals (Godot's event/observer mechanism) — list, connect, disconnect.
Ops:
• list(path, include_editor=False)
List all signals on the node and their current connections (built-in
and custom). By default editor-internal connections (the
SceneTreeEditor dock and friends) are filtered out — pass
include_editor=True to surface them. The response carries
editor_connection_count so an agent can tell how many were hidden.
• connect(path, signal, target, method)
Connect a signal from path to a method on the target node.
Undoable.
• disconnect(path, signal, target, method)
Remove an existing connection. Undoable.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds meaningful detail: connect/disconnect are undoable, list filters out editor-internal connections by default but can surface them, and the response includes editor_connection_count. This goes beyond bare operation names, though it does not discuss permissions or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a brief intro, three bullet-pointed operations, and a compact call-shape note. Every sentence provides useful information, and the structure makes the multi-op behavior easy to parse without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all operations, their parameter semantics, and key behaviors like undoability and default filtering. Since an output schema exists, return-value specifics are not required. It could briefly mention error conditions or signal name requirements, but the provided information is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully, and it does. It names and explains each relevant parameter (path, include_editor, signal, target, method) within the operation snippets and clarifies the canonical call shape with op and params. This adds substantial meaning beyond the generic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies signals as Godot's event/observer mechanism and enumerates the three operations: list, connect, and disconnect. This is a specific verb+resource statement that clearly distinguishes this tool from the broader sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each operation is described with its intended use case: listing signals with optional editor-internal inclusion, connecting a signal to a target method, and disconnecting an existing connection. It does not explicitly name alternatives or exclusions among sibling tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_manageA
Test result inspection (re-fetches the most recent test_run payload).
Resource form: godot://test/results — prefer for active-session reads.
Ops: • results_get(verbose=False) Same shape as test_run — full results from the last run, no re-execution. verbose=True includes every individual test result.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that the tool only re-fetches the most recent payload, does not re-execute tests, and that verbose=True expands individual result details. This clearly signals a non-mutating inspection operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, resource form, operation list, and call shape are each clearly separated. Every sentence contributes operational value, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return structure, so the description does not need to detail responses. It adequately covers purpose, usage, and core parameter semantics for a one-op tool. The only noticeable omission is session_id semantics, but this is a minor gap given the overall clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description compensates by explaining the core parameters. It documents the canonical call shape, constrains op to results_get, and describes the verbose flag within params. However, session_id is only mentioned as top-level without explaining its meaning, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Test result inspection (re-fetches the most recent test_run payload)', using a specific verb and resource. It clearly distinguishes this from the sibling test_run by emphasizing 'no re-execution' and positioning it as a read-oriented tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says 'prefer for active-session reads', giving clear context for when to use this tool. It also notes that it returns 'full results from the last run, no re-execution', implying it is the right choice when results are needed without rerunning tests. It does not explicitly list exclusions or alternatives, but the guidance is still useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_runA
Run GDScript test suites inside the connected Godot editor.
Discovers test_*.gd in res://tests/, instantiates them, and runs
all test_* methods. Returns a compact summary by default (counts,
suite names, duration) plus failures only. verbose=True includes
every individual test result (each with per-test duration_ms).
Preloaded GDScript dependencies may remain stale after source edits; the response includes cache_warning. Restart the editor before using a rerun to validate dependency edits. ResourceLoader cache modes alone do not refresh the GDScript preload cache.
The whole run has a 300s budget; the plugin aborts between tests shortly before it expires and returns TEST_RUN_TIMEOUT with the partial summary (full partials via test_manage(op="results_get")). Long suites are safe — the editor services the MCP transport between tests — but one single test blocking the main thread for 20s+ can still drop the session. Not allowed inside batch_execute.
The response includes edited_scene (the scene currently open in
the editor). Many suites assume the project's main scene is open; if
it is not and there are failures, the response also carries a
scene_warning — open the main scene (scene_open) and re-run
before treating those failures as real.
| Name | Required | Description | Default |
|---|---|---|---|
| suite | No | Run only the named suite (e.g. "scene", "node", "editor"). Empty runs all suites. | |
| verbose | No | Include every individual test result. Default False. | |
| test_name | No | Run only tests whose name contains this substring. | |
| session_id | No | Optional Godot session to target. Empty = active session. | |
| exclude_test_name | No | Skip tests whose name contains this substring. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses several behaviors: caching issues (preload cache), timeouts (300s budget), potential session drop, return of partial summaries, and warnings. This gives the agent a clear picture of side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy and repeats some information (e.g., response includes edited_scene). While it provides valuable details, it could be more concise. However, it is structured into paragraphs and fronts the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers important operational context: timeouts, cache, scene requirements, and restrictions. Given the tool's complexity, it is fairly complete. Output schema exists so return values are not described, which is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover all parameters comprehensively. The tool description adds context for 'verbose' and 'suite' but doesn't explain test_name, session_id, exclude_test_name. Since schema coverage is 100%, the description doesn't need to repeat, but it does not add much beyond.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: running GDScript test suites in the Godot editor and describes what it does (discovers, instantiates, runs). It also mentions the default behavior and verbose option, making it distinct from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use: it mentions restrictions like 'Not allowed inside batch_execute', advice to restart editor for cache issues, and suggests opening the main scene. It also points to test_manage for full partials. However, it doesn't explicitly contrast with other test-related tools beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theme_manageA
Theme authoring (Godot's stylesheet-like resource for Controls). Cascades down a Control subtree when assigned via theme_apply.
Ops (pass via op="..." plus a params dict): • create(path, overwrite=False) Create a new empty Theme .tres at a res:// path. • set_color(theme_path, class_name, name, value) Set a color slot. value: "#rrggbb"/"#rrggbbaa", named, or {"r","g","b","a"}. • set_constant(theme_path, class_name, name, value) Set an integer constant (separation, margin, padding). • set_font_size(theme_path, class_name, name, value) Set a font_size slot in pixels. • set_stylebox_flat(theme_path, class_name, name, bg_color?, border_color?, border?, corners?, margins?, shadow?, anti_aliasing?) Compose a StyleBoxFlat (panels, button states, line edits). border/corners/margins/shadow each accept "all" + per-side keys. • apply(node_path, theme_path="") Assign the theme to a Control (cascades to descendants). Empty theme_path clears.
All ops accept session_id on the wrapper to target a specific editor.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains cascading behavior when applying a theme, that an empty theme_path clears, and includes overwrite semantics for create. It also clarifies parameter formats for color values, which adds useful context beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured, using a bulleted list of operations that makes it scannable. Every sentence adds value, though the density of options might be slightly overwhelming, but it remains appropriately sized for a tool with six distinct operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool with six operations and many optional parameters, the description is thorough. It covers all operations, parameter shapes, session targeting, and even a note on compatibility, making it complete for an agent to select and invoke correctly. The output schema exists, so return value details are not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by detailing each operation's parameters, including supported value formats like colors, integers, and stylebox options. It also explains optional parameters for set_stylebox_flat and the compatibility alias for flat op parameters, providing rich meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is for Theme authoring in Godot, a stylesheet-like resource for Controls. It lists specific operations (create, set_color, set_constant, set_font_size, set_stylebox_flat, apply) with distinct verbs and resources, making it easy to differentiate from sibling tools like ui_manage or resource_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the canonical call shape (op plus params dict) and notes the session_id wrapper for targeting a specific editor. It implies when to use the tool (theme editing) but does not explicitly mention alternatives or when not to use it, so it falls short of perfect guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tilemap_manageA
TileMap / TileMapLayer authoring (set tiles, fill rects, clear, read cells, generate layouts).
CRITICAL DIRECTIVE: ALWAYS place tiles directly down into the TileMap or TileMapLayer node in the active editor scene using this tool. NEVER generate maps by writing procedural GDScript code in _ready() unless the user explicitly requested runtime procedural generation. Direct tile placement enables visual editing, native Godot physics, and instant editor inspection.
All operations target TileMapLayer or TileMap nodes in the currently edited scene by scene-relative path (e.g. "/LavaLake20x20/Ground"). All write ops are undoable via EditorUndoRedoManager.
source_id is the TileSet source index. atlas_col/atlas_row are the atlas coordinates of the tile within that source. For full-tile animated sources (lava, water, sewage) use atlas_col=0, atlas_row=0.
IMPORTANT — Source-ID remapping in specialized .tres files: When a layer uses a specialized .tres (e.g. volcano_animated.tres), Source-IDs are re-numbered from 0. Example: volcano lava is Source 8 in the main volcano.tres but Source 0 in volcano_animated.tres. Always use the remapped ID when the TileMapLayer references a specialized .tres, not the original ID from the main .tres.
Ops: • tilemap_set_cell(path, source_id, atlas_col, atlas_row, map_x, map_y) Set a single tile at (map_x, map_y). Returns: {map_x, map_y, source_id, atlas_col, atlas_row}
• tilemap_set_cells_rect(path, source_id, atlas_col, atlas_row, rect_x, rect_y, rect_w, rect_h) Fill a rect_w × rect_h region starting at (rect_x, rect_y) with one tile type in a single undo action. Returns: {cells_filled, rect: {x, y, w, h}}
• tilemap_clear(path) Remove all tiles from the layer. Returns: {cleared: true}
• tilemap_get_cells(path) Return all used cell coordinates. Returns: {cells: [{x, y}, ...], count: int}
• tilemap_place_tile(path, source_id, atlas_col, atlas_row, map_x, map_y, rotation_degrees=0, flip_h=false, flip_v=false, alternative_tile=-1) Place a tile with exact rotation (0, 90, 180, 270) and flip flags. Returns: {map_x, map_y, source_id, atlas_col, atlas_row, alternative_tile, rotation_degrees, flip_h, flip_v}
• tilemap_rotate_cell(path, map_x, map_y, degrees=90) Rotate an existing tile cell at (map_x, map_y) clockwise by degrees (90, 180, 270) with D4 symmetry. Returns: {map_x, map_y, degrees, old_alternative, new_alternative}
• tilemap_flip_cell(path, map_x, map_y, flip_h=false, flip_v=false) Flip an existing tile cell at (map_x, map_y) horizontally and/or vertically. Returns: {map_x, map_y, flip_h_applied, flip_v_applied, new_alternative}
• tilemap_erase_cell(path, map_x, map_y) Erase a single tile cell at (map_x, map_y). Returns: {map_x, map_y, erased}
• tilemap_get_cell(path, map_x, map_y) Get detailed information of a tile cell. Returns: {has_tile, map_x, map_y, source_id, atlas_col, atlas_row, alternative_tile, flip_h, flip_v, transpose}
• tilemap_generate_layout(path, genre="platformer", rect_w=32, rect_h=18, rect_x=0, rect_y=0, source_id=0, floor_col=0, floor_row=0, wall_col=1, wall_row=0, accent_col=2, accent_row=0, layer=0) Generate a complete layout placed directly into the editor. Supported genres: 'platformer', 'topdown', 'rpg', 'dungeon', 'arena'. Returns: {genre, cells_placed, rect, source_id, layer, undoable}
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers substantial behavioral context: all ops target the currently edited scene by scene-relative path, all writes are undoable via EditorUndoRedoManager, and the source-ID remapping gotcha in specialized .tres files is explicitly flagged. It stops short of covering failure modes (invalid paths, non-editor contexts), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose, critical directive, shared semantics, per-op reference, then call shape. The content density justifies most of the length for a 20-value dispatcher with zero schema coverage, though the all-caps directive is somewhat repetitive and the op bullet list could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool this complex — 11 sub-operations, per-op return shapes, a remapping gotcha — the description is remarkably complete: paths, undo behavior, remapping, signatures, defaults, and response fields. Remaining gaps are minor but real: some generate_layout parameters (floor/wall/accent columns, layer) are left to inference, alternative_tile semantics are unexplained, and error behavior is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema is a bare dispatcher (op enum + opaque params object), so the description must do all the work — and it does. It explains source_id/atlas_col/atlas_row semantics, documents every op signature with defaults, and clarifies the canonical {op, params} call shape versus the flat alias, fully compensating for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'TileMap / TileMapLayer authoring (set tiles, fill rects, clear, read cells, generate layouts).' The eleven enumerated sub-operations make the scope unmistakable, and the TileMap/TileMapLayer focus cleanly distinguishes it from siblings like tileset_manage and gridmap_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The CRITICAL DIRECTIVE gives explicit when/when-not guidance: ALWAYS place tiles through this tool, NEVER via procedural GDScript in _ready() unless the user explicitly requested runtime generation. It even justifies the choice (visual editing, native physics, editor inspection), so an agent can apply the rule rather than merely memorize it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tileset_manageA
TileSet management — atlas inspection tools.
Ops: • tileset_get_atlas_tiles(tileset_path, source_id) Return all occupied atlas tile positions for one source in a TileSet. Read-only — does not modify any resource or project file.
tileset_path: res:// path to the .tres TileSet resource (required)
source_id: raw TileSet source id of the TileSetAtlasSource to query (required, ≥ 0)
Returns:
{"tiles": [{"col": int, "row": int}, ...], "count": int}
Error codes (passed through from GDScript handler):
MISSING_REQUIRED_PARAM — tileset_path empty or source_id absent
RESOURCE_NOT_FOUND — tileset_path does not exist on disk
WRONG_TYPE — not a TileSet, or source is not a TileSetAtlasSource
VALUE_OUT_OF_RANGE — source_id does not exist in this TileSet• tileset_get_atlas_image(tileset_path, source_id, max_size=0) Return the atlas sprite-sheet texture of a TileSetAtlasSource as a Base64-encoded PNG image. Read-only — reads the texture directly from the resource without any UI interaction.
tileset_path: res:// path to the .tres TileSet resource (required)
source_id: raw TileSet source id of the TileSetAtlasSource to query (required, ≥ 0)
max_size: optional int; if > 0, scale the image so its longest
edge is at most max_size pixels (default 0 = full res)
Returns:
{"image_base64": str, "width": int, "height": int,
"original_width": int, "original_height": int, "format": "png"}
Error codes (passed through from GDScript handler):
MISSING_REQUIRED_PARAM — tileset_path empty or source_id absent
RESOURCE_NOT_FOUND — tileset_path does not exist on disk
WRONG_TYPE — not a TileSet, source not a TileSetAtlasSource,
or source has no texture assigned
VALUE_OUT_OF_RANGE — source_id does not exist in this TileSet• Atlas image workflow: To visually inspect what tiles look like, use tileset_get_atlas_image instead of editor screenshots. It reads the texture directly from the resource — no UI interaction or editor state required.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and exceeds expectations. Each op explicitly states 'Read-only — does not modify any resource or project file' and the image op adds 'reads the texture directly from the resource without any UI interaction.' It documents error codes, return formats, and the max_size scaling behavior. This is exemplary behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but meticulously structured with bullet points, consistent formatting, and a clear top-level summary. Each sentence earns its place—the repeated error code lists are justified for self-contained ops. The front-loaded 'TileSet management — atlas inspection tools' immediately orients the reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-op dispatcher, the description is comprehensive: it covers purpose, parameters, return values, error codes, the canonical call shape, and usage guidance. The output schema isn't shown, but the return structures are documented in text. The tool's complexity is fully addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is generic with 0% parameter description coverage, but the description fully compensates by documenting every operation-specific parameter: names (tileset_path, source_id, max_size), types, required status, and defaults. It also explains return structures and error codes. This provides complete semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'TileSet management — atlas inspection tools' and enumerates two specific operations with precise verbs: 'Return all occupied atlas tile positions' and 'Return the atlas sprite-sheet texture'. This distinguishes it from sibling tools like tilemap_manage and editor_screenshot by focusing on read-only TileSet atlas inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage recommendation: 'To visually inspect what tiles look like, use tileset_get_atlas_image instead of editor screenshots. It reads the texture directly from the resource — no UI interaction or editor state required.' This directly contrasts with a sibling tool. It also repeatedly states read-only behavior, implying when to use. However, it does not explicitly mention when not to use the tool or alternatives for the tiles query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_manageA
UI / Control authoring (HUD, menus, layouts, vector decoration).
Ops:
• set_anchor_preset(path, preset, resize_mode="minsize", margin=0)
Apply a Control layout preset. preset: 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.
resize_mode: minsize | keep_width | keep_height | keep_size.
Target must be a Control. CanvasLayer is the canonical HUD parent
but is not a Control — put a Control child under the CanvasLayer and
apply the preset to that overlay.
• set_text(path, text)
Set text on a Label/Button/LineEdit/TextEdit/RichTextLabel.
• build_layout(tree, parent_path="")
Atomically build a UI subtree from a nested spec
({type, name?, properties?, anchor_preset?, anchor_margin?, theme?,
children?}). Validates everything before mutating.
properties is direct node properties only. Theme constants like
container spacing live under theme_override_constants/<name> —
e.g. {"theme_override_constants/separation": 8} on a
VBoxContainer, not {"separation": 8} (which errors).
theme and anchor_preset require a Control / Window — for a HUD,
nest a Control under a CanvasLayer and apply them to the Control
child, not the layer itself.
• draw_recipe(path, ops, clear_existing=True)
Attach a declarative list of vector _draw() ops to a Control —
radar sweeps, gauges, corner brackets, crosshairs, waveforms.
Op kinds: line | rect | arc | circle | polyline | polygon | string.
Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| params | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries the full burden. It discloses atomicity ('Atomically build'), validation ('Validates everything before mutating'), error conditions ('which errors'), and compatibility aliases for parameters. Could not mention return values, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Clearly structured with a one-line summary followed by bulleted ops with signatures and examples. Every sentence provides necessary detail (e.g., margin=0, theme_override_constants example) with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covering four distinct operations with constraints, pitfalls, and integration notes, the description is thorough for a UI authoring tool. It addresses canonical call shape and session_id handling, and the output schema likely covers return specifics. Minimal gaps for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's params object is generic (0% coverage), so the description fully compensates by documenting each operation's parameters with names, types, defaults, enums, and examples. For instance, set_anchor_preset lists all preset values and resize_mode options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'UI / Control authoring (HUD, menus, layouts, vector decoration).' It enumerates four distinct operations (set_anchor_preset, set_text, build_layout, draw_recipe) with concrete details, distinguishing it clearly from sibling tools like node_manage or scene_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong contextual guidance for specific operations, e.g., the note that CanvasLayer is not a Control and to apply presets to a Control child, and the warning about theme_override_constants vs direct properties. It does not explicitly name alternative tools, but the UI-specific scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v5.0.9- Changed
filesystem_manage1 field changed- changed
Input schema / properties / op / enumPrevious value: -[ - "read_text", - "reimport", - "scan", - "search", - "write_text" -]New value: +[ + "asset_search", + "delete", + "download_asset", + "download_file", + "list", + "move", + "read_text", + "reimport", + "scan", + "search", + "search_assets", + "write_text" +]
- Added
ping - Changed
resource_manage1 field changed- changed
Input schema / properties / op / enumPrevious value: -[ - "assign", - "create", - "curve_set_points", - "environment_create", - "get_info", - "gradient_texture_create", - "load", - "noise_texture_create", - "physics_shape_autofit", - "physics_shape_generate", - "search" -]New value: +[ + "assign", + "create", + "curve_set_points", + "delete", + "environment_create", + "get_info", + "gradient_texture_create", + "load", + "move", + "noise_texture_create", + "physics_shape_autofit", + "physics_shape_generate", + "search" +]
- Changed
script_manage1 field changed- changed
Input schema / properties / op / enumPrevious value: -[ - "detach", - "find_symbols", - "read" -]New value: +[ + "delete", + "detach", + "find_symbols", + "read", + "validate" +]
- Changed
session_manage2 fields changed- removed
Input schema / properties / op / constRemoved value: -"list" - added
Input schema / properties / op / enumAdded value: +[ + "list", + "ping" +]
- Changed
tilemap_manage1 field changed- changed
Input schema / properties / op / enumPrevious value: -[ - "tilemap_clear", - "tilemap_erase_cell", - "tilemap_flip_cell", - "tilemap_get_cell", - "tilemap_get_cells", - "tilemap_place_tile", - "tilemap_rotate_cell", - "tilemap_set_cell", - "tilemap_set_cells_rect" -]New value: +[ + "clear", + "erase_cell", + "flip_cell", + "generate_layout", + "get_cell", + "get_cells", + "place_tile", + "rotate_cell", + "set_cell", + "set_cells_rect", + "tilemap_clear", + "tilemap_erase_cell", + "tilemap_flip_cell", + "tilemap_generate_layout", + "tilemap_get_cell", + "tilemap_get_cells", + "tilemap_place_tile", + "tilemap_rotate_cell", + "tilemap_set_cell", + "tilemap_set_cells_rect" +]
46 tool updates
v4.1.0- First observed
animation_create - First observed
animation_manage - First observed
api_manage - First observed
audio_manage - First observed
autoload_manage - First observed
batch_execute - First observed
camera_manage - First observed
client_manage - First observed
csg_manage - First observed
custom_manage - First observed
editor_manage - First observed
editor_reload_plugin - First observed
editor_screenshot - First observed
editor_state - First observed
filesystem_manage - First observed
game_manage - First observed
gridmap_manage - First observed
input_map_manage - First observed
logs_read - First observed
material_manage - First observed
node_create - First observed
node_find - First observed
node_get_properties - First observed
node_manage - First observed
node_set_property - First observed
particle_manage - First observed
project_manage - First observed
project_run - First observed
resource_manage - First observed
scene_get_hierarchy - First observed
scene_manage - First observed
scene_open - First observed
scene_save - First observed
script_attach - First observed
script_create - First observed
script_manage - First observed
script_patch - First observed
session_activate - First observed
session_manage - First observed
signal_manage - First observed
test_manage - First observed
test_run - First observed
theme_manage - First observed
tilemap_manage - First observed
tileset_manage - First observed
ui_manage
TDQS
Scored across 47 tools
Most tools are separated by clear domain (nodes, scripts, materials, particles, cameras, audio, etc.), but there are genuine boundary overlaps: editor_state duplicates editor_manage(op="state"), script_manage.delete overlaps filesystem_manage.delete, and resource_manage's generic create can collide with dedicated authoring tools like material_manage. The extensive descriptions help, but an agent still has to choose between multiple plausible tools for some operations.
The set mixes naming conventions: many {domain}_manage wrappers (scene_manage, node_manage, animation_manage), some verb_noun tools (node_create, script_patch, scene_open), and some noun_verb tools (scene_save, session_activate, logs_read). All names are snake_case and readable, but there is no single predictable pattern across the surface.
47 top-level tools is well beyond the 25+ threshold for a heavy surface, even though many are multi-op managers that bundle related subcommands. The server is undeniably comprehensive for Godot automation, but the sheer number of entry points makes tool selection and discovery costly for an agent.
The surface is exceptionally broad: editor state, scene/node/script lifecycle, project settings and run control, resources, input maps, autoloads, UI/theme, animation, materials, particles, cameras, audio, tilemaps, gridmaps, CSG, tests, and game-runtime inspection/simulation. Minor gaps remain, such as no animation-track removal, no direct shader source editing, and limited TileSet authoring beyond atlas inspection.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
The OpenRouter MCP server plugs OpenRouter into the AI tools you already use. Once connected, your assistant can pull live OpenRouter data (models, prices, your credits, rankings, and docs) and send quick test messages, all without leaving your editor.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to edit, run, inspect, and fix Godot 4 projects through an MCP server with dynamic tool groups and setup-gated capabilities.191 npm255MIT
- AlicenseCqualityAmaintenanceEnables AI-driven game development by providing MCP tools to interact with the Godot editor, including scene editing, node manipulation, script attachment, and scene execution.288 npmMIT
- FlicenseAqualityDmaintenanceProvides AI assistants with tools to launch the Godot editor, run projects, manipulate scenes, manage scripts, and control node properties through a standardized MCP interface.21-
- AlicenseCqualityAmaintenanceGodot MCP connects AI assistants directly to the Godot editor, exposing 300+ tools for scene construction, node manipulation, runtime inspection, input recording, physics setup, animation authoring, and more.10090 npm24MIT