Skip to main content
Glama

Godot AI

CI codecov Discord

Godot AI connects Claude Code, Claude Desktop, Codex, Hermes Agent, and other MCP clients to a live Godot editor. Its 46 tools and 120+ operations let AI assistants build scenes, edit nodes and scripts, wire signals, and configure UI, materials, animation, particles, cameras, and environments.

Quick Start

Requirements

  • Godot 4.7+ within the 4.x line for Godot AI v4

  • uv, which provides uvx for the Python server

  • An MCP client

Script languages. GDScript is fully supported: scripts written through the tools are parse-validated, hot-reloaded, attached, and outlined. C# is text-only: script_create / script_patch write .cs files and script_manage(op="find_symbols") outlines them, but Godot AI does not build .NET or report C# compiler errors. Build in the editor and inspect its Build panel, or run dotnet build and inspect the terminal output. Attaching a .cs needs a .NET-enabled editor build. Details: C# support.

1. Install or update

New project: choose a published version from GitHub Releases and follow its verification and installation instructions. The add-on belongs at your-project/addons/godot_ai/, with plugin.cfg inside that directory. Use the release's requirements and package—not a source snapshot copied over an existing installation.

Existing installation: click Update in the Godot AI dock when an update is offered. The final signed v3 release supports a one-click migration to v4; Godot restarts once and owned, supported client entries are migrated automatically. Do not extract a new add-on over the old tree. See the v3 → v4 migration guide for compatibility and recovery.

For development from source, use the contributor setup.

2. Enable the plugin

In Godot: Project → Project Settings → Plugins → Godot AI.

The plugin starts the MCP server and shows connection status in the Godot AI dock. If it is missing from the plugin list, check that the file is at addons/godot_ai/plugin.cfg, not addons/plugin.cfg.

3. Connect your MCP client

In the dock, press Configure next to your client, or Configure all for every detected client. If the client does not notice the new configuration, restart that client.

Supported clients include Claude Code, Claude Desktop, Codex, Antigravity, Hermes Agent, DeepSeek Harness, Cursor, VS Code, and Oh My Pi (manual configuration). The dock lists all supported clients and provides a Run this manually fallback where needed.

Use the dock-generated command: it includes the matching version, ports, resolver options, and excluded tool domains. V4 uses godot-ai attach over stdio; a bare http://127.0.0.1:8000/mcp entry cannot authenticate or follow capability rotation. Updates repin owned client entries automatically; reconfigure after changing ports, telemetry preferences, or tool domains.

Client exceptions: Pi Coding Agent needs an MCP extension that reads ~/.pi/agent/mcp.json. Cherry Studio is not supported in v4; remove stale v3 entries in Cherry Studio itself.

CLI-configured clients default to global user scope. Set Editor Settings → Plugins → godot_ai/mcp_client_scope to project (or local, where supported), then press Configure again.

Configure removes existing godot-ai entries from every scope before writing the selected one. This can modify a checked-in .mcp.json, but does not touch other server entries. Remove affects only the selected scope.

Launch Godot from the project directory so the client CLI writes configuration in the right place. Claude Code also requires one-time approval from claude run inside that project.

4. Try it

  • "Show me the current scene hierarchy."

  • "Create a Camera3D named MainCamera under /Main."

  • "Search the project for PackedScene files in ui/."

  • "Run the scene test suite."

  • "Build a voxel block-world game with a player, blocks to place and destroy, and save slots."

Related MCP server: godot-ai-mcp

How it works

MCP client
  → godot-ai attach (stdio)
  → Python server (authenticated HTTP, port 8000)
  → Godot editor plugin (authenticated WebSocket, port 9500)

Both local hops use independent rotating capabilities; neither falls back to unauthenticated access. The editor WebSocket stays loopback-only. An agent in a container or on another machine runs the bridge on the editor machine over SSH; see Agents on another machine or in a container.

These controls do not protect against a compromised same-user process. Windows also does not claim isolation from other local accounts. See the security model and package trust boundaries.

Telemetry and privacy

Usage telemetry records an installation UUID, event, outcome, duration, platform, and version—not code, scene contents, or project/file names. Project-directory slugs are hashed before transmission.

Opt out with GODOT_AI_DISABLE_TELEMETRY=true or DISABLE_TELEMETRY=true. Opt-out creates no telemetry UUID, worker, or files. Privacy details and editor settings.

Documentation and help

On Bazzite and other Fedora Atomic desktops, /home is normally a symbolic link to /var/home (the ostree layout). Godot AI 4.0.2 and earlier refuse every capability-directory path that passes through a link, so on such a system the server exits with Last pending: capability_record (#993). In Godot AI 4.0.3 and later, the server follows a link when it is root-owned and sits in a root-owned directory that other accounts cannot write, which is exactly that layout; no configuration is needed there.

On 4.0.2 or earlier, close Godot and your MCP client, then run this in a terminal as your normal user:

export GODOT_AI_CAPABILITY_DIR="$(
  realpath -m "${XDG_CONFIG_HOME:-$HOME/.config}/godot-ai/capabilities"
)"
install -d -m 700 "$GODOT_AI_CAPABILITY_DIR"
printf 'Using: %s\n' "$GODOT_AI_CAPABILITY_DIR"

Launch both Godot and your MCP client from that terminal so the backend and godot-ai attach inherit the same directory. A desktop launcher does not automatically inherit a terminal's export; for persistent use, set the same canonical path in the launch environment of both applications. Keep the directory private to your user; do not copy capability tokens into client configuration. This workaround is for Linux; GODOT_AI_CAPABILITY_DIR is not supported on Windows.

Godot AI 4.2.2 and later read process identity and listening-socket ownership from /proc, so Steam and Flatpak runtimes do not need to provide ps, lsof, or ss. These checks stay inside the editor's sandbox; host PIDs are not used to authorize stopping a sandbox process. The backend launcher still needs to be installed and executable within that environment.

Steam pressure-vessel can expose /home -> /var/home as a user-owned link. Godot AI 4.2.2 and later accept root- or current-user-owned links beneath protected parents and validates every target ancestor. Other-user ownership, writable parents, and symlink loops remain rejected.

Flatpak and Steam's runtime run in a user namespace that maps only your own user. The host's root-owned /home (/var/home on Fedora Atomic, Bazzite, and other ostree systems) then reads back as an owner the sandbox cannot name, usually UID 65534, and Godot AI 4.2.3 and earlier refuse to start there. Later versions do not test the owner of a directory above your home directory when they run inside such a namespace, which is where OpenSSH's StrictModes stops too. That directory must still be closed to group and other writes. Your home directory and everything below it must still belong to you or root. Nothing is relaxed outside a user namespace, or inside one where UID 65534 is a real account, as in a rootless container that maps a subordinate ID range.

A Flatpak editor that shares your home directory, as the Flathub Godot build does by default, publishes its credentials under the host's ~/.config/godot-ai (or the host's XDG_CONFIG_HOME) instead of Flatpak's per-app config directory, so an AI client outside the sandbox finds them without configuration.

Use the explicit shared-directory guide on 4.2.3 and earlier, for a Flatpak editor that does not share your home directory, and whenever the startup error still names an untrusted ancestor owner. Do not chmod or chown system directories to work around it.

If the selected credential path has group- or world-writable ancestors (for example 775 or 777), startup remains blocked. The plugin lists the existing directories with problematic permissions before launching the server. Review their ownership and intended sharing; if you own them and shared write access is not intentional, chmod go-w /exact/directory removes group/other write access from that directory. Do not use recursive chmod. Godot AI does not change your home or config directory permissions itself.

Reference and support

Star History

License: MIT

Available Tools

47 tools
animation_createAnimation 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAnimation clip name (e.g. "idle", "pulse").
lengthYesDuration in seconds.
loop_modeNo"none" (default) | "linear" | "pingpong".none
overwriteNoReplace an existing animation with the same name.
session_idNoOptional Godot session to target. Empty = active session.
player_pathYesScene path to the AnimationPlayer node.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It reveals important side effects and constraints: auto-creation of the AnimationPlayer if player_path does not resolve, the parent must exist, and track paths are relative to root_node rather than scene root. It does not describe every edge case, but covers the most consequential behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. Each sentence adds useful operational context: next steps, path semantics, and auto-creation behavior. There is no filler or repetition of schema-visible parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a creation tool with an output schema. It covers what is created, how to proceed with tracks, important path semantics, and the auto-creation fallback. The only omitted details, such as loop_mode behavior and overwrite handling, are already documented in the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaningful context beyond the schema for player_path by explaining resolution failure, auto-creation, and the parent-exists requirement, which helps agents use the parameter more correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Create a new Animation clip inside an AnimationPlayer's default library.' It clearly distinguishes this tool from animation_manage by stating that tracks are added afterward via animation_manage ops, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear sequential context: use this tool to create the clip, then use animation_manage ops to add property/method/simple tracks. It also points to animation_manage for forgiving target_path behavior, but it does not explicitly state when not to use this tool beyond that implied workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

animation_manageAnimation 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses important behaviors: delete is undoable, play/stop are not saved with the scene, presets accept two path forms and convert scene-absolute paths via get_path_to, and the canonical call shape with op/session_id is explained. It also notes that parameters can be flat as a compatibility alias. This is substantial behavioral detail, though it does not cover every side effect (e.g., whether operations require the editor to be running).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but efficiently organized: a one-line purpose, a bulleted list of ops with parameter signatures and brief explanations, and a final paragraph on path handling and call shape. The front-loaded purpose and the clear op list make it scannable. It could be trimmed slightly, but every sentence earns its place given the 15 operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is comprehensive for a complex tool with 15 operations. It covers parameter details, behaviors, path conventions, and call format. An output schema exists (though not shown), so return values are presumably handled there. Nothing critical for an agent to correctly invoke the tool appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines op, params (a freeform object), and session_id, with 0% coverage of actual parameters. The description compensates fully by documenting every operation's parameters, defaults, types, and semantics (e.g., keyframes format, interpolation values, tween specs). This is a textbook example of the description carrying the parameter documentation load when the schema is opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'AnimationPlayer authoring (player, tracks, autoplay, presets, playback)' and enumerates a comprehensive list of operations. Each op is a clear verb+resource (e.g., 'player_create', 'add_property_track'), and the high-level scope distinguishes it from sibling tools like animation_create, which is more basic creation. It leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly say when to use this tool versus alternatives like animation_create or other manage tools. It does provide context on path handling ('matching every other scene tool') and mentions that play/stop are editor previews not saved, which gives some usage nuance. However, it lacks explicit when-not-to-use guidance or cross-references to specific siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

api_manageApi 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it states the call returns class-reference sections without creating a scene instance, notes that 'all' excludes the heavier inheritors section, and explains default section behavior and one-section-at-a-time pagination. It could still be more explicit about the operation being read-only and side-effect free, but these traits are strongly implied and the disclosure is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average and dense, but it is organized with a purpose statement, resource form, op signature, and transport notes. A little tightening is possible (for example the canonical call shape could be moved earlier), yet every substantive detail serves the zero-coverage schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the sparse schema and no annotations, the description provides the needed operational context: op name, params object contents, defaults, pagination, and call-shape conventions. An output schema exists, so return values need not be described; remaining gaps like explicit include_inherited/include_inheritors semantics or required session_id are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only source of parameter meaning, and it compensates thoroughly. It documents the get_class signature with defaults, explains the allowed sections values, clarifies the 'all' special value, and gives pagination guidance; it also clarifies op, params, and session_id placement and the compatibility alias.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: it inspects Godot API documentation-shaped metadata from the editor's ClassDB, and lists concrete question types (properties, method signatures, signals, enums, constants, defaults, hint strings). It also names the single supported op, get_class, which makes the tool distinguishable from the surrounding node/project/scene management siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is some internal guidance: the resource form is preferred for active-session reads, and the flat-parameter form is described as a compatibility alias. However, the description never says when to choose api_manage over sibling tools such as node_get_properties, nor does it state explicitly when not to use this tool; usage context is implied rather than contrasted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audio_manageAudio 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses atomic playback updates, the duration_seconds return value, non-undoable preview play/stop, supported resource extensions, and project-wide scanning. However, it does not explain the persistence or undo behavior of scene-mutating ops like player_create or player_set_stream, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact, well-organized reference: a domain-scoping first line, a bulleted op list with signatures, and a canonical call-shape note. Every line carries information, and the monospace formatting makes it easy for an agent to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 and an open-ended params object, the description covers operation selection, parameters, defaults, constraints, resource types, and relevant return behavior. The canonical call shape and compatibility alias note complete the invocation picture, while the output schema covers return shapes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no parameter descriptions (0% coverage), so the description must compensate, and it largely does with op signatures, defaults, allowed type values, and required-field rules. It lacks some finer semantics such as volume_db units, bus constraints, or path validity rules, but it meaningfully documents the intended sub-parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line scopes the tool to sound effects, music, and ambience, and the op list names concrete resources (AudioStreamPlayer/2D/3D, AudioStream resources). Each op uses a specific verb and resource, making the tool's purpose clear and distinct from broad siblings 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each op describes a specific usage scenario: create a player, assign a stream, update playback properties, play/stop preview, or scan resources. The description also gives constraints like 'at least one of volume_db/pitch_scale/autoplay/bus required' and 'Not undoable' for preview playback. It does not explicitly exclude generic 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.

autoload_manageAutoload 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that autoloads are globally accessible by name when singleton=True, that state persists to project.godot, that remove only unregisters without deleting the file, and that flat parameters are a compatibility alias. This is strong behavioral disclosure, though it omits details like error cases or validation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: a definition of the resource, a concise op list with parameter semantics, side-effect notes, and the canonical invocation shape. It is front-loaded and well structured without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with this complexity, the description is complete. It explains the domain, all operations, parameters, persistence, and call shape. Since an output schema exists, omitting return-value details is acceptable, and the behavioral notes cover the key side effects an agent needs to know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 explain parameters. It does: list() has no params, add(name, path, singleton=True) documents each argument and the default, and remove(name) takes one param. It also clarifies the canonical payload shape and the compatibility alias, going well beyond the generic schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: manage Godot autoloads (scripts or scenes loaded at project start). It names concrete operations (list/add/remove) and defines autoloads precisely, making it easily distinguishable from sibling tools like script_manage or project_manage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this tool is for autoload management, and the operation list implies when it should be used. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, leaving some routing decision to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_executeBatch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
undoNoRoll back succeeded sub-commands on failure. Default True.
commandsYesList of `{"command": str, "params": dict}` items.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral disclosure and does so thoroughly: sequential execution, stop-on-first-error, undo rollback semantics with atomic-on-failure, path conventions relative to scene root, and the prohibition on nested batch_execute. This is exactly the behavioral information an agent needs beyond 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and each paragraph adds necessary detail without padding. It loses one point because it references 'the example below' but no example is actually present, which is a structural inconsistency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 presence of an output schema, the description covers command format, failure semantics, rollback, and path conventions almost completely. The missing literal example is the only notable gap, and the explicit statement of an absent example is a small but real completeness defect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real value by defining the exact shape of each commands item, mandating plugin command names rather than MCP tool names, and clarifying scene-path semantics, which are not apparent from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

First sentence gives a precise verb and resource: execute a list of editor sub-commands in order, stopping on first error. It also clarifies the distinction from MCP tool names and frames the tool as a multi-step composition, which separates it from the many single-operation sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this for composing multi-step edits into one call, such as create node + set property + attach script. It does not explicitly name single-step alternatives or state when not to use it, but the composition guidance is clear enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

camera_manageCamera 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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 a good job: it explains that make_current=True unmarks previously current cameras of the same class in one undo, that configure is class-aware and coerces Vector2 dicts, that set_limits_2d only changes passed edges, and that get with an empty path resolves to the active camera. It also documents the canonical call shape and compatibility alias. It doesn't mention side effects like whether operations are undoable in general, but the specific undo behavior for create is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: a one-line summary, a bulleted list of ops with signatures and explanations, and a final note on call shape. The front-loaded summary and consistent op-by-op format make it scannable. It earns its length because it documents eight operations with distinct parameter sets; a shorter version would lose necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 ops, many parameters, no annotations, and a generic schema), the description is quite complete. It covers all ops, parameter semantics, defaults, and the canonical call shape. It also has an output schema, so return values don't need to be described. Minor gaps: it doesn't specify error behavior or what happens when a camera_path is invalid, and the 'properties' parameter for configure is open-ended. But overall, an agent has enough to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 for the schema's lack of parameter documentation. It does so extensively: each op's parameters are listed with types, defaults, and semantics (e.g., drag_margins: {left,top,right,bottom} fractions [0,1], smoothing_speed=5.0, zero_transform=True). The description adds meaning far beyond the bare schema, which only defines op, params, and session_id. It doesn't document every possible property key for configure, but it gives representative examples and enum names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear statement of the tool's domain ('Camera2D / Camera3D authoring') and enumerates the specific operations (zoom, FOV, projection, smoothing, follow). Each op is listed with a verb and resource, making it easy for an agent to distinguish this 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance for when to use the tool (camera authoring) and even tells the agent when NOT to use it: transforms (position, rotation, scale, transform, global_*) should be set via node_set_property, not here. It also explains the canonical call shape and compatibility alias. It doesn't explicitly name alternative tools for every op, but the exclusion for transforms is a strong usage signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_manageClient 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and explicitly acknowledges that it 'Writes / removes client config files.' It also discloses the status values returned and the compatibility alias behavior for flat parameters. It does not mention permissions or reversibility, but the core side effects are clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a one-sentence purpose, a bulleted operation list, and a compact call-shape note. Every section adds necessary information, and the most important mutation warning appears in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema and no annotations, the description is sufficiently complete for calling the tool correctly: it describes each operation, parameter semantics, call shape, and compatibility behavior. No critical aspect needed to invoke the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates well: it explains op values via the ops list, defines 'client' as an id from status(), and clarifies the canonical call shape. The session_id parameter is only noted as top-level, not semantically explained, but its purpose is fairly self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Configure AI clients to use this Godot AI MCP server.' It then enumerates three concrete operations (status, configure, remove), making it distinct from sibling manage tools and unambiguous about scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context by defining each op and explicitly directing users to call status() first to obtain valid client ids for configure/remove. It does not explicitly compare against alternative tools, but the workflow within the tool is well specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

csg_manageCsg 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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 that all write ops are undoable via EditorUndoRedoManager, that sibling CSG shapes combine automatically, and that size/position/material are set separately. It also outlines return values for each op. It does not mention failure modes or prerequisites like needing an open scene (though 'currently edited scene' implies it). Strong transparency for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a brief intro, a pointer to related tools, and a bulleted list of ops with parameter details and returns. Every sentence provides value: undoability, grouping behavior, cross-tool hints, and op signatures. It is long but well-organized and front-loaded with the core purpose. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two sub-operations, multiple parameters, and an existing output schema, the description covers all necessary context: what it does, how to invoke it (including call shape), parameter enums and defaults, return values, and cross-references to other tools for node properties. It even explains the automatic combination behavior. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description fully compensates. It documents every parameter for both ops: parent_path (empty = root), name, shape (with enum values), operation (with enum values), and path. It also explains the canonical call shape and flat-parameter alias. This goes far beyond the minimal schema, giving the agent all needed parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('authoring') and resource (CSG shapes), and enumerates the two concrete operations (csg_create, csg_set_operation). It clearly distinguishes from sibling tools like node_create and scene_manage by focusing on boolean-shape creation and operation setting. The purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use this tool (for CSG authoring) and even routes follow-up property setting to node_set_property / material_manage. It also clarifies the automatic combination behavior of sibling CSG shapes and suggests CSGCombiner3D for explicit grouping. However, it does not explicitly state when *not* to use this tool (e.g., 'for regular nodes use node_create'), leaving some inference to the agent. Lacks explicit exclusions, hence 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

custom_manageCustom 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It explains that params are forwarded unvalidated, that op and session_id remain top-level, and mentions the canonical call shape. It doesn't detail error handling or side effects, but the key behavior (unvalidated forwarding) is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with the core purpose, then usage details, then canonical shape. It uses bullet-like phrasing and packs information efficiently, with minimal redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (op-based, with dynamic params), the description covers essentials: both operations, parameter requirements, canonical call shape, batch integration, and preference for first-class alternatives. The output schema is present, so return format isn't needed. Overall, this is a comprehensive definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% coverage, but the description partially compensates by explaining the 'params' parameter and that op has enum values. However, it does not explain the session_id parameter beyond mentioning it is top-level, and the flexible params object needs more detail about how it is used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists or invokes custom tools from third-party addons. It distinguishes itself from sibling tools by focusing on custom addon tools, which is unique among the listed siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use op='list' vs op='invoke', how to address custom tools in batch_execute, and notes that some custom tools are registered first-class and should be preferred. This is excellent usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editor_manageEditor 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and handles it well: quit is 'graceful' and deferred to the next frame, logs_clear is opt-in for the user-facing Debugger dock, selection_set replaces the selection, and game_eval enumerates specific error codes and their causes. This gives an agent a strong mental model 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: a one-line summary, a resource-forms note, and a bulleted op list. Each bullet earns its place, especially the game_eval error taxonomy, which is dense but necessary. The canonical call shape is placed at the end where it ties the format together.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the multi-operation nature, this description is complete: it covers every op in the schema, defines parameter semantics, explains error behavior, and specifies invocation conventions. Since an output schema exists, the absence of return-value prose is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must supply all parameter meaning, and it does. Each operation's parameters are explained with types and defaults—selection_set(paths), monitors_get(monitors=None), logs_clear(clear_debugger_errors=False), game_eval(code)—and the call-shape paragraph clarifies where op, params, and session_id belong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete summary of what the tool covers—editor selection, performance monitors, quit, log clearing, and game eval—and then enumerates each operation with a verb and resource. This makes the tool's scope immediately recognizable and distinguishable from more specialized siblings like editor_state, logs_read, and game_manage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear guidance on invoking operations, including the canonical call shape and the flat-parameter alias. It also advises preferring resource forms for active-session reads, which helps route usage. However, it does not explicitly state when to choose this tool over closely related siblings such as editor_state or logs_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editor_reload_pluginEditor 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 call session_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, raises PLUGIN_DISCONNECTED with data.reason == "reload_timeout" and recovery diagnostics.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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 that the reload kills the server, that the WebSocket transport drops, that the response shape differs by launch mode, that there is a 90-second timeout, and that PLUGIN_DISCONNECTED is raised with recovery diagnostics. This is exemplary behavioral disclosure for a destructive/disruptive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear mode separation and bullet-like formatting. It is longer than average, but every sentence earns its place by explaining critical behavioral differences and recovery steps. Slightly verbose in the timeout explanation, but justified given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 behavior, both response shapes, the failure mode, and the recovery procedure. The output schema exists, so return values are already structured. For a tool with this level of operational complexity, nothing an agent needs to call it correctly and handle the aftermath is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single optional session_id parameter. The description does not add extra meaning about the parameter beyond what the schema provides, but it doesn't need to. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Reload the Godot editor plugin.' It then immediately distinguishes the two operational modes (plugin-managed vs externally launched), which clearly separates this tool from siblings like editor_manage or session_manage. The purpose is unambiguous and the tool's unique behavior is front and center.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when each behavior applies: plugin-managed default install vs externally launched server. It also tells the agent what to do after the reload (reconnect and call session_manage(op='list') to find the new session_id). This is strong usage guidance that routes the agent through the correct post-condition workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editor_screenshotEditor 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: true and a note in the metadata — focus the game window and retry for a current frame. GAME_HELPER_TIMEOUT means 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fovNoCamera FOV in degrees. Tight 20-30 = zoom; 60-75 = context.
sourceNo"viewport" | "viewport_2d" | "cinematic" | "game". Default "viewport".viewport
azimuthNoCamera azimuth in degrees (0=front, 90=right).
coverageNoWith view_target, capture two reference shots + AABB.
elevationNoCamera elevation in degrees (0=level, 90=overhead).
session_idNoOptional Godot session to target. Empty = active session.
user_promptNoOptional 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_targetNoNode3D scene path(s) to frame, comma-separated.
include_imageNoReturn image data. Default True.
max_resolutionNoLongest-edge resolution. Default 640. 0 = full res.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden and delivers: error shapes (EDITOR_NOT_READY with data, NODE_NOT_FOUND, GAME_HELPER_TIMEOUT), fallback behavior (cinematic falls back to first Camera3D), stale-frame handling for backgrounded games, and compatibility constraints. It also discloses that AABB metadata is always returned and what include_image does. This is thorough and non-contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured, starting with a one-line summary, then a 'Picking a source' section with clear bullets for each source, followed by parameter clarifications. Every sentence provides unique value, but the length might be slightly intimidating; however, given the tool's complexity, it is justified and efficiently formatted with bullet lists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 10 parameters, no output schema, and no annotations. The description covers all necessary context: source behavior, error codes with data, fallbacks, compatibility, return format (MCP ImageContent, metadata), and special notes for backgrounded games. Parameters like user_prompt and session_id are adequately explained. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all 10 parameters with 100% coverage, so the baseline is 3. The description adds valuable semantic context: fov ranges ('Tight 20-30 = zoom; 60-75 = context'), view_target reframing, coverage capturing perspective + orthographic references, and source-specific constraints. This enhances understanding beyond the schema without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the exact action and resources ('Capture a screenshot of the Godot editor viewport or running game'). It immediately distinguishes between editor and game captures, and the four named sources make the scope crystal clear. No sibling tool does screenshots, so there is no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit selection criteria for each source: 'use for 2D scenes' (viewport_2d), 'switch to cinematic if the scene has a Camera3D', and game source only when running. It also states explicit exclusions, e.g., viewport_2d is not compatible with view_target/coverage/elevation/azimuth/fov. Error states include actionable next steps, guiding the agent on retry or alternate sources.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editor_stateEditor 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").

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses a non-obvious side effect ('refreshes the server's session readiness cache'), explains the authoritative game_status.status versus raw is_playing, and details the 'break' state and required recovery action. This goes beyond a simple read and prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in one sentence but then includes a long block of alternate invocation forms, code-mode adapter call signatures, and issue reference. Most content is relevant, but the description is denser than necessary and some details (e.g., Issue #262) could be omitted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-read tool with an output schema and one optional parameter, the description covers purpose, alternatives, side effects, and field semantics. Existing output schema covers structured returns, so no critical invocation information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, session_id, is fully documented in the schema with default and semantics (optional, empty=active session); schema coverage is 100%, so the description does not need to repeat it. It adds no additional parameter-specific detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

First sentence states a specific verb and resource: 'Get current Godot editor state: version, readiness, open scene, play state.' It also distinguishes itself from dedicated current-scene access by directing to readResource('godot://scene/current') and acknowledges the editor_manage(op='state') alias, so an agent can identify what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing: prefer godot://editor/state for active-session reads, mentions editor_manage(op='state') for clients wanting a rolled-up tool, and directs 'dedicated current-scene data' to readResource. It also recommends using editor_state as a recovery step after EDITOR_NOT_READY, providing a concrete when-to-use scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filesystem_manageFilesystem 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. • 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. • move(path, new_path), rename(path, new_name) Move a resource group with .uid/.import sidecars and preserve proven UID references. Destination parent must exist. Literal-path owners, project settings, open scene tabs, links and incomplete discovery are refused before mutation; dependency rewriting is unsupported. • remove(path, force=False, permanent=False) Default: OS trash. Known references block unless force=True; force never overrides incomplete discovery or protected paths. Permanent deletion supports files only. Directory deletion uses trash.

move/rename/remove contract: Mutations require a direct call, not batch_execute. Directory results set scan_required: call scan afterward. All mutations are non-undoable. Errors report outcome unchanged/rolled_back/partial and actual affected paths. Never blindly retry a partial 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden and meets it thoroughly: write_text performs a single-file update rather than a full scan, reimport reports skipped_non_imported without evidence of parsing, scan is single-flight, move/rename preserve UID sidecars but refuse certain references, all mutations are non-undoable, and partial errors must not be blindly retried. This goes far beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but justified by eight distinct operations, each with non-obvious semantics. It is well structured with op bullets, a separate mutation contract section, and a canonical call shape note; no filler or redundant restatement of the schema is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers operation semantics, return fields for read_text/reimport/scan, error outcomes, mutation side effects, when scans are required, and the calling convention. Since an output schema exists, detailed return shapes need not be repeated; the description provides the contextual behavior an agent needs to call and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% because params is an opaque additionalProperties object, so the description must document every op's parameters and does so explicitly: read_text(path), write_text(path, content=''), reimport(paths), search(name, type, path, offset, limit), move(path, new_path), rename(path, new_name), and remove(path, force, permanent). The canonical call shape is also stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource scope ('Project filesystem access via the Godot editor's EditorFileSystem') and enumerates eight concrete operations with verbs like read_text, write_text, reimport, scan, search, move, rename, and remove. This clearly distinguishes the tool from script/resource/scene-focused siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: reimport is 'intended for imported assets', scan is recommended after adding class_name scripts, and script_patch/script_create are named as the alternative for receiving fresh script diagnostics. It also specifies operational constraints like 'direct call, not batch_execute' and 'call scan afterward' for directory mutations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

game_manageGame 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and meets it thoroughly. It discloses debugger-bridge behavior, suspend/resume idempotence, next_frame verification and focus handoff, the direct-session fallback's visual limitation, frame-based timing, focus-independence, and rejection of malformed mouse positions. This is rich behavioral context beyond a simple mutation/read hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but necessarily so for a multi-op tool, and it is well-structured: a one-line purpose, prerequisite context, grouped ops with consistent formatting, and a closing canonical-call note. The summary is front-loaded, and each op entry earns its place by adding behavior or parameter detail not available in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, 0% schema coverage, and no annotations, the description is unusually complete: prerequisites, all 13 ops, parameter formats, timing semantics, failure/rejection behavior, and execution restrictions are covered. An output schema exists, so return-value details are not required here, and the description still notes response behavior for key operations like next_frame and input_sequence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 extensively. It defines each op's parameters, defaults, accepted value formats (e.g., position as {x, y} or [x, y], event enums like 'motion' | 'button'), and the canonical call shape with op/session_id top-level. The step schema for input_sequence and the 'flat parameters alias' are also explained, making the generic params object actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Runtime game inspection and input simulation' targeting 'the running game process through Godot's EngineDebugger bridge.' It then enumerates concrete ops with distinct verbs and payloads, so an agent can tell this tool from editor-side tools. It also names the prerequisite project_run and editor_state, reinforcing its runtime-focused identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit preconditions: start the project with project_run and poll editor_state until game_capture_ready=true. It also gives when-not guidance ('Cannot run inside batch_execute') and explicitly prefers input_sequence over separate input_action calls whenever timing matters, including the rationale about network latency. It provides alternatives and context clearly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gridmap_manageGridmap 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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 that write operations are undoable via EditorUndoRedoManager, that item=-1 erases a cell, and that fill performs a single undo action. It also explains the canonical call shape and compatibility alias. These behavioral traits go beyond the schema and are useful for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise overview followed by a bulleted list of operations, each with parameters and return values. It front-loads general context (scene-relative paths, undoability, item discovery) before detailing each op. Every sentence adds value, and the structure makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with multiple operations and many parameters. The description covers all necessary information: how to call, what each op does, parameter meanings, return values, the canonical call shape, and the compatibility alias. It also explains how to discover valid item ids. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 explain parameters. It does so comprehensively for each operation, defining path, item, coordinates, orientation (0..24), and rect dimensions. It also explains return values for each op, covering all parameters and their semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'GridMap authoring (set items, fill 3D regions, clear, read cells + library items).' It lists specific sub-operations and differentiates from siblings like tilemap_manage by focusing on GridMap nodes and their operations. The verb+resource is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: for GridMap nodes in the currently edited scene, with guidance to use gridmap_list_library_items to discover valid item ids before placing cells. It also clarifies that all operations target nodes by scene-relative path. However, it does not explicitly state when NOT to use this tool versus alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

input_map_manageInput 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: persistence side effects, builtin-vs-user actions, deadzone validation and rejection error, removal of unloaded persisted actions, and event-type-specific value mappings are all disclosed. This gives an agent a reliable model of what each operation changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but earned: each operation has a compact bullet with parameter details and constraints, and the canonical call shape is stated at the end. The structure is scannable and front-loaded with the overall domain before diving into operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-operation tool with high complexity and a schema that covers none of the operation-specific parameters, the description is remarkably complete. It covers all ops, their parameters, constraints, side effects, and the call envelope; an output schema exists, so not detailing return values is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a top-level op enum and an opaque params object, so parameter documentation is entirely the description's job. It delivers per-operation parameter lists, types, defaults, allowed ranges, and concrete examples (e.g., keycode name strings, mouse button indices, JoyButton/JoyAxis values), far exceeding what the schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource ('InputMap actions and bindings (keyboard, mouse, gamepad)') and its persistence target ('project.godot'), and enumerates six concrete operations. It does not explicitly contrast itself with sibling tools like resource_manage, but the InputMap domain is distinct enough that an agent can tell what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context: it recommends the godot://input_map resource form for active-session reads, instructs that bind_event requires the action to already exist, and highlights idempotent alternatives (ensure_action, ensure_binding). It stops short of explicitly saying when not to use this tool or naming a specific preferred sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logs_readLogs 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_helper autoload. Buffer 2000, with lines retained across runs and tagged by run_id. Default reads return current-run lines only; pass since_run_id from 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 adds editor_errors_count and editor_errors_hint pointing 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax lines to return. Default 50.
offsetNoLines to skip. Default 0.
sourceNo"plugin" | "game" | "editor" | "all". Default "plugin".plugin
session_idNoOptional Godot session to target. Empty = active session.
since_cursorNoEditor-log cursor from a previous source="editor" response.
since_run_idNoGame-log run id from a previous response; reads that retained run instead of the current run.
include_detailsNoInclude rich error metadata for game/editor entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations to lean on, the description fully carries behavioral disclosure: buffer sizes, retention across runs, run_id/cursor semantics, truncation behavior, boot-time error caveats, filtering to .gd/.cs, and the meaning of include_details. This is exceptionally transparent about edge cases and response fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the complexity of four sources plus cursor/run tracking justifies most of the length. It is logically organized by source and then by tail pattern, though some repetition of run_id/current_run_id/stale_run_id across sections could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity, the description covers every parameter, source behavior, retention rule, edge case, and response field relevant to calling it correctly. An output schema exists, so not over-explaining return types is appropriate; the narrative adds the operational context an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Though the schema already covers all parameters, the description adds substantial meaning: buffer sizes per source, how since_run_id and since_cursor interact with offset, when truncated appears, and what include_details actually enriches. Only session_id is not elaborated beyond the schema, but the overall enrichment is extensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Read recent log lines from the Godot editor, plugin, or running game') and further enumerates four distinct sources. No sibling tool covers log reading, so there is no risk of confusion with the listed alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to prefer each source, including the editor-source trigger ('when the editor Output or Debugger Errors panel shows red/yellow rows but other sources turned up nothing'). It also explains the default source and gives concrete tail/polling patterns for game and editor logs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material_manageMaterial ManageA

Material authoring (StandardMaterial3D, ORMMaterial3D, ShaderMaterial, CanvasItemMaterial), raw shader source (.gdshader / .gdshaderinc), and VisualShader graph authoring/editing. Albedo, metallic/roughness, emission, transparency, shader uniforms, render modes.

Resource forms: godot://materials (all materials), godot://shader/{path} (raw source + metadata), godot://visual_shader/{path} (VisualShader graph).

Ops: • visual_shader_create_graph(resource_path, stages, shader_type="spatial", overwrite=False, varyings=None) Create/save a VisualShader .tres only (not undoable). Each stages entry is {stage, nodes: [{id, type, position?, params?}], connections: [{from_node, from_port, to_node, to_port}]}. Explicit stages must match spatial/canvas_item (vertex/fragment/light), particles (start/process/collide/start_custom/process_custom), sky (sky), or fog (fog). IDs are stage-local integers >=2 or nonempty strings; output is "output"/0. Limits: 256 nodes, 1024 connections total. Existing destination directory required. Returns id_map by stage as [{id, node_id}] in request order. varyings: [{name, mode: "vertex_to_frag_light"|"frag_to_light", type: "float"|"int"|"uint"|"vector2"|"vector3"|"vector4"|"boolean"|"transform"}] (spatial/canvas_item only). The generated source is parsed through the engine's shader compiler before saving; a graph it rejects (for example a parameter named after a shader keyword) is not written. Renderers that cannot compile a shader type fall back to validating the generated declarations, so the advertised modes stay accepted. Use create(type="shader", shader_path=<saved .tres>) then assign separately. • visual_shader_get(path) Inspect a VisualShader .tres: shader_type, per-stage nodes (id, type, position, params), connections, and varyings. Use before visual_shader_edit. • visual_shader_node_catalog(filter="", offset=0, limit=100) List instantiable VisualShaderNode classes with the properties this tool accepts, plus legacy aliases. Discover valid node types and params before authoring a graph. • visual_shader_edit(resource_path, operations) Apply a validated operation list to an existing VisualShader .tres: add_node / remove_node / replace_node / set_node_params / set_node_position / connect / disconnect / add_varying / remove_varying. Operations run in order; string node ids added by the call are returned in added and can be referenced by later operations. The whole result is validated in memory, then saved atomically; not undoable. • 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 a .gdshader or VisualShader .tres. • 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. • shader_create(resource_path, code, overwrite=False, shader_type="spatial") Create/replace a raw .gdshader (or .gdshaderinc include) from source text. The code is parsed through Godot's shader compiler for the declared shader type before anything is written: parse errors reject the write with diagnostics and leave any existing file untouched. This is parse/type validation, not a guarantee that every renderer variant compiles. Returns shader_type, uniforms (type, hint, hint_string, default), and cleanup hints. Not undoable. • shader_get(path) Read a .gdshader/.gdshaderinc: full source, shader_type, uniforms, render modes, and #include list. • shader_validate(code, kind="shader", shader_type="spatial", base_dir="") Parse/type-check shader source without writing a file. Returns valid plus errors/warnings. Pass base_dir (a res:// directory) to validate relative #include resolution against where the shader will live. Renderer-specific variant compilation is out of scope. • shader_patch(path, old_text, new_text, replace_all=False) Anchor-based edit of a shader file: exact substring match, result revalidated before the file is replaced. Not 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it is exceptionally transparent. It repeatedly discloses side effects and constraints: 'not undoable' for several ops, 'generated source is parsed through the engine's shader compiler before saving', 'parse errors reject the write with diagnostics and leave any existing file untouched', 'Result is validated in memory, then saved atomically', 'Existing destination directory required', and precise limits ('256 nodes, 1024 connections total'). These behavioral details go far beyond a basic mutation warning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: a scope overview, resource forms, then a bulleted list of ops with code-style signatures and explanatory notes. It is appropriately detailed for the tool's complexity (16 ops), and the information is front-loaded with the core purpose. Some repetition exists (e.g., 'not undoable' appears multiple times), but the overall organization makes it navigable and information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 16 operations, no annotations, and 0% schema coverage, the description covers essentially everything an agent needs: each op's behavior, return values (e.g., shader_get returns 'full source, shader_type, uniforms, render modes, #include list'; shader_validate returns 'valid plus errors/warnings'), prerequisites, failure modes, and the canonical call shape. It also notes the fallback validation behavior across renderers, which is a subtle edge case. There is no significant missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate entirely. It does so comprehensively: each op is shown with full signatures, parameter meanings, defaults, constraints, and even structural details (e.g., stages entries, varyings fields, slot values, type enums). For example, visual_shader_create_graph explains the structure of stages, node IDs, port names, and limits. The description fully compensates for the schema's lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's scope with specific resource types: 'Material authoring (StandardMaterial3D, ORMMaterial3D, ShaderMaterial, CanvasItemMaterial), raw shader source (.gdshader / .gdshaderinc), and VisualShader graph authoring/editing.' It names the exact resources and verbs (create, edit, inspect, assign, etc.), and the title is generic but the description fully disambiguates it from sibling tools like resource_manage or script_manage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear intra-tool sequencing guidance (e.g., 'Use before visual_shader_edit', 'Use create(type="shader", ...) then assign separately'), but it never compares this tool to alternative sibling tools. There is no explicit statement about when to use material_manage versus resource_manage or script_manage, so the usage is implied by scope rather than explicitly differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_createNode 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name; Godot auto-names if empty.
typeNoGodot node class (e.g. "Node3D", "MeshInstance3D").
scene_fileNoOptional editor-scene guard (EDITED_SCENE_MISMATCH).
scene_pathNoOptional res:// path of a PackedScene to instantiate.
session_idNoOptional Godot session to target. Empty = active session.
parent_pathNoParent path relative to the edited scene root (e.g. "/Main"), NOT runtime "/root/...". Empty = scene root.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it discloses the core mutation (node is created and added to a parent), the PackedScene path, and the precedence rule that scene_path overrides type. It does not go into side effects such as scene dirty state, undo behavior, or required scene-open prerequisites, but it is substantially more transparent than a bare mutation statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the key action, and organized into a summary plus a detail sentence. The only minor wart is the redundancy between 'Create (spawn)' and 'Creates a node' in the following sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with complete schema descriptions and an output schema, the combined definition covers all parameters, both creation modes, parent-relative placement, and the scene guard parameter. It does not explicitly state prerequisites such as having an edited scene open, but the schema and output schema largely fill the remaining context, so it is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All six parameters already have schema descriptions (100% coverage), so the baseline is 3. The description adds value beyond the schema by stating that type and scene_path are mutually exclusive and that scene_path wins when both are present; it also clarifies that the node is added to the parent. It doesn't add constraints on node class names or path formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Create (spawn) a new node in the scene tree.' It then gives the two creation modes (type-based node vs PackedScene instantiation), making it clearly distinct from sibling inspection/manipulation tools like node_find and node_manage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence clearly signals the intended use case: creating/spawning nodes in the scene tree. It also explains the two mutually exclusive construction modes (type vs scene_path), which guides call configuration. It does not explicitly compare against sibling tools or list when not to use it, 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_findNode FindA

Find nodes in the scene tree by name, type, or group.

At least one filter must be provided. Filters AND together. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on node name (case-insensitive).
typeNoExact Godot class name (e.g. "MeshInstance3D").
groupNoGroup name the node must belong to.
limitNoMax number of results. Default 100.
offsetNoNumber of results to skip. Default 0.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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 mention that at least one filter is required, filters AND together, and results are paginated, which are key behavioral traits. However, it does not explicitly state that this is a read-only operation or disclose any side effects, though 'find' implies read-only. The description covers the most important constraints but could add explicit safety context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence states the purpose and the second adds essential constraints, front-loading the most important information. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the simplicity of the tool, the description covers the essential aspects: purpose, filter combination, requirement of at least one filter, and pagination. It does not explain the output format, but the output schema handles that. It could mention session handling or defaults, but those are in the schema. Overall, it is complete enough 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters with descriptions, but the tool description adds meaningful semantics: it explains that filters AND together and that at least one filter must be provided, which are not in the schema. This extra context helps the agent understand how to combine the name, type, and group parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it finds nodes in the scene tree by name, type, or group, which is specific and distinguishes it from siblings like scene_get_hierarchy that retrieve the whole tree. It doesn't explicitly name an alternative, but the purpose is unambiguous and covers the core functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching nodes but does not explicitly state when to prefer this over alternatives like scene_get_hierarchy or node_get_properties. It mentions filtering and pagination, which hints at its role, but there is no direct guidance on alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_get_propertiesNode 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path relative to the edited scene root (e.g. "/Main/Camera3D"), NOT runtime "/root/..." paths. Derive from prior tool responses or scene_get_hierarchy.
fieldsNoWhen non-empty, return only these property names.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description thoroughly discloses behavior: it details response size, the total_count vs count difference, unknown_fields handling, null-value inclusion, and script serialization. This exceeds minimal requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed but well-structured, with the main purpose first, followed by usage tips and behavior specifics. Some redundancy exists, but it remains organized and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 absence of annotations, the description covers all necessary aspects: usage context, parameter behavior, response semantics, and edge cases. With an output schema present, it is effectively complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in the schema. The description adds contextual notes about 'fields' (response size cut) and 'path' (not runtime paths), but these are enhancements rather than necessities.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves node properties, identifies the resource form, and differentiates from siblings like node_set_property. It provides specific details about the returned data structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool (active-session reads) and advises using the 'fields' parameter for large response cuts, but does not explicitly name alternative tools for similar operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_manageNode 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses that delete is undoable, scene root cannot be deleted or duplicated, rename has collision and character rules, reparent preserves children and forbids descendant moves, and the scene_file guard returns EDITED_SCENE_MISMATCH. This is strong behavioral detail for a mutation-heavy tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well organized with an intro, resource forms, per-operation bullets, a scene_file guard note, and call-shape guidance. It is dense but generally purposeful; however, the resource-form block overlaps with the get_children/get_groups operations and includes a 'properties' form not represented in the op list, creating minor redundancy and ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is nearly complete for a tool with this many operations: it covers each operation's semantics, constraints, the optional scene_file guard, and the canonical call envelope, while output schema covers return values. It lacks a concrete request example and does not clarify exactly how the resource forms relate to the op-based API, preventing a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description effectively replaces the missing parameter docs by specifying every operation signature with arguments and defaults, e.g., duplicate(path, name='', scene_file='') and move(path, index, scene_file=''). It also documents the canonical {'op': ..., 'params': ...} call shape and the flat-parameter compatibility alias, giving an agent enough information to construct valid calls despite the permissive schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as the node tree and enumerates a concrete set of verbs: delete, duplicate, rename, move, reparent, group management, and hierarchy reads. It is clear about the tool's scope but does not explicitly differentiate it from sibling node tools like node_create or node_set_property, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a 'prefer for active-session reads' note and per-operation constraints, but it does not say when to choose node_manage over alternatives such as node_find, scene_get_hierarchy, or node_set_property. Usage context must be inferred from the operation list rather than being explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_set_propertyNode 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 call resource_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path relative to the edited scene root (e.g. "/Main/Camera3D"), NOT runtime "/root/..." paths.
valueYesNew value. Pass null (or "" for resources) to clear.
propertyYesProperty name (e.g. "fov", "position", "mesh"). Must match Godot's exact identifier — introspect with ``node_get_properties`` if unsure rather than guessing.
scene_fileNoOptional editor-scene guard.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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: it discloses coercion behavior per type, the PROPERTY_NOT_ON_CLASS failure mode, serialization semantics for built-in resources, and clearing via null/"". This far exceeds a simple mutation warning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is front-loaded with the core action and verification instruction, then organized as a bulleted coercion list. The resource-sharing detail is dense but earns its place because that is where agents commonly fail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 availability of an output schema plus fully described parameters, the description covers every hard part: property-name discovery, type coercion, resource lifecycle, and sibling routing. No critical operational gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description still adds substantial meaning beyond the schema's type definitions. It explains the exact accepted shapes for Vector2/3, Color, NodePath, Resource, StringName, Array, and Dictionary, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Set a property on a node,' a specific verb and resource with no ambiguity about the action. It also names complementary siblings like node_get_properties and resource_manage, making clear that this tool is the write operation, not a reader or resource manager.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent to verify property names with node_get_properties before writing and warns against guessing, which is concrete when-to-use guidance. It also provides an alternative resource_manage workflow for shared resources, clarifying when not to pass a raw dict directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

particle_manageParticle 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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 side effects (single undo action, auto-created ProcessMaterial and QuadMesh), runtime-only behavior, invalid-override handling returning INVALID_PARAMS, and type-specific vector requirements. This is strong 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with a front-loaded scope and a clear operation-by-operation breakdown. There is some redundancy, notably GPU gravity formatting stated twice, and the length is high, but each section contributes necessary detail for a seven-operation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 is remarkably complete: it covers operation signatures, property groupings, preset names, override routing, error behavior, and call shape. The output schema exists, so return-value details are already handled, and the pointer to the Godot reference for the full property list is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates fully. It documents every op's parameters, type enum values, property groups, preset names, override structure, and per-type constraints like GPU gravity requiring {x, y, z} or [x, y, z]. This goes well beyond the minimal input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately scopes to 'Particle systems (GPUParticles2D/3D, CPUParticles2D/3D)' and enumerates precise operations (create, set_main, set_process, set_draw_pass, restart, get, apply_preset). This clearly distinguishes it from sibling tools like node_create 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context: all write ops create nodes plus sub-resources in one undo action, restart is runtime-only and not undoable, and the canonical call shape is specified. It does not explicitly state when not to use this tool versus alternatives, but it provides enough context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_manageProject 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden and does so thoroughly. It discloses stop() idempotency and the was_running=false success behavior, strict rejection of extra params, configuration-key refusal, persistence to project.godot, and main-scene path validation. This is the kind of operational detail an agent needs before invoking a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized, front-loaded, and uses clear headings and call-shape examples. It is somewhat long, but that length is justified by four distinct operations and the need to document validation and parameter restrictions. A few phrases, like the flat-parameter compatibility alias, could be trimmed without much loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-operation mutating tool with no annotations, the description is nearly complete: it covers operation semantics, parameter constraints, persistence behavior, and the canonical invocation shape. The presence of an output schema means return values do not need to be documented in prose. It still does not mention prerequisites like whether a project must already be open, or what error behavior an agent should expect on failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 compensate, and it does. Every op signature is spelled out: stop() takes no params, settings_get(key), settings_set(key, value), and set_main_scene(path), with notes on where session_id belongs and which keys are rejected. The params field itself is generic in the schema, so this documentation is essential and complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete scope: stopping a running project and reading/writing project.godot settings, with each operation listed as verb+target. It explicitly references sibling tools like project_run and autoload_manage, making the boundary between this tool and nearby tools clear. The initial 'run/stop' wording is slightly broader than the actual ops, but the detailed op list immediately resolves that ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful routing guidance: prefer the resource form for active-session reads, use set_main_scene/autoload_manage for refused keys, and use project_run(mode="main") for running the project. It does not, however, provide a global decision rule for when project_manage should be chosen over project_run or game_manage in general. The exclusions it does provide are concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_runProject 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"main" | "current" | "custom". Default "main".main
sceneNoScene path (e.g. "res://levels/level1.tscn"). Required for "custom".
autosaveNoWhen 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_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It thoroughly discloses idempotency, was_already_running behavior, all game_status values ('live', 'not_live', 'no_helper', 'stopped', 'break'), helper_live/session_active semantics, break recovery steps, and the recommendation to poll editor_state. This is exemplary transparency for a runtime-control tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense and well-structured: purpose, modes, idempotency, status meanings, and recovery actions are all front-loaded in logical order. Every sentence contributes to correct invocation or interpretation of results, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are no annotations and the tool has complex runtime behavior, the description is remarkably complete. It covers all modes, edge-case statuses, failure handling, and follow-up actions, while the presence of an output schema covers raw return-value shape. Nothing essential for correct usage appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters adequately. The description adds useful semantics around mode selection and the custom-requires-scene dependency, but autosave and session_id are not elaborated beyond the schema. This meets the baseline but adds limited parameter-level value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Run (play) the Godot project from the editor') and immediately clarifies the three modes: main, current, and custom. It also references project_manage for stopping/scene-switching, helping differentiate this tool from related siblings. The purpose is unambiguous and operationally specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The Modes list gives clear selection criteria, and the description explicitly says to call project_manage(op='stop') first when switching scenes. However, it does not explicitly state when to prefer project_run over test_run or other launch-related siblings. It offers solid context but not full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resource_manageResource 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. • inspect(node_path, property, depth=2) Read a live native resource graph without loading or modifying files. Depth 0..3; shared references, omission reasons, fixed traversal and 64 KiB encoded-result limits. Scripted/dynamic properties excluded. • 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", reparent_mesh=False, scene_file="", overwrite=False) Generate a physics body 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: auto | box | sphere | capsule | cylinder | convex | trimesh (or the class name for explicit shapes). Opt-in auto selects matching primitives for BoxMesh, SphereMesh, CapsuleMesh and CylinderMesh, with box bounds for every other mesh. The default remains box. Auto uses bounding fits (including tapered cylinders), not exact mesh geometry. convex/trimesh derive the shape from the mesh's own triangles, with the mesh scale baked into the shape, and are limited to 2048 triangles and 6144 vertices per mesh, with bounded mesh types (the hull build runs synchronously inside one editor-frame item); trimesh needs a static or area body, and a non-uniformly scaled parent chain refuses every type except box. body_type: static | area | rigid | character. rigid/character always wrap the mesh under the generated body (a detached dynamic body would fall away from the stationary visual); reparent_mesh=True does the same for static/area while preserving the mesh's world transform, and the reported mesh_path is then the post-move path. overwrite=True refreshes only a marked generated collider's shape and collision transform, preserving body/collision identity and user settings. Requested body type and wrapping must match; unmarked legacy bodies or broken provenance links are refused. Mixed fresh/refresh batches prepare all resources before one undo action; stale edits refuse the batch. 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, operation: "create"|"refresh"}], 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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 so extensively: read-only operations are labeled (get_info "Read-only"), mutating operations are qualified (assign/create "Undoable"), limits are disclosed (depth 0..3, 64 KiB limit, 2048 triangles, 6144 vertices, 1024 paths), and refusal conditions are explicit ("refused before anything is written", "unmarked legacy bodies or broken provenance links are refused"). It also documents canonical call shape and batch execution constraints, going well beyond a surface-level summary.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but appropriately structured for a twelve-operation tool: a one-line overview, a bulleted op list with consistent signatures, a canonical call shape, and a compatibility note. The detailed physics_shape_generate section is dense but every sentence conveys a distinct constraint or behavior. No filler or tautological phrasing is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the absence of annotations, and the free-form params schema, the description is remarkably complete. It explains each op's purpose, parameter options, side effects, limits, undo behavior, and even the canonical invocation shape. Since an output schema exists, the lack of per-op return descriptions beyond the one shown is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage and only exposes a free-form params object, so the description must fully compensate. It does: every operation lists its parameters with defaults, accepted enum values, and behavioral meaning (e.g., shape_type short forms versus Godot class names, environment presets, fill modes, noise types). This gives an agent everything needed to construct valid calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states specific verbs and a clear resource domain: "Resource (asset) search, inspection, assignment, and creation." It further distinguishes the tool by enumerating specialized authoring families (Curve, Environment, physics shapes, gradient/noise textures) and listing twelve concrete operations. This gives an agent a precise model of what the tool does and how it differs from node/scene/material management siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong context for when to use the tool: it covers resource search, inspection, assignment, and creation, and it even routes users to dedicated ops within the tool ("For specific families (Curve, Environment, etc.) prefer the dedicated ops"). It does not, however, explicitly state when to prefer a sibling tool such as node_set_property, material_manage, or filesystem_manage, nor does it name exclusions. Clear context, but no explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_get_hierarchyScene 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMaximum walk depth. Default 10.
limitNoMax number of nodes to return. Default 100.
offsetNoNumber of nodes to skip. Default 0.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the return shape (paginated, flat, fields), depth behavior, and resource form. While it doesn't explicitly state 'read-only' or describe error behavior, the verb 'Get' plus 'Returns' makes the non-mutating nature clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with the core action first, followed by output details and a resource-form note. The resource-form line is helpful context but not strictly necessary for tool invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only hierarchy getter, the description covers purpose, output, depth, and pagination, and an output schema is present to document return values. It doesn't mention error cases (e.g., no open scene) or session-targeting subtleties, but these are not critical given the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The description's 'Walks up to the specified depth' reiterates the depth parameter rather than adding much new, and 'paginated' vaguely aligns with limit/offset but does not explain their interaction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies a specific operation ('Get') on a specific resource ('the scene tree hierarchy from the open scene'). The output details (paginated flat list with name, type, path, child count) further distinguish it from sibling node inspection tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: it is for reading the hierarchy of the open scene, and the resource form note says to prefer it for active-session reads. However, it never explicitly contrasts it with alternatives like node_find or node_get_properties, so an agent must infer when this is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_manageScene 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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 important behavioral traits: create writes the initial root immediately but later mutations remain in editor memory until scene_save or save_as is called; save_as saves to a new file path; get_roots lists open scenes and flags the edited one. It also explains the canonical call shape and compatibility alias. This is strong behavioral disclosure, though it doesn't cover error cases or side effects like overwriting existing files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a brief intro, resource form note, and a bulleted op list. It's front-loaded with the tool's purpose and the resource form preference. The canonical call shape note is useful but slightly verbose. Overall, every section earns its place, though the op list could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and 3 parameters, the description covers the main operations, their parameters, and key behavioral caveats. It doesn't explain return values (output schema covers that) or error conditions, but for an authoring tool with multiple ops, the description is reasonably complete. The main gap is lack of explicit when-to-use vs siblings, but the resource form hint partially covers it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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. It explains the op enum values and their params: create(path, root_type='Node3D', root_name=''), save_as(path), get_roots(). It also explains root_name defaults to filename basename when empty. This adds significant meaning beyond the schema, though it doesn't document session_id or the exact shape of params for each op in full detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: scene authoring with three specific operations (create, save_as, list open roots). It distinguishes itself from siblings by explicitly mentioning resource form godot://scene/current and godot://scene/hierarchy and noting 'prefer for active-session reads', which differentiates it from scene_open, scene_save, and scene_get_hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 this tool: for scene authoring operations and active-session reads via resource form. It doesn't explicitly state when NOT to use it or name alternatives, but the resource form hint and op list imply the usage boundaries. It could be stronger with explicit exclusions, but it's adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_openScene 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path of the scene to open (e.g. "res://main.tscn").
session_idNoOptional Godot session to target. Empty = active session.
force_reloadNoRe-read the scene from disk even when it is already open. This discards unsaved in-memory edits to that scene.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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 important behaviors: the no-op case, force_reload behavior (discarding in-memory edits), the reply timing (only after editor switches, with switched flag), and the settle states ('timeout', 'not_waited'). It also handles synchronous contexts. This is rich behavioral detail beyond what any annotation might provide. Slight deduction because it doesn't explicitly mention permissions or side effects (e.g., does opening purge unsaved changes in other scenes?), but it's quite transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately sized but packs a lot of necessary information. It's structured with paragraphs and list-like formatting (with backticks for parameters and field names). It front-loads the core purpose and then explains edge cases. While it could be slightly more concise (some might argue the synchronous context paragraph is dense), it's well-organized and every sentence carries meaning. Not a 5 because it lacks a summary or roadmap, but it's good.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has an output schema (though not shown in the prompt, it's indicated as present), the description doesn't need to explain return values. It covers all aspects needed for an agent to use it correctly: what it does, when to use force_reload, what the settle flags mean, how to handle synchronous contexts, and how to verify success. The complexity is moderate (3 params, one required), and this description is complete for the task. It even warns about follow-up writes, which is important for sequencing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters with descriptions. The description adds significant value by explaining the semantics of force_reload in context (discarding edits, file authority) and the meaning of the switched and settle fields. It also clarifies the no-op condition dependent on path. This goes beyond the schema's basic parameter descriptions, earning a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool clearly states its purpose: 'Open an existing scene file (.tscn) in the editor.' It uses a specific verb, resource, and file type. While sibling tools like scene_save, scene_manage, and scene_get_hierarchy are related, the description hints at its distinct role (opening) but doesn't explicitly differentiate from siblings like scene_manage (which might also involve opening). It's clear enough but doesn't name alternatives, so it doesn't quite reach a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides excellent usage guidance. It explains when force_reload is appropriate ('when the file on disk is the authority'), warns about synchronous contexts (batch_execute) returning immediately, and advises re-checking editor_state before follow-up writes when switched is false. It even notes that if path is already the current scene, it's a no-op preserving in-memory state. This gives clear when-to-use and cautionary guidance, though it doesn't explicitly name alternative tools for opening vs managing. Still, it covers usage conditions thoroughly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_saveScene 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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 states the tool saves to the existing path, implying a write operation, but it does not mention potential side effects like file overwriting, preconditions (e.g., an open scene), or failure modes if the scene lacks a path. This is a moderate gap for a persistence operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero fluff. The first sentence states the core purpose, and the second provides essential context about when to use it. It is perfectly sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and an output schema, the description covers the main purpose and usage context. However, it omits important operational details such as what happens if no scene is open or if the save fails, which could affect correct usage. The absence of annotation coverage makes this gap more significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the session_id parameter is fully documented in the input schema. The description adds no extra meaning beyond the schema's explanation of the optional session targeting. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Save the currently edited scene to disk.' It further distinguishes this tool from sibling mutation tools by explaining that it persists in-memory changes to the existing path, which differentiates it from node/property mutation tools that only affect the in-memory scene.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to call this tool after using node/property mutation tools to persist changes to disk, providing clear context for when it should be used. It doesn't name alternative save mechanisms or explicitly state when not to use it, but the usage context is well defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

script_attachScript AttachA

Attach a script to a node in the scene tree.

Replaces any existing script on the node. Undoable.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path of the node (e.g. "/Main/Player").
session_idNoOptional Godot session to target. Empty = active session.
script_pathYesres:// path of the .gd (e.g. "res://scripts/player.gd"). A .cs requires a .NET-enabled editor build; other builds get a clear error. Build the assembly before expecting executable behavior.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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 warns that the tool 'replaces any existing script on the node' and states it is 'undoable,' which is valuable safety-relevant 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the primary action, then immediately states the key behavioral consequences. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple attach operation: it states the action, the destructive replacement behavior, and undoability. The full input schema and existing output schema cover the remaining technical details. It could be slightly stronger with explicit sibling differentiation, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description does not add extra parameter semantics, but it doesn't need to; the baseline of 3 applies because the schema handles the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Attach a script to a node in the scene tree.' This clearly distinguishes it from sibling tools like script_create or script_patch, which serve different purposes. It is not a tautology of the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you want to attach a pre-existing script to a node. However, it does not explicitly state when to choose this over alternatives like script_create or script_manage, nor does it mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

script_createScript CreateA

Create a script file on disk: GDScript (.gd, validated) or C# (.cs, text only).

Writes content to the path. Overwrites if it exists. Registers the file with the editor. New files include data.cleanup.rm listing the file and, when supported by the editor, its .uid sidecar; overwrite omits it.

.gd: source is parse-validated and the response carries diagnostics (diagnostics_status="checked"); an already-loaded script is refreshed in place. .cs: written as text only — Godot AI does not compile .NET, so diagnostics_status="not_checked" and validation_hint says to build the project (editor Build button or dotnet build) to see compiler errors. dotnet_editor reports whether the connected editor build has .NET at all. Any other extension is rejected; use filesystem_manage op="write_text".

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesres:// path ending in .gd or .cs (e.g. "res://scripts/player.gd").
contentNoGDScript or C# source. Empty creates a blank file.
session_idNoOptional Godot session to target. Empty = active session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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 excellently: it discloses overwrite behavior, editor registration, the data.cleanup.rm sidecar difference for new vs overwritten files, .gd parse validation and in-place refresh, .cs non-compilation with diagnostics_status='not_checked', and the dotnet_editor capability check. This is a thorough 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: scoping, side effects, per-extension behavior, diagnostics, and fallback routing. It is well-structured with a clear summary up front followed by relevant details, avoiding fluff while covering critical edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has enough complexity that a brief description would be inadequate, but this one covers all decision-relevant aspects: accepted extensions, overwrite semantics, cleanup metadata, validation differences, diagnostics, and the alternative for non-script writes. An output schema exists, so return-value documentation is not the description's job, and nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 semantics: path extension determines validation behavior, content is parsed for .gd but stored as text for .cs, and empty content creates a blank file. It does not add much about session_id beyond the schema, but the extension-specific behavior enriches the path and content parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Create a script file on disk' and explicitly scopes to GDScript or C#, distinguishing it from generic file writes. It clearly differentiates from relevant siblings like script_patch, script_attach, and script_manage by emphasizing creation and on-disk registration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (creating .gd/.cs scripts) and explicitly routes unsupported extensions to filesystem_manage op='write_text'. It does not explicitly contrast with script_patch or script_manage, but the creation-focused wording and overwrite semantics imply the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

script_manageScript ManageA

Script (.gd / .cs) 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 script. .gd: class_name, extends, functions, signals, @export vars. .cs: class, base type, methods, [Signal] delegates, [Export] members. Response language says which parser ran.

Language support: GDScript is the full contract. C# (.cs) is text-only — files are written, read and outlined, but Godot AI does not build .NET or report C# compiler errors; inspect the editor Build panel or dotnet build terminal output. logs_read does not capture .NET compiler output.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states that detach is undoable, that C# support is text-only, that Godot AI does not build .NET or report C# compiler errors, and that the find_symbols response includes a 'language' field. This is strong transparency, though it does not cover all edge cases or 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized with a summary, a bulleted operation list, a language-support section, and a call-shape note. It front-loads the key purpose and keeps each section scannable. There is some length due to necessary caveats, but no major redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, the description covers the essential operational and contextual details: three ops, path format, language limitations, and call shape. It does not describe response values in depth, but the output schema exists to handle that. The only notable gap is lack of explicit comparison with script_patch/script_attach for routing decisions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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. It does so by documenting each op's parameter (path), the resource form 'godot://script/{path}', and the canonical call shape with flat-parameter compatibility. It stops short of detailing the exact path type or the optional session_id parameter, but the core semantics are well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's scope: 'Script (.gd / .cs) reading, detachment, and outline.' It enumerates three specific operations (read, detach, find_symbols), each with a distinct verb and resource. This differentiates it from sibling tools like script_create, script_patch, and script_attach.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical usage context, such as preferring the 'godot://script/{path}' resource form for active-session reads and clarifying that logs_read will not capture .NET compiler output. It also directs users to the editor Build panel or dotnet build for C# errors. It does not explicitly name sibling alternatives for script editing, so the guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

script_patchScript PatchA

Anchor-based string-replace edit on a .gd or .cs 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. .gd: parse-validated (diagnostics) and an already-loaded GDScript is refreshed in place so the next call runs the new code (response reloaded=true; otherwise reload_reason says why). .cs: text only — diagnostics_status="not_checked", reload_reason= "csharp_requires_build"; rebuild the .NET assembly to run it. Not undoable via Ctrl+Z.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesres:// path ending in .gd or .cs.
new_textYesReplacement (empty deletes).
old_textYesExact substring to find. Must be unique unless replace_all.
session_idNoOptional Godot session to target. Empty = active session.
replace_allNoReplace every occurrence. Default False.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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 exact byte matching, failure modes, filesystem scan triggering, GDScript vs C# reload behavior, diagnostics handling, and the fact that the edit is not undoable via Ctrl+Z.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place, covering purpose, failure modes, language-specific behavior, reload semantics, and undo limitations. It is front-loaded with the core action and then expands into necessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and full parameter coverage, the description supplies the missing behavioral context: failure conditions, reload behavior, filesystem scan side effect, and non-undoability. An agent has enough information to invoke it correctly without consulting siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters. The description reinforces exact-match behavior and mentions empty-deletes semantics, but adds only marginal precision beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: an anchor-based string-replace edit on .gd or .cs files. It clearly distinguishes itself from siblings like script_create, script_attach, and script_manage by describing an in-place patch operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The behavioral conditions are explicit: exact match, failure on zero or multiple matches, and different post-edit behavior for .gd vs .cs. However, it never names alternatives or explicitly says when script_patch should be chosen over script_create, script_attach, or script_manage, so the routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_activateSession 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesAn 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and mostly succeeds: it explains exact-match precedence, which fields substring hints match against, and the ambiguity error listing candidates. It could add a note that the previously active session is replaced, but the state-transition is already clear from 'Set the active...'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key statement is front-loaded in the first sentence, followed by two compact sentences that fully explain matching rules. No filler or redundant repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter state-selection tool with an output schema and full schema parameter coverage, the description is sufficient: it explains what the operation does, how the parameter is interpreted, and what happens on failure. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter schema provides the format and examples, and the description adds important semantics beyond it: matching against short name/project_path/session_id, exact-id precedence, and the requirement that a substring resolve to exactly one session. This resolves ambiguity that the schema alone leaves open.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object: 'Set the active Godot editor session for subsequent tool calls.' This clearly distinguishes session_activate from sibling tools like session_manage, which would handle listing/creating/managing sessions rather than selecting the active one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the context of use: before other tool calls that should target a chosen editor session. It does not name an alternative or an explicit when-not-to-use, but the 'subsequent tool calls' framing plus the exact/substring semantics give enough guidance for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_manageSession ManageB

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that the tool lists sessions and includes metadata fields, plus the server-global exclude_domains. It does not mention side effects, read-only nature, or any potential performance implications. Since it's a listing operation, the lack of explicit read-only disclosure is a minor gap, but the description is reasonably transparent about what it returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear resource form, operation list, and canonical call shape. It is concise and front-loads the key information. The metadata field list is long but necessary for completeness. No redundant sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the list operation thoroughly, including metadata fields and the exclude_domains response. However, it does not explain the purpose of session_id or params in the context of listing, nor does it clarify if there are other operations beyond list. Given the output schema exists, return values are covered, but the parameter semantics gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the parameters beyond the canonical call shape. It mentions 'op' and 'session_id' remain top-level, but does not explain what session_id is for or how params should be structured. The description adds some context about the call shape but fails to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists every connected Godot editor with metadata, and the resource form is given. It is distinguishable from siblings like session_activate, which implies activation rather than listing. However, the title 'Session Manage' is broad and the description focuses on the list operation, so it doesn't fully clarify what other operations might exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing sessions and mentions a resource form preference, but it does not explicitly state when to use this tool versus alternatives like session_activate or editor_state. It also doesn't mention any prerequisites or context where listing is appropriate. The guidance is mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signal_manageSignal 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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 connect/disconnect are undoable, that list hides editor-internal connections by default, and that editor_connection_count reveals hidden entries. It also documents the canonical call shape and the flat-parameter compatibility alias, which are non-obvious behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-line summary, then uses compact bulleted ops with consistent formatting. Every sentence adds useful invocation information, and the compatibility note is justified by the intentionally permissive params schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All three operations are fully specified, the call shape is explicit, and the output schema handles return values. The description provides enough context for correct invocation despite the very generic input schema and absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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. It does so thoroughly by providing exact per-op signatures, explaining the include_editor default, and defining how params should be structured. The names and supplied context are sufficient for an agent to invoke each operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific resource ('Signals' in Godot) and the three operations it supports: list, connect, and disconnect. It is immediately clear what the tool does, though it does not explicitly contrast itself with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The op list and examples make the intended usage reasonably inferable, but the description never states when to use this tool versus an alternative or when not to use it. The include_editor guidance is useful but is parameter-level guidance, not tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_manageTest 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains that the tool re-fetches the last run's payload, does not re-execute, returns full results, and that verbose=True includes every individual result. It also documents call-shape aliases. It stops short of mentioning auth or active-session failure behavior, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: purpose, resource form, op specification, and call-shape rule. Every sentence adds useful information, and the most important details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-op tool with an output schema, the description covers the operation, its non-executing behavior, the verbose flag, and the canonical call shape. It could more explicitly define session_id and name the alternative execution tool, but the active-session context and test_run reference cover most practical needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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. It explains the op as results_get(verbose=False) and defines verbose behavior. However, session_id is only mentioned as remaining top-level; its actual role is left implicit through 'active-session reads'. This is a partial but not complete compensation for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Test result inspection' and explicitly states it re-fetches the most recent test_run payload. It distinguishes itself from test_run by noting 'no re-execution', so an agent can immediately identify this as a read/results tool rather than an execution tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'prefer for active-session reads', giving a clear context for when to use this tool. It also implies the alternative by contrasting with test_run via 'same shape as test_run' and 'no re-execution', though it does not explicitly name an exclusion or say 'use test_run when you need execution'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_runTest 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteNoRun only the named suite (e.g. "scene", "node", "editor"). Empty runs all suites.
verboseNoInclude every individual test result. Default False.
test_nameNoRun only tests whose name contains this substring.
session_idNoOptional Godot session to target. Empty = active session.
exclude_test_nameNoSkip tests whose name contains this substring.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly. It discloses the 300s timeout and TEST_RUN_TIMEOUT behavior, the risk of a single test blocking the main thread for 20s+, the cache_warning about stale preloads, the scene_warning about main scene assumptions, and the edited_scene response field. This is rich behavioral context beyond what any schema could provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: discovery mechanism, output format, cache warning, timeout behavior, batch_execute restriction, and scene warning. It is front-loaded with the core purpose and then layers caveats. Slightly dense, but appropriate for a tool with this many behavioral nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 optional params, no required params, output schema present, no annotations), the description covers all critical operational aspects: what runs, how to filter, what the response contains, timeout behavior, safety during long runs, and environmental prerequisites (main scene). An agent has enough to invoke it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 by explaining the default summary vs verbose output, the substring matching behavior for test_name/exclude_test_name, and the suite filtering concept. It doesn't detail every parameter's edge cases, but it adds value beyond the schema's terse descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Run GDScript test suites'), a resource ('inside the connected Godot editor'), and the mechanism (discovers test_*.gd, instantiates, runs test_* methods). It clearly distinguishes itself from siblings like test_manage and project_run by focusing on executing tests in-editor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use context: run suites, filter by suite/test_name, use verbose for full results. It also provides exclusions: not allowed inside batch_execute, and warns about stale preload caches requiring editor restart. It names alternatives indirectly (test_manage for partial results, scene_open for main scene) and gives clear re-run guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

theme_manageTheme ManageA

Theme authoring (Godot's stylesheet-like resource for Controls). Cascades down a Control subtree when assigned via theme_apply.

Stylebox numeric fields (border widths, corner radii, margins, shadow) must be finite numbers and stylebox flags (anti_aliasing, draw_center) must be real booleans; a non-numeric or non-finite value is refused with a structured error before anything is applied, so a refused call leaves the theme and undo history untouched.

Slot changes are persisted immediately: if the theme file cannot be written the call fails with an error, the previous slot is restored, and no undo entry is committed.

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. • set_stylebox_texture(theme_path, class_name, name, texture_path, region?, margins?, axis_stretch_horizontal?, axis_stretch_vertical?, modulate_color?, draw_center?) Compose a 9-slice StyleBoxTexture from an imported image — pixel-art buttons and artwork-backed panels. region is {position, size} or [x,y,w,h]; margins are {all|left|top|right|bottom}; axis stretch modes are "stretch" | "tile" | "tile_fit". • set_font(theme_path, class_name, name, font_path) Assign a Font resource (FontFile .ttf/.otf, FontVariation) to a font slot. Loads the imported resource from res://. • set_icon(theme_path, class_name, name, texture_path) Assign a Texture2D to an icon slot (checkbox marks, dropdown arrows). • stylebox_override(path, slot, patch) Per-node stylebox override: duplicate the stylebox the Control resolves for slot, apply a StyleBoxFlat patch (same keys as set_stylebox_flat; unknown top-level keys are refused), and attach it via add_theme_stylebox_override. The action lands in the scene's undo history, so the editor's scene undo restores the previous override or removes it. The zero-border angular-frame / flash-the-bar-bg pattern without mutating the theme. • 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations, the description carries the full behavioral burden and succeeds: it discloses validation semantics ('a non-numeric or non-finite value is refused with a structured error before anything is applied'), atomicity ('refused call leaves the theme and undo history untouched'), persistence semantics ('Slot changes are persisted immediately... the previous slot is restored, and no undo entry is committed'), and per-op undo behavior (stylebox_override 'lands in the scene's undo history'). This goes well beyond anything the schema could express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is proportionate to the 10 sub-operations it must document. It is front-loaded with purpose and cascade behavior, organizes ops as a bulleted list with nested parameter notes, and closes with the canonical call shape. No filler sentences; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (10 ops, polymorphic params, persistence and undo guarantees) and the absence of annotations, the description leaves nothing essential to inference: params, value formats, validation/rollback behavior, and the call envelope are all specified. An output schema exists to cover return values, so the description's silence on success-return shape is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the schema only declares op/params/session_id with a permissive params object and op enum. The description fully compensates by documenting every op's parameters in detail: color value formats ('#rrggbb'/'#rrggbbaa', named, or {r,g,b,a}), region formats ('{position, size} or [x,y,w,h]'), axis-stretch enums ('stretch' | 'tile' | 'tile_fit'), and per-side key conventions ('all' + per-side keys). An agent can construct a correct params dict from the description alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific scope — 'Theme authoring (Godot's stylesheet-like resource for Controls)' — and immediately adds a distinguishing behavior ('Cascades down a Control subtree when assigned via theme_apply'). The verb+resource pairing is specific enough to stand apart from siblings like material_manage, resource_manage, ui_manage, and material-related tools, so an agent can tell what domain this tool owns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence establishes clear context for when to use the tool: authoring Godot Control themes, which implicitly distinguishes it from general-purpose resource_manage, ui_manage, and material_manage. Internal op routing is strong (e.g., stylebox_override is contrasted with set_stylebox_flat as a pattern used 'without mutating the theme'). It stops short of explicitly naming sibling tools with when-not-to-use conditions, so cross-tool exclusion guidance is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tilemap_manageTilemap ManageA

TileMap / TileMapLayer authoring (set tiles, fill rects, clear, read cells).

All operations target TileMapLayer 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}

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that all write operations are undoable, that operations target scene-relative TileMapLayer paths, and that specialized .tres files renumber source IDs. It does not cover error conditions or permission requirements, but for an editor authoring tool this is substantial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well organized: a brief overview, a critical source-ID remapping warning, and a flat list of operations with signatures and returns. The length is justified by the tool's complexity, though some redundancy exists between the overview and the op list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 and no schema-level parameter documentation, this description is complete. It covers target paths, coordinate systems, source-ID remapping pitfalls, undo behavior, return shapes, and the required call envelope. An agent has enough to select and invoke any of the four operations correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 documents each op's parameter list, explains source_id, atlas_col/atlas_row semantics, gives specialized .tres remapping examples, and describes return values. It also clarifies the canonical call shape versus the flat compatibility alias.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'TileMap / TileMapLayer authoring (set tiles, fill rects, clear, read cells).' This clearly distinguishes the tool from sibling tools like tileset_manage or gridmap_manage by naming the exact target resource and operation families.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage context: all operations target TileMapLayer nodes in the currently edited scene by scene-relative pathjans, and it explains when source-id remapping matters. However, it does not explicitly state when to prefer this tool over sibling tools or when not to use it, leaving some selection judgment to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tileset_manageTileset 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explicitly states both operations are read-only, do not modify resource or project files, read directly without UI interaction, and includes scaling behavior, return shapes, and error codes. This is exceptional transparency for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but tightly structured: signatures, parameter docs, return values, and error codes are separated into scannable bullet sections. The visual-inspection workflow guidance is placed where it is most useful, and every sentence adds operational information rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-operation read-only atlas inspection tool with no annotations, this description is complete: it covers invocation shape, per-parameter semantics, return formats, error taxonomy, and use-case routing. An agent has everything needed to select and call either op correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema's params field is opaque (additionalProperties: true, 0% schema description coverage), so the description must compensate. It fully does: for each op it documents tileset_path as a required res:// path, source_id as required and >= 0, and max_size with default and behavior, plus the returned JSON structure and error conditions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'TileSet management — atlas inspection tools' and then enumerates two concrete operations with full signatures and behaviors. It clearly states what the tool does (inspect TileSet atlas resources) and distinguishes its visual-inspection path from editor_screenshot, so an agent can tell it apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Atlas image workflow' section explicitly tells agents to use tileset_get_atlas_image instead of editor screenshots when they need to visually inspect tiles, and explains why: it reads directly from the resource with no UI interaction or editor state. This is explicit when-to-use and when-not-to-use guidance with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_manageUi 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. • set_richtext(path, text, bbcode=True) Set a RichTextLabel's text with BBcode parsing on by default — "[color=red]HP[/color]" renders as markup, and bbcode=False writes literal text. Undoable. • 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses important behaviors: bbcode parsing defaults on, set_richtext is undoable, build_layout validates before mutating atomically, and draw_recipe defaults to clear_existing=True. It does not cover persistence/lifecycle effects or what happens on error, but the main side effects are made visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is justified by five operations and their enums; it is front-loaded with a purpose statement and organized as a scannable Ops list. Minor redundant CanvasLayer/Control caveats in set_anchor_preset and build_layout keep it from being perfectly tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It is highly complete for a minimal-schema tool with no annotations: target types, defaults, enum values, atomicity, and the invocation envelope are all covered. The remaining gap is the underspecified nested shape of draw_recipe ops, which an output schema does not resolve; otherwise the agent has enough context to invoke most ops correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates with documented signatures, defaults, enums, and the build_layout tree spec. It falls short of fully specifying draw_recipe's op-object required fields (beyond naming line/rect/arc/etc.) and some build_layout fields such as anchor_margin, so an agent still has to guess some nested argument shapes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line, 'UI / Control authoring (HUD, menus, layouts, vector decoration)', states the domain, and the Ops list gives five specific verb+resource pairs: set_anchor_preset on Controls, set_text on text-bearing nodes, set_richtext on RichTextLabel, build_layout for UI subtrees, and draw_recipe for vector drawing. This clearly distinguishes ui_manage from the generic node_manage/theme_manage siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each op provides concrete applicability guidance, e.g. 'Target must be a Control', 'CanvasLayer is the canonical HUD parent but is not a Control', and which node types set_text works on. It also gives the canonical call shape and flat-parameter compatibility. However, it never explicitly contrasts ui_manage with sibling tools or states when not to use it, so it stops short of full exclusion guidance.

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.

  1. 9 tool updatesv4.2.1
    • Changedfilesystem_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "read_text",
        -  "reimport",
        -  "scan",
        -  "search",
        -  "write_text"
        -]New value: +[
        +  "move",
        +  "read_text",
        +  "reimport",
        +  "remove",
        +  "rename",
        +  "scan",
        +  "search",
        +  "write_text"
        +]
    • Changedmaterial_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "apply_preset",
        -  "apply_to_node",
        -  "assign",
        -  "create",
        -  "get",
        -  "list",
        -  "set_param",
        -  "set_shader_param"
        -]New value: +[
        +  "apply_preset",
        +  "apply_to_node",
        +  "assign",
        +  "create",
        +  "get",
        +  "list",
        +  "set_param",
        +  "set_shader_param",
        +  "shader_create",
        +  "shader_get",
        +  "shader_patch",
        +  "shader_validate",
        +  "visual_shader_create_graph",
        +  "visual_shader_edit",
        +  "visual_shader_get",
        +  "visual_shader_node_catalog"
        +]
    • Addednavigation_manage
    • Changedresource_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous 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",
        +  "environment_create",
        +  "get_info",
        +  "gradient_texture_create",
        +  "inspect",
        +  "load",
        +  "noise_texture_create",
        +  "physics_shape_autofit",
        +  "physics_shape_generate",
        +  "search"
        +]
    • Changedscript_attach1 field changed
      • changedInput schema / properties / script_path / description
        Previous value: -"res:// path of the .gd (e.g. \"res://scripts/player.gd\")."New value: +"res:// path of the .gd (e.g. \"res://scripts/player.gd\").\nA .cs requires a .NET-enabled editor build; other builds get a\nclear error. Build the assembly before expecting executable behavior."
    • Changedscript_create2 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"GDScript source. Empty creates a blank file."New value: +"GDScript or C# source. Empty creates a blank file."
      • changedInput schema / properties / path / description
        Previous value: -"res:// path (e.g. \"res://scripts/player.gd\")."New value: +"res:// path ending in .gd or .cs (e.g. \"res://scripts/player.gd\")."
    • Changedscript_patch1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"res:// path ending in .gd."New value: +"res:// path ending in .gd or .cs."
    • Changedtheme_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "apply",
        -  "create",
        -  "set_color",
        -  "set_constant",
        -  "set_font_size",
        -  "set_stylebox_flat"
        -]New value: +[
        +  "apply",
        +  "create",
        +  "set_color",
        +  "set_constant",
        +  "set_font",
        +  "set_font_size",
        +  "set_icon",
        +  "set_stylebox_flat",
        +  "set_stylebox_texture",
        +  "stylebox_override"
        +]
    • Changedui_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "build_layout",
        -  "draw_recipe",
        -  "set_anchor_preset",
        -  "set_text"
        -]New value: +[
        +  "build_layout",
        +  "draw_recipe",
        +  "set_anchor_preset",
        +  "set_richtext",
        +  "set_text"
        +]
  2. 2 tool updatesv4.0.3
    • Changedgame_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "get_node_info",
        -  "get_scene_tree",
        -  "get_ui_elements",
        -  "input_action",
        -  "input_gamepad",
        -  "input_key",
        -  "input_mouse",
        -  "input_sequence",
        -  "input_state"
        -]New value: +[
        +  "debug_status",
        +  "get_node_info",
        +  "get_scene_tree",
        +  "get_ui_elements",
        +  "input_action",
        +  "input_gamepad",
        +  "input_key",
        +  "input_mouse",
        +  "input_sequence",
        +  "input_state",
        +  "next_frame",
        +  "resume",
        +  "suspend"
        +]
    • Changedresource_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "assign",
        -  "create",
        -  "curve_set_points",
        -  "environment_create",
        -  "get_info",
        -  "gradient_texture_create",
        -  "load",
        -  "noise_texture_create",
        -  "physics_shape_autofit",
        -  "search"
        -]New value: +[
        +  "assign",
        +  "create",
        +  "curve_set_points",
        +  "environment_create",
        +  "get_info",
        +  "gradient_texture_create",
        +  "load",
        +  "noise_texture_create",
        +  "physics_shape_autofit",
        +  "physics_shape_generate",
        +  "search"
        +]
  3. 2 tool updatesv3.2.5
    • Changedproject_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "settings_get",
        -  "settings_set",
        -  "stop"
        -]New value: +[
        +  "set_main_scene",
        +  "settings_get",
        +  "settings_set",
        +  "stop"
        +]
    • Changedsession_activate1 field changed
      • changedInput schema / properties / session_id / description
        Previous value: -"An exact session id (``<project-slug>@<4hex>``, e.g.\n``my_game@a3f2``, from ``session_manage`` with op=\"list\")\nOR a substring hint like a project folder name\n(\"test_project\", \"my_game\")."New value: +"An exact session id (``<project-slug>@<16hex>``, e.g.\n``my_game@7f9c3a10d8e426b1``, from ``session_manage`` with op=\"list\")\nOR a substring hint like a project folder name\n(\"test_project\", \"my_game\")."
  4. 1 tool updatev3.2.4
    • Addedcustom_manage
  5. 37 tool updatesv3.1.4
    • Addedanimation_create
    • Addedanimation_manage
    • Addedbatch_execute
    • Addedcamera_manage
    • Addedclient_manage
    • Addedcsg_manage
    • Addededitor_manage
    • Addededitor_reload_plugin
    • Addededitor_screenshot
    • Addededitor_state
    • Changedgame_manage1 field changed
      • changedInput schema / properties / op / enum
        Previous value: -[
        -  "get_node_info",
        -  "get_scene_tree",
        -  "get_ui_elements",
        -  "input_action",
        -  "input_gamepad",
        -  "input_key",
        -  "input_mouse",
        -  "input_state"
        -]New value: +[
        +  "get_node_info",
        +  "get_scene_tree",
        +  "get_ui_elements",
        +  "input_action",
        +  "input_gamepad",
        +  "input_key",
        +  "input_mouse",
        +  "input_sequence",
        +  "input_state"
        +]
    • Addedgridmap_manage
    • Addedlogs_read
    • Addedmaterial_manage
    • Addednode_create
    • Addednode_find
    • Addednode_get_properties
    • Addednode_set_property
    • Addedparticle_manage
    • Addedproject_manage
    • Addedproject_run
    • Addedresource_manage
    • Addedscene_get_hierarchy
    • Addedscene_manage
    • Addedscene_open
    • Addedscene_save
    • Addedscript_attach
    • Addedscript_create
    • Addedscript_manage
    • Addedscript_patch
    • Addedsession_activate
    • Addedsession_manage
    • Addedsignal_manage
    • Addedtest_manage
    • Addedtheme_manage
    • Addedtileset_manage
    • Addedui_manage
  6. 34 tool updatesv3.0.7
    • Removedanimation_create
    • Removedanimation_manage
    • Removedbatch_execute
    • Removedcamera_manage
    • Removedclient_manage
    • Removededitor_manage
    • Removededitor_reload_plugin
    • Removededitor_screenshot
    • Removededitor_state
    • Removedlogs_read
    • Removedmaterial_manage
    • Removednode_create
    • Removednode_find
    • Removednode_get_properties
    • Removednode_set_property
    • Removedparticle_manage
    • Removedproject_manage
    • Removedproject_run
    • Removedresource_manage
    • Removedscene_get_hierarchy
    • Removedscene_manage
    • Removedscene_open
    • Removedscene_save
    • Removedscript_attach
    • Removedscript_create
    • Removedscript_manage
    • Removedscript_patch
    • Removedsession_activate
    • Removedsession_manage
    • Removedsignal_manage
    • Removedtest_manage
    • Removedtheme_manage
    • Removedtileset_manage
    • Removedui_manage
  7. 2 tool updatesv3.0.3
    • Changednode_get_properties1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "When non-empty, return only these property names."
        +}
    • Changedsession_activate1 field changed
      • changedInput schema / properties / session_id / description
        Previous value: -"An exact session id (e.g. UUID from ``session_manage``\nwith op=\"list\") OR a substring hint like a project folder name\n(\"test_project\", \"my_game\")."New value: +"An exact session id (``<project-slug>@<4hex>``, e.g.\n``my_game@a3f2``, from ``session_manage`` with op=\"list\")\nOR a substring hint like a project folder name\n(\"test_project\", \"my_game\")."
  8. 43 tool updatesv2.9.1
    • First observedanimation_create
    • First observedanimation_manage
    • First observedapi_manage
    • First observedaudio_manage
    • First observedautoload_manage
    • First observedbatch_execute
    • First observedcamera_manage
    • First observedclient_manage
    • First observededitor_manage
    • First observededitor_reload_plugin
    • First observededitor_screenshot
    • First observededitor_state
    • First observedfilesystem_manage
    • First observedgame_manage
    • First observedinput_map_manage
    • First observedlogs_read
    • First observedmaterial_manage
    • First observednode_create
    • First observednode_find
    • First observednode_get_properties
    • First observednode_manage
    • First observednode_set_property
    • First observedparticle_manage
    • First observedproject_manage
    • First observedproject_run
    • First observedresource_manage
    • First observedscene_get_hierarchy
    • First observedscene_manage
    • First observedscene_open
    • First observedscene_save
    • First observedscript_attach
    • First observedscript_create
    • First observedscript_manage
    • First observedscript_patch
    • First observedsession_activate
    • First observedsession_manage
    • First observedsignal_manage
    • First observedtest_manage
    • First observedtest_run
    • First observedtheme_manage
    • First observedtilemap_manage
    • First observedtileset_manage
    • First observedui_manage

TDQS

A3.9/5.0

Scored across 47 tools

Disambiguation4/5

Most tools have clearly distinct domains (scene, node, script, resource, animation, material, particles, camera, audio, tilemap, gridmap, navigation, CSG), and the _manage suffix groups related ops. However, there is some overlap: editor_state vs editor_manage(op=state), scene_get_hierarchy vs scene_manage(get_roots), and script_create/script_patch/script_manage vs filesystem_manage(write_text) all have partially redundant surfaces that could cause misselection.

Naming Consistency3/5

The naming is mostly verb_noun (project_run, scene_open, node_create, script_attach, batch_execute) with a consistent _manage suffix for multi-op tools. But there are deviations: editor_screenshot and editor_reload_plugin break the pattern, some tools use noun_verb (editor_screenshot, project_run) while others use noun_manage, and the _manage tools mix verbs inside ops (e.g. settings_get vs get_class vs list). The pattern is readable but not fully uniform.

Tool Count2/5

47 tools is a very large surface for a single MCP server. While the Godot editor is a broad domain, many tools are actually multi-op wrappers (e.g. project_manage, node_manage, resource_manage) that bundle dozens of operations, making the effective surface even larger. This exceeds the typical well-scoped range and will burden agent tool selection.

Completeness5/5

The tool surface is remarkably comprehensive for Godot editor automation: scene lifecycle, node manipulation, scripts, resources, materials, animations, particles, cameras, audio, tilemaps, gridmaps, navigation, CSG, UI, themes, input, signals, autoloads, tests, project settings, and runtime game control. There are no obvious dead ends; even niche areas like VisualShader and custom addon tools are covered.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    Enables AI-driven game development by providing MCP tools to interact with the Godot editor, including scene editing, node manipulation, script attachment, and scene execution.
    28
    13 npm
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Provides 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
    -
  • A
    license
    B
    quality
    B
    maintenance
    Connects MCP-capable AI clients to a running Godot 4 editor for scene, node, project, and debug runtime operations via a local-first architecture.
    36
    1
    MIT
  • F
    license
    A
    quality
    A
    maintenance
    MCP server that connects AI coding assistants to a live Godot editor, enabling scene, node, script, resource, runtime, debugger, and test workflows through natural language.
    45
    -