Skip to main content
Glama

This project is a fork of Coding-Solo/godot-mcp, originally created by Solomon Elias.

Godot MCP

Made with Godot

                           (((((((             (((((((
                        (((((((((((           (((((((((((
                        (((((((((((((       (((((((((((((
                        (((((((((((((((((((((((((((((((((
                        (((((((((((((((((((((((((((((((((
         (((((      (((((((((((((((((((((((((((((((((((((((((      (((((
       (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
     ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
    ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
      (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
        (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
         (((((((((((@@@@@@@(((((((((((((((((((((((((((@@@@@@@(((((((((((
         (((((((((@@@@,,,,,@@@(((((((((((((((((((((@@@,,,,,@@@@(((((((((
         ((((((((@@@,,,,,,,,,@@(((((((@@@@@(((((((@@,,,,,,,,,@@@((((((((
         ((((((((@@@,,,,,,,,,@@(((((((@@@@@(((((((@@,,,,,,,,,@@@((((((((
         (((((((((@@@,,,,,,,@@((((((((@@@@@((((((((@@,,,,,,,@@@(((((((((
         ((((((((((((@@@@@@(((((((((((@@@@@(((((((((((@@@@@@((((((((((((
         (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
         (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
         @@@@@@@@@@@@@((((((((((((@@@@@@@@@@@@@((((((((((((@@@@@@@@@@@@@
         ((((((((( @@@(((((((((((@@(((((((((((@@(((((((((((@@@ (((((((((
         (((((((((( @@((((((((((@@@(((((((((((@@@((((((((((@@ ((((((((((
          (((((((((((@@@@@@@@@@@@@@(((((((((((@@@@@@@@@@@@@@(((((((((((
           (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
              (((((((((((((((((((((((((((((((((((((((((((((((((((((
                 (((((((((((((((((((((((((((((((((((((((((((((((
                        (((((((((((((((((((((((((((((((((


                          /$$      /$$  /$$$$$$  /$$$$$$$
                         | $$$    /$$$ /$$__  $$| $$__  $$
                         | $$$$  /$$$$| $$  \__/| $$  \ $$
                         | $$ $$/$$ $$| $$      | $$$$$$$/
                         | $$  $$$| $$| $$      | $$____/
                         | $$\  $ | $$| $$    $$| $$
                         | $$ \/  | $$|  $$$$$$/| $$
                         |__/     |__/ \______/ |__/

A Model Context Protocol (MCP) server for interacting with the Godot game engine.

The npm package for this fork is @grinry/godot-mcp.

Introduction

Godot MCP enables AI agents to launch the Godot editor, run projects, capture debug output, and control project execution. This direct feedback loop helps agents understand what works and what doesn't in real Godot projects, leading to better code generation and debugging assistance.

Related MCP server: Godot MCP

Features

This README describes the code in this checkout. Features with pending changesets may not yet be available in the published npm package or its plugin launcher; use a local build to try unreleased changes.

  • Launch Godot Editor: Open the Godot editor for a specific project

  • Run Godot Projects: Execute Godot projects in debug mode

  • Capture Debug Output: Retrieve console output and error messages

  • Reusable Playtests: Run frame-based input sequences, state assertions, PNG baseline comparisons with diff images, and screenshot steps with structured results and cleanup

  • Runtime Performance: Read timestamped engine monitors with units and renderer availability

  • Frame-Based Sampling: Collect monitor/property series with scalar and vector summaries

  • Project Configuration: Preview and edit settings, autoloads and InputMap bindings while preserving unrelated comments and values

  • Control Execution: Start and stop Godot projects programmatically

  • Get Godot Version: Retrieve the installed Godot version

  • List Godot Projects: Find Godot projects in a specified directory

  • Project Analysis: Inspect project configuration, source declarations, dependencies and saved scene structure

  • Validation and Export: Check all or selected GDScript files, run scene tests or GUT tests, and export through existing presets

  • Live Feedback and Input: Inspect runtime trees/properties, simulate input, pause and step frames, and capture fresh-scene or running-game screenshots

  • Godot Reflection: Inspect built-in class properties, methods, signals and enums from the installed engine

  • Independent Sessions: Track separate game/editor processes with explicit handles on modern MCP clients

  • Scene Management:

    • Create new scenes with specified root node types

    • Add nodes to existing scenes with customizable properties

    • Load sprites and textures into Sprite2D nodes

    • Export 3D scenes as MeshLibrary resources for GridMap

    • Save scenes with options for creating variants

    • Instance reusable scenes and duplicate supported local subtrees with atomic saves and previews

    • Attach scripts, assign node references and configure the main scene

    • Preview transactional property, hierarchy, group and signal edits with content-hash guards

  • Resource Authoring: Inspect, create, and edit .tres/.res resources using validated typed properties

  • UID Management (for Godot 4.4+):

    • Get UID for specific files

    • Update UID references by resaving resources

Requirements

  • Godot Engine 4 installed on your system

  • Node.js (>=22.23.4) and npm

  • An AI agent that supports MCP

Quick Start

Codex

With the Codex CLI installed, register the server:

codex mcp add godot -- npx -y @grinry/godot-mcp

With environment variables, use this command instead:

codex mcp add godot --env GODOT_PATH=/path/to/godot --env DEBUG=true -- npx -y @grinry/godot-mcp

Alternatively, add this to ~/.codex/config.toml:

[mcp_servers.godot]
command = "npx"
args = ["-y", "@grinry/godot-mcp"]

[mcp_servers.godot.env]
GODOT_PATH = "/path/to/godot"
DEBUG = "true"

Omit GODOT_PATH to use automatic detection. Start a new Codex session after saving the configuration. Run codex mcp list to check registration, or /mcp in the Codex CLI to view active servers. See the official Codex MCP documentation for more configuration options.

Claude Code

claude mcp add godot -- npx @grinry/godot-mcp

That's it. Restart Claude Code and your Godot MCP tools are available.

With environment variables:

claude mcp add godot -e GODOT_PATH=/path/to/godot -e DEBUG=true -- npx @grinry/godot-mcp

Autohand Code

autohand mcp add godot npx @grinry/godot-mcp

For a project-scoped registration, use autohand mcp add --scope project godot npx @grinry/godot-mcp. On macOS/Linux, a custom executable can be passed with autohand mcp add godot env GODOT_PATH=/path/to/godot npx @grinry/godot-mcp. See Autohand Code for platform-specific environment configuration.

Add to your Cline MCP settings file (~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json):

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["@grinry/godot-mcp"],
      "env": {
        "DEBUG": "true"
      },
      "disabled": false,
      "autoApprove": [
        "launch_editor",
        "run_project",
        "get_debug_output",
        "stop_project",
        "get_godot_version",
        "list_projects",
        "get_project_info",
        "get_performance_monitors",
        "create_scene",
        "add_node",
        "load_sprite",
        "export_mesh_library",
        "save_scene",
        "get_uid",
        "update_project_uids"
      ]
    }
  }
}

Using the Cursor UI:

  1. Go to Cursor Settings > Features > MCP

  2. Click on the + Add New MCP Server button

  3. Fill out the form:

    • Name: godot

    • Type: command

    • Command: npx @grinry/godot-mcp

  4. Click "Add"

  5. You may need to press the refresh button in the top right corner of the MCP server card to populate the tool list

Using Project-Specific Configuration:

Create a file at .cursor/mcp.json in your project directory:

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["@grinry/godot-mcp"],
      "env": {
        "DEBUG": "true"
      }
    }
  }
}

For any MCP-compatible client, use this configuration:

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["@grinry/godot-mcp"],
      "env": {
        "GODOT_PATH": "/path/to/godot",
        "DEBUG": "true"
      }
    }
  }
}

Environment Variables

Variable

Description

GODOT_PATH

Path to the Godot executable (overrides automatic detection)

DEBUG

Set to "true" to enable detailed server-side debug logging

git clone https://github.com/grinry/godot-mcp.git
cd godot-mcp
npm install
npm run build

Then point your MCP client to build/index.js instead of using npx.

Architecture

The Godot MCP server uses a bundled GDScript approach for complex operations:

  1. Direct Commands: Simple operations like launching the editor or getting project info use Godot's built-in CLI commands directly.

  2. Bundled Operations Script: Complex operations like creating scenes or adding nodes use a single, comprehensive GDScript file (godot_operations.gd) that handles all operations.

The bundled script accepts operation type and parameters as JSON, allowing for flexible and dynamic operation execution without generating temporary files for each operation.

Troubleshooting

  • Godot Not Found: Set the GODOT_PATH environment variable to your Godot executable path

  • Connection Issues: Ensure the server is running and restart your AI assistant

  • Invalid Project Path: Ensure the path points to a directory containing a project.godot file

  • Build Issues: Make sure all dependencies are installed by running npm install

  • Ensure the MCP server shows up and is enabled in Cursor settings (Settings > MCP)

  • MCP tools can only be run using the Agent chat profile (Cursor Pro or Business subscription)

  • Use "Yolo Mode" to automatically run MCP tool requests

Releases

Releases use Changesets to manage versions and changelogs, then GitHub Actions to publish the public @grinry/godot-mcp npm package. See Contributing for the contributor workflow and one-time maintainer setup.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Validation and feedback tools

Requires Node.js 22.23.4 or newer and Godot 4. The MCP SDK has been upgraded and the unused Axios dependency removed.

Tool

Behavior

list_project_files

Lists scenes, scripts and resources. Accepts type, a relative glob pattern, and limit (default 1,000, maximum 10,000). Skips hidden files and symlinks; reports truncated when a traversal/result limit is reached.

run_scene

Runs scenePath (relative or res://) and stops after timeoutMs (default 30,000, maximum 600,000). Optional headless.

validate_project

Checks discovered GDScript files with Godot --check-only, retaining every diagnostic. Default total timeout: 60 seconds. C# and gameplay are outside this check.

run_scene_test

Runs a headless scene and returns passed, exit code, timeout status, output and diagnostics. A test scene must call get_tree().quit(0) for success or a nonzero code for failure. Default timeout: 60 seconds.

export_project

Uses an existing preset from export_presets.cfg, writing outputPath. Requires matching Godot export templates. Optional debug and timeoutMs.

capture_scene_screenshot

Runs a fresh scenePath, waits frames (default 3), and returns an inline PNG. Requires a display renderer; output uses a private temporary directory that is removed afterward. Default timeout: 30 seconds.

view_log

Reads the latest launched editor's output and errors; lineCount defaults to 200.

quit_godot

Terminates the editor launched by this server and waits for exit. Save editor changes first: unsaved changes may be lost.

run_project also accepts headless and timeoutMs. Game and editor launches each replace the preceding process of the same kind. get_debug_output retains the most recent game's final logs after exit or timeout. Logs are bounded to 1 MiB per process and 10,000 lines per stream; truncation is reported. Scene paths reject traversal and symlinks that escape the project.

add_node converts JSON numeric arrays to Vector2/3/4, their integer variants, Quaternion and Color properties. Colors accept three or four components; other vectors require the exact component count. Invalid properties fail before saving the scene. Integral JSON numbers are accepted for integer properties.

Imported textures

Before load_sprite, open the project in Godot or run godot --headless --editor --path /path/to/project --import. Godot must generate import metadata for the texture; copying a PNG alone is insufficient. Use its project resource path (for example, res://textures/player.png).

Verification

Run npm test for process lifecycle and discovery regression tests. Set GODOT_TEST_PATH to a Godot 4 executable to include the real-engine MCP and scene-editing integration test:

GODOT_TEST_PATH=/path/to/godot npm test

Live visual feedback and input

Godot annotations

Any compatible MCP client or agent can use the annotation tools; no client-specific API is required.

Call ensure_annotation_addon with projectPath to install and enable the bundled editor addon automatically. Save and reopen an already-open editor after first installation; get_annotation_status distinguishes installation from activation. In the Annotations bottom panel, capture a 2D/3D scene viewport, draw a rectangle or pin, add comments and submit. In editor-launched games, press Cmd+Shift+A on macOS (Ctrl+Shift+A elsewhere) to pause gameplay and annotate a frozen frame; press it again to close the panel. Change the shortcut with Game shortcut in the Annotations panel.

For a temporary game without addon installation, call start_debug_session with annotations: true and headless: false; it uses the default shortcut. Godot 4.7.1 is verified.

Ask your MCP client to call list_annotations, then get_annotation for original and marked PNG images plus comments/scene context. Use resolve_annotation with the returned revision to resolve or reopen a comment. Submission saves locally; it does not automatically start a chat turn. Data persists under the hidden .godot-mcp/annotations/ directory. remove_annotation_addon preserves that data and refuses modified addon files. Setup/removal and resolution respect read-only policy; all annotation tools respect allowed project roots.

See the annotation contract for tool schemas, limits, export isolation and activation details. Use a local build until this feature is released.

Editor plugin configuration

get_editor_plugins lists installed addons and their saved enablement. Use enable_editor_plugin or disable_editor_plugin with projectPath and pluginPath (for example res://addons/godot_mcp_annotations/plugin.cfg). Both support dryRun and expectedHash, preserve other plugins/comments and are blocked by read-only policy. Enabling validates the config and script paths; disabling can remove a stale entry whose files no longer exist.

These tools change saved configuration. Save and reopen an already-open Godot editor to apply it; they do not toggle the live checkbox remotely. Annotation ensure also re-enables an already-installed disabled addon. Its configuredEnabled reports the saved setting, while editorReady and activation report whether recent matching addon presence confirms activation.

Temporary debug sessions

Call start_debug_session with projectPath and optional scenePath to run a game with the temporary debug bridge. If no scene is supplied, the configured main scene is used. capture_screenshot returns a PNG of that running game's current state; capture_scene_screenshot starts a separate fresh scene.

The bridge uses a private temporary directory with authenticated requests, bounded messages and unique response IDs. It installs no addon, changes no autoload settings, and opens no network port. It runs only in the game process explicitly launched by start_debug_session; exported games do not include it. Godot may still generate its normal .godot import cache.

Use simulate_input with one of the argument objects below (one event per call):

[
  { "kind": "action", "action": "ui_accept", "pressed": true },
  { "kind": "key", "keycode": 32, "pressed": true },
  { "kind": "mouse_button", "button": 1, "x": 120, "y": 80, "pressed": true },
  { "kind": "mouse_motion", "x": 120, "y": 80 }
]

Send pressed: false to release a held input. Actions must exist in the project's InputMap. Events use Godot's input event dispatch, so scene input callbacks can observe them. set_debug_pause accepts paused: true or false; screenshots preserve that state. A headless session supports input and logs but cannot render screenshots. stop_project, another game launch, or server shutdown stops the session and removes temporary bridge files. Request cancellation/timeouts also stop the affected live session.

GUT tests

Install GUT in addons/gut, then import the project once in Godot. run_gut_tests accepts projectPath and exactly one testFile or directory (relative or res://). Optional arguments: headless (default true), includeSubdirs (default true), logLevel (0–3), and timeoutMs (default 60,000; maximum 600,000). It reports exit status, diagnostics, truncation and timeout, and rejects a run with no tests. It follows the GUT command-line runner; integration has been verified with GUT 9.6.1.

Desktop bundle and Codex plugin

npm run build:mcpb creates dist/godot-mcp-VERSION.mcpb. It rebuilds the source, bundles runtime dependencies, copies all Godot scripts, validates the manifest, and verifies that the bundled server exposes the same MCP tools. Import the bundle into a desktop client supporting MCPB and configure its Godot executable path. Node.js >=22.23.4 and Godot must be available on the client machine. CI verifies the bundle; successful npm releases attach it to the matching GitHub release. Desktop installation itself has not been automated.

The repository also includes .codex-plugin/plugin.json and .codex-plugin/mcp.json for local/repository plugin distribution using the supported Codex compatibility layout. Its launcher uses the published @grinry/godot-mcp package. Changesets updates the plugin version when preparing a release. The Codex CLI configuration above remains available for direct MCP registration.

To exercise the display and GUT integrations locally:

GODOT_TEST_PATH=/path/to/godot GODOT_TEST_RENDER=true GODOT_TEST_EXPORT=true GUT_TEST_ADDON_PATH=/path/to/addons/gut npm test

update_project_uids performs a headless editor import before resaving resources, so Godot creates script/shader .uid files in editor mode. It verifies missing UID files rather than reporting a save as successful generation.

Scene authoring and reflection

Tool

Behavior

attach_script

Attaches scriptPath (.gd or .cs, relative or res://) to nodePath in scenePath. Checks the script's native base type and loadability before saving.

set_node_reference

Sets an exported property on nodePath to targetNodePath in the same scene. Supports typed Node references and NodePath properties; rejects incompatible targets.

set_main_scene

Sets application/run/main_scene to scenePath, preserving other settings and comments.

get_class_info

Reflects a built-in className from the installed Godot version. Optional section: properties (default), methods, signals, or enums; filter, includeInherited (default true), and limit (default 100, maximum 500). Does not provide prose documentation.

get_runtime_tree

Reads the live debug session's scene nodes, classes and script paths. maxDepth defaults to 10 (maximum 20), maxNodes to 100 (maximum 200). Reports truncation and preserves pause state.

Scene node paths use root, ., or a path beneath the root such as root/Player. Scene editing runs project constructors: use trusted projects. Mutating scene tools preflight script dependencies and verify that repacking preserves existing scripts. Unavailable scripts fail before scene saving. C# operations require a Godot .NET executable and a built, loadable assembly; a standard executable refuses C# edits instead of dropping attachments. GDScript attachment and safe rejection/preservation with standard Godot have integration coverage; positive .NET attachment still needs verification with a .NET installation.

update_project_uids imports the project before resaving and returns scene/UID counters. One-shot engine operations have bounded output, a 60-second deadline (version queries use 10 seconds), request cancellation and shutdown cleanup. launch_editor observes the first 1.5 seconds for errors or early exit, returns its diagnostics and distinguishes process startup from project readiness. view_log retains later errors.

Project inspection and transactional editing

Tool

Behavior

get_project_overview

Reads main-scene settings, autoloads, input actions, enabled addons, custom GDScript declarations and text resource dependencies without starting Godot. limit defaults to 200 (maximum 500). Godot expressions are returned verbatim; binary resources and UID targets are marked incomplete or left unresolved.

get_scene_info

Reads saved scene nodes, ownership, stored properties, attached script paths/export metadata, persistent connections, groups and dependencies without instantiating the scene. Includes base-scene and instance paths; does not flatten inherited/instanced content or infer unsaved editor changes. maxNodes defaults to 100 (maximum 500); maxProperties to 50 (maximum 200).

set_node_properties

Sets a properties dictionary on an existing local nodePath. Supports dryRun and expectedHash just like modify_scene.

modify_scene

Validates and applies 1–100 ordered operations to one scene, then saves once using an atomic replacement. A failed operation leaves the scene file untouched by the tool.

modify_scene operations are set_properties (properties), rename_node (newName), reparent_node (parentNodePath), remove_node, connect_signal / disconnect_signal (signal, targetNodePath, method), and add_group / remove_group (group). Every operation includes nodePath. Paths after a rename/reparent refer to the updated hierarchy. Reparenting preserves the transform; groups and signal connections persist after reload. Signal connections check declared argument counts/types and built-in or registered script inheritance; untyped signal arguments cannot be assigned to a typed method parameter without a compatible declaration.

instance_scene and duplicate_node are available both as dedicated tools and as modify_scene operations. Both take newName; nodePath identifies the local parent for instancing and the source subtree for duplication. Instancing also takes instanceScenePath, preserves the scene instance and its ownership, and rejects dependencies back to the edited scene. Duplication creates a sibling and preserves scripts, groups, internal NodePaths/exported Node references and persistent signals. It refuses the scene root, subtrees containing scene instances or unique-name nodes, links outside the subtree, embedded resource references and references nested in collections. External file resources may be shared by the copy. Names must be unique among siblings. Dedicated tools accept dryRun and expectedHash.

{
  "projectPath": "/path/to/project",
  "scenePath": "res://level.tscn",
  "dryRun": true,
  "operations": [
    {"op": "instance_scene", "nodePath": ".", "newName": "Player", "instanceScenePath": "res://player.tscn"},
    {"op": "duplicate_node", "nodePath": "SpawnPoint", "newName": "SecondSpawn"}
  ]
}

Preview first, then pass its sourceHash as expectedHash when applying:

{
  "projectPath": "/path/to/project",
  "scenePath": "res://player.tscn",
  "dryRun": true,
  "operations": [
    {"op": "set_properties", "nodePath": ".", "properties": {"position": {"type": "Vector2", "value": [32, 64]}}},
    {"op": "add_group", "nodePath": ".", "group": "players"}
  ]
}

dryRun validates and repacks without replacing the original file; it still executes constructors and setters. A fresh content check guards every save; expectedHash additionally rejects stale previews. Supported values are booleans, numbers, strings, null object references, numeric vectors/colors/quaternions, NodePaths and resource references ({"type":"Resource","path":"res://icon.svg"}). Vectors accept component arrays or explicit type tags; colors require four components. Use attach_script and set_node_reference for script and typed node assignments. Collections, transforms and other unsupported property types fail explicitly.

Transactional edits refuse inherited scenes, nodes inside scene instances, scene-root structural edits, and changes to ownership or script properties. Rename/reparent update resolvable relative NodePaths; removal refuses surviving node references and persistent connections into the removed subtree. Structural edits refuse unresolved/absolute paths, embedded resources and references nested in collections rather than guessing their meaning. Script string literals and dynamically computed paths cannot be rewritten: validate and play-test after changing node paths. Instantiation, resource loading, autoloads, constructors and setters can execute project code; these tools are blocked by GODOT_READ_ONLY and do not sandbox those side effects.

Resource inspection and authoring

Tool

Behavior

get_resource_info

Reads stored resource properties with typed values and sourceHash. maxProperties defaults to 50 (maximum 200).

create_resource

Creates an instantiable built-in className at resourcePath (.tres/.res), optionally with properties. Refuses existing files; the parent directory must exist. Supports dryRun.

set_resource_properties

Sets 1–100 stored properties on an existing resource. Supports dryRun and expectedHash, preserves its UID/script, verifies a reload and saves through atomic replacement.

These tools support the same primitive, numeric vector/color, NodePath and external Resource values as scene property editing. They exclude scripts and PackedScenes, custom resource creation, collection/transform writes, script/path/metadata changes and embedded-resource editing. Inspection, previews and setters may execute project code; all three require execution permission and are blocked by GODOT_READ_ONLY. Previews leave the target file untouched, but do execute resource loading/setters. An independently created resource is never overwritten by create_resource.

{
  "projectPath": "/path/to/project",
  "resourcePath": "res://shapes/player.tres",
  "className": "RectangleShape2D",
  "properties": {"size": {"type": "Vector2", "value": [24, 48]}},
  "dryRun": true
}

Runtime inspection and frame stepping

get_node_properties reads 1–50 explicitly named properties from a live nodePath, returning typed, bounded values and the current pause state. It executes getters and is blocked in read-only mode. Collections are limited to 100 entries and six nesting levels, with a shared traversal budget of 1000 values per response; unsupported values are labeled rather than converted to misleading strings. Requests whose encoded response exceeds 60 KiB fail with an actionable limit error.

For gameplay checks, start a debug session, send input, pause it with set_debug_pause, record properties, call step_frames with frames (1–120) and kind (physics, default, or process), and inspect again or capture a screenshot. Stepping requires a paused session, resumes through the requested frame boundaries, and leaves it paused. Process stepping may advance physics too, and physics stepping may advance process frames. Nodes that ignore pause, wall-clock timers, asynchronous work and external systems continue to follow Godot's behavior; this is not a deterministic replay engine. Use the returned session handle on modern MCP clients.

get_performance_monitors reads the current debug session's FPS, process/physics times (milliseconds), memory, object/node/resource counts, draw calls and active physics bodies. Each monitor includes unit and available, with null values for unavailable headless render metrics. sampledAtMs is monotonic engine uptime, not a calendar timestamp. Some engine monitors update only once per second; an early zero does not prove that the measured work is absent. This tool works while paused and in read-only mode. It provides snapshots; use sample_performance below for multi-frame series and summaries. Function-level profiling is not supported.

Project configuration

Tool

Behavior

get_project_setting

Reads a stored setting expression, stored and sourceHash directly from project.godot. This is serialized configuration, not an effective value with defaults/feature tags/override.cfg applied.

set_project_setting / remove_project_setting

Sets a typed value or removes a stored override. Use section/key paths, for example display/window/size/viewport_width. Input/autoload writes use their dedicated tools.

register_autoload / unregister_autoload

Adds/removes a name and existing resourcePath (.gd, .cs, .tscn, .scn). singleton defaults to true. Replacing a different registration requires replace:true. New entries append after existing autoloads.

get_input_actions

Reads configured action bindings; optional action filters the result. limit defaults to 100 (maximum 200). Engine defaults and runtime InputMap changes are excluded.

set_input_action / remove_input_action

Creates/replaces an action and its complete events list, or removes its configured entry. Omitted deadzone preserves an existing value; new actions default to 0.5. An empty event list clears configured bindings. Removing a built-in override restores the engine default on next launch rather than disabling it.

All configuration writers accept dryRun and expectedHash. They preserve unrelated entries, multiline values, comments, line endings and existing autoload order; saves are atomic and serialized with set_main_scene. A preview returns the old file's sourceHash for the subsequent expectedHash. Changes affect future launches; already-running games and unsaved editor state are unchanged.

Settings accept primitives, bounded JSON arrays/dictionaries and explicit vector/color/NodePath/StringName/PackedStringArray tags. Built-in types are checked against the installed engine, including feature-tag base types; engine ranges/enums and full gameplay suitability are not comprehensively validated. Values are limited to six nested levels and 1000 items. Resource/Object setting values are unsupported. project.godot is limited to 1 MiB; ambiguous duplicate sections/keys, unbalanced syntax and invalid UTF-8 are refused. Malformed Variant syntax is rejected before saving.

Autoload registration checks file existence/confinement and built-in class-name conflicts. It does not compile the script, verify Node inheritance/compiled C# assemblies or resolve conflicts with project-defined global classes. Use validation and a fresh debug session to verify runtime compatibility. Isolated engine serialization/config parsing starts no project autoloads and does not install project files. Parsed config tools require execution permission; GODOT_READ_ONLY permits only the raw get_project_setting query among these tools.

{
  "projectPath": "/path/to/project",
  "action": "move_right",
  "deadzone": 0.2,
  "events": [
    {"kind": "key", "key": "D"},
    {"kind": "joypad_motion", "axis": 0, "axisValue": 1}
  ],
  "dryRun": true
}

Pass this to set_input_action. Bindings support key (choose exactly one key, numeric keycode or physicalKeycode), mouse_button (button 1–9), joypad_button (button 0–127) and joypad_motion (axis 0–9, axisValue -1 or 1). device defaults to -1 (all devices). Key/mouse bindings support ctrl, shift, alt, meta and commandOrControl; the last enables Godot's platform-specific Command/Control mapping and cannot be combined with explicit ctrl/meta. Up to 32 events are accepted. Reads mark unsupported event shapes/classes rather than silently converting them, including non-default key locations, mouse double-clicks and fractional controller-axis bindings; their original bytes survive unrelated edits. Action/autoload names use identifier syntax.

Examples for other writers:

{"projectPath":"/path/to/project","setting":"display/window/size/viewport_width","value":1280,"dryRun":true}
{"projectPath":"/path/to/project","name":"GameState","resourcePath":"res://game_state.gd","singleton":true,"dryRun":true}

Frame-based sampling

Pause a debug session with set_debug_pause, then call sample_performance or sample_node_properties. Both capture an initial value, advance intervalFrames between subsequent samples, and finish paused. Defaults are 30 samples, one physics frame per interval and timeoutMs:60000; kind:"process" selects process-frame boundaries.

{"samples":60,"intervalFrames":1,"monitors":["physicsTime","staticMemory","nodeCount"]}
{"nodePath":"Player","properties":["velocity","health"],"samples":30,"intervalFrames":2}

Pass the first example to sample_performance and the second to sample_node_properties, adding sessionId on modern clients. Performance sampling accepts the monitor names returned by get_performance_monitors; omitting monitors selects all. Property sampling reads 1–10 named properties on one node and rejects incomplete/unsupported encoded values. Each sample includes monotonic sampledAtMs, global engine process/physics-frame counters and values. advancedFrames counts resumed callback boundaries; global engine counters also include frames spent paused.

Summaries include minimum, maximum, mean, nearest-rank p50/p95, first/last and delta for numeric series. Vectors/colors/quaternions have component summaries. Unavailable monitors have null values and an unavailable summary; nonnumeric properties report the count of transitions instead. Arithmetic overflow is labeled, with affected summary values null. Monitor units and renderer availability accompany performance series.

Limits are 2–120 samples, 1–120 frames per interval, 1200 total advanced frames, 40 KiB of raw evidence and 60 KiB including summaries. The global deadline is at most 600000 ms. Sampling advances project code and executes getters, so both tools are blocked by read-only policy. Invalid fields are rejected before stepping. Cancellation/timeouts stop the debug game and clear IPC so a pending sample cannot continue into another session. Other failures leave the session paused. These are controlled frame-based observations, not passive sampling, a deterministic simulator or a function-level profiler; slowly refreshed engine monitors may repeat values.

Reusable gameplay scenarios

run_playtest starts a fresh temporary debug session in the selected session, pauses it, executes ordered steps, and always stops its game before returning. It replaces any preceding game in that session. Successful runs on modern clients return an idle sessionId; use it for retained logs or release it with close_session. Newly allocated handles are released automatically on failure; evidence remains in the returned report. Existing sessions in other handles are unaffected. Project files remain unchanged by the tool; game scripts retain their normal filesystem side effects.

Steps are input (event, using simulate_input fields), frames (frames, optional kind), assert (nodePath, property, expected, optional comparison/tolerance) and screenshot. Input events are queued while paused and flushed when the next frame step resumes, before its node callbacks. Follow input with a frame step before assertions, screenshots or the end of the sequence. Multiple queued events retain their order.

Comparisons are eq (default), ne, numeric lt/lte/gt/gte, and approx (recursive numeric tolerance, default 0.00001). Vectors/colors use the explicit typed shapes returned by get_node_properties. Truncated or unsupported values cannot pass an assertion. At least one state assertion or screenshot comparison is required. The result contains per-step evidence, overall passed, diagnostics and inline screenshot images; failed assertions return isError:true. Operational failures report RUNTIME_ERROR, TIMEOUT or OUTPUT_LIMIT with completed-step evidence. Cancellation stops the game before propagating the cancelled request.

{
  "projectPath": "/path/to/project",
  "scenePath": "res://player.tscn",
  "steps": [
    {"op": "input", "event": {"kind": "action", "action": "jump", "pressed": true}},
    {"op": "frames", "frames": 10},
    {"op": "assert", "nodePath": ".", "property": "health", "comparison": "gt", "expected": 0},
    {"op": "input", "event": {"kind": "action", "action": "jump", "pressed": false}},
    {"op": "frames", "frames": 1}
  ]
}

Limits: 100 steps, 50 combined state/visual assertions, 120 frames per step/1200 total, three screenshots and 30 KiB of assertion evidence. timeoutMs defaults to 60000 (maximum 600000). headless defaults to true; screenshots require headless:false and a display. Frame boundaries improve repeatability but do not guarantee deterministic gameplay, fixed startup-frame counts or paused external systems. Input recording and stress testing are not provided yet.

Screenshot baseline comparison

Use a compare_screenshot step in run_playtest with headless:false:

{
  "projectPath": "/path/to/project",
  "scenePath": "res://menu.tscn",
  "headless": false,
  "steps": [
    {"op": "frames", "frames": 3, "kind": "process"},
    {"op": "compare_screenshot", "baselinePath": "res://tests/baselines/menu.png", "pixelTolerance": 2, "maxChangedRatio": 0.001}
  ]
}

baselinePath must name an existing PNG inside the project; escaping paths/symlinks are rejected. All baselines are snapshotted, hashed and decoded in an isolated headless engine before replacing the selected game. Missing, malformed or oversized references leave any existing game running. Comparison reads the snapshot, so later edits to the reference cannot change the check. The tool never writes, creates or updates baseline files. To establish a baseline, capture the intended state with a screenshot step and explicitly save its returned PNG to your chosen project path.

Both images convert to RGBA8 with Godot's Image API. A pixel is changed if any of its four channel differences exceeds pixelTolerance (integer 0–255, default 0). The step passes when changedPixels / totalPixels <= maxChangedRatio (0–1, default 0); the example allows a channel difference of 2 and up to 0.1% changed pixels. Comparison includes alpha and RGB even in transparent pixels; it does not apply perceptual, anti-aliasing or color-profile corrections. Images are compared at their original size. Different dimensions return a failed step with IMAGE_DIMENSION_MISMATCH and both sizes, without a diff.

Each completed comparison reports passed, baselinePath, baselineHash, dimensions, changedPixels, totalPixels, changedRatio, changedPercentage and maxChannelDelta, plus tolerances. The tool returns both the actual screenshot and a diff PNG: magenta pixels exceed tolerance; other pixels show the actual image in dim grayscale. imageIndex and diffImageIndex index the response's image blocks, excluding its initial text block. screenshotCount counts captures and diffCount counts diff images. A failed visual assertion makes the overall tool result isError:true; remaining steps still execute, and the game is stopped afterward.

Each PNG is limited to 8 MiB, 4096 pixels per axis and four million total pixels; comparison shares the existing three-capture scenario limit, deadline and cancellation cleanup. References need no Godot import metadata. A display renderer is required for the actual capture. Keep resolution, renderer, fonts and scene state consistent; this is a byte-channel comparison, not a guarantee of cross-platform visual identity. Wait for the intended state using frames/state assertions before capturing.

Targeted validation and diagnostics

validate_project accepts either scripts (1–1000 relative or res:// GDScript paths) or a relative pattern glob. Omitting both checks all discovered GDScript files. An empty selection reports nothingChecked and fails rather than claiming success. C# validation remains outside this tool's scope.

Validation, finite test/export runs and game debug output include diagnostics entries with file, line, severity and message, plus error/warning counts. Unknown locations are null; raw bounded output remains available. Warnings are reported separately and do not fail an otherwise successful run. New inspection/edit/runtime results also include MCP structuredContent alongside text for compatible clients.

Protocol compatibility and sessions

The official MCP v2 server supports 2026-07-28 over stdio, including discovery and per-request metadata, while retaining 2025-11-25 initialization compatibility. Server instructions guide the workflow and tool annotations identify read and mutation operations.

For 2026-07-28, run_project, run_scene, launch_editor, and start_debug_session return a sessionId in a final text content block. Pass it to subsequent log, input, pause, screenshot, runtime-tree, property inspection, performance snapshots, sampling, stepping and stop calls. Multiple sessions are independent. Supplying an existing handle replaces the previous process of that kind in that session. close_session stops its game/editor and releases the handle; stale handles are rejected. A server supports at most 16 explicit sessions at once. Older clients retain the existing default-session workflow, and may opt into explicit sessions by using handles returned by newer clients.

Optional execution policy

Set GODOT_ALLOWED_ROOTS to permitted project/search directories, separated by the platform path-list delimiter (: on macOS/Linux, ; on Windows). Canonical paths are checked, including symlinks. With no value, project selection remains unrestricted.

Set GODOT_READ_ONLY=true to allow metadata/discovery/log/reflection queries and process cleanup while rejecting resource writes and project execution, including tests and screenshots that start scenes. For an existing session, runtime-tree and performance-snapshot reads are allowed. Property getters, sampling, input, pause changes and screenshots require execution permission and are blocked. Configuration/resource parsing that invokes Godot is also blocked; raw project-setting reads remain allowed. These controls restrict MCP requests; they are not an OS sandbox for project scripts. Hosts should retain their tool-approval controls.

Windows and WSL

Use an executable file in GODOT_PATH, not its containing directory. The server passes JSON and paths as native argument arrays, including spaces and quotes. CI runs portable regression checks on Windows, macOS and Linux with Node 22.23.4 and 24; platform coverage does not imply all engine/render/.NET combinations are verified.

In WSL, use a Linux Godot binary and Linux project paths. Alternatively run both this server and Godot natively on Windows with Windows paths. Directly combining WSL project paths with a Windows .exe is rejected with an actionable error; binary-aware cross-environment path translation is not supported.

Google Antigravity

Following Google's MCP configuration guide, open MCP Servers → Manage MCP Servers → View raw config in the IDE, or use the CLI's /mcp manager. Add the server to mcpServers in your global ~/.gemini/config/mcp_config.json or workspace .agents/mcp_config.json:

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["-y", "@grinry/godot-mcp"],
      "env": { "GODOT_PATH": "/absolute/path/to/godot" }
    }
  }
}

Refresh the server configuration. This is a local stdio server; it does not require an editor addon or OAuth.

Available Tools

65 tools
add_nodeC

Add a node to an existing scene

NameRequiredDescriptionDefault
nodeNameYesName for the new node
nodeTypeYesType of node to add (e.g., Sprite2D, CollisionShape2D)
scenePathYesPath to the scene file (relative to project)
propertiesNoOptional properties to set on the node
projectPathYesPath to the Godot project directory
parentNodePathNoPath to the parent node (e.g., "root" or "root/Player")

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the core mutation/safety profile is covered. The description adds no further behavioral detail: it does not say whether the scene is saved automatically, what happens if the node name already exists, how parentNodePath defaults, or how properties are applied.

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 single front-loaded sentence with zero wasted words. Its brevity is the main issue, but that is better captured as a completeness gap than as a conciseness failure.

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

Completeness2/5

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

For a six-parameter mutation tool with nested properties, no output schema, and no sibling differentiation, the description is far too thin. It omits parent-node behavior, save semantics, failure modes, and the distinction from tools like instance_scene and duplicate_node.

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 all six parameters are documented in the input schema. The description adds no parameter-level meaning beyond the schema, such as the default parent or the property value format, so the baseline 3 applies.

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?

States a specific verb and resource ("Add a node") and scope ("to an existing scene"). It is clear what the tool does, but it does not differentiate itself from nearby siblings such as instance_scene, duplicate_node, create_scene, or modify_scene.

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?

There is no guidance on when to use this tool versus alternatives, nor any prerequisites, exclusions, or follow-up requirements. The phrase "existing scene" weakly implies that the scene must already be loaded or present, but no explicit usage conditions are given.

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

attach_scriptA

Attach a compatible GDScript or C# script to a scene node. Executes project constructors; refuses unavailable scripts before saving. C# requires Godot .NET and a built assembly.

NameRequiredDescriptionDefault
nodePathYes
scenePathYes
scriptPathYes
projectPathYes

TDQS

A3.5/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: it executes project constructors (an unadvertised side effect), validates and refuses unavailable scripts *before saving* (so failure is non-destructive/atomic), and states the .NET build prerequisite. Annotations only cover the generic read/destructive/open-world profile, so this extra context is genuinely valuable. It still omits whether an existing attachment is replaced or an error is raised.

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?

Three short sentences, front-loaded with the action, then side effects, then the C# caveat. Nothing is padded or repeated.

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 four-required-parameter mutation with no output schema and only generic annotations, the description covers side effects and failure mode well but leaves parameter meaning and the result of a successful attach (does it return the node, the resource, nothing?) entirely unaddressed.

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?

All four parameters (projectPath, scenePath, nodePath, scriptPath) have zero schema description coverage, and the description explains none of them — not even the distinction between the target node path and the script path, or whether paths are absolute or project-relative. The self-describing names carry all the weight here.

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?

Specific verb ('Attach') plus resource ('compatible GDScript or C# script') and target ('scene node'), which clearly separates it from siblings like set_node_properties or modify_scene. It stops short of naming which sibling to use for related script work, but the operation is unambiguous.

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 gives preconditions ('C# requires Godot .NET and a built assembly', 'refuses unavailable scripts') that imply when this call will fail, but never states when to choose this over alternatives such as modify_scene or set_node_reference. Usage is implied rather than directed.

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

capture_scene_screenshotA

Run a fresh scene and return its rendered viewport as a PNG image. Requires a display; does not capture an existing run.

NameRequiredDescriptionDefault
framesNo
scenePathYesRelative or res:// PackedScene path
timeoutMsNo
projectPathYesGodot project directory

TDQS

A4/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds a meaningful prerequisite (a display is required) plus the key semantic that it launches a fresh run rather than snapshotting an existing one. It doesn't explain time cost or how frames/timeout affect the capture, leaving some gap.

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?

Two short sentences, front-loaded with the core action and output, followed by prerequisites and exclusions. No filler.

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 output medium (PNG viewport) is conveyed even without an output schema, and the display prerequisite is noted. However, for a tool with frames and timeoutMs knobs, nothing explains their effect on the capture, leaving the agent to guess at how to tune the run.

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 coverage is only 50%: projectPath and scenePath are described in the schema, but frames and timeoutMs have no schema description. The description says nothing about any of the four parameters, so it fails to compensate for the documented gap on frames and timeoutMs.

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 verb ('run a fresh scene') and concrete output ('rendered viewport as a PNG image'), and explicitly distinguishes itself from capturing existing runs, which separates it from siblings like capture_screenshot and run_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?

Gives a clear condition ('requires a display') and an explicit exclusion ('does not capture an existing run'), implicitly routing agents to a different tool for that case. It stops short of naming the alternative sibling outright, so not a 5.

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

capture_screenshotA

Capture the current live debug session as an inline PNG, including when paused. Requires a display renderer.

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare the safety profile (not read-only, open-world, non-destructive), so the description's marginal contribution is the return format (inline PNG) and the renderer prerequisite, both genuinely useful. It stops short of clarifying what happens with no active session or whether the captured image is returned inline vs. written to disk.

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?

Two short sentences, no filler, with the core action and output format front-loaded. The pause caveat and renderer prerequisite are appended compactly.

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 no-output-schema, single-optional-param read-like tool, the description covers action, output format, and one hard prerequisite. Only minor gaps remain (behavior without a live session, inline vs. saved artifact) against an otherwise thin surface.

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% and the single optional sessionId is fully documented in the schema, so the baseline of 3 applies. The description adds nothing about sessionId, such as what happens when it is omitted or why follow-up tools need it.

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?

States a specific verb and resource ('Capture the current live debug session as an inline PNG'), which is more precise than the name alone. The 'live debug session' framing implicitly differentiates it from the sibling capture_scene_screenshot, but it never names that sibling to make the distinction explicit.

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?

Adds two useful usage cues: it works even when the session is paused, and it requires a display renderer. However, it gives no guidance on when to choose this over capture_scene_screenshot, and no exclusions or fallback behavior when no renderer is available.

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

close_sessionB

Stop and release an explicit process/debug session.

NameRequiredDescriptionDefault
sessionIdYesExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the operation is a non-destructive, non-read-only, closed-world mutation. The description adds that the session is stopped and its handle released, which is meaningful context, but it does not say what happens to follow-up tool calls, whether the call is idempotent, or what occurs if the session is already gone.

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?

A single front-loaded sentence with no filler. Slightly terse for the scope, but every word contributes.

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 one-parameter cleanup tool with annotations covering safety and a fully documented schema, the definition is functionally sufficient. It omits the relationship to start_debug_session and the post-close behavior of pending handles, which would matter to an agent sequencing debug workflows.

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% and the single sessionId parameter is fully documented in the schema, including its role in follow-up tools. The description adds no syntax, format, or validity details beyond that, so baseline 3 applies.

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?

States a specific verb pair and resource ('Stop and release an explicit process/debug session'), which an agent can distinguish from stop_project or quit_godot at a high level. However, it does not explicitly name those alternatives, so the differentiation is only partial.

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 word 'explicit' implies this applies to sessions opened via the sibling start_debug_session rather than the whole project, but usage is only implied. There is no explicit when/when-not guidance relative to stop_project, set_debug_pause, or quit_godot.

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

create_resourceA

Create a built-in Resource as .tres/.res without overwriting existing files. Parent directory must exist. Supports typed properties and dryRun.

NameRequiredDescriptionDefault
dryRunNo
classNameYes
propertiesNo
projectPathYes
resourcePathYes

Output Schema

NameRequiredDescription
savedYes
classNameYes
truncatedNo
propertiesNo
sourceHashYes
resourcePathYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only declare the generic profile (readOnly=false, destructive=false, openWorld=true); the description adds genuinely new behavior: existing files are never clobbered, the parent directory must pre-exist, and a dryRun path exists. It stops short of saying what dryRun returns or how errors surface on an existing file.

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?

Three short sentences, each carrying a distinct constraint, with the file-overwrite guarantee front-loaded. Nothing is redundant.

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?

Output schema and annotations cover the return and safety profile, and the description supplies the overwrite and directory prerequisites. The remaining gap is the nested 'properties' payload shape and the projectPath/resourcePath relationship, which an agent needs to build a valid call.

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% for 5 parameters including a nested 'properties' object, so the description carries the full burden. It explains dryRun and hints at typed 'properties', but projectPath, resourcePath, and className are only obliquely implied and no format for the nested object is given.

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?

States a specific verb+resource ('Create a built-in Resource') and pins down the output format (.tres/.res), which implicitly separates it from create_scene. It never names a sibling or explicitly contrasts resource creation with scene creation, so an agent must infer the boundary.

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?

Gives a real prerequisite ('Parent directory must exist') and a safety condition ('without overwriting existing files'), which is more than most siblings offer. It does not say when to prefer this over create_scene or set_resource_properties, nor when to choose dryRun.

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

create_sceneC
Destructive

Create a new Godot scene file

NameRequiredDescriptionDefault
scenePathYesPath where the scene file will be saved (relative to project)
projectPathYesPath to the Godot project directory
rootNodeTypeNoType of the root node (e.g., Node2D, Node3D)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, but the description adds no context explaining that destructive flag — notably whether creating at an existing scenePath overwrites an existing file. For a write tool with a destructive hint, the description should clarify overwrite/error behavior, which it does not.

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?

A single front-loaded sentence with no filler. It is efficient, though the brevity leaves it thin rather than genuinely tight.

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

Completeness2/5

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

For a file-creating mutation with a destructive annotation and no output schema, the agent needs to know what is returned (path, UID, root node) and what happens on path collisions. Neither is covered, leaving meaningful gaps for correct invocation.

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 all three parameters (scenePath, projectPath, rootNodeType) are already documented in the schema. The description adds no extra meaning such as a default root node type or path format expectations, so baseline 3 applies.

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?

States a specific verb and resource ('Create a new Godot scene file'), so the agent knows exactly what operation occurs. It does not, however, distinguish itself from nearby siblings such as save_scene, modify_scene, or instance_scene, which all touch scenes.

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?

There is no guidance on when to use this versus save_scene or modify_scene, and no stated prerequisites (e.g., project must exist, scene path must not already exist). The agent must infer everything from the name.

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

disable_editor_pluginA

Disable an editor plugin in project.godot, preserving other plugins and comments. Supports dryRun and expectedHash. Save and reopen an already-open editor to apply; this does not claim live activation.

NameRequiredDescriptionDefault
dryRunNo
pluginPathYesProject-relative or res://addons/.../plugin.cfg path
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
savedNo
changedNo
activationNo
nextActionNo
pluginPathNo
sourceHashYes
configuredOnlyYes
configuredEnabledNo

TDQS

A4/5.0
Behavior4/5

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

With destructiveHint=false already declared, the description goes further by stating that other plugins and comments are preserved, that a dryRun preview exists, that expectedHash guards the write, and that live activation does not occur. It still omits failure behavior (plugin not found, hash mismatch) and whether a backup or rollback exists.

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 short sentences, front-loaded with the core action and its side-effect guarantee. The closing clause about not claiming live activation slightly restates the reopen instruction, but it is a deliberate scope caveat rather than 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?

An output schema exists, so return values need no explanation; the description covers the mutation target, preservation guarantee, preview and hash options, and the activation caveat. For a 4-parameter config-mutation tool this is sufficient to call correctly.

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 only 25% — pluginPath is documented, but projectPath and expectedHash are bare. The description names dryRun and expectedHash but never explains what expectedHash is compared against or what projectPath's format is, so it only partially compensates for the coverage gap.

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 verb and resource (disable an editor plugin) and the exact file it mutates (project.godot), which cleanly separates it from enable_editor_plugin and get_editor_plugins in the sibling list. An agent can identify the operation without opening the schema.

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?

It gives post-call guidance (save and reopen an already-open editor to apply) but never explicitly states when to prefer this over siblings or when dryRun should be used versus a real mutation. Usage is implied by the verb rather than spelled out.

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

duplicate_nodeA

Duplicate a local subtree as a sibling with a newName and save atomically. Refuses instance contents and uncertain references. Supports dryRun and expectedHash.

NameRequiredDescriptionDefault
dryRunNo
newNameYes
nodePathYesLocal subtree to duplicate
scenePathYes
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
savedYes
successYes
scenePathYes
operationsYes
sourceHashYes

TDQS

A3.8/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: atomic save, two explicit refusal conditions (instance contents, uncertain references), and the optimistic-concurrency guard expectedHash. It does not say what happens if a sibling with newName already exists — collision handling is unstated — which keeps it from a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and destination, then failure modes, then optional controls. No filler; every clause carries information.

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?

An output schema exists, so return values need not be described, and the description covers atomicity, refusal preconditions, and dry-run/hash safety. The remaining gap is collision/overwrite behavior on the new sibling name, which an agent performing a mutation would want to know.

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 only 17%, with just nodePath documented, so the description has to compensate. It names dryRun, newName, and expectedHash, but gives no semantics for expectedHash (what hash, sourced where) or for projectPath/scenePath, so the compensation is partial.

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?

States a specific verb and resource ('Duplicate a local subtree') plus the destination ('as a sibling') and the naming input ('newName'). It is clearly distinct from add_node or instance_scene thanks to the 'local subtree' scope and the refusal of instance contents, though no sibling is named explicitly.

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?

'Refuses instance contents and uncertain references' gives implicit when-not conditions, which helps the agent avoid misusing it. But it never names an alternative (e.g. instance_scene) or states when duplication is preferred over add_node, so 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.

enable_editor_pluginA

Enable an editor plugin in project.godot, preserving other plugins and comments. Supports dryRun and expectedHash. Save and reopen an already-open editor to apply; this does not claim live activation.

NameRequiredDescriptionDefault
dryRunNo
pluginPathYesProject-relative or res://addons/.../plugin.cfg path
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
savedNo
changedNo
activationNo
nextActionNo
pluginPathNo
sourceHashYes
configuredOnlyYes
configuredEnabledNo

TDQS

A4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds genuinely new context beyond them: the write is surgical (other plugins and comments preserved) and it explicitly disclaims live activation. It stops short of saying what happens on an expectedHash mismatch or whether a backup is made, so it is strong but not exhaustive.

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?

Three compact sentences: action and file target first, then options, then the activation caveat. No filler and nothing buried.

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?

An output schema exists, so return values need not be explained, and the annotations cover the safety profile. Combined with an accurate description of file impact and the non-live-activation caveat, an agent has nearly everything; only expectedHash semantics and idempotency (plugin already enabled) are 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 coverage is only 25%, with just pluginPath documented, so the description must carry more weight. It names dryRun and expectedHash but supplies no meaning for either — in particular expectedHash's role as a concurrency/consistency guard is left for the agent to guess — and projectPath is never addressed.

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 verb and resource ('Enable an editor plugin') plus the exact file it mutates ('project.godot'), which cleanly separates it from siblings such as disable_editor_plugin and get_editor_plugins. An agent knows precisely what this call does without opening the schema.

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 gives a useful prerequisite/caveat ('Save and reopen an already-open editor to apply; this does not claim live activation'), which implies the agent needs a separate action to see the effect. However, it never names an alternative tool or states conditions for choosing dryRun versus a real write, so selection guidance is only implied.

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

ensure_annotation_addonA

Install and enable the bundled annotation addon in a selected project. Does not restart an open editor. Refuses modified/unowned files. Supports dryRun and expectedHash.

NameRequiredDescriptionDefault
dryRunNo
projectPathYes
expectedHashNo
expectedExportHashNo

Output Schema

NameRequiredDescription
dryRunYes
changedYes
enabledYes
versionYes
activationYes
nextActionYes
sourceHashYes
editorReadyYes
exportSourceHashYes
configuredEnabledYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already say it is a non-readOnly, openWorld, non-destructive mutation. The description adds genuine behavioral context beyond that: it will not restart an open editor and refuses modified/unowned files, and it supports dryRun/expectedHash for safe verification. It could still say more about permissions or output, but output schema exists.

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

Conciseness5/5

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

Four short, front-loaded sentences with no filler. The primary purpose comes first, followed by key constraints and supported options.

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 mutation tool with an output schema, the description discloses the key safeguards (no editor restart, refuses modified files) and mentions optional safety parameters. It is only incomplete because expectedExportHash is never addressed and parameter semantics are thin.

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%, so the description must carry parameter meaning. It merely names dryRun and expectedHash without explaining what they do, and it omits expectedExportHash entirely, leaving two of four parameters effectively undocumented.

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 verb+resource: 'Install and enable the bundled annotation addon' in a selected project. Clearly distinguishable from siblings like enable_editor_plugin (generic plugin) and remove_annotation_addon/get_annotation_status.

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?

Implies usage when you need the annotation addon installed, and gives failure conditions (refuses modified/unowned files, does not restart an open editor). However, it never explicitly names alternatives such as get_annotation_status or remove_annotation_addon or states when not to use it.

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

export_mesh_libraryC

Export a scene as a MeshLibrary resource

NameRequiredDescriptionDefault
scenePathYesPath to the scene file (.tscn) to export
outputPathYesPath where the mesh library (.res) will be saved
projectPathYesPath to the Godot project directory
meshItemNamesNoOptional: Names of specific mesh items to include (defaults to all)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it doesn't say whether outputPath is overwritten if it exists, whether the project must be open, or what happens if the scene contains non-mesh nodes.

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?

A single front-loaded sentence with zero padding. It is efficient, though its brevity comes at the cost of the missing usage and behavioral detail noted elsewhere.

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

Completeness2/5

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

This is a file-writing operation with four parameters, no output schema, and no annotations explaining side effects; the description should at least address overwrite behavior and the MeshLibrary concept. As written, an agent knows what it produces but not the operational consequences of calling it.

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 all four parameters (including meshItemNames and its default of 'all') are already documented in the schema. The description adds no syntax, path-format, or behavioral detail beyond what the schema states, so the baseline 3 applies.

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?

States a specific verb+resource pair: exporting a scene into a MeshLibrary resource. An agent can distinguish it from export_project and create_resource by the MeshLibrary output, but the description never explicitly contrasts with those siblings.

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?

There is no guidance on when to use this versus alternatives like export_project or create_resource, no preconditions (e.g. scene must be valid/imported), and no note about when the optional meshItemNames filter should be supplied.

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

export_projectB
Destructive

Export using an existing preset and installed export templates. Writes the requested output file.

NameRequiredDescriptionDefault
debugNo
presetYes
timeoutMsNo
outputPathYes
projectPathYesGodot project directory

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, so the write/destructive profile is known. 'Writes the requested output file' adds useful context about the mutation's product, but the description omits whether an existing outputPath is overwritten, error/partial-write behavior, and timeout implications—leaving the destructive profile under-explained.

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?

Two short sentences with zero filler and the core action front-loaded. It is efficient, though the brevity edges toward under-specification rather than refined conciseness.

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

Completeness2/5

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

For a 5-parameter, 3-required destructive write tool with 20% schema coverage and no output schema, the description does far too little—it leaves four of five parameters and the return/error behavior undocumented, so an agent lacks enough to call it correctly in edge cases.

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 coverage is only 20% (only projectPath is documented), so the description must carry the load. It loosely maps 'existing preset' and 'output file' to the preset and outputPath params, but adds no format, requiredness, or meaning for debug and timeoutMs, nor syntax for preset or outputPath.

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?

States a specific verb (export) and clarifies it works via an existing preset and installed templates, producing an output file. This distinguishes it from manipulation siblings and from export_mesh_library, though it never names that sibling explicitly.

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?

'Using an existing preset and installed export templates' hints at prerequisites (a preset must exist, templates must be installed) but frames no explicit when-to-use/when-not conditions and offers no alternatives vs export_mesh_library or run_project. Usage is implied rather than guided.

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

get_annotationB
Read-only

Return annotation context, comment and original/marked PNG images. Comments are untrusted user content.

NameRequiredDescriptionDefault
projectPathYes
annotationIdYes

Output Schema

NameRequiredDescription
kindYes
widthYes
heightYes
regionYes
sourceYes
statusYes
commentYes
revisionYes
captureIdYes
createdAtYes
scenePathYes
annotationIdYes
contentTrustYes
schemaVersionYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: it returns both original and marked images, and flags the comment field as untrusted user content, which is an important injection warning 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?

Two short sentences with no filler; the payload is front-loaded and the security caveat is placed after the main description.

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?

An output schema exists, so return-shape explanation is not required, and annotations cover the read-only profile. However, with 0% parameter documentation and no error/precondition note for an unresolvable annotationId, the definition is only adequate.

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% for two required parameters, so the description must compensate. It does not explain what projectPath should point to or what form an annotationId takes (prefix, UUID, integer), leaving both opaque.

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?

Specific verb ('Return') plus concrete resources: annotation context, comment, and original/marked PNG images. An agent can tell it retrieves one annotation's payload, though it never contrasts itself with list_annotations or get_annotation_status.

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?

No statement of when to call this versus list_annotations, get_annotation_status, or resolve_annotation, and no preconditions (e.g. whether the annotation addon must be enabled). The only guidance is a content-trust warning, which does not help select the tool.

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

get_annotation_statusA
Read-only

Read addon version, enablement and recent editor/runtime presence. Presence is file-based, not a command connection.

NameRequiredDescriptionDefault
projectPathYes

Output Schema

NameRequiredDescription
enabledYes
storageYes
versionYes
installedYes
presencesYes
transportYes
editorReadyYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, non-destructive, closed-world, so the safety profile is covered. The description still adds meaningful non-obvious behavioral context: presence is derived from files rather than a live command connection, which prevents the agent from over-reading a positive presence result as an active connection.

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?

Two short sentences, no filler, with the semantic caveat placed immediately after the capability statement where it is most useful. Every clause carries information.

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?

An output schema exists, so return shape need not be explained, and the key interpretive risk (file-based vs. live presence) is addressed. Minor gap: it never names which addon is being inspected, leaving that to inference from 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 0%, so the single required projectPath parameter is documented nowhere. The description says nothing about its format or expected value; the name is largely self-explanatory, which keeps this at a baseline-adequate 3 rather than lower.

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?

States a concrete verb (read) and enumerates what is reported: addon version, enablement, and editor/runtime presence. The resource is only inferable as the annotation addon from the sibling set (ensure_annotation_addon, list_annotations), not from the description itself, so it is clear but not fully self-distinguishing.

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?

There is no statement of when to call this rather than get_project_info, list_annotations, or ensure_annotation_addon, and no prerequisites or exclusions. The only guidance-like content is an interpretive caveat about presence, not about tool selection.

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

get_class_infoB
Read-only

Read properties, methods, signals or enums of a built-in class from the installed Godot version. Reflection metadata, not prose documentation.

NameRequiredDescriptionDefault
limitNo
filterNo
sectionNo
classNameYes
includeInheritedNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds that results are reflection metadata tied to the installed engine version, which is useful context, but says nothing about pagination behavior (despite a limit cap of 500), result shape, or cost of enumerating inherited members.

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?

Two short sentences, front-loaded with the action and scope, with the second sentence adding a genuinely useful clarifying distinction. No filler.

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?

It conveys the nature of the return value, which matters since there is no output schema, but with 5 parameters at 0% schema coverage it leaves filtering, limiting, and inherited-member behavior undocumented. Adequate but with clear gaps for a tool whose main complexity is in those options.

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% across 5 parameters. The description's enumeration of 'properties, methods, signals or enums' loosely maps to the `section` parameter, but `filter`, `limit`, and especially `includeInherited` get no explanation at all in either schema or description.

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?

States a specific verb (read) and resource (properties/methods/signals/enums of a built-in class) and adds the key qualifier that this is reflection metadata from the installed Godot version rather than prose docs. It is clearly distinct from runtime siblings like get_node_properties, though it never names an alternative.

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?

'Reflection metadata, not prose documentation' implicitly tells the agent when this is the right source, and 'installed Godot version' implies version-accurate reflection. However, no sibling tool is named and there is no explicit when-not guidance versus get_node_properties or get_project_info.

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

get_debug_outputC
Read-only

Get the current debug output and errors

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description only adds that the output is 'current' and includes errors; it does not say what happens when no session is active or whether output is a snapshot versus cumulative.

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?

One front-loaded sentence with no filler; nothing needs trimming. The terseness is a completeness problem rather than a verbosity one.

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

Completeness2/5

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

The tool has an optional session handle, so it can be called with or without context, yet the description never explains what session is used by default or how the returned errors relate to a running debug session. For a session-aware retrieval tool among many similar readers, this leaves real gaps.

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% and the single sessionId parameter is fully documented in the schema, including its follow-up-tool requirement. The description adds no parameter meaning beyond that, which is the expected baseline.

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

Purpose3/5

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

The verb+resource is identifiable (retrieves current debug output and errors), but 'debug output' is not distinguished from the sibling view_log or get_runtime_tree, so an agent cannot tell which retrieval tool to pick without reading schemas.

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?

There is no statement of when to call this tool, when not to, or which sibling (view_log, start_debug_session, get_runtime_tree, step_frames) is the alternative for adjacent needs.

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

get_editor_pluginsA
Read-only

List installed editor plugins and their saved enablement without executing Godot. Does not report the live editor checkbox state.

NameRequiredDescriptionDefault
projectPathYes

Output Schema

NameRequiredDescription
pluginsNo
truncatedNo
sourceHashYes
configuredOnlyYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint/openWorldHint, so safety is covered; the description adds genuinely new behavioral context by saying the data comes from saved enablement rather than a running editor and that live checkbox state is unavailable. This prevents a common misuse (expecting real-time editor state). It could still note whether a missing project config yields an error or an empty list.

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?

Two short sentences, zero filler, with the capability stated first and the key limitation immediately after. Nothing could be removed without losing information.

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?

With an output schema present and annotations covering the safety profile, the description only needs to establish scope and read semantics, which it does. The remaining gap is the undocumented projectPath argument, which neither schema nor description clarifies.

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 single required parameter projectPath has no description anywhere. The description says nothing about what path form is expected (project root vs. project.godot file) or whether it must be an existing project, leaving the only input undocumented.

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 verb and resource (list installed editor plugins) plus the exact data returned (saved enablement), and explicitly scopes it away from live editor state. An agent can distinguish it from enable_editor_plugin / disable_editor_plugin without opening either schema.

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 phrase 'without executing Godot' and 'does not report the live editor checkbox state' clearly establish the offline/inspection context in which this tool is correct. It stops short of explicitly naming the mutation siblings (enable_editor_plugin/disable_editor_plugin) as the alternative for changing state, so a routing inference is still required.

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

get_godot_versionA
Read-only

Get the installed Godot version

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

The read-only, non-destructive annotations already establish the safety profile, and the description is consistent with them. However, the description adds no further behavioral context such as whether the version comes from the local installation only or what happens if Godot is not installed.

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?

A single short sentence with no filler and the key information front-loaded. It is efficient, though slightly terse given the lack of return-value context.

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 getter this is mostly adequate, but with no output schema the description should ideally state what the returned version looks like (e.g., a version string). Error behavior when Godot is not installed is also unstated.

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 tool has zero parameters, so there is no parameter semantics burden; baseline 4 is appropriate. The empty schema is fully consistent with the description.

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?

States a specific verb ('Get') and resource ('installed Godot version'), making the purpose immediately clear. It does not explicitly differentiate itself from sibling tools such as get_project_info, but the version query is distinct enough.

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?

Usage is implied by the purpose: call it when the installed Godot version is needed. There is no explicit when-to-use guidance or mention of alternatives, but for a simple zero-argument getter that is minimally adequate.

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

get_input_actionsB

Inspect configured input actions and key/mouse/joypad bindings through an isolated ConfigFile parser. Does not include engine defaults or live InputMap changes; no project autoloads are started.

NameRequiredDescriptionDefault
limitNo
actionNo
projectPathYes

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

B3.4/5.0
Behavior4/5

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

Adds real behavioral context beyond annotations: an isolated ConfigFile parser, exclusion of engine defaults, no live InputMap state, and no project autoloads started. The description does not address why annotations mark this inspection tool as readOnlyHint=false, leaving that mismatch unexplained.

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?

Two sentences with no filler, front-loading what is inspected and then the important scoping caveats. Slightly terse given the parameter burden it leaves unaddressed.

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?

An output schema exists, so return values need no explanation, and the caveats about defaults/live state/autoloads are valuable. Still, for a 3-parameter tool with undocumented parameters, an agent lacks guidance on filtering by action, pagination via limit, or what projectPath must contain.

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 mentions none of the three parameters. The meaning of 'action' (single-action filter) and 'limit' (1-200 cap) is left entirely to bare schema fields, so the description fails to compensate for the coverage gap.

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?

States a specific verb and resource: 'Inspect configured input actions and key/mouse/joypad bindings' read via a ConfigFile parser. This clearly separates it from the write-side sibling set_input_action, though no sibling is named explicitly.

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?

Implies usage by stating what the tool is not (no engine defaults, no live InputMap changes), which nudges an agent toward runtime inspection tools when live state is needed. However it never explicitly says when to use this instead of set_input_action/remove_input_action, nor that projectPath must point at a project.godot.

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

get_node_propertiesA

Read up to 50 named properties from a node in the live debug session; uses bounded typed values. Executes property getters. Does not change pause state.

NameRequiredDescriptionDefault
nodePathYes
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
propertiesYes

TDQS

A3.7/5.0
Behavior4/5

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

Given readOnlyHint=false and openWorldHint=true, the description adds real value by disclosing that it 'Executes property getters' — explaining why the call is not purely read-only — and that it 'Does not change pause state'. It stops short of warning that getter execution may have arbitrary side effects, which would fully justify the non-read-only annotation.

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?

Two compact clauses, front-loaded with the core action and scope, followed by the behavioral caveats. No filler whatsoever.

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?

With no output schema, the description only partially covers return semantics via 'bounded typed values'. It omits nodePath addressing conventions and the sessionId follow-up requirement documented in the schema, leaving notable gaps for a live-session inspection tool.

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 only 33% (only sessionId is documented), so the description carries extra burden. It usefully explains the 'properties' parameter ('up to 50 named properties', echoing the maxItems cap) and hints at 'bounded typed values', but says nothing about the nodePath format or that sessionId is required for follow-up tools.

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 gives a specific verb ('Read') and resource ('named properties from a node in the live debug session') with a clear cap of 50. It is easily distinguished from set_node_properties and get_runtime_tree, though it does not explicitly contrast with the closest sibling, sample_node_properties.

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 phrase 'in the live debug session' implies the precondition that a session must be running, and 'Does not change pause state' hints at safe use during inspection. However, there is no explicit when-to-use / when-not-to-use guidance and no named alternative such as sample_node_properties for repeated sampling.

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

get_performance_monitorsA
Read-only

Read timestamped runtime Performance monitor values with units. Render metrics are unavailable under headless; this is a snapshot, not a function-level profiler.

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

Output Schema

NameRequiredDescription
pausedYes
monitorsYes
sampledAtMsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the read-only, non-destructive profile, so the description is free to add real context: values are timestamped and carry units, output is a point-in-time snapshot rather than a profiler trace, and render metrics are absent under headless. Those are behavioral facts the annotations do not encode.

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?

Two sentences, no filler, with the core action stated first and the caveats after. Every clause carries information an agent would otherwise have to discover by trial.

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?

An output schema exists, so return values need not be explained, and the description covers the headless limitation and the snapshot granularity. What remains missing is the relationship to the other sampling tools, which is the one real gap.

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?

Only one optional parameter (sessionId) and schema coverage is 100%, so the schema already explains its purpose and the MCP-version requirement. The description adds nothing about it, which is the expected baseline 3 when the schema does the work.

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?

"Read timestamped runtime Performance monitor values with units" gives a specific verb and resource, and the snapshot-vs-profiler clause rules out one misreading. It stops short of differentiating from the similar sibling sample_performance, so an agent still has to guess which sampling tool applies.

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 headless caveat ("Render metrics are unavailable under headless") is a useful exclusion, but there is no explicit statement of when to pick this over sample_performance or sample_node_properties. Usage is only implied by the snapshot framing.

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

get_project_infoC
Read-only

Retrieve metadata about a Godot project

NameRequiredDescriptionDefault
projectPathYesPath to the Godot project directory

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds nothing further — not what fields the metadata contains, not what happens on an invalid projectPath. It essentially restates the tool name.

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?

A single short sentence that is front-loaded and wastes no words. It is efficient, though brevity here shades into under-specification.

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

Completeness2/5

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

No output schema exists, so the description carries the burden of explaining what "metadata" is returned — project name, version, settings, scene list? It does not, leaving the agent unable to predict the result. For a sole-parameter info tool this is a real gap.

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?

Only one parameter with 100% schema description coverage ("Path to the Godot project directory"), so the schema fully documents it. Per the baseline rule for high coverage, a 3 is appropriate; the description adds no extra meaning such as path format or relative-vs-absolute handling.

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

Purpose3/5

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

"Retrieve metadata about a Godot project" names a verb and resource, but "metadata" is undefined and overlaps heavily with sibling tools such as get_project_overview, get_project_setting, and get_godot_version. An agent cannot tell from this text which of those returns what.

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?

There is no statement of when to use this tool rather than the many similar read-only siblings (get_project_overview, get_project_setting, list_project_files, validate_project). Usage must be inferred entirely from the name.

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

get_project_overviewA
Read-only

Read a bounded project overview without executing Godot: main scene, autoloads, input actions, enabled addons, custom GDScript classes and text scene/resource dependencies. Binary resources and UID resolution are explicitly incomplete.

NameRequiredDescriptionDefault
limitNo
projectPathYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish read-only, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the result is "bounded" and computed without launching Godot, and it explicitly discloses incompleteness for binary resources and UID resolution — a real caveat an agent would otherwise not know.

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?

Two sentences, zero filler, and the leading clause establishes what the tool does before the caveat. The scope enumeration is compact 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?

With no output schema, the description does reasonably well by listing exactly what the overview contains. But it omits the meaning of the bound (does limit truncate lists silently?), the projectPath format, and what "explicitly incomplete" means practically for results — leaving gaps an agent would hit on first call.

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%, so the description carries the full burden, and it does not. projectPath is never explained (format, absolute vs project-relative, is it a directory containing project.godot?), and "bounded" only vaguely gestures at limit without stating its purpose, default, or that it caps result count up to 500.

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?

States a specific verb and resource ("Read a bounded project overview") and enumerates the exact data returned: main scene, autoloads, input actions, addons, GDScript classes, dependencies. That makes it clearly a static inspection tool, but it never names or contrasts the closest siblings (get_project_info, validate_project, list_projects), so an agent must infer the boundary itself.

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?

"without executing Godot" implies this is the non-invasive static alternative to launch/run tools, which is useful directional signal. However there is no explicit when-to-use or when-not-to-use guidance, no alternatives named, and no mention of what to call instead for UID or binary-resource questions.

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

get_project_settingA
Read-only

Read a stored project.godot expression without starting Godot. Returns sourceHash and stored:false for absent entries; does not resolve defaults, feature tags or override.cfg.

NameRequiredDescriptionDefault
settingYes
projectPathYes

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish that this is read-only, non-destructive, and closed-world, so safety behavior is covered. The description adds useful behavioral detail beyond annotations: absent entries return stored:false, and the tool does not resolve defaults, feature tags, or override.cfg.

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, stating the core read operation first and then the important behavioral caveats. Every clause carries useful information without unnecessary repetition.

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?

With rich annotations and an output schema already present, the description is reasonably complete on safety and return/absence behavior. However, because the input schema has no parameter descriptions at all, the lack of parameter-format guidance leaves a meaningful gap for an agent trying to invoke the tool correctly.

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%, so the description needs to clarify both parameters. It implies that setting is a project.godot expression and projectPath is the project location, but it does not explain the expected format for either, such as how setting keys should be written or whether projectPath must be absolute.

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 read verb and names the resource precisely: a stored project.godot expression/setting. It also distinguishes the tool's scope from write-oriented siblings like set_project_setting and remove_project_setting by making clear this is a read operation.

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 usage context by saying the setting can be read without starting Godot, and it states important exclusions: defaults, feature tags, and override.cfg are not resolved. It does not name an alternative tool for those resolved-value cases, so it falls short of full when-to-use/when-not guidance.

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

get_resource_infoB

Inspect bounded stored properties of a .tres/.res resource. Loading resources and getters may execute project code.

NameRequiredDescriptionDefault
projectPathYes
resourcePathYes
maxPropertiesNo

Output Schema

NameRequiredDescription
savedYes
classNameYes
truncatedNo
propertiesNo
sourceHashYes
resourcePathYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, and the description adds meaningful context beyond that: loading resources and invoking getters may execute project code, explaining the non-read-only hint. It does not say what happens on failure or what 'bounded' means operationally, keeping it below 5.

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?

Two short sentences, front-loaded with the core action and followed by the safety caveat. No wasted words, though it is terse to the point of leaving gaps rather than being optimally informative.

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?

An output schema exists, so return values need not be explained, and the side-effect warning is a plus. However, with three undocumented parameters at 0% coverage, the definition is not complete enough for an agent to call it correctly without inspecting the schema manually.

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%, so the description must carry parameter meaning. It only hints at bounding via 'bounded' (likely maxProperties); projectPath, resourcePath, and the max cap of 200 are never explained.

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?

States a specific verb ('Inspect') and resource ('bounded stored properties of a .tres/.res resource'), which distinguishes it from mutation siblings like create_resource and set_resource_properties. It does not explicitly contrast with inspection siblings such as get_scene_info or get_node_properties, so it stops short of 5.

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 word 'Inspect' implies a read-style usage, but there is no explicit statement of when to pick this over get_scene_info, get_node_properties, or get_project_info. The agent must infer usage from the resource-file framing alone.

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

get_runtime_treeA
Read-only

Inspect the live debug session scene tree without changing pause state. Returns bounded node paths, classes and script paths.

NameRequiredDescriptionDefault
maxDepthNo
maxNodesNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

A3.7/5.0
Behavior4/5

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

Adds real context beyond the annotations: it explicitly promises not to change pause state (relevant next to set_debug_pause) and states the result is bounded, which tells the agent output is truncated rather than exhaustive. Since there is no output schema, describing the returned fields here is genuinely additive. It still omits details like what happens on truncation or the session-handle requirement, so it falls short of 5.

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?

Two sentences, front-loaded with the action and the key non-mutation guarantee, then the return shape. Nothing is wasted and there is no preamble.

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 read-only inspection tool with no output schema and weak parameter documentation, this is the minimum viable amount: it tells the agent what the tool returns and that results are bounded. Missing are the session prerequisite, default limits, and how truncation is signaled, which an agent needs to interpret results correctly.

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 only 33%: maxDepth and maxNodes carry no descriptions, and only sessionId is documented. "Bounded" hints that those two parameters constrain the result, but the description never explains depth counting, defaults, or truncation behavior, so it does not fully compensate for the low coverage.

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?

States a specific verb and resource: inspect the scene tree of a live debug session, and describes what comes back (node paths, classes, script paths). It stops short of naming the boundary versus editor-side siblings such as get_scene_info or get_node_properties, so an agent must infer the distinction.

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?

"Live debug session" implies this only works while a debug session is running, which is useful implied context. But there is no explicit when-to-use or exclusion against get_scene_info, get_node_properties, or sample_node_properties, and no statement of what happens if no session exists.

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

get_scene_infoB

Inspect a saved PackedScene without instantiating it: serialized hierarchy, properties, scripts, groups, connections and dependencies. Loading resources/autoloads may execute project code. Bounded results include inheritance and instances.

NameRequiredDescriptionDefault
maxNodesNo
scenePathYes
projectPathYes
maxPropertiesNo

TDQS

B3.4/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: it warns that loading resources/autoloads may execute project code, which explains why readOnlyHint=false and openWorldHint=true despite 'Inspect' sounding passive. It also flags that results are bounded, matching maxNodes/maxProperties. It stops short of stating the actual caps, defaults, 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?

Three dense sentences, zero preamble, with the core capability front-loaded and the safety caveat immediately after. The trailing 'bounded results include inheritance and instances' is slightly cryptic, but nothing is padding.

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?

With no output schema, the description does a good job enumerating what comes back (hierarchy, properties, scripts, groups, connections, dependencies, inheritance, instances). But for a 4-parameter tool with 0% schema coverage it leaves the path arguments and the numeric bounds/defaults unexplained.

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%, so the description must carry the parameter burden. Only the two bounding integers are alluded to via 'bounded results'; projectPath, scenePath, their expected formats (res:// paths, project root), and the default/limit values of maxNodes and maxProperties are entirely undocumented.

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?

States a specific verb ('Inspect') and a specific resource ('a saved PackedScene'), then enumerates exactly what is exposed: hierarchy, properties, scripts, groups, connections, dependencies. The clause 'without instantiating it' implicitly separates it from instance_scene and get_runtime_tree, though no sibling is named outright.

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?

'Without instantiating it' implies static file inspection vs. runtime/instance approaches, which is useful context. However, there is no explicit when-to-use / when-not-to-use statement or named alternative (e.g., use get_node_properties for a live node, instance_scene to actually load it), 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.

get_uidB
Read-only

Get the UID for a specific file in a Godot project (for Godot 4.4+)

NameRequiredDescriptionDefault
filePathYesPath to the file (relative to project) for which to get the UID
projectPathYesPath to the Godot project directory

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive, read-only, closed-world operation. The description adds the Godot 4.4+ applicability constraint, which is genuine value, but says nothing about what happens when the file has no assigned UID or the path is invalid.

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?

A single front-loaded sentence with no filler; the version caveat is compact and placed inline. Nothing wasted, though it could have spent that space on return-value behavior instead.

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?

There is no output schema, so the description arguably should indicate that the result is a UID string and how failure appears; it does not. For a simple two-parameter lookup this is adequate but leaves a gap.

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% with both parameters fully documented (projectPath, filePath relative to project), so the schema carries the burden. The description adds no parameter meaning beyond what the schema states.

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?

States a specific verb and resource ('Get the UID for a specific file') plus a version constraint, so the agent knows exactly what operation is performed. It does not differentiate itself from near-siblings like update_project_uids or list_project_files, so it falls short of 5.

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 '(for Godot 4.4+)' qualifier implies a usage precondition, which is useful, but there is no explicit when-to-use/when-not guidance or mention of the related update_project_uids / list_project_files tools. Usage is only implied.

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

instance_sceneA

Instance a saved scene under a local parent and save atomically. Supports dryRun and expectedHash; refuses recursive dependencies.

NameRequiredDescriptionDefault
dryRunNo
newNameYes
nodePathYesLocal parent path
scenePathYes
projectPathYes
expectedHashNo
instanceScenePathYes

Output Schema

NameRequiredDescription
savedYes
successYes
scenePathYes
operationsYes
sourceHashYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description adds genuinely new context: the save is atomic, dryRun is supported for previewing, expectedHash guards against stale state, and recursive dependencies are rejected. It stops short of 5 because permission requirements and any limits on the target parent are unstated.

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?

Two tight sentences, with the core action and the atomic-save behavior front-loaded. Every clause carries information and there is no filler.

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?

An output schema exists so return values need no explanation, and annotations cover the safety profile. However, for a 7-parameter mutation tool with 14% schema coverage, the description should disambiguate instanceScenePath from scenePath and clarify the newName/parent relationship; that gap keeps it at adequate rather than 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 description coverage is only 14% (just nodePath), so the description carries weight here. It usefully clarifies dryRun and expectedHash, but leaves instanceScenePath versus scenePath, newName, and projectPath unexplained, which are exactly the ambiguities an agent would hit.

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?

States a specific verb and resource ('Instance a saved scene under a local parent') plus the atomic-save outcome, which clearly separates it from create_scene, save_scene, and duplicate_node. It does not explicitly name or contrast a sibling, 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 Guidelines3/5

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

The mention of dryRun and expectedHash hints at preview/drift-check workflows, and 'refuses recursive dependencies' implies a constraint. But there is no explicit when-to-use guidance and no named alternative for related tasks like create_scene or duplicate_node.

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

launch_editorC

Launch Godot editor for a specific project

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
projectPathYesPath to the Godot project directory

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say that a long-running external GUI process is spawned, that a session must later be terminated via close_session/quit_godot, or how the sessionId is surfaced for follow-up tools.

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?

A single front-loaded sentence with zero filler. It is efficient, but the terseness contributes to the missing usage and behavioral context rather than being an appropriately complete definition.

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

Completeness2/5

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

For a tool that spawns a persistent external editor process with openWorldHint=true and no output schema, the description should say what the agent gets back and how the session lifecycle works. Neither the process lifecycle nor the sibling routing is addressed, leaving the agent under-informed despite full schema coverage.

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%, and the schema itself explains that projectPath is the project directory and sessionId is the handle required for follow-up tools. The description adds no further meaning, so the baseline 3 applies.

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?

States a specific verb ('Launch') and resource ('Godot editor') scoped to a project, so the agent knows exactly what operation occurs. However, it offers no differentiation from siblings such as run_project, start_debug_session, or run_playtest, which all sound like they 'start' something Godot-related.

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?

There is no guidance on when to launch the editor versus run_project, run_scene, or start_debug_session, nor on when this is inappropriate. The agent must infer the distinction purely from the sibling names, which overlap heavily.

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

list_annotationsA
Read-only

Read submitted immutable annotations, with bounded pagination and per-record errors. Reading never resolves records.

NameRequiredDescriptionDefault
limitNo
cursorNo
statusNo
projectPathYes

Output Schema

NameRequiredDescription
errorsYes
nextCursorYes
annotationsYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description goes beyond that by disclosing two non-obvious behaviors: pagination is bounded, and errors are reported per-record rather than failing the whole call. It also confirms reading has no resolve side effect, which matters given a sibling named resolve_annotation.

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?

Two tight sentences with zero filler; the resource and the scope constraint are front-loaded before the side-effect clarification. Every clause carries information.

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?

An output schema exists, so return values need not be explained, and the pagination/partial-failure model is stated. The gap is on the input side: with 0% schema coverage and a status filter, the definition leaves an agent guessing about the semantics of open vs resolved vs all.

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%, so the description must carry parameter meaning, but "bounded pagination" only loosely gestures at limit and cursor and never states the upper bound. The status enum (open/resolved/all) — the most semantically important filter — and projectPath are left entirely unexplained by both schema and description.

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?

States a specific verb+resource ("Read submitted immutable annotations") and adds the distinguishing property that these are immutable submissions read with bounded pagination. It implicitly separates itself from resolve_annotation via "Reading never resolves records," though it never names the sibling that fetches a single annotation.

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?

"Reading never resolves records" implies that mutation of annotation state belongs to a different tool, which is useful routing. However, there is no explicit guidance on when to use this bulk listing versus get_annotation or get_annotation_status, and no exclusion criteria are stated.

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

list_project_filesA
Read-only

Discover scenes, scripts and resources; excludes hidden directories and symlinks. Results are bounded.

NameRequiredDescriptionDefault
typeNo
limitNo
patternNoRelative glob (*, **, ?)
projectPathYesGodot project directory

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare this as a safe, read-only, non-destructive operation, so the description does not need to repeat that. It adds useful behavioral details beyond annotations: hidden directories and symlinks are excluded, and results are bounded, though the bound itself is not specified.

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 single compact sentence with no filler, and the primary scope is front-loaded. Every clause contributes either asset scope or filtering/bounding behavior.

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 four-parameter tool with no output schema, the description gives core scope and two important filters, but it leaves out return shape, whether traversal is recursive, ordering, and clearer limit semantics. It is adequate but not fully complete for an agent relying on the description alongside a partially documented 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 50%, with projectPath and pattern documented in the schema. The description adds some meaning by naming scene, script, and resource categories, which maps to the type enum, and by implying bounded results, which relates to limit; however, it does not clarify pattern syntax, limit behavior, or default values.

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 states a clear discovery operation over specific project asset types: scenes, scripts, and resources. It does not explicitly differentiate from sibling tools such as list_projects or get_project_overview, but the resource scope is specific enough to identify 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?

Usage is implied by 'Discover scenes, scripts and resources,' but there is no explicit when-to-use guidance and no named alternatives or conditions for choosing this over related listing/introspection tools. The exclusion of hidden directories and symlinks describes result scope rather than usage routing.

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

list_projectsC
Read-only

List Godot projects in a directory

NameRequiredDescriptionDefault
directoryYesDirectory to search for Godot projects
recursiveNoWhether to search recursively (default: false)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it doesn't say what counts as a Godot project (presence of project.godot?), what the result looks like, or how recursion affects output size — all useful context for a discovery tool with no output 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?

A single front-loaded sentence with zero filler, but its brevity edges toward under-specification for a tool that returns an undocumented result shape.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining what is returned — project paths, names, counts, or metadata — and it says nothing. It also omits the definition of 'project' detection, leaving a real gap for an agent deciding whether this tool will answer its question.

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%, with both 'directory' and 'recursive' (including its default) documented in the schema, so the baseline is 3. The description contributes no additional semantics such as expected path format or recursion depth behavior.

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?

States a specific verb ('List') and a specific resource ('Godot projects in a directory'), which an agent can distinguish from file-level siblings like list_project_files or single-project siblings like get_project_info. It never explicitly names those siblings, so differentiation is inferred from the noun rather than stated.

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?

There is no guidance on when to choose this over list_project_files or get_project_overview, and no prerequisites or exclusions are given. The agent must infer usage entirely from the name.

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

load_spriteC

Load a sprite into a Sprite2D node

NameRequiredDescriptionDefault
nodePathYesPath to the Sprite2D node (e.g., "root/Player/Sprite2D")
scenePathYesPath to the scene file (relative to project)
projectPathYesPath to the Godot project directory
texturePathYesPath to the texture file (relative to project)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is partially covered. However, the description adds no behavioral context beyond 'load', such as whether the scene must be saved afterward, what happens if the node is missing, or how texture paths are resolved.

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 a single front-loaded sentence with no wasted words. It is appropriately concise, though its brevity contributes to gaps in usage and behavioral guidance.

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

Completeness2/5

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

For a mutation tool with four required parameters, no output schema, and openWorldHint=true, the description is too sparse. It omits key context such as save behavior, error conditions, and relationship to sibling tools, leaving the agent under-informed despite the complete parameter 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 all four parameters are already documented in the input schema. The description adds no additional parameter meaning, making the baseline score of 3 appropriate.

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 states a specific verb ('Load') and resource ('sprite') and names the exact target node type ('Sprite2D node'). It is clear what the tool does, though it does not explicitly distinguish itself from siblings like set_node_properties or create_resource.

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?

There is no guidance on when to use this tool versus alternatives such as set_node_properties, create_resource, or instance_scene. The description gives only the action, leaving the agent to infer the appropriate context.

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

modify_sceneA
Destructive

Apply up to 100 scene operations in order and save once, or preview with dryRun. Supports instancing, duplication, properties, remove/rename/reparent, persistent signals and groups. Executes constructors. Refuses inherited/instanced edits and uncertain references. expectedHash guards stale previews.

NameRequiredDescriptionDefault
dryRunNo
scenePathYes
operationsYes
projectPathYes
expectedHashNo

TDQS

A3.5/5.0
Behavior4/5

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

With annotations already declaring destructive and open-world behavior, the description adds meaningful context beyond them: it saves once after ordered operations, executes constructors, refuses inherited or instanced edits, and rejects uncertain references. It still omits failure/rollback semantics and permission requirements, but it substantially characterizes 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 and front-loaded: the core batch/save behavior comes first, followed by preview guidance and safety constraints. Every sentence contributes operational information without redundancy.

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 complex batch mutation tool with no output schema, the description covers supported operations, previewing, and key refusal behaviors well. It remains incomplete on parameter structure, per-operation results, and what dryRun returns, which an agent would need for correct composition.

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%, so the description must carry parameter meaning. It mentions dryRun, expectedHash, and the 100-operation limit, but says nothing about projectPath, scenePath, required nodePath fields, or how the operation object fields map to each op type.

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 states a specific verb and resource: applying scene operations in order and saving once. It clearly identifies this as a batch mutation tool by specifying up to 100 operations and listing supported operation categories, though it does not explicitly name sibling alternatives like add_node or set_node_properties.

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?

It explains preview usage with dryRun and notes that expectedHash guards stale previews, which gives clear context for safe invocation. However, it never states when to use this batch tool versus single-operation siblings such as instance_scene, duplicate_node, or set_node_properties.

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

quit_godotA
Destructive

Terminate the editor launched by this server and wait for exit. Unsaved editor changes may be lost.

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, but the description earns credit by naming the concrete consequence ('Unsaved editor changes may be lost') and the blocking behavior ('wait for exit'). Not a full 5 only because it doesn't say what happens if no editor is running or what is returned after exit.

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?

Two short sentences, zero filler, with the destructive caveat placed immediately after the action so it is read before 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 no-output-schema, zero-required-param termination tool, the description covers action, scope, consequence, and blocking semantics. Minor gap: no statement of what happens if no editor is running or how the exit is reported.

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% and the single optional sessionId is fully documented in the schema, so the baseline of 3 applies. The description adds nothing about when sessionId matters or what the default behavior is without it.

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?

Specific verb+resource: 'Terminate the editor launched by this server'. The scoping phrase 'launched by this server' helps distinguish it from a general editor shutdown, though it never names the nearest siblings (stop_project, close_session) that an agent might confuse it with.

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?

Usage is only implied: you call it when you're done with the editor. There is no explicit statement about when to prefer this over stop_project or close_session, and no note about whether it should be called before other teardown tools.

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

register_autoloadA

Register a named singleton or plain autoload using an existing .gd/.cs/.tscn/.scn path. Checks path and built-in name conflicts, not script/runtime compatibility. Refuses replacing a different entry unless replace:true. Supports dryRun and expectedHash.

NameRequiredDescriptionDefault
nameYes
dryRunNo
replaceNo
singletonNo
projectPathYes
expectedHashNo
resourcePathYes

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-destructive, open-world mutation; the description adds real context beyond that — the validation performed (path and built-in name conflicts), the explicit scope limit (no script/runtime compatibility checking), and the refusal-unless-replace guardrail. It stops short of saying which project file is written or what happens to dependent scenes at runtime.

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?

Three dense sentences with zero filler: capability first, then validation scope, then the override/dry-run controls. Every clause adds information an agent needs before calling.

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?

With an output schema present the description needn't explain returns, and annotations already cover the safety profile, so the remaining burden is behavior and parameters — both addressed. For a 7-parameter mutation tool this is complete enough to invoke 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 carry parameter meaning, and it does for most: name (conflict against built-in names), resourcePath (must be an existing .gd/.cs/.tscn/.scn), singleton (named singleton vs plain autoload), replace, dryRun, expectedHash. Only projectPath and the exact hash semantics of expectedHash are left to inference.

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 verb and resource ("Register a named singleton or plain autoload") plus the exact accepted resource types (.gd/.cs/.tscn/.scn). This cleanly distinguishes it from the sibling unregister_autoload and from create_resource, which handles resources but not autoload 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?

Gives clear preconditions and override paths: conflicts are checked, a different existing entry is refused unless replace:true, and dryRun/expectedHash are offered for safe application. It does not explicitly say when to prefer unregister_autoload + re-register over replace:true, so the alternative-selection guidance is implicit rather than spelled out.

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

remove_annotation_addonA

Disable and remove only unchanged addon-owned files; preserve annotation data. An open editor must be reopened to unload it.

NameRequiredDescriptionDefault
dryRunNo
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
dryRunYes
changedYes
enabledYes
activationYes
nextActionYes
sourceHashYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false and readOnlyHint=false; the description adds real context the annotations lack — what is deleted (unchanged addon-owned files only), what is spared (annotation data), and a post-condition (an open editor must be reopened to unload). It does not explain what happens to modified files, which is the remaining behavioral unknown, so not a 5.

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

Conciseness5/5

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

Two sentences, no filler, with the scope/preservation constraint front-loaded and the editor-reload caveat as a trailing operational note. Nothing to cut.

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?

An output schema exists, so return values need not be described, and the annotations set the safety baseline. But for a filesystem-mutating tool with two entirely undocumented parameters (dryRun, expectedHash) and no statement of what failure looks like when files have changed, the description leaves a material gap.

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% across three parameters, so the description must carry the load and does not: dryRun and expectedHash are never mentioned, and 'unchanged' only loosely gestures at expectedHash without defining what hash or what mismatch does. Only projectPath's role is inferable from context.

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?

States a specific verb pair and resource: 'Disable and remove ... addon-owned files', and scopes it with 'only unchanged'. That clearly distinguishes it from ensure_annotation_addon and the read-only annotation tools (list_annotations, get_annotation_status), though it never names the sibling it complements.

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?

Usage is implied by the 'only unchanged' qualifier and the note that an open editor must be reopened, but there is no explicit 'use this when' or reference to the ensure_annotation_addon counterpart. An agent must infer that this is the teardown counterpart of the addon setup tool.

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

remove_input_actionA
Destructive

Remove a configured input action. Removing a built-in override restores its default on next launch; this does not disable a built-in action. Supports dryRun and expectedHash.

NameRequiredDescriptionDefault
actionYes
dryRunNo
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true. The description adds useful behavioral context beyond those annotations by explaining that removing a built-in override restores the default on next launch, that this does not disable a built-in action, and that dryRun and expectedHash are supported.

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 compact sentences with no redundant wording. The core action is front-loaded, followed by the important built-in override caveat and the optional parameters.

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 adequately covers the tool's core behavior and built-in override nuance, and the output schema means return values need not be explained. However, with 4 parameters at 0% schema description coverage, the description leaves required parameters like action and projectPath unexplained, which is a meaningful gap for a destructive tool.

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%, so the description must compensate. It only says 'Supports dryRun and expectedHash' without explaining what dryRun does or what format expectedHash takes, and it says nothing about the required action or projectPath 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 states a specific verb and resource: 'Remove a configured input action.' It also distinguishes the operation from disabling a built-in action by explaining that removing a built-in override restores its default on next launch. This clearly separates it from sibling tools like set_input_action and get_input_actions.

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 removal has a specific effect: removing a built-in override restores its default, and this does not disable a built-in action. It does not explicitly name alternatives or state when not to use the tool, but the built-in distinction provides meaningful usage context.

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

remove_project_settingB
Destructive

Remove a stored project setting override, preserving unrelated configuration. Engine defaults may apply afterward. Supports dryRun and expectedHash.

NameRequiredDescriptionDefault
dryRunNo
settingYes
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description still adds real value beyond them: it discloses that unrelated config is preserved, that engine defaults may take effect, and that dryRun and expectedHash guards exist — all consequence information not encoded in annotations.

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 compact sentences with the core action and consequence front-loaded. Slightly clipped, but nothing is redundant.

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?

An output schema exists, so return values need no explanation, and annotations cover the destructive profile. However, for a mutation tool with four completely undocumented parameters, the description leaves the agent unable to construct a safe call — particularly how expectedHash should be sourced.

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%, so the description must carry parameter meaning, and it does not. It merely name-drops 'dryRun' and 'expectedHash' without explaining semantics (e.g., that expectedHash is an optimistic-concurrency token), and the two required parameters projectPath and setting receive no explanation anywhere.

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?

States a specific verb and resource ('Remove a stored project setting override') and clarifies scope with 'preserving unrelated configuration.' It is clearly distinguishable from get_project_setting and set_project_setting, though it never names those siblings explicitly.

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 when to use it (removing an override so engine defaults apply), but gives no explicit when-not guidance or comparison to set_project_setting, which could also revert a value. The agent must infer the choice from the sibling names.

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

resolve_annotationA

Resolve or reopen an annotation explicitly. Requires the revision returned by retrieval; refuses stale writes.

NameRequiredDescriptionDefault
statusYes
projectPathYes
annotationIdYes
expectedRevisionYes

Output Schema

NameRequiredDescription
statusYes
revisionYes
annotationIdYes

TDQS

A4/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses that stale writes are refused and that a revision from retrieval is mandatory. This adds meaningful concurrency and safety context. It could go further on what happens to the annotation's other fields, but the core behavioral trait is covered.

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?

Two tightly written sentences with no filler; the prerequisite and the stale-write warning are front-loaded and directly useful.

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?

With an output schema present and annotations covering the safety profile, the description supplies the key operational facts: required revision and stale-write rejection. The gap is minor, mostly around the unmentioned projectPath and annotationId, which are self-descriptive names.

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 carry the load. It clarifies the meaning of expectedRevision ('revision returned by retrieval') and implies status via 'resolve or reopen', but it says nothing about projectPath or annotationId. The added meaning is partial rather than complete.

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 names a specific verb pair ('resolve or reopen') and the resource ('annotation'), and the word 'explicitly' distinguishes it from passive retrieval siblings like get_annotation or list_annotations. It doesn't explicitly name a sibling alternative, but the action is 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?

It clearly states the prerequisite ('Requires the revision returned by retrieval'), which effectively tells the agent to call a retrieval tool first. It doesn't spell out when to reopen versus resolve, but the context of a stale-write refusal gives strong usage guidance.

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

run_gut_testsB

Run installed GUT tests with bounded output, timeout and cancellation. Choose exactly one testFile or directory.

NameRequiredDescriptionDefault
headlessNo
logLevelNo
testFileNo
directoryNo
timeoutMsNo
projectPathYesGodot project directory
includeSubdirsNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this is not a pure read operation. The description adds meaningful behavior beyond that: bounded output, timeout handling, and cancellation, though it does not detail side effects on the project or how cancellation is enforced.

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?

Two sentences, front-loaded with the core action and followed by the most important parameter constraint. There is no redundant or filler language.

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

Completeness2/5

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

For a 7-parameter tool with very low schema description coverage, the description is too sparse. It mentions timeout and output bounds but does not explain most parameters or their effects, and it says nothing about default behavior or execution side effects.

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 coverage is only 14% across 7 parameters. The description adds a critical constraint for testFile and directory exclusivity, but leaves projectPath, headless, logLevel, timeoutMs, and includeSubdirs undocumented beyond the sparse 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 gives a specific verb and resource: 'Run installed GUT tests'. 'GUT' distinguishes it from generic scene or project runners such as run_scene_test and run_playtest, though it does not explicitly route against those 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?

It provides a useful selection rule: 'Choose exactly one testFile or directory.' However, it does not explain when to use this tool instead of run_scene_test, run_playtest, or run_project, so the agent must infer the broader usage context.

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

run_playtestA

Run bounded input/frame/state-assertion/screenshot-comparison steps in a fresh temporary debug session and always stop its game. Queued inputs are delivered on the following frame step. Compare reference PNGs with compare_screenshot; references are never updated. Returns evidence and pass/fail; does not promise deterministic simulation. Replaces the game in the selected session.

NameRequiredDescriptionDefault
stepsYes
headlessNo
scenePathNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
timeoutMsNo
projectPathYes

Output Schema

NameRequiredDescription
codeNo
errorNo
stepsYes
passedYes
stoppedYes
diffCountNo
diagnosticsYes
completedStepsYes
requestedStepsYes
screenshotCountYes

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: inputs are delivered on the following frame step (ordering semantics), reference PNGs are never updated (no baseline mutation despite a comparison step), the game is always stopped, the session's game is replaced, and simulation is explicitly non-deterministic. These are exactly the traits an agent cannot infer from readOnlyHint/destructiveHint/openWorldHint.

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?

Four dense, front-loaded sentences with almost no filler; the isolation and teardown guarantees come first. The 'Returns evidence and pass/fail' sentence is the least necessary, since an output schema already exists, but it is brief.

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?

Covers the hard parts an agent needs — isolation, non-determinism, frame ordering, baseline immutability, session displacement. With an output schema present, return details can be omitted, and only the unelaborated top-level parameters (sessionId, headless, timeoutMs, scenePath) leave a real gap.

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 only 17%, so the description must carry the parameter burden; it partially does by naming the step kinds (input, frames, assert, screenshot, compare_screenshot) and the frame-delivery rule for queued inputs. But sessionId, projectPath, scenePath, headless, and timeoutMs get no explanation, and nothing clarifies the 'fresh temporary session' semantics relative to the sessionId handle.

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 verb and composite resource: run input/frame/assertion/screenshot steps in a fresh temporary debug session that is always torn down. This clearly separates it from the granular siblings (simulate_input, step_frames, capture_screenshot) by describing the orchestrated, self-cleaning nature of the call.

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?

Usage context is implied (a scripted, bounded playtest in an isolated session) but no alternative is named. It never tells the agent when to prefer run_scene_test, run_scene, or the individual simulate_input/step_frames calls, and the closest thing to guidance — 'Replaces the game in the selected session' — is a caveat rather than a selection rule.

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

run_projectC

Run the Godot project and capture output

NameRequiredDescriptionDefault
sceneNoOptional: Specific scene to run
headlessNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
timeoutMsNo
projectPathYesPath to the Godot project directory

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare openWorldHint=true, readOnlyHint=false, and destructiveHint=false, so the safety profile is known. The description adds only "capture output," without saying whether the process stays running after return, whether output is streamed or returned once, whether a session/handle is created, or how long it blocks — all critical for a process-launching tool that gates follow-up calls.

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

Conciseness3/5

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

A single short sentence, front-loaded and free of padding, so it is efficient. But the brevity is under-specification rather than discipline — nothing is said that an agent could not already read from the tool name.

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 sentence is not complete for this tool: it spawns a long-running process, takes an undocumented timeout and headless flag, and produces a session handle used by follow-up tools, with no output schema to fall back on — and none of this is described.

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 coverage is 60%: `headless` and `timeoutMs` carry no schema descriptions at all, and the description says nothing about either — despite timeout semantics being highly consequential for a blocking run. It also doesn't explain scene-selection behavior or when sessionId must be supplied, so it fails to compensate for the coverage gap.

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

Purpose3/5

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

States a concrete verb and resource ("Run the Godot project") and adds "capture output," so the basic action is clear. But the sibling set contains run_scene, run_playtest, run_scene_test, and launch_editor, and nothing here distinguishes running the whole project from running a single scene or a playtest — the agent must guess.

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?

There is no when-to-use, when-not-to-use, or prerequisite guidance. With four near-neighbor launch tools in the sibling list, the absence of any routing statement leaves the selection decision entirely to inference from the name.

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

run_sceneB

Run one scene; replaces the previous run and retains final debug output.

NameRequiredDescriptionDefault
headlessNo
scenePathYesRelative or res:// PackedScene path
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
timeoutMsNo
projectPathYesGodot project directory

TDQS

B3.1/5.0
Behavior3/5

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

Adds two useful traits beyond the annotations: the prior run is discarded and final debug output is retained (linking naturally to get_debug_output). It omits how the run is bounded (timeoutMs default/blocking), what headless changes, and the fact that sessionId is needed for follow-up tools – meaningful gaps for an openWorld, non-destructive-but-stateful process launch.

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?

A single front-loaded sentence with no filler. It is terse rather than padded, though the brevity is the source of the gaps elsewhere.

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

Completeness2/5

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

For a 5-parameter process-launching tool with no output schema and open-world behavior, the description should cover headless/timeout semantics and the sessionId handoff. Neither is present, leaving the agent to reverse-engineer behavior from sibling tools.

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 coverage is only 60%; headless and timeoutMs have no schema description at all, and the description supplies no meaning for them either. Nothing in the description clarifies the sessionId follow-up requirement or path formats beyond what the schema already says.

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?

States a specific verb+resource ("Run one scene"), which separates it from run_project and launch_editor. It doesn't differentiate itself from the closest siblings run_scene_test and run_playtest, 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 Guidelines3/5

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

"Replaces the previous run" implies this is for a fresh single-scene execution, but the description never says when to prefer it over run_scene_test, run_playtest, or run_project, nor any prerequisites. Usage 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.

run_scene_testA

Run a headless test scene until it exits. Reports exit status, errors and timeout; test scripts must quit with their result code.

NameRequiredDescriptionDefault
scenePathYesRelative or res:// PackedScene path
timeoutMsNo
projectPathYesGodot project directory

TDQS

A3.8/5.0
Behavior4/5

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

Beyond annotations, the description discloses headless execution, waiting until exit, reporting exit status, errors, and timeout, and the requirement that test scripts quit with their result code. Those are meaningful behavioral traits for an executing tool. It still does not cover permissions, project import prerequisites, or side effects.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and followed by observable results and the test-script contract. There is no redundant or filler wording.

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?

With no output schema, the description usefully states what is reported: exit status, errors, and timeout. It remains somewhat incomplete for an execution tool because it omits selection guidance relative to sibling runners and any environment prerequisites, though nothing critical for a basic call 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 coverage is 67%, with projectPath and scenePath documented in the schema, while timeoutMs has bounds but no textual description. The description adds no parameter-level meaning beyond implying that a timeout exists and is reported, so it does not compensate for the partial coverage gap.

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 states a specific verb and resource: run a headless test scene until it exits. That is much clearer than a bare name, but it does not distinguish the tool from close siblings such as run_scene, run_playtest, or run_gut_tests, so an agent must infer the distinction.

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 phrase 'test scene' implies the intended use, and the requirement that scripts quit with their result code hints at how tests must be authored. However, it gives no explicit when-to-use guidance, no exclusions, and no routing to alternatives like run_gut_tests or run_scene.

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

sample_node_propertiesA

Sample 1–10 named properties on a live node across stepped frames in a paused debug session. Returns bounded typed values and numeric/vector component summaries. Executes getters, advances the game and leaves it paused.

NameRequiredDescriptionDefault
kindNophysics
samplesNo
nodePathYes
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
timeoutMsNo
propertiesYes
intervalFramesNo

Output Schema

NameRequiredDescription
kindYes
pausedYes
metricsNo
samplesYes
summariesYes
sampleCountYes
advancedFramesYes
intervalFramesYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and openWorldHint=true; the description explains why — getters are executed and the game is stepped forward but left paused, so the agent understands the side effect is process-state advancement rather than data mutation. It also characterizes the return payload ('bounded typed values and numeric/vector component summaries'), which the annotations do not cover.

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?

Three tight sentences, front-loaded with the action and scope, followed by return shape and side effects. No filler or restatement of the tool name.

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?

With an output schema present, return values need not be spelled out, and the description covers the session requirement, side effects, and value bounds well. The remaining gap is the physics/process stepping mode, a meaningful choice for a 7-parameter, high-side-effect tool that is undocumented in both schema and description.

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 14% — only sessionId is documented — so the description must carry the load, and it only partially does. It usefully restates the 1–10 property cap (matching maxItems) and implies frame stepping, but leaves the physics/process 'kind' enum, samples vs intervalFrames interaction, and timeoutMs unexplained anywhere.

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 precise verb and resource — 'Sample 1–10 named properties on a live node across stepped frames in a paused debug session' — which is clearly distinct from the static sibling get_node_properties and from sample_performance. The scope (bounded property count, multi-frame sampling, paused-session requirement) lets an agent pick it without opening the schema.

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 prerequisite context ('in a paused debug session') implies when the tool is applicable, and the note that it advances the game signals it is not a free read. However, it never names an alternative (e.g. get_node_properties for a one-shot value) or states when not to use it, so routing still requires inference.

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

sample_performanceB

Sample selected runtime Performance monitors across stepped frames in a paused debug session. Returns bounded series, units and numeric summaries. Advances the game and leaves it paused; not passive/full profiling.

NameRequiredDescriptionDefault
kindNophysics
samplesNo
monitorsNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
timeoutMsNo
intervalFramesNo

Output Schema

NameRequiredDescription
kindYes
pausedYes
metricsNo
samplesYes
summariesYes
sampleCountYes
advancedFramesYes
intervalFramesYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false and destructiveHint=false; the description adds real behavioral context beyond them — that the call advances the game, leaves it paused afterward, and returns bounded series with units and summaries, so the agent knows there is a side effect on runtime state. It stops short of covering timeout or session-expiry behavior.

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 tight sentences with the core action front-loaded and the caveat about advancing the game placed where it is likely to be read. No filler, though the return-value sentence partially duplicates the output schema.

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?

An output schema exists, so return shape needn't be spelled out, and the side-effect disclosure is helpful. But for a 6-parameter tool at 17% schema coverage, the description leaves too much of the sampling configuration undocumented to be fully complete.

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 17% and only sessionId carries a description. The description says nothing about kind (physics vs process), the samples count, the monitors list, intervalFrames stepping, or timeoutMs, so an agent must infer all five from bare schema constraints.

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?

States a specific verb and resource: sampling selected runtime Performance monitors across stepped frames in a paused debug session. It also draws a line against passive profiling, which distinguishes it conceptually from get_performance_monitors, though it never names that sibling.

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 clause 'not passive/full profiling' and 'in a paused debug session' imply when this tool applies and when it does not, but there is no explicit instruction such as 'use get_performance_monitors for a single passive snapshot' or any stated prerequisite like an active debug session.

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

save_sceneC
Destructive

Save changes to a scene file

NameRequiredDescriptionDefault
newPathNoOptional: New path to save the scene to (for creating variants)
scenePathYesPath to the scene file (relative to project)
projectPathYesPath to the Godot project directory

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true. The description only restates that it saves changes and adds no detail about overwrite behavior, backups, or how newPath variants affect the original scene.

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 a single front-loaded sentence with no wasted wording. It is concise, though its brevity leaves important save semantics unstated.

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?

Because the schema fully describes all parameters and annotations disclose the destructive mutation profile, the description is minimally sufficient. It still omits save-specific behavior such as whether scenePath is overwritten when newPath is absent.

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 projectPath, scenePath, and newPath. The description adds no parameter-level meaning, which is acceptable at the baseline for high schema coverage but does not improve on it.

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 gives a specific verb and resource: 'Save changes to a scene file.' It is clear what the tool does, but it does not explicitly distinguish saving from siblings such as create_scene or modify_scene.

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?

There is no guidance on when to use this tool versus alternatives like modify_scene or create_scene. The only implied usage is that it is for persisting scene edits, with no explicit conditions or exclusions.

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

set_debug_pauseB

Pause or resume the live debug session. Captures do not change pause state.

NameRequiredDescriptionDefault
pausedYes
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare a non-destructive mutating, open-world operation, and the description is consistent with that (it toggles runtime state only). The line 'Captures do not change pause state' adds genuine behavioral context about interaction with sibling capture tools, but prerequisites (active session, whether pausing halts the target process) are unstated.

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?

Two short sentences, front-loaded with the core action; nothing is redundant. The second sentence is slightly cryptic in isolation ('captures' is undefined) but does carry real information.

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?

With no output schema and only annotations for the safety profile, the description should cover session prerequisites and the boolean's semantics; it covers neither fully. It is minimally adequate for a simple two-parameter toggle but leaves the caller to guess preconditions and polarity.

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 coverage is only 50%: sessionId is documented but the required boolean 'paused' has no description. The description says 'pause or resume' but never states the polarity (paused=true means pause, false means resume), which is exactly what an agent needs for the one required parameter.

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?

States a specific verb pair ('pause or resume') and resource ('the live debug session'), which is enough to distinguish it from siblings like step_frames, capture_screenshot, and start_debug_session. No explicit sibling callout, but the resource and scope are unambiguous.

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?

Usage is implied by 'live debug session', but the description never says the session must already be running, nor when to prefer this over step_frames or capture tools. There is no exclusion or alternative named.

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

set_input_actionA
Destructive

Create or replace a configured action and its complete binding list. Preserves deadzone when omitted on an existing action. Supports key, mouse button and joypad bindings, dryRun and expectedHash.

NameRequiredDescriptionDefault
actionYes
dryRunNo
eventsYes
deadzoneNo
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds real value on top: 'complete binding list' discloses that all existing bindings are overwritten, and 'Preserves deadzone when omitted' describes a subtle merge behavior not visible anywhere else. dryRun and expectedHash are named as safety mechanisms but never explained, which keeps this below a 5.

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

Conciseness4/5

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

Three tight sentences with the create-or-replace contract front-loaded, followed by the two behavioral caveats an agent most needs. No filler, though the trailing feature list ('Supports key, mouse button and joypad bindings, dryRun and expectedHash') is enumeration rather than explanation.

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?

An output schema exists so return values need no explanation, but the tool is a destructive mutation with a nested 12-property events array at 0% schema coverage. The description never explains the event shape, what expectedHash guards against, or what dryRun returns, leaving meaningful gaps for a tool this complex.

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% across six parameters, so the description must carry the load. It names the binding kinds and clarifies deadzone's omission behavior, but dryRun, expectedHash, and projectPath are only listed, not defined, and the twelve-field event object (keycode vs key, axisValue, device, modifiers) is entirely unaddressed.

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?

States a specific verb and resource — 'Create or replace a configured action and its complete binding list' — which makes the upsert semantics explicit and separates it from get_input_actions and remove_input_action. It stops short of naming those siblings directly, so an agent must infer the boundary rather than read it.

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 'create or replace' phrasing implies when this tool applies, but there is no explicit guidance on when to prefer it over get_input_actions (read) or remove_input_action (delete), and no stated prerequisites. Usage is inferable rather than instructed.

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

set_main_sceneB

Set the configured project main scene, preserving other settings and comments.

NameRequiredDescriptionDefault
scenePathYes
projectPathYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-destructive, open-world mutation, so the bar is lower. The description adds real value by saying other settings and comments are preserved, but it omits that project.godot is being rewritten, whether the scene must exist beforehand, or what happens on an invalid path.

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?

A single front-loaded sentence with no filler, and the preservation clause is well placed. Nothing in it is redundant.

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

Completeness2/5

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

For a mutation tool with no output schema and zero schema description coverage, the description should clarify path formats and side effects on project.godot. It only covers the preservation guarantee, leaving key invocation details to guesswork.

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 there are two required parameters, yet the description never mentions projectPath or scenePath. It hints at a scenePath concept but leaves open whether it is a res:// path, absolute path, or scene name, and says nothing about what projectPath selects.

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?

States a specific verb and resource ("Set the configured project main scene"), which is a distinct operation from scene-editing siblings such as save_scene or modify_scene. It does not explicitly contrast itself with those siblings, but the resource is unambiguous.

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?

Usage is only implied by the name and resource: an agent infers it is for changing which scene launches with the project. There is no statement of when to prefer it over save_scene/create_scene, nor any prerequisite such as requiring the scene to already exist.

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

set_node_propertiesA

Set stored properties on an existing local scene node using typed JSON values; saves once after validation. Executes constructors. Refuses inherited/instanced edits and unsupported property types.

NameRequiredDescriptionDefault
dryRunNo
nodePathYes
scenePathYes
propertiesYes
projectPathYes
expectedHashNo

TDQS

A4/5.0
Behavior4/5

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

Goes well beyond the annotations: discloses atomicity ('saves once after validation'), a non-obvious side effect ('Executes constructors'), and refusal conditions for instanced/unsupported properties. Annotations only say it is a non-read-only, non-destructive, open-world write; the description adds the transactional and side-effect profile the agent actually needs.

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?

Three dense clauses, front-loaded with the action and target, then constraints. No filler; each sentence adds distinct information (validation/save model, side effects, refusals).

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?

Behavior is well covered for a mutation tool with no output schema, but with six parameters, nested object values, and zero schema coverage, the description leaves the agent guessing about the dryRun/expectedHash contract. Adequate on semantics, incomplete on the parameter contract.

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%, so the description must carry the parameter burden, but it only hints at 'typed JSON values' for properties. It never explains dryRun (preview semantics), expectedHash (presumably optimistic-concurrency guard), or what projectPath/scenePath/nodePath must point at — including the two safety-relevant optional params an agent would most want described.

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 verb and resource ('Set stored properties on an existing local scene node') and constrains it to local (non-instanced) nodes, which cleanly separates it from set_node_reference and set_resource_properties. An agent knows exactly what object class this mutates without opening the schema.

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?

Gives a clear applicability condition ('existing local scene node') and explicit exclusions ('refuses inherited/instanced edits and unsupported property types'). It stops short of naming a sibling tool to use instead when the node is instanced (e.g. an override/reference tool), so routing on the negative case 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.

set_node_referenceB

Bind an exported Node or NodePath script property to a compatible node in the same scene. Executes project constructors; preserves script references.

NameRequiredDescriptionDefault
nodePathYes
propertyYes
scenePathYes
projectPathYes
targetNodePathYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations establish the mutation/safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds genuinely non-obvious behavior: it executes project constructors and preserves existing script references. That explains the openWorld hint and warns of a side effect. It still does not describe failure modes or what state must exist beforehand.

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?

Two tight sentences with the purpose front-loaded and no filler; the secondary sentence about constructors/references carries real information. Brevity comes at some cost of clarity around 'compatible' and 'preserves script references'.

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

Completeness2/5

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

This is a 5-required-parameter mutation tool with no output schema and no annotations covering inputs or preconditions. The description says nothing about what a 'compatible' node is, what happens on mismatch, whether the project/editor must be loaded, or what is returned.

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 there are 5 required string parameters with no documentation anywhere. The description only vaguely gestures at 'property' and 'targetNodePath' ('compatible node'), leaving projectPath, scenePath, and nodePath entirely undefined, including whether nodePath is the source node or the destination.

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?

States a specific verb ('Bind') and resource (an exported Node/NodePath script property to a target node) with a clear scope constraint ('in the same scene'). It is distinguishable from generic writers like set_node_properties, though it never names a sibling to contrast with.

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 'same scene' constraint implies when this applies, but there is no explicit when-to-use, when-not, or alternative (e.g., set_node_properties, modify_scene) for rewiring references. Usage must be inferred.

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

set_project_settingA

Set a typed project setting with isolated Godot validation, preserving unrelated comments/values. Supports dryRun and expectedHash. Use dedicated tools for input and autoload sections.

NameRequiredDescriptionDefault
valueYes
dryRunNo
settingYes
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, open-world, so the safety bar is lower. The description still adds meaningful behavior: the write is surgical ('preserving unrelated comments/values') and validated in isolation, and it advertises dryRun and expectedHash as preview/conflict-guard facilities. It doesn't describe what a validation failure or hash mismatch looks like, but the output schema covers the return shape.

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?

Three short sentences, front-loaded with the core action, then the behavioral guarantee and optional flags, then the sibling routing. No filler and no repetition of the tool name or title.

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?

This is a mutation tool with an output schema, so return values needn't be explained, and the description covers preservation, validation, dry-run, and conflict detection. The remaining gap is parameter-level meaning for setting-path syntax and value typing, plus what a failed validation or hash conflict means for the caller.

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 carry parameter meaning, and it only names dryRun and expectedHash without explaining them (preview-only vs. optimistic concurrency check). projectPath, setting, and value get nothing beyond the 'typed' hint. It compensates partially but leaves the highest-risk parameters underspecified.

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?

States a specific verb and resource ('Set a typed project setting') and adds the distinguishing qualifier that it preserves unrelated comments/values during the edit. It also carves out input actions and autoloads as separate tools, which separates it from set_input_action and register_autoload. What a 'project setting' actually is (a project.godot config key) is only implied.

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 final sentence explicitly routes two whole categories of settings to dedicated tools, which is real when-not-to-use guidance naming the alternatives. It gives no guidance on when to prefer dryRun or expectedHash over a plain call, and no prerequisites are stated.

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

set_resource_propertiesC

Set stored properties of a .tres/.res resource and save atomically, preserving its UID and script. Supports dryRun and expectedHash. Executes setters.

NameRequiredDescriptionDefault
dryRunNo
propertiesYes
projectPathYes
expectedHashNo
resourcePathYes

Output Schema

NameRequiredDescription
savedYes
classNameYes
truncatedNo
propertiesNo
sourceHashYes
resourcePathYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior: the save is atomic, UID and script are preserved, and setters are executed (a side-effect caveat). It omits what happens on hash mismatch, on a missing resource, or whether unlisted properties are retained.

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 short sentences, front-loaded with the core action, with no filler. 'Executes setters.' is terse to the point of being cryptic, but the density is otherwise appropriate for the tool's complexity.

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

Completeness2/5

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

For a mutating tool with openWorldHint, an untyped nested 'properties' object at 0% schema coverage, and hash-based concurrency control, the description leaves too much undefined. The output schema covers return values, but the input contract — especially properties shape and hash-mismatch behavior — is not conveyed.

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% across 5 parameters, so the description must carry the load. It names dryRun and expectedHash but gives no meaning, format, or default for them, and never explains projectPath, resourcePath, or the shape of the nested 'properties' object — the most important parameter for correct invocation.

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?

States a specific verb and resource type ('Set stored properties of a .tres/.res resource') and adds scope details (atomic save, UID/script preservation). The .tres/.res framing implicitly separates it from set_node_properties and set_node_reference, but no sibling is named explicitly.

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?

No statement of when to use this versus create_resource, set_node_properties, or get_resource_info, and no preconditions such as whether the resource must already exist. 'Supports dryRun and expectedHash' hints at a safe-write workflow but never says to use dryRun first or when expectedHash should be supplied.

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

simulate_inputB

Send input events to the live debug session only. Send pressed:false to release a held key, action or button.

NameRequiredDescriptionDefault
xNo
yNo
kindYes
actionNo
buttonNo
keycodeNo
pressedNo
strengthNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=false and openWorld=true, so the safety profile is mostly covered. The description usefully adds that effects are confined to the live debug session and explains the release semantics of pressed:false, but says nothing about the sessionId prerequisite, whether injected input persists, or how it interacts with the running game state.

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?

Two compact sentences with the scope constraint front-loaded and the release hint second. No filler, though it is arguably too terse for a 9-parameter tool.

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

Completeness2/5

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

With 9 parameters, 11% schema coverage, no output schema and no detailed annotations, the description should explain how the parameters combine per kind and confirm the sessionId requirement. It does neither, leaving an agent to guess the invocation shape for any kind other than a simple key release.

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 11% (only sessionId is documented), so the description carries most of the burden and mostly fails: it clarifies pressed:false only. The meaning of kind enum values, x/y versus action versus keycode/button, and strength (0-1) are left entirely to bare schema types.

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?

States a specific verb and resource (send input events to the live debug session) and scopes it with 'only', which separates it from the config-oriented set_input_action/set_input_action siblings. It stops short of naming an alternative or spelling out which input kinds map to which parameters.

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?

'Live debug session only' implies the prerequisite that a debug session must already be running, and the pressed:false sentence gives one concrete usage recipe. There is no explicit statement of when not to use it or which sibling to prefer for configuring input actions instead of injecting them.

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

start_debug_sessionA

Run a temporary live debug session. Does not install addons or change project settings. Replaces the current game run.

NameRequiredDescriptionDefault
headlessNo
scenePathNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28
annotationsNoEnable the debug-only annotation overlay, opened with Cmd/Ctrl+Shift+A; submitted frames persist locally. Requires display rendering.
projectPathYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only say readOnly=false, openWorld=true, destructive=false; the description adds the genuinely important side effect that an existing game run is terminated, plus the scope constraint that no addons or project settings are touched. It stops short of describing session lifetime, whether the session must be closed with close_session, or how the handle is obtained.

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?

Three short sentences, purpose first and side effects after, with no filler or repetition of the title. Each sentence carries distinct information (what it does, what it does not do, what it overwrites).

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?

With no output schema and a mutating, open-world tool, the description leaves open how the session handle is returned and how follow-up tools (get_debug_output, stop_project, close_session) attach to it. For a session-starting tool in a dense sibling set, that is a meaningful gap, though the core contract is conveyed.

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 only 40%, so the description needs to compensate and it does not: headless, scenePath, and projectPath are undocumented in both places, and only sessionId and annotations carry schema text. The description contributes zero parameter-level meaning beyond the bare purpose statement.

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 gives a specific verb+resource ("Run a temporary live debug session") and distinguishes it from configuration-style siblings via the exclusion of addon install and project-setting changes. It does not explicitly name the nearest alternatives (run_project, run_scene_test, launch_editor), so the differentiation is implied rather than stated.

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?

"Does not install addons or change project settings" is useful negative guidance that steers the agent away from settings/addon tools, and "Replaces the current game run" hints at when it is appropriate. But no sibling is named as the alternative, and there is no statement of prerequisites or when to prefer run_project or run_scene_test instead.

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

step_framesA

Advance a paused live session by 1 to 120 process or physics frames, then pause again. Counts frame boundaries; pause-ignoring nodes and external systems are not deterministic. Requires set_debug_pause first.

NameRequiredDescriptionDefault
kindNo
framesYes
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, and the description adds real value on top: the frame-boundary semantics and the caveat that pause-ignoring nodes and external systems are non-deterministic – a meaningful warning given openWorldHint=true. It doesn't state what happens if called while unpaused or what is returned, keeping it at 4.

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?

Three short sentences, front-loaded with the action and its bounds, then the determinism caveat, then the prerequisite. No filler and nothing buried.

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 parameterized mutation with no output schema, it covers action, bounds, post-condition and determinism risk adequately. The remaining gaps – the optional kind default and the sessionId handshake noted in the schema – are small but real.

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 only 33%, so the description has to compensate and partly does: it restates the 1–120 bound on frames and explains that kind selects process versus physics frames. It never mentions sessionId or the default behavior when kind is omitted, leaving the highest-risk parameter undocumented in both places.

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 verb (advance), the resource (a paused live session), the bounds (1 to 120 frames), the axis (process or physics), and the post-condition (pause again). An agent can distinguish this from set_debug_pause and simulate_input without opening a schema.

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 prerequisite 'Requires set_debug_pause first' plus 'paused live session' tells the agent exactly the state it must establish, which implicitly names the sibling that must precede it. It doesn't spell out when not to use it (e.g. against a running, unpaused project), so it stops short of a full 5.

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

stop_projectB

Stop the currently running Godot project

NameRequiredDescriptionDefault
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds only the implicit 'currently running' constraint and says nothing about whether the debug session survives, whether unsaved scene state is affected, or what happens to sessionId validity afterward.

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?

One short sentence with the key scoping word ('currently running') front-loaded and zero filler. Nothing to trim and nothing misplaced.

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 one-param tool with annotations and no output schema, this is nearly adequate, but it omits the two things an agent would still want: how this differs from quit_godot/close_session, and whether the session handle remains usable afterward.

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% and the single optional sessionId parameter is documented in the schema including its follow-up-tool relevance. The description adds nothing about sessionId, so baseline 3 applies.

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?

Clear specific verb+resource: 'Stop the currently running Godot project'. It is understandable in isolation, but it does not differentiate itself from nearby siblings such as quit_godot, close_session, or run_project (the inverse operation), leaving the agent to guess the boundary.

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?

No statement of when to use this versus quit_godot, close_session, or set_debug_pause, and no prerequisites or post-conditions given. The agent must infer usage purely from the name.

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

unregister_autoloadA
Destructive

Remove a stored autoload entry with a preview/source-hash guard. Does not change already-running games.

NameRequiredDescriptionDefault
nameYes
dryRunNo
projectPathYes
expectedHashNo

Output Schema

NameRequiredDescription
keyNo
savedYes
storedNo
actionsNo
sectionNo
settingNo
truncatedNo
expressionNo
sourceHashYes
configuredOnlyNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the description's added value is the guard semantics: a preview mode and a source-hash check before removal, plus the reassurance that running game sessions are untouched. It stops short of saying what happens on a hash mismatch or whether a removed entry can be restored.

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?

Two short sentences, zero filler, with the core action and its guard front-loaded before the scope caveat. Nothing repeats the title or restates the 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?

An output schema exists, so return values need not be explained, and the description covers the safety model of a destructive operation well enough to call it correctly. The remaining gap is failure behavior when expectedHash does not match and whether the operation is recoverable.

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 carry parameter meaning. It obliquely explains 'preview' (dryRun) and 'source-hash guard' (expectedHash) and implies name is the entry key, but projectPath is never addressed and the consequences of a hash mismatch remain undefined.

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?

States a specific verb and resource ('Remove a stored autoload entry') plus the guard mechanism, which distinguishes it from the general project-mutation siblings. It does not explicitly name the counterpart register_autoload, so the inverse relationship must be inferred from the 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 clause 'Does not change already-running games' gives a scope boundary that implies when this is appropriate, but there is no explicit when-to-use guidance, no mention of register_autoload as the inverse operation, and no statement about prerequisites such as needing the entry to already exist.

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

update_project_uidsA
Destructive

Update UID references in a Godot project by resaving resources (for Godot 4.4+)

NameRequiredDescriptionDefault
projectPathYesPath to the Godot project directory

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is not left to the description. The description adds useful context by explaining the mechanism: it updates UID references by resaving resources, and it is version-specific for Godot 4.4+. It does not add further detail such as irreversibility or backup expectations, but annotations carry that burden.

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 single, efficient sentence that front-loads the core action. Every phrase contributes useful information: what is updated, how it is done, and the relevant Godot version.

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 one-parameter, destructive tool with no output schema, the description covers the essential action and version constraint. However, it could do more to explain the operational impact of resaving resources in a project, even though the annotations already flag the operation as destructive.

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?

There is only one parameter, projectPath, and the schema fully documents it as the path to the Godot project directory. With 100% schema description coverage, the description does not need to restate parameter semantics, so the baseline of 3 is appropriate.

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 states a specific verb and resource: updating UID references in a Godot project by resaving resources. It also scopes the operation to Godot 4.4+. It is clear what the tool does, though it does not explicitly contrast itself with sibling tools such as get_uid or validate_project.

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 Godot 4.4+ note provides an implied usage condition, which is useful. However, there is no explicit guidance on when to use this instead of alternatives, nor any prerequisite or warning about when not to use it.

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

validate_projectA

Check all or selected GDScript files using Godot --check-only. Choose scripts or pattern for targeted validation. Does not validate C# or gameplay.

NameRequiredDescriptionDefault
patternNoRelative script glob; mutually exclusive with scripts
scriptsNo
timeoutMsNo
projectPathYesGodot project directory

TDQS

A3.9/5.0
Behavior3/5

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

The annotations already disclose open-world execution, non-destructive behavior, and that the tool is not strictly read-only. The description adds useful implementation context by naming Godot --check-only and scoping validation to GDScript, but it does not explain potential side effects, timeout behavior, or why the operation is not annotated read-only.

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 tight sentences, front-loads the core operation, and adds only scope-relevant information. There is essentially no wasted text.

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 four-parameter validation tool with no output schema, the description explains purpose and some targeting behavior but does not describe what check results are returned or how timeoutMs affects execution. It is adequate to start an invocation but leaves meaningful gaps around output and runtime behavior.

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 only 50%, so the description needs to compensate. It clarifies that scripts and pattern are alternative targeting mechanisms and that they enable targeted validation, but it says nothing about timeoutMs or the expected contents of the scripts array.

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: checking GDScript files via Godot's --check-only mode. It also states that all or selected files can be checked and explicitly excludes C# and gameplay validation, which helps distinguish it from sibling tools such as run_gut_tests or run_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?

It gives clear context for targeted validation by letting the caller choose scripts or a pattern, and it states an explicit exclusion: C# and gameplay are not validated. It does not explicitly route the agent to a named alternative for unsupported validation cases, so it falls short of full when/when-not guidance.

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

view_logB
Read-only

Read bounded logs of the most recently launched editor, including after exit.

NameRequiredDescriptionDefault
lineCountNo
sessionIdNoExplicit process/debug session handle; required for follow-up tools on MCP 2026-07-28

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already establish this as a non-destructive read-only operation. The description adds useful behavior that logs remain available after editor exit and are bounded, but it omits session handling details or what the returned logs include.

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?

A single front-loaded sentence that wastes no words and puts the resource and scope first.

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?

Adequate for a simple read-only log tool with annotations covering safety, but it leaves gaps around lineCount behavior, sessionId usage, and how this differs from sibling diagnostic tools.

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 coverage is only 50%: sessionId is described in the schema, but lineCount is not. The description's 'bounded logs' vaguely hints at lineCount without explaining defaults, limits, or its effect, and it does not mention sessionId at all.

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?

States a specific verb and resource: reading bounded logs from the most recently launched editor. The 'including after exit' scope is clear, but it does not explicitly distinguish itself from sibling log/diagnostic tools like get_debug_output.

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?

Implies usage after launching an editor and even after it exits, which gives contextual guidance. However, it does not name alternatives such as get_debug_output or state when not to use this tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 65 tool updatesv0.6.1
    • First observedadd_node
    • First observedattach_script
    • First observedcapture_scene_screenshot
    • First observedcapture_screenshot
    • First observedclose_session
    • First observedcreate_resource
    • First observedcreate_scene
    • First observeddisable_editor_plugin
    • First observedduplicate_node
    • First observedenable_editor_plugin
    • First observedensure_annotation_addon
    • First observedexport_mesh_library
    • First observedexport_project
    • First observedget_annotation
    • First observedget_annotation_status
    • First observedget_class_info
    • First observedget_debug_output
    • First observedget_editor_plugins
    • First observedget_godot_version
    • First observedget_input_actions
    • First observedget_node_properties
    • First observedget_performance_monitors
    • First observedget_project_info
    • First observedget_project_overview
    • First observedget_project_setting
    • First observedget_resource_info
    • First observedget_runtime_tree
    • First observedget_scene_info
    • First observedget_uid
    • First observedinstance_scene
    • First observedlaunch_editor
    • First observedlist_annotations
    • First observedlist_project_files
    • First observedlist_projects
    • First observedload_sprite
    • First observedmodify_scene
    • First observedquit_godot
    • First observedregister_autoload
    • First observedremove_annotation_addon
    • First observedremove_input_action
    • First observedremove_project_setting
    • First observedresolve_annotation
    • First observedrun_gut_tests
    • First observedrun_playtest
    • First observedrun_project
    • First observedrun_scene
    • First observedrun_scene_test
    • First observedsample_node_properties
    • First observedsample_performance
    • First observedsave_scene
    • First observedset_debug_pause
    • First observedset_input_action
    • First observedset_main_scene
    • First observedset_node_properties
    • First observedset_node_reference
    • First observedset_project_setting
    • First observedset_resource_properties
    • First observedsimulate_input
    • First observedstart_debug_session
    • First observedstep_frames
    • First observedstop_project
    • First observedunregister_autoload
    • First observedupdate_project_uids
    • First observedvalidate_project
    • First observedview_log

TDQS

B3.2/5.0

Scored across 65 tools

Disambiguation3/5

Most tools have distinct purposes, but several clusters overlap heavily: run_project, run_scene, start_debug_session, run_playtest, and capture_scene_screenshot all relate to executing or observing a running project. Scene-editing tools such as modify_scene overlap with add_node, duplicate_node, instance_scene, and set_node_properties, so an agent must rely on detailed descriptions to avoid misselection.

Naming Consistency5/5

Tool names consistently use snake_case with predictable verb_noun phrasing, such as get_project_info, set_project_setting, remove_input_action, and capture_screenshot. The convention is applied throughout the large surface.

Tool Count1/5

With 65 tools, the surface is extremely large even for a broad Godot editor automation server. The count exceeds the typical 25+ threshold by a wide margin and likely creates cognitive overhead and selection risk.

Completeness5/5

The tool set covers a very broad Godot lifecycle: project and editor control, scene and resource editing, settings, input actions, autoloads, plugins, annotations, runtime debugging, playtests, tests, screenshots, and export. Minor caveats exist around script authoring and C# validation, but the surface is unusually comprehensive.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with the Godot game engine by launching the editor, running projects, capturing debug output, managing scenes and nodes, and controlling project execution through a standardized interface.
    18
    194 npm
    11
    MIT
  • A
    license
    B
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with the Godot game engine by launching the editor, running projects, capturing debug output, managing scenes and nodes, and controlling project execution through a standardized interface.
    14
    194 npm
    1
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to interact with the Godot game engine, including launching the editor, running projects, capturing debug output, and managing scenes.
    84
    74 PyPI
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to launch and control the Godot game engine, run projects, capture debug output, and manage scenes and project configurations.
    14
    194 npm
    MIT