Skip to main content
Glama

Godot MCP Runtime

A lightweight MCP server that pairs comprehensive headless editing with full runtime control over a Godot 4.x project. Scene, node, autoload, and validation ops cover everything short of the most niche corners of the engine; the runtime bridge adds screenshots, input simulation, UI discovery, and live GDScript against the running scene tree.

  • Headless editing — scenes, nodes, scripts, signals, validation, no editor window

  • Runtime control — screenshots, input simulation, UI discovery, live GDScript, and function profiling against the running game

  • Zero footprint — no Godot addon, no project commits, auto-cleanup on shutdown

No addon required. Most Godot MCP servers that offer runtime support ship as a Godot addon, something you install into your project, commit to version control, and manage as a dependency. Use npx and there's no install or setup needed.

Think of it as Playwright MCP, but for Godot. This does the same thing for games: run the project, take a screenshot, simulate input, read what's on screen, execute a script against the live scene tree. The agent closes the loop on its own changes rather than handing off to you to verify.

NOTE

This is not a playtesting replacement. It doesn't catch the subtle feel issues that only a human notices, and it won't tell you if your game is fun. What it does is let an agent confirm that a scene loads, a button responds, a value updated, a script ran without errors. The ability to check work is crucial for AI driven workflows.

Contents

Related MCP server: Godot MCP

What It Does

Built for agents. Every tool is purpose-built and self-documenting. When something fails, the response tells the agent how to fix it; when something succeeds, it points toward the next step. The result is an AI that stays unstuck and self-corrects without needing you to nudge it along.

Headless editing. Create scenes, add nodes, set properties, attach scripts, connect signals, validate GDScript. All the standard operations, no editor window required.

Runtime bridge. When run_project or attach_project is called, the server injects McpBridge as an autoload. This opens a localhost-only TCP listener (both auto-select a free port when bridgePort is omitted; pass bridgePort to pin a specific port) and enables:

  • Screenshots: Capture the viewport — by default returns a 960x540 preview inline plus the full PNG on disk; use responseMode: 'full' for pixel-perfect or 'path_only' to skip the inline image

  • Input simulation: Batched sequences of key presses, mouse clicks, mouse motion, UI element clicks by name or path, Godot action events, and timed waits

  • UI discovery: Walk the live scene tree and collect every visible Control node with its position, type, text content, and disabled state

  • Live script execution: Compile and run arbitrary GDScript with full SceneTree access while the game is running

  • Function profiling: With profiling: true at launch, capture Godot's own profiler and rank the most expensive GDScript functions by own or inclusive time, with source locations and per-frame averages

Background mode. Pass background: true to run_project and the Godot window moves off-screen (positioned at (-9999, -9999)) with physical input blocked: borderless, unfocusable, mouse-passthrough. Programmatic input, screenshots, and all runtime tools work exactly the same. Useful for automated agent-driven testing where the window shouldn't be visible or interactive.

Manual attach mode. When something other than MCP launches the game (a CI pipeline, an external debugger, your own shell), call attach_project first. It injects the bridge and marks the project active without spawning Godot, so when you launch the game manually, runtime tools work against it. Use detach_project when done.

IMPORTANT

get_debug_output is unavailable in attached mode. stdout and stderr only flow through processes MCP started itself, so when Godot is launched externally there's no captured output to return. Use run_project if you need the debug stream.

The bridge cleans itself up automatically - on stop_project or detach_project, and also without a tool call when the game exits on its own, the bridge connection drops, or the server shuts down (including a client that just closes the connection). Its artifacts live under .mcp/godot-runtime/ in the project, which the server adds to .gitignore. No leftover autoloads, no modified project files.

How It Compares

The Godot MCP space splits on two axes: whether a server can drive a running game (runtime) or only edit files, and what it costs your project to do so. Most servers that offer real runtime control ship as a Godot addon you install and commit to version control, or as a custom engine you download. This one injects a bridge transiently and removes it on shutdown, so you get full live-game control against stock Godot with nothing left in your repo.

Server

Live-game runtime

Footprint

License

Price

Godot MCP Runtime

Full: screenshots, input, live scene tree, script exec

Zero (npx, no committed addon)

MIT

Free

Summer Engine

Full

Custom engine download + sign-in

MIT layer / proprietary engine

Free core, paid cloud

tugcantopaloglu/godot-mcp

Full

Committed autoload addon

MIT

Free

Godot MCP Pro

Full

Committed editor addon

Proprietary

$15

GDAI MCP

Editor-mediated

Committed editor addon

Proprietary

$19

Coding-Solo/godot-mcp

No (launch + debug output)

Zero (npx)

MIT

Free

Among servers with full live-game control, Godot MCP Runtime pairs a zero-footprint install (no addon committed to version control, no custom engine, no account) with a single npx command, and it has shipped this transient-autoload runtime bridge since February 2026. One other project, Vollkorn-Games/godot-mcp, independently arrived at the same design at the same time and is the only other server in this niche; it's earlier-stage and installs from source rather than npm. For the full field of ~20 servers with a source for every claim, see docs/comparison.md.

Quick Start

Prerequisites

That's it. No Godot addon, no project modifications.

Configure Your MCP Client

Add the following to your MCP client config. Works with Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.

Zero-install via npx (recommended):

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["-y", "godot-mcp-runtime"],
      "env": {
        "GODOT_PATH": "<path-to-godot-executable>"
      }
    }
  }
}

Or install globally:

npm install -g godot-mcp-runtime
{
  "mcpServers": {
    "godot": {
      "command": "godot-mcp-runtime",
      "env": {
        "GODOT_PATH": "<path-to-godot-executable>"
      }
    }
  }
}

Or clone from source:

git clone https://github.com/Erodenn/godot-mcp-runtime.git
cd godot-mcp-runtime
npm install
npm run build
{
  "mcpServers": {
    "godot": {
      "command": "node",
      "args": ["<path-to>/godot-mcp-runtime/dist/index.js"],
      "env": {
        "GODOT_PATH": "<path-to-godot-executable>"
      }
    }
  }
}
TIP

Prefer pnpm? All three install paths work with pnpm. Substitute pnpm dlx godot-mcp-runtime for npx -y godot-mcp-runtime, pnpm add -g godot-mcp-runtime for the global install, or pnpm install && pnpm run build for the source build. pnpm ships stronger defaults against npm supply-chain attacks; see pnpm's supply chain security guide.

If Godot is on your PATH, you can omit GODOT_PATH entirely. The server will auto-detect it.

Optional environment variables

All are set in the same env block as GODOT_PATH:

Variable

Effect

DEBUG

"true" enables verbose [DEBUG] logging.

The three security-gate flags below share one axis (see "Security model" for the full picture) and are wide enough to wrap badly in a table, so they get a list instead:

  • GODOT_MCP_DISABLE_ELICITATION - "true" disables the confirmation prompts for run_project and run_script. Use this if your client cannot display elicitation prompts (e.g. Claude Desktop, which auto-cancels them). Fail-open: the action proceeds with a warning. Tier 1 security hard-blocks still apply.

  • GODOT_MCP_STRICT - "true" hard-rejects anything that would otherwise prompt, for unattended operation. Takes precedence over GODOT_MCP_DISABLE_ELICITATION when both are set.

  • GODOT_MCP_DISABLE_SECURITY - "true" turns the entire run_script/run_project security gate off: no scan, no block, no elicitation, no warnings, no audit sidecars - Tier 1 included. Overrides GODOT_MCP_STRICT when both are set. Enabling this is a human decision - an agent should decline to set it on a user's behalf.

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["-y", "godot-mcp-runtime"],
      "env": {
        "GODOT_PATH": "<path-to-godot-executable>",
        "GODOT_MCP_DISABLE_ELICITATION": "true"
      }
    }
  }
}
IMPORTANT

Windows path gotchas. GODOT_PATH must point at the Godot executable itself, not its install folder. Backslashes in JSON must be escaped or replaced with forward slashes:

"GODOT_PATH": "D:\\Godot\\Godot_v4.4-stable_win64.exe"
// or equivalently
"GODOT_PATH": "D:/Godot/Godot_v4.4-stable_win64.exe"

Setting the variable from a wrapper .bat does not propagate to the MCP server - the path must live in the client's env block above.

Verify

Ask your AI assistant to call get_project_info. If it returns a Godot version string (e.g., 4.4.stable), you're connected and working.

Security model

run_script and run_project execute arbitrary GDScript inside the live Godot process, which runs with full user privileges. The server defends against this with a three-tier static-analysis gate that inspects GDScript before forwarding it to the bridge:

  • Tier 1 (hard block) — direct exec (OS.execute/shell_open/…), reflection bypasses (ClassDB.instantiate, Object.set_script), dynamic code (Expression, str_to_var), and non-literal load/preload/call are rejected server-side.

  • Tier 2 (elicit) — filesystem writes (FileAccess.open, DirAccess.remove) and network primitives (HTTPRequest, TCPServer, …) trigger a user-confirmation prompt via MCP elicitation.

  • Tier 3 (warn) — literal load("res://…") and similar common idioms execute, but findings surface in the response warnings array.

run_project runs the same scan over [autoload] scripts and scripts attached to the launched scene before spawning Godot.

Set GODOT_MCP_STRICT=true to promote every Tier 2 finding to a hard block - needed for unattended operation where MCP client bypass-permissions modes auto-accept elicitation. Off by default.

Set GODOT_MCP_DISABLE_ELICITATION=true for clients that cannot display elicitation prompts (e.g. Claude Desktop, which auto-cancels them). It skips the confirmation prompts and proceeds (fail-open): run_project launches and Tier 2 run_script findings run with a warning. Tier 1 hard blocks are unaffected. Strict mode takes precedence when both are set. Off by default.

Set GODOT_MCP_DISABLE_SECURITY=true to turn the gate off completely: no scan, no block, no elicitation, no warnings, no .policy.json sidecars, for both run_script and run_project (its pre-flight autoload/scene scan and its launch-confirmation prompt). Unlike GODOT_MCP_DISABLE_ELICITATION, this also removes the Tier 1 hard blocks - a sandboxed user who opted in and still could not run OS.execute would not actually have the access they opted in for. This flag overrides GODOT_MCP_STRICT: when both are set, security is off (a startup log records that strict mode was ignored). Enabling this is a human decision. It exists for developers who accept the risk, sandboxed environments, and CI - not for an agent to flip on its own initiative because a gate is in its way. An agent asked to set this on a user's behalf should decline and explain why. Off by default.

Every run_script call writes a .policy.json sidecar next to the audit-trail .gd file in .mcp/godot-runtime/scripts/ - unless GODOT_MCP_DISABLE_SECURITY is set, in which case no sidecar is written at all. See docs/security.md for the full rule catalogue.

Docs

Acknowledgments

Built on the foundation laid by Coding-Solo/godot-mcp for headless Godot operations.

Developed with Claude Code.

License

MIT

Available Tools

39 tools
add_autoloadA

Register a new autoload in a project. autoloadPath accepts "res://..." or a project-relative path (auto-prefixed). singleton defaults true (accessible globally by name). No Godot process required. Warning: autoloads initialize in headless mode - a broken script will crash every subsequent headless op; validate before adding. Returns plain-text confirmation with the registered name, path, and singleton flag. Errors if an autoload with the same name already exists; use update_autoload to modify.

ParametersJSON Schema
NameRequiredDescriptionDefault
singletonNoRegister as a globally accessible singleton by name (default: true)
projectPathYesPath to the Godot project directory
autoloadNameYesName of the autoload node (e.g. "MyManager")
autoloadPathYesPath to the script or scene (e.g. "res://autoload/my_manager.gd" or "autoload/my_manager.gd")

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses that no Godot process is needed, that autoloads initialize in headless mode, that a broken script crashes every subsequent headless op, what the return format is (plain-text name/path/singleton), and the duplicate-name error 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?

Front-loads the action, then layers path syntax, singleton default, environment behavior, the headless crash warning, return format, and error path — every sentence earns its place with no filler.

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

Completeness5/5

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

For a mutation tool with no annotations and no output schema, the description covers the mutation's side effects, the environment requirement, the return value, and the failure mode, leaving nothing an agent needs to call it 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 coverage is 100%, so the baseline is 3; the description still adds real value by explaining that autoloadPath accepts both 'res://...' and project-relative paths (auto-prefixed) and by restating the singleton default and its global-access meaning.

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 new autoload in a project') and explicitly routes the modify case to a named sibling (update_autoload), letting an agent distinguish it from list_autoloads, update_autoload, and remove_autoload.

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 context (no Godot process required) and names the alternative for modification, plus a pre-flight warning to validate before adding. It does not spell out the inverse case (when not to add an autoload) beyond the duplicate-name error, so it falls just 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.

add_nodeA

Add a node to a Godot scene. Saves automatically. Common spatial properties (position, rotation, scale, visible, modulate) are top-level params; anything else goes under properties. {x,y} / {x,y,z} / {r,g,b,a} auto-convert to Vector2 / Vector3 / Color. Values are checked against the property's declared type and error instead of silently storing that type's zero value. Object-typed properties take a res:// path, a typed dict {type: ClassName, ...props} that constructs a Resource inline, or null. Full value rules: the Property Values section of docs/tools.md. parentNodePath defaults to the scene root. Returns a plain-text confirmation naming the new node and type. Errors, and adds nothing, if nodeType is not a registered Godot class, parentNodePath does not exist, or a property name or value is invalid. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoVector2 scale (e.g. {"x": 2, "y": 2})
visibleNoWhether the node is visible
modulateNoColor modulation (e.g. {"r": 1, "g": 0, "b": 0, "a": 1})
nodeNameYesName for the new node as it appears in the scene tree
nodeTypeYesGodot node class to instantiate (e.g. "Sprite2D", "CollisionShape2D", "Label"), or a project-relative scene path (.tscn or .scn, e.g. "scenes/enemy.tscn") to instance an existing scene as a child - instanced children serialize as `instance=ExtResource(...)` on save
positionNoPosition: {"x": 100, "y": 200} on a 2D node, {"x": 0, "y": 1, "z": 0} on a 3D node
rotationNoRotation in radians
scenePathYesScene file path relative to the project
propertiesNoAdditional property values as a JSON object. Top-level params (position, rotation, etc.) take precedence over keys in this dict.
projectPathYesPath to the Godot project directory
parentNodePathNoParent node path from scene root (e.g. "root/Player"). Defaults to the root node.

TDQS

A3.8/5.0
Behavior4/5

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

No annotations, so the description carries the full burden. It discloses auto-save, type checking (errors instead of silently storing zero value), automatic conversion of dicts to Vector2/Vector3/Color, object-typed property handling, and error conditions. However, it does not mention whether the operation can be undone or how concurrency is handled.

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?

Information is front-loaded and mostly efficient, but the description is fairly dense and includes some repetition (e.g., both schema and description explain dict conversion). Sentences are purposeful with no obvious waste, but could be slightly tighter.

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 mutation tool with no annotations and no output schema, the description is reasonably complete: it covers auto-save, type checking, conversion rules, error conditions, and session interference. However, it lacks details on return format beyond 'plain-text confirmation' and does not mention permissions or side effects like undo capabilities.

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 the schema already documents all parameters. The description reiterates top-level params, dict conversion rules, and the default behavior of parentNodePath, adding some clarity but largely duplicating schema info. Baseline 3 is appropriate when schema is fully covered.

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

Purpose5/5

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

States a specific verb+resource (add a node to a Godot scene) and clearly describes the operation. Siblings like create_scene, add_autoload, duplicate_node, attach_script are distinguishable because the resource and action are 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?

Provides implicit context through prerequisites (errors if a Godot runtime session is active) and fallback behavior (parentNodePath defaults to root), but does not explicitly say when to use this tool versus alternatives like duplicate_node, batch_scene_operations, or create_scene.

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

attach_projectA
Destructive

Inject the MCP bridge into a Godot process you launch yourself, then wait up to 15s for the bridge to respond. Call BEFORE Godot launches - Godot reads autoloads only at process start, so a late call returns "bridge did not respond." Recommended pattern: kick off the Godot launch in parallel with this call so the wait absorbs startup. Prefer run_project unless MCP must not spawn Godot. Returns plain-text status with the resolved bridge port. Call detach_project or stop_project when done.

ParametersJSON Schema
NameRequiredDescriptionDefault
bridgePortNoTCP port for the MCP bridge. Omit to auto-select a free port (recommended). The chosen port is baked into the project's `mcp_bridge.gd` at inject time, so the running Godot listens on exactly this port.
projectPathYesPath to the Godot project directory

TDQS

A4.3/5.0
Behavior4/5

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

With only destructiveHint=true in annotations, the description adds substantial context: a 15s wait budget, the exact failure mode ('bridge did not respond'), the ordering constraint tied to autoload reading at process start, and the plain-text return with resolved port. It does not explicitly disclose that injection modifies the project's mcp_bridge.gd file (which is what justifies destructiveHint), leaving that to the schema's bridgePort note.

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 critical ordering constraint and parallel-launch guidance are front-loaded, and every sentence carries actionable content. It is dense and appropriately sized for a tool with a non-obvious timing contract, though slightly long.

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 tool with no output schema, the description covers return format (plain-text status with resolved bridge port), timing, failure behavior, and cleanup. The main residual gap is explaining why it is destructive (project file modification), but otherwise it is complete enough 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 100%, so both parameters are already fully documented, including the auto-select behavior and port-baking detail. The description adds no additional meaning beyond what the schema provides, so the baseline 3 applies.

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: 'Inject the MCP bridge into a Godot process you launch yourself.' It clearly distinguishes this tool from siblings run_project and launch_editor, so an agent can route correctly 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 Guidelines5/5

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

It gives explicit when-to-use ('Call BEFORE Godot launches'), when-not/alternative ('Prefer run_project unless MCP must not spawn Godot'), a recommended calling pattern (launch in parallel with this call), and follow-up cleanup tools (detach_project or stop_project). Nothing 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.

attach_scriptA
Idempotent

Attach an existing GDScript file to a node in a scene. Use after writing the script with the standard file tools and validating it via the validate tool. Replaces any previously attached script. Saves automatically. Returns: success with the resolved nodePath and scriptPath that were attached. Errors if scriptPath does not exist or nodePath is not found. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodePathYesNode path from scene root (e.g. "root/Player")
scenePathYesScene file path relative to the project
scriptPathYesPath to the GDScript file relative to the project (e.g. "scripts/player.gd")
projectPathYesPath to the Godot project directory

Output Schema

ParametersJSON Schema
NameRequiredDescription
successNo
nodePathNo
scriptPathNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the lone idempotentHint annotation, it discloses that the operation replaces any previously attached script, that it saves automatically, the resolution behavior of the returned nodePath/scriptPath, and two distinct error conditions (missing scriptPath, unknown nodePath). The runtime-session constraint and its remedy are exactly the kind of context annotations cannot carry.

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 sentences, front-loaded with the action, then prerequisites, side effects, and errors, with zero filler. Every sentence contributes operational information.

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

Completeness5/5

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

For a mutation tool with an output schema, the description covers prerequisites, destructive behavior (script replacement), auto-save, return shape, and both failure modes plus the runtime blocker and its clear command. Nothing an agent needs to call it correctly is missing.

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

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 with examples (nodePath, scenePath, scriptPath, projectPath). The description adds little parameter-level syntax beyond reiterating that nodePath and scriptPath are resolved on return, so the baseline of 3 applies.

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 (attach) and resource (an existing GDScript file) plus its target (a node in a scene), and the scope is unambiguous against siblings like validate or run_script. An agent can distinguish this tool's job 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?

It states the prerequisite workflow explicitly ('after writing the script with the standard file tools and validating it via the validate tool') and the blocking condition (runtime session active, cleared by stop_project/detach_project). It does not, however, point to an alternative for cases where attaching is the wrong choice versus run_script.

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

batch_scene_operationsA
Destructive

Use this instead of chaining add_node / load_sprite / save_scene calls when you have multiple mutations on the same or related scenes - runs in one Godot process (~3s startup avoided per call) and shares an in-memory scene cache, saving once at the end. Each item picks its own sub-operation (add_node, load_sprite, set_node_properties, save) and supplies its own params; add_node items accept the same promoted spatial params (position, rotation, scale, visible, modulate) as the standalone tool; set_node_properties items accept the same per-update params (nodePath, property, value) and per-operation scenePath and abortOnError as the standalone tool; abortOnError stops on first failure (default false continues). Returns: results[] in input order, each tagged with operation and scenePath plus success or error. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesOrdered list of scene operations. Each item has its own operation and scenePath.
projectPathYesPath to the Godot project directory
abortOnErrorNoStop processing on first error (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only give destructiveHint=true, so the description carries most of the weight. It discloses the single-process execution (~3s startup avoided per call), shared in-memory scene cache, save-once-at-end behavior, error semantics (abortOnError false continues by default), and the session precondition. It still leaves open whether partial mutations persist in the cache or whether the end-save can fail after errors, which is why it is 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.

Conciseness4/5

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

One dense paragraph, front-loaded with the primary use case before diving into per-operation mechanics and return shape. Sentences are long but each carries distinct information (caching, error defaults, session lifecycle); minor redundancy with the schema descriptions of abortOnError.

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 the return-value explanation is a bonus rather than a necessity, yet it still documents results[] ordering and tagging. Combined with the session-lifecycle caveat and caching behavior, the agent has enough to invoke correctly; only the fate of partial mutations on error remains unspecified.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning by explaining that each array item selects its own sub-operation and params, that add_node accepts the same promoted spatial params as the standalone tool, and that set_node_properties mirrors the standalone per-update and per-operation fields. This clarifies the nested dispatch structure beyond the flat schema.

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

Purpose5/5

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

States a specific verb (batch) and resource (scene operations) with a clear scope: "multiple mutations on the same or related scenes" in one Godot process. It names the exact siblings it replaces (add_node / load_sprite / save_scene), so an agent can immediately distinguish it from the standalone tools.

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

Usage Guidelines5/5

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

Explicit when-to-use: "Use this instead of chaining add_node / load_sprite / save_scene calls when you have multiple mutations on the same or related scenes." It names the alternatives and the selecting condition, and adds a second condition (active Godot runtime session) with the clearing tools stop_project / detach_project.

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

connect_signalA

Connect a signal on a source node to a method on a target node, persisting it in the .tscn. Use get_node_signals first to confirm names - connecting the same pair twice creates a duplicate connection. Saves automatically. Returns a plain-text confirmation naming source, signal, target, and method. Errors if the signal or method does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesMethod name on the target node to call when the signal fires
signalYesSignal name on the source node (e.g. "pressed", "body_entered")
nodePathYesSource node path from scene root
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory
targetNodePathYesTarget node path from scene root that receives the signal

TDQS

A4.7/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and does so well: it discloses auto-save behavior, the idempotency hazard (duplicate connections), the exact error conditions (missing signal/method, active runtime session), and the return format. These are non-obvious traits an agent must know before invoking.

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?

Front-loaded with the core action, then prerequisites, side effects, return value, and failure modes in five tight sentences. No filler; each sentence contributes distinct operational information.

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?

No output schema, yet the description describes the return value ('plain-text confirmation naming source, signal, target, and method'), and it covers persistence, errors, and the runtime-session conflict. For a 6-required-param mutation tool this is complete enough 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 coverage is 100%, so all six parameters are already documented in structured form, which sets the baseline at 3. The description adds only indirect value by advising get_node_signals to validate signal/method names; it does not add format or path-syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb (connect), resource (signal on source node to method on target node), and destination of the change (.tscn file). The pairing of source-signal / target-method is precise enough to distinguish it from disconnect_signal and get_node_signals without opening any schema.

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

Usage Guidelines5/5

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

Explicitly tells the agent to call get_node_signals first to confirm names, states the duplicate-connection consequence, and names stop_project/detach_project as the ways to clear the runtime-session blocker. That is genuine when-to-use and when-not-to-use guidance with named alternatives.

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

create_sceneA
Idempotent

Create a new Godot scene file with a single root node. Writes a fresh .tscn at scenePath. Use when starting a new scene from scratch; for adding nodes to an existing scene, use add_node. rootNodeType defaults to Node2D - pass "Node3D" for 3D scenes or "Control" for UI. Saves automatically. Overwrites silently if the file already exists. Returns: success and the scenePath that was written. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesScene file path relative to the project (e.g. "scenes/main.tscn")
projectPathYesPath to the Godot project directory
rootNodeTypeNoRoot node type (default: Node2D)

Output Schema

ParametersJSON Schema
NameRequiredDescription
successNo
scenePathNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only provide idempotentHint=true, but the description goes much further: 'Overwrites silently if the file already exists,' 'Saves automatically,' and — critically — 'Errors while a Godot runtime session is active... stop_project (or detach_project) clears it.' This is a runtime precondition no annotation would convey, and it's exactly the kind of behavior that causes agent failures if missed.

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?

Front-loads purpose, then the routing alternative, then parameter hints, then behavior (overwrite, save), then return shape, then the runtime precondition. Every clause is load-bearing; no filler.

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

Completeness5/5

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

Output schema exists, so return values ('success and the scenePath') need not be explained in depth — the description summarizes anyway. Combined with the runtime-session precondition, silent-overwrite warning, and default handling, an agent has everything needed 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 coverage is 100%, so baseline is 3. The description adds meaning beyond the schema for rootNodeType by giving concrete values ('pass "Node3D" for 3D scenes or "Control" for UI') and reinforcing the default, which the schema states only in one short clause. No enum is declared in the schema, so this guidance is otherwise unavailable.

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?

Specific verb+resource: 'Create a new Godot scene file with a single root node.' Distinguishes from sibling add_node explicitly, and the write target (.tscn at scenePath) is stated. An agent can identify this tool without ambiguity.

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

Usage Guidelines5/5

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

Explicit when-to-use ('starting a new scene from scratch') and the alternative for the opposite case ('for adding nodes to an existing scene, use add_node'). Covers the main routing decision cleanly.

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

delete_nodesA
Destructive

Remove one or more nodes (and their descendants) from a scene file. Always-array: pass a single-element nodePaths array for one-off deletes. Saves once at the end. Cannot delete the scene root - that entry returns an error and the rest still process. Returns: results array with one entry per nodePath in input order (success or error message). Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodePathsYesNode paths from scene root to delete (e.g. ["root/Player/Sprite2D"])
scenePathYesScene file path relative to the project (e.g. "scenes/main.tscn")
projectPathYesPath to the Godot project directory

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, it discloses that descendants are removed, that the save happens once at the end, that a root-delete fails per-entry without aborting the batch, and that an active runtime session causes errors. These are meaningful behaviors an agent cannot get from annotations alone.

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?

Front-loads purpose, then packs array semantics, failure behavior, return shape, and prerequisites into tight sentences with zero filler. Every sentence earns its place.

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

Completeness5/5

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

For a destructive batch mutation with an output schema already defined, the description covers the safety-relevant behaviors, partial-failure semantics, prerequisites, and return structure. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description adds the non-obvious always-array contract (single-element array for one-off deletes), which prevents a common invocation mistake. The per-entry results ordering also clarifies how nodePaths maps to output.

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 (Remove) and resource (nodes and their descendants) plus scope (from a scene file). An agent can distinguish it cleanly from add_node, duplicate_node, and remove_autoload without opening any 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?

Adds operational guidance: always-array contract for one-off deletes, the scene-root exclusion, and the runtime-session prerequisite with concrete remedies (stop_project/detach_project). It stops short of an explicit when-to-use/when-not comparison against sibling mutation tools, but the context is otherwise clear.

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

detach_projectA
Destructive

Clear attached-mode runtime state and remove the injected McpBridge autoload. Does NOT stop the manually launched Godot process - that stays running. Use after attach_project when you are done driving the game from MCP. For spawned sessions (run_project), use stop_project instead. Mostly optional now: when the bridge disconnects (you closed Godot), the next runtime tool call probes once and ends the attached session itself, removing the autoload. Calling it afterwards still succeeds idempotently, wording the message to distinguish "an attached session existed and already ended" from "this server never attached to a project". Returns: message confirming detach plus externalProcessPreserved (always true here - that is the point of detach vs stop_project). Errors only when a spawned session is what is active; use stop_project for those.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
externalProcessPreservedNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only supply destructiveHint=true, but the description adds substantial context: it preserves the external Godot process, is idempotent on repeat calls, auto-cleans up when the bridge disconnects, distinguishes 'already ended' vs 'never attached' messages, and errors only when a spawned session is active. This is well beyond what the single annotation conveys and is consistent with it.

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 dense and front-loaded, leading with the core action and its key exclusion. It is on the long side and spends a full sentence detailing return values ('message confirming detach plus externalProcessPreserved') that the output schema already covers, which is mild redundancy but not padding.

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

Completeness5/5

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

For a zero-parameter, zero-ambiguity lifecycle tool with an output schema and a destructive annotation, the description covers scope, alternatives, idempotency, error conditions, and cleanup behavior. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters (schema is an empty object), so there are no parameter semantics to document. Per the baseline for 0-param tools, this is adequate; the description's discussion of externalProcessPreserved belongs to the output, not the input.

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 action ('clear attached-mode runtime state and remove the injected McpBridge autoload') and immediately delimits its scope by naming what it does NOT do ('Does NOT stop the manually launched Godot process'). It explicitly distinguishes itself from siblings attach_project, run_project, and stop_project, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('Use after attach_project when you are done driving the game'), the alternative for other cases ('For spawned sessions (run_project), use stop_project instead'), and notes it is 'mostly optional now' because the session auto-ends on disconnect. When-not/alternative guidance is fully present.

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

disconnect_signalA
Destructive

Remove an existing signal connection between two nodes, persisting the change in the .tscn. Use get_node_signals first to confirm the connection exists; recovery requires reconnecting via connect_signal. Saves automatically. Returns a plain-text confirmation naming the disconnected signal and target. Errors if the connection does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesMethod name on the target node
signalYesSignal name on the source node
nodePathYesSource node path from scene root
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory
targetNodePathYesTarget node path from scene root

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds far beyond that: it discloses persistence behavior ('persisting the change in the .tscn'), auto-save, the exact return format ('plain-text confirmation naming the disconnected signal and target'), two error conditions, and the runtime-session blocking condition with its workaround. Rich behavioral context that annotations alone do not provide.

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?

Five tight sentences, front-loaded with the core action, then prerequisites, recovery, return, errors, and blocking condition. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a destructive 6-param mutation tool with no output schema, the description covers persistence, return format, error conditions, recovery, and the runtime-session blocker. Nothing an agent needs in order to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description alludes to 'two nodes' and a 'connection' but adds no syntax or format details beyond what the schema documents for each of the 6 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?

States a specific verb+resource ('Remove an existing signal connection between two nodes') and distinguishes itself from siblings connect_signal and get_node_signals by naming both. An agent can identify the exact operation 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 Guidelines5/5

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

Explicitly names get_node_signals as a prerequisite to confirm the connection exists, connect_signal as the recovery path, and stop_project/detach_project as the way to clear the runtime-blocking condition. Covers when to use, when it errors, and the alternative for recovery.

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 node and its descendants in a Godot scene, without rebuilding it node-by-node via add_node. newName defaults to the original name + "2"; targetParentPath defaults to the original parent. Saves automatically. Returns: success with originalPath and the newPath where the duplicate now lives. Errors if nodePath does not exist or targetParentPath cannot accept children. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
newNameNoName for the duplicated node (default: original name + "2")
nodePathYesNode path from scene root to duplicate
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory
targetParentPathNoParent node path for the duplicate (default: same parent as original)

Output Schema

ParametersJSON Schema
NameRequiredDescription
newPathNo
successNo
originalPathNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden. It discloses automatic saving, default naming and parent behavior, return values (originalPath and newPath), error conditions, and the critical requirement that no Godot runtime session be active, naming stop_project and detach_project as remedies. This is strong, though it could mention reversibility or deeper semantics.

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

Conciseness4/5

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

The description is front-loaded with the core action, followed by defaults, return values, and error conditions. It is compact but includes some redundancy with the schema (defaults). Overall efficient.

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

Completeness5/5

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

Given an output schema exists, the description needn't explain return values, yet it still summarizes them. It covers defaults, error cases, and a critical runtime prerequisite. For a mutation tool with no annotations, no output schema gaps, and complete parameter schema, this is fully adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters including defaults for newName and targetParentPath. The description repeats those defaults but adds no extra syntax or format details beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description gives a specific verb+resource ('Duplicate a node and its descendants in a Godot scene') and explicitly contrasts itself with the node-by-node approach via add_node. This clearly distinguishes it from siblings like add_node.

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?

Provides clear context by contrasting with add_node and explaining default behavior for newName and targetParentPath. It also defines error conditions (nodePath nonexistent, targetParentPath invalid) and runtime session conflicts. However, it doesn't explicitly state when to prefer this over other siblings beyond add_node.

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

export_mesh_libraryA
Destructive

Export a scene of MeshInstance3D nodes as a MeshLibrary .res file for use in GridMap. For grid-based 3D tile palettes only, not 2D scenes. Source scene must contain MeshInstance3D children. Pass meshItemNames for a subset, or omit for all. Saves to outputPath, overwriting silently. Returns a plain-text confirmation with the exported item count. Errors if the scene contains no valid meshes. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesScene file path relative to the project
outputPathYesOutput path for the MeshLibrary .res file (relative to project)
projectPathYesPath to the Godot project directory
meshItemNamesNoNames of specific mesh items to export. Omit to export all.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true; the description goes far beyond by disclosing silent overwrite of outputPath, both error conditions (no valid meshes, active runtime session), the return format, and how to clear the session blocker. This is rich behavioral context.

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

Conciseness5/5

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

Five dense sentences, zero filler, with the core purpose and the 3D-only constraint front-loaded before parameters and error/return behavior.

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 no output schema, the description supplies the return format and count, covers error paths, prerequisite session state, and overwrite risk. Nothing an agent needs to invoke this safely is missing.

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

Parameters4/5

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

Schema coverage is 100% so the parameters are self-documented, but the description still adds semantics the schema lacks: outputPath is overwritten silently and meshItemNames defines a subset vs. all-export behavior. It stops short of adding format detail on scenePath/projectPath.

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 ('Export a scene of MeshInstance3D nodes as a MeshLibrary .res file') and immediately scopes it ('For grid-based 3D tile palettes only, not 2D scenes'), which sharply distinguishes it from the many scene-manipulation siblings.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (grid-based 3D tile palettes), when-not (2D scenes), and prerequisite alternatives ('stop_project (or detach_project) clears it'). The routing to sibling tools for the runtime-session blocker is spelled out.

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

get_debug_outputA
Read-only

Get captured stdout/stderr from a spawned Godot project. Use whenever runtime tools fail unexpectedly - script errors, missing nodes, and crash backtraces all surface here. Still works after the process exits or crashes: the session clears itself on exit but the captured logs are retained until stop_project. Requires run_project (not attach_project; attached mode does not capture output). Returns: output/errors (last limit lines each, default 200), running (false after exit, null when attached), exitCode after exit, attached:true with empty arrays in attached mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax lines to return (default: 200, from end of output)

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNo
errorsNo
outputNo
runningNo
attachedNo
exitCodeNo

TDQS

A4.7/5.0
Behavior5/5

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

Goes well past the readOnlyHint=true annotation: it discloses that captured logs survive process exit and crashes, that the session clears itself on exit, that logs are retained until stop_project, and that attached mode yields empty arrays with running=null. These are exactly the lifecycle and edge-case behaviors an agent needs and cannot get from annotations or schema.

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

Conciseness5/5

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

Front-loads the purpose, then usage trigger, then lifecycle caveats, then return shape in tight successive sentences. Despite being relatively long, every clause carries distinct operational information - no filler or repetition.

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

Completeness5/5

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

Covers prerequisite tooling, retention semantics, post-crash retrieval, attached-mode behavior, and return-field semantics. Even though an output schema exists (making the return-value prose partly redundant), the description leaves no gap an agent needs filled before calling it 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?

With one parameter at 100% schema coverage, the baseline is 3. The description restates the default of 200 and adds that it applies per-array ('last limit lines each'), which mildly enriches the schema's 'from end of output' wording, but it does not introduce new meaning beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Get captured stdout/stderr from a spawned Godot project') and immediately scopes it to runtime diagnostics. It is clearly distinguishable from siblings like run_project, stop_project, and the editor/profiling tools.

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

Usage Guidelines5/5

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

Explicitly says when to reach for it ('whenever runtime tools fail unexpectedly - script errors, missing nodes, and crash backtraces all surface here') and names a hard prerequisite and its alternative ('Requires run_project (not attach_project; attached mode does not capture output)'). Both the trigger condition and the exclusion are stated, leaving nothing to inference.

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-only

Read one or more nodes' current property values from a scene file in a single Godot process. Always-array: pass a single-element nodes array for one-off reads. Per-node changedOnly:true filters out properties matching class defaults (useful for compact diffs). Returns: { results: [{ nodePath, nodeType, properties?, error? }] }; failed reads include error and omit properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYesNodes to read properties from
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint:true, consistent with 'Read'. The description adds the return format structure and error behavior, which goes beyond annotations. No contradiction.

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 extremely concise with four sentences, each providing essential information. It front-loads the purpose and packs in behavior, input nuance, and return format without redundancy.

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

Completeness4/5

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

Given no output schema, the description adequately covers the return shape, error handling, and parameter details. It could mention potential errors or scenarios, but it is sufficient for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by explaining the 'always-array' behavior for the nodes parameter and the semantics of 'changedOnly:true', which clarifies the parameter usage beyond the schema.

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

Purpose5/5

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

The description explicitly states 'Read one or more nodes' current property values', providing a clear verb and resource. It distinguishes from siblings like 'set_node_properties' and 'get_node_signals' through its specific focus on property values and its 'always-array' behavior.

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 offers usage tips such as passing a single-element array for one-off reads and using 'changedOnly:true'. However, it does not compare with siblings like 'get_node_signals' or 'get_scene_tree', nor does it specify 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.

get_node_signalsA
Read-only

List all signals defined on a node and their current connections. Use before connect_signal/disconnect_signal to verify signal/method names. The connections[].target field is already scene-root-relative in the "root/..." form connect_signal/disconnect_signal accept as targetNodePath (a self-connection reports as "root") - pass it straight through with no conversion. Returns: nodeType and signals[], each with name and current connections (signal/target/method). Errors if node not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodePathYesNode path from scene root (e.g. "root/Button")
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory

Output Schema

ParametersJSON Schema
NameRequiredDescription
signalsNo
nodePathNo
nodeTypeNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description goes further by disclosing that the connections[].target value is scene-root-relative, that 'root' means a self-connection, and that it errors when the node is not found. These are useful behavioral facts beyond the annotation, though return-shape detail is partly redundant with the 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?

Front-loads the purpose and the routing guideline first, then adds format detail. Dense and mostly earned, though the path-format parenthetical is long enough to slightly strain readability.

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

Completeness5/5

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

For a read tool with an output schema present, the description covers purpose, when to call it, the path-format quirk that could otherwise cause errors, and the error case. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value by tying the output's target field format to the targetNodePath argument that connect_signal/disconnect_signal accept, explaining that no path conversion is needed.

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 signals defined on a node plus their current connections. It clearly distinguishes itself from connect_signal/disconnect_signal by describing a read/inspection role rather than a mutation.

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

Usage Guidelines5/5

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

Explicitly says to use it 'before connect_signal/disconnect_signal to verify signal/method names', naming both alternatives and the condition that selects this tool. No inference required.

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

get_project_filesA
Read-only

Return a recursive file tree of a Godot project. Use to discover project structure when paths are unknown. Pass extensions to filter (e.g. ["gd","tscn"]); maxDepth caps recursion (-1 unlimited). Skips hidden (dot-prefixed) entries and the .mcp directory. Returns: { name, type, path, extension?, children? } (nested tree).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxDepthNoMaximum recursion depth. -1 means unlimited (default: -1)
extensionsNoFilter to only these file extensions (e.g. ["gd", "tscn"]). Omit to include all.
projectPathYesPath to the Godot project directory

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds transparency about skipped entries ('Skips hidden (dot-prefixed) entries and the .mcp directory') and the return type. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is two sentences: first states the core purpose, second covers parameters and behaviors. It is front-loaded, with no unnecessary words.

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

Completeness4/5

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

Given the absence of an output schema, the description provides the return structure '{ name, type, path, extension?, children? } (nested tree)'. It also covers filtering and hidden entries. It is reasonably complete for a tool with 3 parameters, though could mention the default for maxDepth explicitly (already in 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?

With 100% schema description coverage, the baseline is 3. The description adds some value with examples (e.g., '["gd","tscn"]') and explains maxDepth behavior, but doesn't significantly exceed the schema's own descriptions.

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

Purpose5/5

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

The description 'Return a recursive file tree of a Godot project' clearly states the verb and resource. It distinguishes from sibling tools like search_project by specifying 'Use to discover project structure when paths are unknown', making it clear when this tool is appropriate.

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

Usage Guidelines4/5

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

The description explicitly says 'Use to discover project structure when paths are unknown' and explains parameters like extensions filter and maxDepth. However, it does not explicitly mention when not to use it or compare to siblings, so it is slightly below a perfect score.

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

get_project_infoA
Read-only

Get metadata about a Godot project: name, path, Godot version, and a structure summary (counts of scenes/scripts/assets/other). Omit projectPath to get just the Godot version (useful for capability checks). Returns: { name, path, godotVersion, structure } or { godotVersion } when projectPath is omitted. Errors if projectPath is set but lacks project.godot.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathNoPath to the Godot project directory (optional - omit to get Godot version only)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so safety is covered. The description adds meaningful behavior beyond that: it specifies the return shape in both modes and discloses the error condition when projectPath is set without a project.godot. This is useful behavioral context not available in structured fields.

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, front-loaded with purpose, then parameter behavior, then return shape. No filler; every sentence adds signal.

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 compensates by specifying the exact return objects for both modes, and covers the error case. Fully adequate for a single-optional-parameter read tool, with only minor gaps (e.g. no mention of projectPath format expectations).

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

Parameters4/5

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

Schema coverage is 100% and the description re-states the parameter's meaning, but it also adds value beyond the schema by explaining the omit-to-get-version-only behavior and its purpose. Slightly redundant with the schema description but the mode semantics are genuinely clarified.

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 (Get) and resource (metadata about a Godot project), then enumerates exactly which fields are returned. Clearly distinguishes itself from siblings like get_project_files, get_project_settings, and get_scene_dependencies by focusing on project-level metadata.

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?

Explains the two usage modes clearly: full metadata with projectPath, or just the Godot version when projectPath is omitted, explicitly noting the capability-check use case. Does not name sibling alternatives for related tasks (e.g. get_project_settings for configuration), but the behavioral mode guidance is strong.

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

get_project_settingsA
Read-only

Parse project.godot into structured JSON. Use to inspect configured display, input, rendering, etc. settings without launching Godot. Pass section to filter to one INI section (e.g. "display", "application"). Returns: { settings: { [section]: { [key]: value } } } or { settings: { [key]: value } } when section is given. Complex Godot types (including multi-line arrays/dicts, e.g. the full "[input]" action map) are returned as their complete raw string, not just the first line; keys outside any section appear under global.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoFilter to a specific INI section (e.g. "display", "application"). Omit for all sections.
projectPathYesPath to the Godot project directory

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, and the description goes well beyond that: it documents the return shape, the raw-string treatment of complex Godot types (multi-line arrays/dicts, the input action map), and the __global__ bucket for keys outside any section. These are non-obvious behaviors an agent could not infer from annotations or 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?

Front-loaded with the core action, then usage, then return contract. Every sentence carries information, though the return-format sentence is dense enough to require careful reading.

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 no output schema, the description fully carries the return-value burden by specifying the two response shapes and the raw-string/__global__ edge cases. Nothing essential for correct invocation appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value by giving example section names and clarifying that omitting section returns all sections, and that out-of-section keys land under __global__. It slightly exceeds the schema's documentation of the same fields.

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 ('Parse project.godot into structured JSON') and scopes it to reading configuration settings without launching Godot. This clearly separates it from siblings like get_project_info and get_project_files.

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 context for when to use it ('inspect configured display, input, rendering, etc. settings without launching Godot') and how to narrow with section. It does not name an alternative tool or state when not to use it, so it falls short of an explicit routing instruction.

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

get_scene_dependenciesA
Read-only

Parse a .tscn file for ext_resource references (scripts, textures, subscenes). Use to inspect what a scene depends on before refactoring or moving files. Returns: the queried scene path and dependencies[] from ext_resource refs (path, type, optional uid). Errors if scene file does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesPath to the .tscn file relative to the project root (e.g. "scenes/main.tscn")
projectPathYesPath to the Godot project directory

Output Schema

ParametersJSON Schema
NameRequiredDescription
sceneNo
dependenciesNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, and description adds details about return values (path, type, uid) and error condition (file missing). No contradiction.

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 sentences, no filler. Purpose first, then usage guidance, then return info. Efficient and well-structured.

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?

Output schema is described in prose (path, dependencies array with type and uid). Tool is simple and description covers behavior, inputs, and outputs adequately.

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?

Input schema covers both parameters (projectPath, scenePath) with full descriptions. The description adds no further parameter-level context beyond schema.

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

Purpose5/5

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

Explicitly states it parses .tscn files for ext_resource references (scripts, textures, subscenes). Action and resource are clear. Distinct from sibling tools like add_node or get_scene_tree.

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?

Clearly states 'Use to inspect what a scene depends on before refactoring or moving files.' Provides context but does not explicitly exclude alternatives or mention when not to use.

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

get_scene_treeA
Read-only

Get the scene hierarchy as a nested tree of { name, type, path, script, children }. Use maxDepth:1 for a shallow listing of direct children only; default -1 returns the full tree. parentPath scopes the result to a subtree. Returns the nested tree as JSON text. Errors if scene does not exist or parentPath is not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxDepthNoMaximum recursion depth. -1 for unlimited (default: -1). 1 returns only direct children.
scenePathYesScene file path relative to the project
parentPathNoScope to a subtree starting at this node path (e.g. "root/Player")
projectPathYesPath to the Godot project directory

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true; description adds that it returns JSON text and errors on non-existent scene or path. This provides useful behavioral context beyond annotations without contradiction.

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 three sentences, each adding distinct value: output definition, parameter usage, and error conditions. No wasted words.

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

Completeness4/5

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

Given no output schema, the description explains the return format as JSON text. It covers errors and parameter effects. Could optionally mention performance implications for deep trees, but this is sufficient for a read-only utility.

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 100%, but the description adds meaning by explaining the effect of maxDepth values and parentPath scoping, as well as the nested structure returned. This compensates adequately.

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

Purpose5/5

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

The description clearly specifies the tool retrieves a scene hierarchy as a nested tree with specific fields (name, type, path, script, children). It distinguishes itself from sibling tools like get_node_properties and get_debug_output by focusing on hierarchical structure.

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

Usage Guidelines4/5

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

The description provides explicit guidance on using maxDepth for shallow vs full tree and parentPath for subtree scoping. It implies when to use each parameter but does not explicitly state when not to use the tool, though the context is clear.

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

get_ui_elementsA
Read-only

Walk the running scene tree and return all Control nodes with positions, sizes, types, and text content. Always call this before simulate_input click_element actions to discover valid element names and paths. Requires an active runtime session (run_project or attach_project). visibleOnly defaults true; pass false to include hidden Controls. filter narrows by class. Returns: elements[] with path/type/rect/visible plus optional text/disabled/tooltip.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter by Control node type (e.g. "Button", "Label", "LineEdit")
visibleOnlyNoOnly return nodes where Control.visible is true (default: true). Set false to include hidden elements.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNo
elementsNo
warningsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it as read-only. The description adds details on default behavior (visibleOnly defaults true), optional parameters (filter narrows by class), and return fields (path, type, rect, visible, plus optional text/disabled/tooltip). No contradiction with annotations.

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 concise with no wasted sentences. It covers purpose, usage, prerequisites, parameter behavior, and return format efficiently. Each sentence serves a distinct purpose.

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

Completeness5/5

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

Given the tool's simplicity (2 optional parameters with output schema), the description fully covers what the tool does, when to use it, prerequisites, parameter details, and return structure. It is complete without extending beyond necessary information.

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?

Input schema has 100% description coverage for both parameters. The description reinforces the schema by stating defaults (visibleOnly defaults true) and explaining filter narrows by class, adding value beyond the structured schema.

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

Purpose5/5

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

The description clearly states the tool walks the running scene tree to return Control nodes with positions, sizes, types, and text content. It distinguishes from siblings by specifying it should be called before simulate_input actions, setting it apart from other get tools like get_scene_tree or get_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 Guidelines4/5

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

The description provides explicit guidance to call this before simulate_input for discovering element names and paths. It also states the prerequisite of an active runtime session, implicitly indicating when not to use. However, it lacks explicit alternatives or situations to avoid.

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

launch_editorA

Open the Godot editor GUI for a project for the human user. Use only when the user explicitly asks to "open the editor"; for any agent-driven work, use the headless scene/node tools (add_node, set_node_properties, etc.) instead - the editor cannot be controlled programmatically. Returns plain-text confirmation after spawning the editor process. Errors if projectPath has no project.godot.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathYesPath to the Godot project directory

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does most of it well: it discloses that the editor cannot be controlled programmatically, that it returns plain-text confirmation after spawning the process, and that it errors when projectPath lacks project.godot. It does not say whether the call blocks until the editor closes or how the spawned process is later managed, which is the main remaining gap for a process-spawning tool.

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

Conciseness5/5

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

Three tight sentences with zero filler; the primary purpose is front-loaded, followed by the routing rule and then the return/error contract. Every sentence carries distinct information.

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

Completeness5/5

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

For a single-parameter tool with no output schema, the description covers purpose, exclusions, alternatives, return type, and the failure condition. An agent has everything needed to decide whether and how to call it.

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

Parameters4/5

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

Schema coverage is already 100% for the single projectPath parameter, so the baseline is 3. The description adds real constraint semantics beyond the schema by stating the directory must contain project.godot or the call errors, which tells the agent how to validate the path before invoking.

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 ('Open the Godot editor GUI for a project for the human user') and scopes it to the human user, which immediately separates it from the agent-driven siblings like add_node and set_node_properties. An agent can identify its role 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 Guidelines5/5

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

Gives an explicit when ('only when the user explicitly asks to "open the editor"') and an explicit when-not with named alternatives ('for any agent-driven work, use the headless scene/node tools (add_node, set_node_properties, etc.)'). Nothing about tool selection 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.

list_autoloadsA
Read-only

List all registered autoloads in a project with paths and singleton status. Use first when diagnosing headless failures - broken autoloads crash all headless ops, so this tells you what is loaded. No Godot process required (reads project.godot directly). Returns: [{ name, path, singleton }].

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathYesPath to the Godot project directory

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context not in annotations: it requires no Godot process and reads project.godot directly, and it explains the consequence of broken autoloads. It could go further on failure/error behavior, but this is solid.

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?

Front-loaded with the core action, then why to use it, then operational notes, then return shape. Every sentence earns its place and there is no filler.

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

Completeness5/5

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

Despite no output schema, the description includes a return shape '[{ name, path, singleton }]' and covers usage rationale, operational requirements, and data source. It is complete enough for an agent to call and interpret results correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the single projectPath parameter is fully documented in the schema. The description adds that no Godot process is needed, implying the call is lightweight and file-based, which is useful context beyond the parameter type.

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 ('List all registered autoloads in a project') and adds scope details (paths, singleton status). It distinguishes itself from siblings like add_autoload/remove_autoload/update_autoload by being the read/list operation.

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

Usage Guidelines5/5

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

Explicitly says 'Use first when diagnosing headless failures' and explains why (broken autoloads crash all headless ops). This tells the agent exactly when this tool is the right first step, which is strong usage guidance.

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

list_projectsA
Read-only

Find Godot projects under a directory by locating project.godot files. Use to discover available projects when the user has not specified one; for inspecting a known project, use get_project_info. recursive:true descends into subdirectories (skipping hidden ones); default false checks only the directory itself and its immediate children. Returns: [{ path, name }], empty array on no matches.

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

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, consistent with description. Description adds details on recursive behavior (skipping hidden directories) and return format, adding value beyond annotations.

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 wasted words. Purpose is front-loaded, and all essential information is included concisely.

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

Completeness5/5

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

Given the tool's simplicity (two params, no output schema), the description covers behavior, return type, and edge cases (empty array). No gaps remain.

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

Parameters4/5

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

Schema coverage is 100%, but description adds context for 'recursive' (default false, descends into subdirectories skipping hidden ones) and clarifies return behavior. Provides value beyond schema descriptions.

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

Purpose5/5

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

Description clearly states it finds Godot projects by locating project.godot files. It distinguishes from the sibling tool get_project_info, which inspects a known project.

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

Usage Guidelines5/5

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

Explicitly says to use when user has not specified a project, and for known projects to use get_project_info instead. Provides clear when-to-use and alternatives.

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

load_spriteA
Idempotent

Set the texture on an existing Sprite2D, Sprite3D, or TextureRect node. For new nodes, pass texture via add_node properties instead. Saves automatically. texturePath must be a real file under projectPath. Returns a plain-text confirmation message naming the loaded texture. Errors if the node is not one of those three classes, or the texture file does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodePathYesPath to the target node from scene root (e.g. "root/Player/Sprite2D")
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory
texturePathYesPath to the texture file relative to the project (e.g. "assets/player.png")

TDQS

A4.9/5.0
Behavior5/5

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

Beyond idempotentHint, the description discloses automatic saving, the plain-text confirmation return, error conditions for invalid node class and missing texture file, and a runtime-session conflict with the clearing alternatives. This is rich behavioral context that an agent cannot infer from annotations alone.

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

Conciseness5/5

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

The description is front-loaded with the primary action and supported node types. Every sentence adds operational value: sibling routing, save behavior, return format, error cases, and runtime conflict handling, with no wasted wording.

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

Completeness5/5

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

Given a mutation-style tool with only idempotentHint annotations and no output schema, the description supplies the missing context an agent needs: automatic save, confirmation return, supported node classes, texture path validation, and runtime session errors. Nothing essential for correct invocation appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all four parameters. The description adds useful constraints beyond the schema: texturePath must be a real file under projectPath, and nodePath must target one of three specific node classes. It does not elaborate every parameter, but the added validation semantics are meaningful.

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: set the texture on an existing Sprite2D, Sprite3D, or TextureRect node. It names the exact node classes and distinguishes the tool from add_node by explaining that new nodes should receive textures through add_node properties instead.

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

Usage Guidelines5/5

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

It explicitly says when to use this tool (existing supported nodes) and when not to use it (new nodes, where add_node properties should be used). It also gives a runtime-session constraint and names stop_project and detach_project as ways to clear that blocker.

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

profile_projectA

Capture a window of Godot's function profiler - the editor's Profiler tab numbers. Requires run_project with profiling: true. Blocks for seconds (default 5). Times are elapsed, not CPU; inclusive rows overlap - never sum totalMs. Returns: rows (function, file, line, calls, selfMs/totalMs, per-frame averages, percentOfFrame, peak), the frame budget, servers, worstFrame, plus frames/frameGaps/limitReached for capture quality. Errors if profiling was off at launch or a capture is already open.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many functions to return, 1..100 (default: 20).
sortNoRank by own time ("selfMs", default), inclusive time ("totalMs"), or invocation count ("calls").
secondsNoCapture duration in seconds, greater than 0 and at most 60 (default: 5).
captureLimitNoRows the engine puts in each frame packet, 16..512 (default: 512). Godot selects them by inclusive time, so a lower limit hides cheap functions and sets limitReached.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
sortNo
frameNo
framesNo
secondsNo
serversNo
frameGapsNo
lastFrameNo
firstFrameNo
worstFrameNo
captureLimitNo
limitReachedNo
framesReceivedNo
functionsReceivedNo
undecodablePacketsNo
unresolvedFunctionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false) by disclosing blocking behavior ("Blocks for `seconds`"), the default capture length, error preconditions, and a crucial measurement caveat: times are elapsed not CPU and inclusive rows overlap so totalMs must never be summed.

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?

Dense but front-loaded: purpose, prerequisite, blocking duration, and the key measurement warning come first, with return details last. It is long for a single paragraph but nearly every clause carries operational information.

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?

Even though an output schema exists, the description summarizes the return payload (rows, frame budget, servers, worstFrame, frames/frameGaps/limitReached) and flags interpretation pitfalls, so an agent has everything needed to call and read the result 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 coverage is 100%, so the schema already documents all four parameters; the baseline would be 3. The description adds genuine meaning on top by explaining that `seconds` is a blocking capture window and that `captureLimit` causes Godot to select rows by inclusive time, hiding cheap functions and setting limitReached.

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+resource: "Capture a window of Godot's function profiler - the editor's Profiler tab numbers." It clearly differentiates this sampling tool from the start_profiler/stop_profiler siblings by describing a bounded capture window with returned data.

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

Usage Guidelines4/5

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

It states the prerequisite explicitly ("Requires run_project with profiling: true") and gives failure conditions ("Errors if profiling was off at launch or a capture is already open"), which is strong when-to-use guidance. It does not explicitly contrast with start_profiler/stop_profiler, so it stops short of a 5.

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

remove_autoloadA
Destructive

Unregister an autoload from a project by name. Use to recover from a broken autoload that is crashing headless ops. No Godot process required. Returns plain-text confirmation on success. Errors if no autoload with that name exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathYesPath to the Godot project directory
autoloadNameYesName of the autoload to remove

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses behavioral traits beyond the 'destructiveHint' annotation: it states that no Godot process is required, returns a plain-text confirmation, and errors if the autoload name does not exist. This adds valuable context for the agent.

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

Conciseness5/5

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

The description is only three sentences, all front-loaded with the action. Every sentence adds value: the purpose, a use case, operational detail, and error behavior. No wasted words.

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

Completeness5/5

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

For a simple two-parameter tool with annotations and no output schema, the description is complete. It covers the action, when to use it (broken autoloads), operational constraints (no Godot process), return type, and error case. No 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?

The input schema has 100% description coverage for both parameters (projectPath, autoloadName). The description adds no extra meaning beyond what the schema already provides; the parameter names and schema descriptions are self-explanatory.

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

Purpose5/5

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

The description starts with 'Unregister an autoload from a project by name,' which is a specific verb+resource combination. It clearly distinguishes the tool from siblings like 'add_autoload' and 'list_autoloads' by focusing on removal.

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

Usage Guidelines4/5

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

The description provides a concrete usage scenario: 'Use to recover from a broken autoload that is crashing headless ops.' This guides the agent on when to invoke the tool, though it does not explicitly mention when not to use it or list alternatives.

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

run_projectA
Destructive

Spawn a Godot project as a child process with stdout/stderr captured. Required before take_screenshot, simulate_input, get_ui_elements, run_script, or get_debug_output. Set profiling: true at launch to enable the profiler tools. Use attach_project for one you launched yourself. Verifies MCP bridge readiness before returning success. Returns status with the assigned bridge port. Call stop_project when done. Errors if projectPath is not a Godot project or another session is already active.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneNoScene to run (path relative to project, e.g. "scenes/main.tscn"). Omit to use the project's main scene.
profilingNoAttach Godot's own remote debugger so profile_project, start_profiler and stop_profiler can measure this session. Must be set at launch - a session already running cannot be profiled - and costs a little runtime overhead.
backgroundNoIf true, hides the Godot window off-screen and blocks all physical keyboard and mouse input, while keeping programmatic input (simulate_input, run_script) and screenshots fully active. Useful for automated agent-driven testing where the window should not be visible or interactive.
bridgePortNoTCP port for the MCP bridge. Omit to auto-select a free port (recommended). The chosen port is baked into the project's `mcp_bridge.gd` at inject time, so the running Godot listens on exactly this port.
projectPathYesPath to the Godot project directory

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate destructiveHint=true, and the description adds rich behavioral context: stdout/stderr capture, MCP bridge readiness verification, port assignment, and explicit error conditions. It also warns that profiling must be set at launch and explains the background mode's effect on input and visibility.

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

Conciseness5/5

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

The description is dense but front-loaded: it starts with the core action, then dependencies, then optional features, and ends with cleanup and error conditions. Every sentence carries essential information without redundancy.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no output schema), the description covers all critical aspects: prerequisites, side effects, profiling constraints, bridge port assignment, and error cases. It leaves no significant gaps for an agent to call it 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 coverage is 100%, so baseline is 3; the description adds meaning by stating that profiling must be set at launch and that bridgePort is baked into mcp_bridge.gd. However, it does not elaborate on the scene, background, or projectPath parameters beyond what the schema provides.

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

Purpose5/5

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

States the specific action ('Spawn a Godot project as a child process') and clarifies it as a prerequisite for multiple sibling tools, making its role unmistakable. It also distinguishes itself from attach_project by scope.

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

Usage Guidelines5/5

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

Explicitly lists when to use this tool versus attach_project, specifies required predecessor relationships (must be called before take_screenshot, simulate_input, etc.), and provides a clear 'call stop_project when done' directive. The profiling parameter is linked to enabling profiler tools, and error conditions (invalid projectPath, active session) are stated.

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

run_scriptA
Destructive

Execute a custom GDScript in the live running project with full scene tree access. Requires an active runtime session. Script must extend RefCounted and define func execute(scene_tree: SceneTree) -> Variant. Return values are JSON-serialized (primitives, Vector2/3, Color, Dictionary, Array, and Node path strings). Use print() for debug output - it appears in get_debug_output, not in the result. In spawned mode, stderr runtime errors escalate to errors (when the script returns null) or surface as warnings. Returns: { success, result, warnings?, tip? } where result is the JSON-serialized return value of execute().

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesGDScript source code. Must contain "extends RefCounted" and "func execute(scene_tree: SceneTree) -> Variant".
timeoutNoTimeout in ms (default: 30000). Increase for long-running scripts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNo
resultNo
successNo
warningsNo

TDQS

A4.6/5.0
Behavior5/5

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

With only destructiveHint=true given, the description carries real weight: it discloses the runtime-session requirement, that print() output is routed to get_debug_output rather than the result, that stderr errors escalate to errors or warnings depending on the return value, and the exact response envelope. This is unusually rich behavioral context that the annotation alone cannot convey.

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?

Information is front-loaded: purpose first, then precondition, then script contract, then output routing and envelope. It is dense but every sentence carries distinct payload; the only minor cost is a slightly long middle section on return-type serialization.

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

Completeness5/5

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

For a high-complexity tool that executes arbitrary code with full scene-tree access, the description covers the precondition, the script contract, side-channel output routing, error semantics, and the response shape. Even though an output schema exists, the added framing of success/result/warnings/tip is appropriate rather than redundant.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description goes further by specifying the script's structural contract (extends RefCounted, func execute(scene_tree: SceneTree) -> Variant) and enumerating which return types survive JSON serialization. That adds genuine meaning for constructing a valid parameter.

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

Purpose5/5

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

The opening sentence gives a precise verb+resource+scope: 'Execute a custom GDScript in the live running project with full scene tree access.' This clearly separates it from read/query siblings like get_scene_tree or get_debug_output and from static-analysis siblings like validate.

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

Usage Guidelines4/5

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

It states a hard precondition ('Requires an active runtime session') and explains mode-specific behavior (spawned mode error escalation), which tells the agent when this tool is applicable. It does not name an explicit alternative tool for when no runtime session exists, so it stops short of a 5.

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

save_sceneA
Idempotent

Re-pack and save a scene, optionally to a different path (save-as). Most mutations (add_node, set_node_properties, delete_nodes, etc.) auto-save - only use this for save-as via newPath, or to re-canonicalize a hand-edited .tscn. Overwrites silently. Returns a plain-text confirmation naming the save path. Errors if the scene file does not exist. Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
newPathNoSave to a different path (relative to project) instead of overwriting the original
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only supply idempotentHint, so the description carries the rest and does so well: it discloses silent overwrite, the plain-text confirmation return, an error when the scene file is absent, and a runtime-session precondition with the remedy. That is beyond what any structured field provides.

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

Conciseness4/5

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

Front-loaded with purpose, then constraints, then the runtime precondition. Dense but essentially every clause carries load; the only slight excess is stacking four separate constraint sentences where a tighter grouping would read faster.

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

Completeness5/5

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

For a 3-parameter tool with no output schema and minimal annotations, the description covers purpose, alternatives, overwrite semantics, return value, and both error conditions. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description goes further by framing newPath as "save-as" and contrasting it with the default overwrite, which tells the agent why the optional parameter exists rather than just what type it takes.

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 ("Re-pack and save a scene") and immediately scopes it, distinguishing save-as from the auto-saving mutations named later (add_node, set_node_properties, delete_nodes). An agent can tell this apart from create_scene and the mutation siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly says when NOT to use it ("Most mutations ... auto-save - only use this for save-as via newPath, or to re-canonicalize a hand-edited .tscn") and names the precondition-clearing tools (stop_project, detach_project). This is exactly the when/when-not/alternative guidance the dimension asks for.

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

search_projectA
Read-only

Plain-text (substring) search across project files. Use to find references, callers, or signatures across the codebase. Default fileTypes is ["gd","tscn","cs","gdshader"]; caseSensitive default false; maxResults default 100. Skips hidden entries and the .mcp directory. Returns: matches[] (project-relative file, 1-indexed lineNumber, line text) and truncated:true when maxResults was hit - consider raising it.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesPlain-text string to search for
fileTypesNoFile extensions to search (default: ["gd", "tscn", "cs", "gdshader"])
maxResultsNoMaximum matches to return (default: 100)
projectPathYesPath to the Godot project directory
caseSensitiveNoCase-sensitive search (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchesNo
truncatedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations state readOnlyHint=true, so the description's addition of default values, hidden-entry skipping, and .mcp directory exclusion adds useful behavioral context. It also mentions truncation behavior, which is beyond annotations and helps set expectations for large result sets.

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

Conciseness4/5

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

Front-loads the core purpose, then packs details into a compact paragraph. Every sentence carries information, though the default-value repetition is slightly redundant. Structure is efficient and scannable.

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 needn't be detailed, but the description still summarizes matches[] format and truncation, which is helpful. Combined with annotations covering safety, the description is nearly complete, missing only explicit when-not-to-use guidance.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description repeats defaults for fileTypes, caseSensitive, and maxResults, which is redundant but not harmful. It adds no syntax or format details beyond the schema.

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

Purpose5/5

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

Uses a specific verb+resource ('Plain-text (substring) search across project files') and clarifies scope by naming example targets (references, callers, signatures). This distinguishes it from siblings like get_project_files or get_scene_dependencies, which enumerate rather than search.

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 context ('to find references, callers, or signatures across the codebase'), which implies when to use it. No explicit exclusions or named alternatives, but the context is sufficient for an agent to distinguish use cases.

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

set_node_propertiesA
Idempotent

Set one or more node properties on a scene in one Godot process. Always-array: pass a single-element updates array for one-off edits. {x,y} / {x,y,z} / {r,g,b,a} auto-convert to Vector2 / Vector3 / Color. Values are checked against the property's declared type and error instead of silently storing that type's zero value. Object-typed properties (e.g. CollisionShape2D.shape) take a res:// path, a typed dict {type: ClassName, ...props} that constructs a Resource inline, or null to clear. Full value rules: the Property Values section of docs/tools.md. abortOnError stops on first failure (default false continues). Saves once at the end. Returns: results[] with one entry per update in input order (success or error). Errors while a Godot runtime session is active on this project; stop_project (or detach_project) clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesProperty updates to apply
scenePathYesScene file path relative to the project
projectPathYesPath to the Godot project directory
abortOnErrorNoStop processing on first error (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo

TDQS

A4.6/5.0
Behavior5/5

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

With only idempotentHint=true in annotations, the description carries real weight: it discloses type-checking behavior (errors instead of silently storing the zero value), auto-conversion of {x,y}/{r,g,b,a} literals, object-typed property handling via res:// path or typed dict, abortOnError continuing semantics, and 'Saves once at the end.' This is exactly the beyond-annotations context an agent needs for a mutation tool.

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

Conciseness4/5

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

Dense but front-loaded and every sentence carries information (array convention, conversion rules, type checking, abort behavior, session precondition). The pointer to 'the Property Values section of docs/tools.md' is a reasonable offload rather than a wall of text. Slightly information-dense, but nothing is wasted.

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, yet the description still notes the results[] shape and per-update ordering, and it covers the mutation's save semantics and the runtime-session error condition. For a batched write tool this is complete enough to call 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 coverage is 100%, so baseline is 3, but the description adds genuine meaning: how `value` is interpreted (auto-convert, type-checked, object-clearing via null) and abortOnError's default behavior. It adds more than the schema's one-line field descriptions.

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

Purpose5/5

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

Specific verb+resource: 'Set one or more node properties on a scene in one Godot process.' The write verb 'set' clearly contrasts with the read-only sibling get_node_properties, so an agent can route without opening either schema. Scope (one process, batched updates) is stated up front.

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 concrete invocation guidance ('Always-array: pass a single-element updates array for one-off edits') and an operational precondition (errors while a runtime session is active; stop_project/detach_project clears it). It stops short of naming alternatives like batch_scene_operations or add_node, so it lacks explicit when-not guidance.

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

simulate_inputA
Destructive

Simulate sequential input in a running project. Each action's type (key, mouse_button, mouse_motion, click_element, action, wait) gates which other fields apply - see per-property docs. For click_element use get_ui_elements first; resolution is by path/name, not visible text. Press/release require two actions; insert wait between for frame ticks. Returns: success, actions_processed, warnings for runtime errors fired by input handlers. Errors if no session or any action fails validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionsYesArray of input actions to execute sequentially. Each object must have a "type" field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNo
successNo
warningsNo
actions_processedNo

TDQS

A4.3/5.0
Behavior4/5

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

With only destructiveHint=true in annotations, the description carries most of the burden and does so: it discloses the return shape (success, actions_processed, warnings from input handlers) and failure conditions (no session, any action failing validation). It doesn't restate the mutation risk that destructiveHint implies, but adds substantial runtime-error and sequencing 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?

Front-loaded with purpose, then constraints, then return/error contract in a tight block. Sentences are dense but each carries a distinct operational fact, so little is wasted; slightly information-packed but justified for the action-gating complexity.

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 needn't be explained in depth, yet the description still summarizes them and adds the error/failure contract. Combined with the gating rule and sibling reference, an agent has what it needs 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 coverage is 100%, so the baseline is 3, but the description adds cross-cutting semantics the schema cannot: the `type` field 'gates which other fields apply', and the press/release two-action pattern. It directs the reader to per-property docs, but doesn't itself restate relative vs absolute mouse semantics beyond the schema.

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

Purpose5/5

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

States a specific verb+resource ('Simulate sequential input in a running project') and enumerates the action types (key, mouse_button, mouse_motion, click_element, action, wait) it accepts. This clearly distinguishes it from siblings like run_script or run_project.

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?

Routes the agent explicitly ('For click_element use get_ui_elements first') and gives operational guidance ('Press/release require two actions; insert wait between for frame ticks'). It lacks explicit when-not-to-use guidance or a named alternative for other scenarios, so it is a strong 4 rather than a 5.

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

start_profilerA

Start a profiler capture and return immediately, so simulate_input, run_script and screenshots can drive the game while it records. Requires run_project with profiling: true. Stops itself after seconds (default 30, max 60); call stop_profiler for the results. Returns: active, firstFrame, captureLimit, maxSeconds. Use profile_project instead for an unattended window. Errors if a capture is already running or profiling was not enabled at launch.

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsNoMaximum capture duration before the automatic stop, greater than 0 and at most 60 (default: 30).
captureLimitNoRows the engine puts in each frame packet, 16..512 (default: 512). Godot selects them by inclusive time, so a lower limit hides cheap functions and sets limitReached.

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeNo
firstFrameNo
maxSecondsNo
captureLimitNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses key behaviors beyond the annotations: it returns immediately, stops itself after `seconds`, requires prior profiling setup, errors under specific conditions, and returns a defined set of fields. Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the behavioral burden and does so thoroughly.

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 but information-dense. Every sentence earns its place: what the tool does, why it returns immediately, prerequisites, auto-stop behavior, related tools, return values, and error conditions. It is front-loaded with the core purpose and contains no filler.

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

Completeness5/5

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

Given the full input schema and output schema, the description still adds essential context: how this tool fits into an interactive capture workflow, how to retrieve results, prerequisites, alternatives, and failure modes. An agent has everything needed to decide whether to call it and how to call it 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?

Input schema coverage is 100%, so the schema already fully documents `seconds` and `captureLimit`. The description mentions `seconds` with its default and max, but this repeats the schema rather than adding new meaning. There is some value in listing returned fields, but that is output semantics rather than parameter semantics.

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

Purpose5/5

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

The description states a specific verb and resource: 'Start a profiler capture and return immediately.' It also differentiates itself from siblings by explicitly naming profile_project for unattended windows and stop_profiler for retrieving results, so an agent can distinguish it without opening other tool schemas.

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

Usage Guidelines5/5

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

Usage conditions are explicit: it requires run_project with profiling: true, errors if a capture is already running or profiling was not enabled, and tells the agent to use profile_project instead for an unattended window. This is strong when-to-use and when-not-to-use guidance.

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

stop_profilerA

Stop the capture started by start_profiler and rank the recorded functions; a capture that already hit its time limit is read back as-is, and can be re-read with a different sort. Times are elapsed, not CPU; inclusive rows overlap - never sum totalMs. Returns: the same payload as profile_project - rows (file, line, function, calls, selfMs/totalMs, per-frame averages, percentOfFrame, peak frame), frame budget, servers, worstFrame, frames, frameGaps, limitReached. Errors if no capture was started.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many functions to return, 1..100 (default: 20).
sortNoRank by own time ("selfMs", default), inclusive time ("totalMs"), or invocation count ("calls").

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
sortNo
frameNo
framesNo
secondsNo
serversNo
frameGapsNo
lastFrameNo
firstFrameNo
worstFrameNo
captureLimitNo
limitReachedNo
framesReceivedNo
functionsReceivedNo
undecodablePacketsNo
unresolvedFunctionsNo

TDQS

A4.6/5.0
Behavior5/5

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

With only readOnlyHint=false/destructiveHint=false in annotations, the description carries real behavioral weight: it clarifies that stopping may just read back an expired capture, that results can be re-fetched with a different sort, that times are elapsed not CPU, that inclusive rows overlap and must not be summed, and that it errors when nothing was started.

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?

Dense and front-loaded: the action leads, then the read-back caveats, then the return payload list. Every clause carries information, though the enumerated return fields are somewhat long for a tool that has an output schema.

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

Completeness5/5

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

Covers the no-capture error case, the elapsed-vs-CPU timing caveat, the non-summing warning for inclusive rows, and the return shape, so an agent can invoke and interpret results correctly without additional sources.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by tying 'sort' to re-reading the same capture and by contrasting selfMs (own time) vs totalMs (inclusive) vs calls, which is directly the semantic distinction the sort enum encodes.

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 ('Stop the capture started by start_profiler and rank the recorded functions') and names the sibling that creates the capture, so the agent can distinguish it from start_profiler/profile_project immediately.

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?

Explains the read-back semantics: a capture that hit its time limit is read as-is and can be re-read with a different sort, plus the failure condition (errors if no capture was started). It stops short of an explicit when-not/alternative routing, but the context is clear.

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

stop_projectA
Destructive

Stop the spawned Godot project and clean up bridge state. Call when done with runtime testing, even after a crash, and even if you closed the Godot window yourself: it frees the process slot and clears the flag blocking scene-editing tools. A process that exited on its own already removed the bridge autoload at that moment, and this still succeeds - it reports alreadyExited:true with the exit code and the logs captured before the exit, and leaves a finished profiler capture readable. Attached sessions detach without killing the external process. Returns: message, mode, externalProcessPreserved, alreadyExited, exitCode (already-exited case), and condensed finalOutput/finalErrors (capped at 200); get_debug_output has the full log. Errors only when there is no session and no exited process to report.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNo
messageNo
exitCodeNo
finalErrorsNo
finalOutputNo
alreadyExitedNo
externalProcessPreservedNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true, but the description adds substantial context beyond that: it clears a flag blocking scene-editing tools, frees a process slot, reports alreadyExited:true with exit code and logs when the process self-exited, detaches attached sessions without killing the external process, and errors only when there is nothing to report. This is rich behavioral disclosure that goes well beyond the single annotation.

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

Conciseness4/5

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

Front-loads the core action, then follows with usage conditions and return details. The sentence about already-exited behavior is long but dense with relevant information. The return-value enumeration ('message, mode, ...') is somewhat list-like but earns its place given the output schema exists and the description summarizes key fields.

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?

Despite having an output schema, the description helpfully summarizes the key return fields (especially alreadyExited, exitCode, finalOutput) and explains the error condition. It covers lifecycle, cleanup side effects, and interaction with other tools. Complete for a zero-parameter lifecycle tool.

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?

Zero parameters, so the baseline is 4. The description does not need to document parameters, and correctly focuses on behavior instead. No param meaning is missing.

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 ('Stop the spawned Godot project') and adds scope ('clean up bridge state'), clearly distinguishing it from siblings like detach_project (which detaches without killing) and stop_profiler. An agent can pick this over its neighbors without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Call when done with runtime testing, even after a crash, and even if you closed the Godot window yourself') and specifies the consequences of not calling. It also implicitly distinguishes from detach_project by noting attached sessions preserve the external process. Nothing 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.

take_screenshotA
Read-only

Capture a PNG of the running viewport. responseMode: preview (default - saves full PNG, returns bounded inline preview at 960x540), full (full inline PNG; use for small text or pixel-level inspection), path_only (saved-path only, no inline image). Saved under .mcp/godot-runtime/screenshots/ (persists after stop_project). Returns: inline image block (full/preview modes), plus path and size of the saved PNG; previewPath/previewSize in preview mode; warnings for non-fatal runtime errors. Errors if no session or bridge times out (default 10000ms).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoTimeout in milliseconds to wait for the screenshot (default: 10000)
responseModeNoResponse payload mode. "preview" returns a bounded inline preview plus paths (default). "full" returns the full inline PNG. "path_only" returns paths only.
previewMaxWidthNoMaximum preview width in pixels when responseMode is "preview" (default: 960)
previewMaxHeightNoMaximum preview height in pixels when responseMode is "preview" (default: 540)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNo
sizeNo
warningsNo
previewPathNo
previewSizeNo
responseModeNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, and the description adds substantial behavioral context beyond that: the file is persisted under .mcp/godot-runtime/screenshots/ and survives stop_project, warnings are emitted for non-fatal runtime errors, and it errors when there is no session or the bridge times out. This is rich disclosure for a read tool.

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

Conciseness4/5

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

Front-loaded with the core action followed by mode semantics, persistence location, and error conditions. It is dense and somewhat long, but nearly every clause conveys actionable information, so little is wasted.

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, and the description still clarifies the return payload (inline image block, saved path/size, previewPath/previewSize, warnings) and failure modes. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description exceeds it by explaining what each responseMode actually produces (preview saves the full PNG but returns a bounded inline preview; path_only returns no image) and by justifying the full mode. It adds rationale and consequences beyond the schema's terse enum docs.

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: 'Capture a PNG of the running viewport.' No sibling tool captures images, so it is unambiguously distinguishable, and the subject (running viewport) scopes it precisely.

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 mode-selection guidance, notably 'full ... use for small text or pixel-level inspection', which tells the agent when a given mode is appropriate. It stops short of naming an alternative tool or stating when to avoid screenshots entirely, so it is strong context rather than full when/when-not routing.

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

update_autoloadA
Idempotent

Modify an existing autoload's path or singleton flag. Pass either or both - omitted fields keep their current value. Use instead of remove_autoload + add_autoload (single edit, no orphan window). No Godot process required. Returns plain-text confirmation on success. Errors if autoloadName is not registered.

ParametersJSON Schema
NameRequiredDescriptionDefault
singletonNoNew singleton flag
projectPathYesPath to the Godot project directory
autoloadNameYesName of the autoload to update
autoloadPathNoNew path to the script or scene

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only supply idempotentHint, so the description carries most of the burden and does so well: it discloses partial-update semantics (omitted fields retained), that no Godot process is required, the return shape (plain-text confirmation), and a concrete error condition (unregistered autoloadName). This is meaningful behavior beyond the structured fields.

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: purpose first, then parameter contract, then sibling routing, then operational notes. Every sentence carries distinct information.

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 no output schema, the description correctly states the return value; it also covers the error case and execution requirements for a 4-parameter mutation tool. An agent has everything needed to call it 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 coverage is 100%, so the baseline is 3; the description goes further by explaining that autoloadPath and singleton are optional edits whose omission preserves current values, which is semantic meaning the schema alone does not convey. It does not add format or validation detail beyond that.

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?

Names a specific verb and resource ('Modify an existing autoload') and enumerates exactly the mutable fields ('path or singleton flag'). It is clearly distinguishable from the sibling pair add_autoload and remove_autoload, which it explicitly contrasts.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance with an alternative named: 'Use instead of remove_autoload + add_autoload (single edit, no orphan window).' It also states the partial-update contract ('Pass either or both - omitted fields keep their current value'), so nothing about invocation conditions 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.

validateA
Read-only

Validate GDScript syntax or scene file integrity using headless Godot. Use before attach_script or run_script to catch parse errors early. Single-target: provide exactly one of scriptPath, source, or scenePath. Batch: provide a targets array - runs all in one Godot process. Returns { valid, errors: [{ line?, message }] } for single, or { results: [{ target, valid, errors }] } for batch. Line numbers appear when Godot's stderr includes them (not always). Returns valid:false on any parse error; never throws.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo[single] Inline GDScript source code to validate. Written to a temporary file and validated against the project.
targetsNo[batch] Array of targets to validate in a single Godot process. Each item must have exactly one of: scriptPath, source, or scenePath.
scenePathNo[single] Path to a .tscn scene file relative to the project to validate (e.g. "scenes/main.tscn")
scriptPathNo[single] Path to a .gd file relative to the project to validate (e.g. "scripts/player.gd")
projectPathYesPath to the Godot project directory

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds meaningful behavior beyond that: valid:false on any parse error, never throws, and line numbers only appear when Godot's stderr includes them. The one gap is that it doesn't note the temp-file write for inline source (that detail lives only in the schema).

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

Conciseness5/5

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

Front-loads the purpose, then usage, then mode rules, then return shape. Every sentence carries information; nothing is redundant with the title or schema.

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

Completeness5/5

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

No output schema exists, but the description spells out both return shapes (single: { valid, errors }, batch: { results }), the error-object shape, and failure semantics. An agent can call and interpret results correctly without more.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds a real constraint the schema does not encode: 'provide exactly one of scriptPath, source, or scenePath.' That mutual-exclusivity rule is genuinely useful beyond the structured fields.

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 (validate) plus two resources (GDScript syntax, scene file integrity) and the mechanism (headless Godot). This clearly separates it from siblings like run_script or attach_script, which execute or attach rather than check validity.

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

Usage Guidelines5/5

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

Explicitly says to use it before attach_script or run_script to catch parse errors early, and states the alternation rules: single-target requires exactly one of scriptPath/source/scenePath, while batch uses a targets array. When-to-use and mode selection are both given.

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. 7 tool updatesv3.6.0
    • Changedadd_node1 field changed
      • changedInput schema / properties / nodeType / description
        Previous value: -"Godot node class to instantiate (e.g. \"Sprite2D\", \"CollisionShape2D\", \"Label\"), or a project-relative scene path (.tscn or .scn, e.g. \"scenes/enemy.tscn\") to instance an existing scene as a child — instanced children serialize as `instance=ExtResource(...)` on save"New value: +"Godot node class to instantiate (e.g. \"Sprite2D\", \"CollisionShape2D\", \"Label\"), or a project-relative scene path (.tscn or .scn, e.g. \"scenes/enemy.tscn\") to instance an existing scene as a child - instanced children serialize as `instance=ExtResource(...)` on save"
    • Changedbatch_scene_operations5 fields changed
      • changedInput schema / properties / operations / items / properties / modulate / description
        Previous value: -"[add_node] Color modulation — shorthand for properties.modulate"New value: +"[add_node] Color modulation - shorthand for properties.modulate"
      • changedInput schema / properties / operations / items / properties / position / description
        Previous value: -"[add_node] Position — {\"x\",\"y\"} for 2D nodes, {\"x\",\"y\",\"z\"} for 3D. Shorthand for properties.position"New value: +"[add_node] Position - {\"x\",\"y\"} for 2D nodes, {\"x\",\"y\",\"z\"} for 3D. Shorthand for properties.position"
      • changedInput schema / properties / operations / items / properties / rotation / description
        Previous value: -"[add_node] Rotation in radians — shorthand for properties.rotation"New value: +"[add_node] Rotation in radians - shorthand for properties.rotation"
      • changedInput schema / properties / operations / items / properties / scale / description
        Previous value: -"[add_node] Vector2 scale — shorthand for properties.scale"New value: +"[add_node] Vector2 scale - shorthand for properties.scale"
      • changedInput schema / properties / operations / items / properties / visible / description
        Previous value: -"[add_node] Visibility — shorthand for properties.visible"New value: +"[add_node] Visibility - shorthand for properties.visible"
    • Changedget_node_signals1 field changed
      • addedOutput schema / properties / signals / items / properties / connections / items / properties / target / description
        Added value: +"Scene-root-relative path in \"root/...\" form (a self-connection is \"root\"), directly usable as targetNodePath in connect_signal/disconnect_signal. \"unknown\" for a freed or null object."
    • Changedget_project_info1 field changed
      • changedInput schema / properties / projectPath / description
        Previous value: -"Path to the Godot project directory (optional — omit to get Godot version only)"New value: +"Path to the Godot project directory (optional - omit to get Godot version only)"
    • Changedrun_project1 field changed
      • changedInput schema / properties / profiling / description
        Previous value: -"Attach Godot's own remote debugger so profile_project, start_profiler and stop_profiler can measure this session. Must be set at launch — a session already running cannot be profiled — and costs a little runtime overhead."New value: +"Attach Godot's own remote debugger so profile_project, start_profiler and stop_profiler can measure this session. Must be set at launch - a session already running cannot be profiled - and costs a little runtime overhead."
    • Changedsimulate_input1 field changed
      • changedInput schema / properties / actions / items / properties / pressed / description
        Previous value: -"[key, mouse_button, action] Whether the input is pressed (true) or released (false). For mouse_button: omit to auto-click (press+release in one action); set explicitly only for hold/release. For key: defaults to true and does NOT auto-release — emit a second action with pressed:false to release."New value: +"[key, mouse_button, action] Whether the input is pressed (true) or released (false). For mouse_button: omit to auto-click (press+release in one action); set explicitly only for hold/release. For key: defaults to true and does NOT auto-release - emit a second action with pressed:false to release."
    • Changedstop_project2 fields changed
      • addedOutput schema / properties / alreadyExited
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / exitCode
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
  2. 1 tool updatev3.5.0
    • Changedbatch_scene_operations3 fields changed
      • addedInput schema / properties / operations / items / properties / abortOnError
        Added value: +{
        +  "description": "[set_node_properties] Stop processing on first error",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / operations / items / properties / operation / enum
        Previous value: -[
        -  "add_node",
        -  "load_sprite",
        -  "save"
        -]New value: +[
        +  "add_node",
        +  "load_sprite",
        +  "set_node_properties",
        +  "save"
        +]
      • addedInput schema / properties / operations / items / properties / updates
        Added value: +{
        +  "description": "[set_node_properties] Property updates to apply in this operation",
        +  "items": {
        +    "properties": {
        +      "nodePath": {
        +        "description": "Node path from scene root",
        +        "type": "string"
        +      },
        +      "property": {
        +        "description": "Property name in snake_case",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "New value. Vector2/Vector3/Color auto-convert from {\"x\",\"y\"} / {\"x\",\"y\",\"z\"} / {\"r\",\"g\",\"b\",\"a\"} objects; primitives pass through"
        +      }
        +    },
        +    "required": [
        +      "nodePath",
        +      "property",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  3. 4 tool updatesv3.4.0
    • Addedprofile_project
    • Changedrun_project1 field changed
      • addedInput schema / properties / profiling
        Added value: +{
        +  "description": "Attach Godot's own remote debugger so profile_project, start_profiler and stop_profiler can measure this session. Must be set at launch — a session already running cannot be profiled — and costs a little runtime overhead.",
        +  "type": "boolean"
        +}
    • Addedstart_profiler
    • Addedstop_profiler
  4. 2 tool updatesv3.3.0
    • Changedadd_node4 fields changed
      • changedInput schema / properties / nodeType / description
        Previous value: -"Godot node class to instantiate (e.g. \"Sprite2D\", \"CollisionShape2D\", \"Label\")"New value: +"Godot node class to instantiate (e.g. \"Sprite2D\", \"CollisionShape2D\", \"Label\"), or a project-relative scene path (.tscn or .scn, e.g. \"scenes/enemy.tscn\") to instance an existing scene as a child — instanced children serialize as `instance=ExtResource(...)` on save"
      • changedInput schema / properties / position / description
        Previous value: -"Vector2 position (e.g. {\"x\": 100, \"y\": 200})"New value: +"Position: {\"x\": 100, \"y\": 200} on a 2D node, {\"x\": 0, \"y\": 1, \"z\": 0} on a 3D node"
      • addedInput schema / properties / position / properties / z
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / position3d
        Removed value: -{
        -  "description": "Vector3 position for 3D nodes (e.g. {\"x\": 0, \"y\": 1, \"z\": 0})",
        -  "properties": {
        -    "x": {
        -      "type": "number"
        -    },
        -    "y": {
        -      "type": "number"
        -    },
        -    "z": {
        -      "type": "number"
        -    }
        -  },
        -  "type": "object"
        -}
    • Changedbatch_scene_operations5 fields changed
      • addedInput schema / properties / operations / items / properties / modulate
        Added value: +{
        +  "description": "[add_node] Color modulation — shorthand for properties.modulate",
        +  "type": "object"
        +}
      • addedInput schema / properties / operations / items / properties / position
        Added value: +{
        +  "description": "[add_node] Position — {\"x\",\"y\"} for 2D nodes, {\"x\",\"y\",\"z\"} for 3D. Shorthand for properties.position",
        +  "type": "object"
        +}
      • addedInput schema / properties / operations / items / properties / rotation
        Added value: +{
        +  "description": "[add_node] Rotation in radians — shorthand for properties.rotation",
        +  "type": "number"
        +}
      • addedInput schema / properties / operations / items / properties / scale
        Added value: +{
        +  "description": "[add_node] Vector2 scale — shorthand for properties.scale",
        +  "type": "object"
        +}
      • addedInput schema / properties / operations / items / properties / visible
        Added value: +{
        +  "description": "[add_node] Visibility — shorthand for properties.visible",
        +  "type": "boolean"
        +}
  5. 1 tool updatev3.2.0
    • Changedrun_script1 field changed
      • removedOutput schema / properties / warning
        Removed value: -{
        -  "type": "string"
        -}
  6. 36 tool updatesv3.1.1
    • Addedadd_autoload
    • Addedadd_node
    • Addedattach_project
    • Addedattach_script
    • Addedbatch_scene_operations
    • Addedconnect_signal
    • Addedcreate_scene
    • Addeddelete_nodes
    • Addeddetach_project
    • Addeddisconnect_signal
    • Addedduplicate_node
    • Addedexport_mesh_library
    • Addedget_debug_output
    • Addedget_node_properties
    • Addedget_node_signals
    • Addedget_project_files
    • Addedget_project_info
    • Addedget_project_settings
    • Addedget_scene_dependencies
    • Addedget_scene_tree
    • Addedget_ui_elements
    • Addedlaunch_editor
    • Addedlist_autoloads
    • Addedlist_projects
    • Addedload_sprite
    • Addedremove_autoload
    • Addedrun_project
    • Addedrun_script
    • Addedsave_scene
    • Addedsearch_project
    • Addedset_node_properties
    • Addedsimulate_input
    • Addedstop_project
    • Addedtake_screenshot
    • Addedupdate_autoload
    • Addedvalidate
  7. 39 tool updatesv3.0.0
    • Removedadd_autoload
    • Removedadd_node
    • Removedattach_project
    • Removedattach_script
    • Removedbatch_get_node_properties
    • Removedbatch_scene_operations
    • Removedbatch_set_node_properties
    • Removedconnect_signal
    • Removedcreate_scene
    • Removeddelete_node
    • Removeddetach_project
    • Removeddisconnect_signal
    • Removedduplicate_node
    • Removedexport_mesh_library
    • Removedget_debug_output
    • Removedget_node_properties
    • Removedget_node_signals
    • Removedget_project_files
    • Removedget_project_info
    • Removedget_project_settings
    • Removedget_scene_dependencies
    • Removedget_scene_tree
    • Removedget_ui_elements
    • Removedlaunch_editor
    • Removedlist_autoloads
    • Removedlist_projects
    • Removedload_sprite
    • Removedmanage_uids
    • Removedremove_autoload
    • Removedrun_project
    • Removedrun_script
    • Removedsave_scene
    • Removedsearch_project
    • Removedset_node_property
    • Removedsimulate_input
    • Removedstop_project
    • Removedtake_screenshot
    • Removedupdate_autoload
    • Removedvalidate
  8. 2 tool updatesv2.3.0
    • Changedattach_project1 field changed
      • addedInput schema / properties / waitForBridge
        Added value: +{
        +  "description": "If true, poll the bridge until it responds (up to 15 seconds). Use this after Godot is already running to confirm runtime tools are ready. Defaults to false.",
        +  "type": "boolean"
        +}
    • Changedcreate_scene1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "scenePath": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
  9. 39 tool updatesv1.0.0
    • Addedadd_autoload
    • Addedadd_node
    • Addedattach_project
    • Addedattach_script
    • Addedbatch_get_node_properties
    • Addedbatch_scene_operations
    • Addedbatch_set_node_properties
    • Addedconnect_signal
    • Addedcreate_scene
    • Addeddelete_node
    • Addeddetach_project
    • Addeddisconnect_signal
    • Addedduplicate_node
    • Addedexport_mesh_library
    • Addedget_debug_output
    • Addedget_node_properties
    • Addedget_node_signals
    • Addedget_project_files
    • Addedget_project_info
    • Addedget_project_settings
    • Addedget_scene_dependencies
    • Addedget_scene_tree
    • Addedget_ui_elements
    • Addedlaunch_editor
    • Addedlist_autoloads
    • Addedlist_projects
    • Addedload_sprite
    • Addedmanage_uids
    • Addedremove_autoload
    • Addedrun_project
    • Addedrun_script
    • Addedsave_scene
    • Addedsearch_project
    • Addedset_node_property
    • Addedsimulate_input
    • Addedstop_project
    • Addedtake_screenshot
    • Addedupdate_autoload
    • Addedvalidate

TDQS

A4.1/5.0

Scored across 39 tools

Disambiguation4/5

Most tools target distinct resources or actions, but potential overlaps exist in runtime session tools (run_project vs attach_project, detach_project vs stop_project) and profiling tools (start_profiler/profile_project/stop_profiler) that could cause misselection without careful reading. Descriptions are detailed enough to disambiguate in most cases.

Naming Consistency4/5

Names are predominantly snake_case with a verb_noun pattern (get_project_info, add_node, connect_signal), with minor deviations like batch_scene_operations (noun phrase), validate (verb only), and start_profiler/stop_profiler vs profile_project (inconsistent profiler naming). Overall consistent and readable.

Tool Count2/5

39 tools is well above the 15-tool upper bound for a well-scoped set. While the server covers a broad domain (project discovery, scene editing, runtime control, profiling, autoloads, validation), the sheer number increases cognitive load and overlaps; splitting or consolidation would help.

Completeness4/5

The surface covers core CRUD for nodes, signals, autoloads, and scenes, plus runtime execution, profiling, and validation. Minor gaps exist for file operations (delete/rename scenes or assets) and higher-level editing (animations, tilemaps), but agents can work around most with existing tools.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with the Godot game engine, allowing them to launch the editor, run projects, capture debug output, and control project execution.
    14
    229 npm
    5,583
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a comprehensive integration between LLMs and the Godot Engine, enabling AI assistants to intelligently manipulate project files, scripts, and the live editor. It supports advanced workflows including version-aware documentation querying, automated E2E game testing, and real-time visual context capture.
    10 npm
    26
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    A local MCP server plus a bundled Godot editor addon that lets an AI agent create, inspect, run, debug, and export real Godot 4.6 games through tools.
    2
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A TypeScript MCP server bridging MCP clients to Godot 4 editor, enabling scene, node, script editing and more via WebSocket.
    229 npm
    MIT