Skip to main content
Glama
YasiruRF
by YasiruRF

godot-mcp

An MCP server that lets Claude (or any MCP client) work on Godot 4 projects: it edits .tscn scenes and .gd scripts directly on disk, runs the project headlessly to catch errors, and can optionally drive a running Godot editor over a local WebSocket bridge.

  • File tools edit scenes and scripts on disk. They need no Godot install and no setup beyond building the server.

  • Live-editor tools need the small companion plugin enabled in an open editor. They let Claude edit the open scene inside the editor — you watch each node appear, and Ctrl+Z undoes it — and play/stop scenes.

godot-mcp: how it works today — click to watch the 23-second demo

New to Godot? Click the picture for a 23-second look at how godot-mcp works today.

godot-mcp/
├── src/                  # the MCP server (TypeScript)
│   ├── index.ts          # tool definitions
│   ├── tscn.ts           # .tscn parser/serializer (no Godot needed to use it)
│   └── bridge.ts         # WebSocket client for the live editor bridge
├── sample-project/       # a working Godot 4 project to try the tools on
│   ├── scenes/Main.tscn
│   ├── scripts/          # player.gd (the ball), camera_rig.gd, game.gd
│   └── addons/godot_mcp_bridge/   # the live-bridge EditorPlugin
└── test/                 # `npm test`

The sample project is a small 3D game: roll a ball (WASD or arrow keys, Space to jump, mouse or Q/E to orbit the third-person camera) over ramps, past boxes and crates, to the glowing goal pad. R restarts.

Contents

Related MCP server: Godot MCP Extended

Quick start

Requires Node.js 18+. No install step: your MCP client runs the published package through npx.

Claude Code

claude mcp add godot -- npx -y @yasirurf/godot-mcp

Or add it by hand to a project's .mcp.json:

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["-y", "@yasirurf/godot-mcp"]
    }
  }
}

Claude Desktop — add the same mcpServers entry to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart the app.

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

Register the built server using the absolute path to dist/index.js:

claude mcp add godot -- node /absolute/path/to/godot-mcp/dist/index.js

On Windows use a Windows path, e.g. node C:\dev\godot-mcp\dist\index.js, and escape the backslashes in JSON: "C:\\dev\\godot-mcp\\dist\\index.js".

Then ask Claude something like "List everything in the Godot project at /path/to/my-game". If it returns your scenes and scripts, you're set.

Usage guide

1. Point the tools at a project

Every file tool takes a project_path: the absolute path to the folder that contains project.godot. Tools refuse to run if that file isn't there, and they refuse to read or write anything outside the folder.

Other paths (scene_path, script_path, ...) can be given relative to the project (scenes/Main.tscn), as res:// paths (res://scenes/Main.tscn), or as absolute paths inside the project. Tip for your prompts: tell Claude the project path once ("my project is at D:\games\platformer") and it will reuse it.

To try things out without risking your own work, use the bundled sample-project/ (or a copy of it).

2. Build and edit scenes

Scenes are addressed by node path: . is the scene root, Player is a child of the root, Player/Ball is a child of Player.

Example conversation:

You: In scenes/Main.tscn, add an Area3D called Coin under the root with a CollisionShape3D child, and put the coin at (2, 1, -10).

Claude will call, in order:

Call

Arguments

add_node

scene_path: "scenes/Main.tscn", parent_path: ".", name: "Coin", type: "Area3D"

add_node

parent_path: "Coin", name: "CollisionShape3D", type: "CollisionShape3D"

set_node_properties

node_path: "Coin", properties: { "position": "Vector3(2, 1, -10)" }

Property values are raw Godot text, exactly as they appear in a .tscn file: Vector2(10, 20), Color(1, 0, 0, 1), false, "a string" (with the quotes), ExtResource("1_abcde"). They are not validated, so a wrong value is only caught when Godot loads the scene — use run_headless (below) after edits.

To attach a script when adding a node, pass script_path ("script_path": "scripts/coin.gd"). The server registers the script in the scene for you.

To start a scene from scratch, use create_scene first (it won't overwrite an existing file unless you pass overwrite: true), then add_node.

Editor open? Godot keeps its own in-memory copy of an open scene, so editing the file on disk underneath it makes the two diverge (and whichever is saved last wins). When the bridge plugin is running, these on-disk tools therefore refuse to edit a scene that is open in the editor and point you to the live-editing tools (or to closing the scene's tab first). Without the plugin they can't tell, so save and close the scene in Godot before asking Claude to edit it on disk.

3. Read and edit scripts

  • read_script returns a .gd file.

  • write_script creates or fully overwrites a file.

  • edit_script is a targeted find-and-replace: old_text must match exactly once, otherwise the call fails and nothing is changed (so include enough surrounding lines to make it unique).

You: Open scripts/player.gd and add a double-jump.

4. Check that it actually works: run_headless

run_headless launches Godot with --headless on your project (or one scene), lets it run for timeout_ms (default 5000), and returns everything it printed, followed by an exit status line such as [exit code 0] or [stopped by SIGTERM after the 5000ms timeout]. Parse errors, missing resources and runtime errors show up in the output, which makes it a good follow-up to any edit: "Make that change, then run the project headlessly and tell me if there are errors."

It needs a Godot 4 executable. If it isn't on your PATH as godot4, set GODOT_BIN (see Configuration).

5. Live editing: watch Claude work in the editor

With the bridge plugin enabled, Claude can edit the scene inside the running Godot editor instead of on disk. Each edit appears immediately in the Scene dock and the viewport, the affected node is selected, and every edit is a step in Godot's undo history — press Ctrl+Z to take it back. Nothing is written to disk until the scene is saved (Ctrl+S, or Claude's editor_save_scene).

Set up the plugin (once per project)

  1. Copy sample-project/addons/godot_mcp_bridge/ into your project's addons/ folder (or just open sample-project/ in Godot, where it's already enabled).

  2. In Godot: Project → Project Settings → Plugins → enable "Godot MCP Bridge".

  3. The Output panel should print godot_mcp_bridge: listening on ws://127.0.0.1:9080.

  4. Ask Claude to editor_ping. A reply like {"status": "alive", ...} means the bridge is up.

After updating the server, also refresh the plugin copy in your project and toggle it off and on (or reopen the project) so Godot loads the new version.

A live session

You: Open scenes/Main.tscn in the editor and add a crate: a StaticBody3D at (3, 1, -20) with a 2×2×2 box collision shape and a brown box mesh as its visual.

Claude calls, and you watch the nodes appear one by one:

Call

Arguments

editor_open_scene

scene_path: "scenes/Main.tscn"

editor_add_node

parent_path: ".", name: "Crate", type: "StaticBody3D", properties: { "position": "Vector3(3, 1, -20)" }

editor_add_node

parent_path: "Crate", name: "CollisionShape3D", type: "CollisionShape3D", properties: { "shape": "BoxShape3D.new()", "shape:size": "Vector3(2, 2, 2)" }

editor_add_node

parent_path: "Crate", name: "Mesh", type: "MeshInstance3D", properties: { "mesh": "BoxMesh.new()", "mesh:size": "Vector3(2, 2, 2)", "material_override": "StandardMaterial3D.new()", "material_override:albedo_color": "Color(0.6, 0.4, 0.2, 1)" }

Not happy with it? Ctrl+Z. Happy? Save with Ctrl+S, or ask "save it" (editor_save_scene). Then "run it" (editor_run_scene) to play the scene. Claude can also read what's open (editor_get_scene_tree) and what you have selected (editor_get_selection — "which node do I have selected?").

Property values use Godot syntax: Vector2(1, 2), Color(1, 0, 0, 1) (all four components), true, 42, and text with its quotes ("\"Hello\""). For a resource property such as a collision shape, ClassName.new() creates a fresh resource and "shape:size" sets a property inside it (properties are applied in order, so set shape first). If any value in a call is invalid, the whole call is rejected and nothing is changed.

Live edits act on the scene in the editor's active tab — use editor_open_scene to switch. They work on nodes that belong to that scene (not the internals of instanced sub-scenes).

The bridge is tested against Godot 4.7.2; it needs the EditorInterface singleton and WebSocketPeer.accept_stream, so Godot 4.2 or newer is the likely minimum. The sample project targets 4.3.

Tool reference

File tools (always available)

Tool

Arguments

Purpose

list_project

project_path

Lists scenes (.tscn), scripts (.gd) and resources (.tres/.res), as project-relative paths

read_scene

project_path, scene_path

Parses a .tscn into a JSON list of nodes (name, type, parent, path, instance, properties)

create_scene

project_path, scene_path, root_name, root_type, overwrite?

Creates a new scene with one root node

add_node

project_path, scene_path, parent_path, name, type, properties?, script_path?

Adds a child node (use "." as the parent for the root)

remove_node

project_path, scene_path, node_path

Removes a node, its descendants, and any signal connections pointing at them. The root can't be removed

set_node_properties

project_path, scene_path, node_path, properties

Sets or overwrites raw properties on a node

write_script

project_path, script_path, content

Creates or overwrites a script

read_script

project_path, script_path

Reads a script

edit_script

project_path, script_path, old_text, new_text

Replaces exactly one occurrence of old_text

run_headless

project_path, scene_path?, timeout_ms?

Runs the project headlessly and returns its output and exit status

Node names may not contain . / : @ " % or backslashes, and node types must be plain class names such as Sprite2D (both are Godot rules).

Live editor bridge (needs the plugin enabled in a running editor)

Tool

Arguments

Purpose

editor_ping

—

Checks the bridge is reachable (returns the Godot version)

editor_get_scene_tree

—

Returns the scene open in the editor as a node tree, plus the list of open scenes

editor_open_scene

scene_path

Opens a scene in the editor (switches to its tab)

editor_add_node

parent_path, name, type, properties?, script_path?, scene_path?

Adds a node to the open scene — live, selected, undoable

editor_set_properties

node_path, properties, scene_path?

Sets properties on a node in the open scene — live, undoable

editor_remove_node

node_path, scene_path?

Removes a node and its descendants from the open scene — live, undoable

editor_save_scene

—

Saves the open scene to disk (like Ctrl+S)

editor_run_scene

scene_path (res://...)

Presses "Play Scene" on that scene

editor_stop

—

Stops the running scene

editor_get_selection

—

Returns the node path(s) currently selected in the editor

scene_path on the live-edit tools is an optional safety check: the call fails unless that is the scene currently open. Values use Godot syntax (see Live editing).

Configuration

Variable

Default

Meaning

GODOT_BIN

godot4

Godot 4 executable used by run_headless

GODOT_MCP_BRIDGE_URL

ws://127.0.0.1:9080

Where the editor_* tools look for the bridge

Set them in your MCP client config, for example:

{
  "mcpServers": {
    "godot": {
      "command": "npx",
      "args": ["-y", "@yasirurf/godot-mcp"],
      "env": { "GODOT_BIN": "C:\\Godot\\Godot_v4.3-stable_win64_console.exe" }
    }
  }
}

On Windows, prefer the _console.exe build of Godot for run_headless — it attaches stdout/stderr so errors show up in the output.

The bridge's port is fixed at 9080 in sample-project/addons/godot_mcp_bridge/godot_mcp_bridge.gd (PORT); if you change it there, change GODOT_MCP_BRIDGE_URL to match.

Troubleshooting

Symptom

Cause / fix

No project.godot found in "..."

project_path must be the folder that contains project.godot, as an absolute path

Refusing to access a path outside the project folder

A scene_path/script_path resolved outside project_path (for example via ..). Use a path inside the project

Could not launch "godot4": spawn godot4 ENOENT

Godot isn't on PATH under that name. Set GODOT_BIN to the executable

run_headless output is empty on Windows

Use the _console.exe Godot build

Could not reach the Godot editor bridge ... ECONNREFUSED

Godot isn't open, or the plugin isn't enabled (Project Settings → Plugins). File tools still work without it

Plugin logs failed to listen on 127.0.0.1:9080

Another Godot editor (or program) already holds the port — close it

old_text matched N times; make it unique

Add more surrounding lines to old_text in edit_script

Edits don't show in the open editor

Godot caches open scenes; accept its "reload from disk" prompt

... is open in the Godot editor, so editing the file on disk would desync it

Deliberate guard. Use editor_add_node / editor_set_properties / editor_remove_node, or close that scene's tab in Godot first

'...' is not the scene currently being edited

Live edits act on the editor's active tab. Call editor_open_scene first

could not parse '...' as a Godot value

Use Godot syntax: Vector2(1, 2), Color(1, 0, 0, 1) (4 components), true, 42, and text with quotes

... is GDScript, not scene-file syntax

RectangleShape2D.new() only works in live edits (editor_add_node). In a scene file on disk, a resource must be a SubResource(...)

unknown command: add_node (or another new command)

Your project has an older copy of the plugin. Re-copy addons/godot_mcp_bridge/ and toggle the plugin off and on

Claude can't see the tools

Check the path in your MCP config is absolute and points at dist/index.js, that you ran npm run build, and restart the client

How it works

Godot doesn't expose an API for external processes to control it, so the project splits into two independent halves:

  • File-based tools. .tscn and .gd files are plain text. The server parses and writes them directly, so these tools work with zero Godot-side setup — you don't even need Godot installed, except for run_headless. The .tscn handling is conservative: it edits the blocks it needs and keeps everything else in the file verbatim, so an edit produces a small diff and an untouched scene round-trips byte for byte.

  • Live editor bridge. A small EditorPlugin (sample-project/addons/godot_mcp_bridge/) runs inside the Godot editor and opens ws://127.0.0.1:9080. The editor_* tools connect to it, send one JSON command ({"id", "command", "args"}) and read one JSON reply ({"id", "ok", "result", "error"}). Scene edits go through the editor's EditorUndoRedoManager on the scene that is actually open, which is why they show up live and can be undone. The on-disk tools ask the bridge whether a scene is open before touching its file, and refuse if it is.

Known limitations

  • The .tscn parser handles nodes, ext/sub resources and single-line properties. Properties whose values span several lines (some dictionaries and arrays) are preserved when untouched, but read_scene only shows their first line and set_node_properties can't replace them reliably. Do those edits in the Godot editor.

  • Property values and node types are not validated against Godot's class database — run run_headless after edits.

  • run_headless and the live bridge need a local Godot install; the other tools don't.

  • The live bridge has no authentication. It binds to 127.0.0.1 only, but any local program — and potentially a web page in your browser, since browsers allow WebSocket connections to localhost — can send it commands while the plugin is enabled. Those commands can change (undoably) and save the open scene. Enable the plugin while you use it, and never expose the port on a shared or public host.

  • Live edits act on the scene in the active editor tab, on nodes that belong to it (not the internals of instanced sub-scenes). There is no MCP-side undo; use Ctrl+Z in the editor.

  • Tested against Godot 4.7.2: the bridge plugin was run end to end in a real (headless) Godot editor, and run_headless with the real binary. Those runs are manual, not part of npm test, which uses stand-ins (a mock WebSocket server and a fake binary). Older Godot 4 versions are untested.

Development

npm install
npm test        # builds, then runs the test suite (no Godot required)
npm run dev     # tsc in watch mode

The tests cover the .tscn round-trip and edit operations, drive the built server over the real MCP stdio protocol against a scratch copy of sample-project/, and check the bridge client against a mock of the plugin's WebSocket protocol.

Ideas for later: instance_scene (instance one .tscn in another), editor_call_method, signal connection editing, export-preset management.

Available Tools

20 tools
add_nodeB

Adds a child node to an existing scene at the given parent path (use "." for the scene root).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYesGodot node class, e.g. "Sprite2D", "CollisionShape2D"
propertiesNoRaw property assignments, e.g. { "position": "Vector2(10, 20)" }
scene_pathYes
parent_pathYesPath of the parent node, e.g. "." or "Player" or "Player/Sprite2D"
script_pathNoIf set, attaches this .gd script to the new node (path relative to project_path)
project_pathYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It says 'Adds', which implies a mutation, but does not mention side effects like whether the scene file is saved to disk, what happens if the parent path doesn't exist, or any failure behavior. This is minimal 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It communicates the primary action and the key special case efficiently, making it easy for an agent to parse quickly.

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

Completeness2/5

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

For a 7-parameter mutation tool with no annotations and no output schema, this description is incomplete. It does not explain how properties or script_path are applied, what happens to the scene after the node is added, or how it fits with sibling tools. An agent has to infer too much to call it correctly.

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

Parameters2/5

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

The description mentions 'use "." for the scene root', but this is already covered in the schema's parent_path description. It adds no meaning for name, scene_path, project_path, or the interplay between properties and script_path. With schema coverage at 57%, the description should compensate for undocumented parameters but fails to do so.

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

Purpose4/5

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

The description clearly states a specific verb ('Adds'), resource ('a child node to an existing scene'), and location ('parent path'), making the core operation unambiguous. However, it does not explicitly differentiate from sibling tools like editor_add_node, so it does not fully satisfy the 'distinguishes from siblings' bar.

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

Usage Guidelines3/5

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

The phrase 'existing scene' implies this tool is for modifying existing scenes rather than creating new ones, but there is no explicit when-to-use/when-not-to-use guidance or reference to alternatives such as editor_add_node. Usage is only implied, not stated.

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

create_sceneB

Creates a new .tscn file with a single root node. Use add_node afterward to build out the tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
root_nameYes
root_typeYesGodot node class, e.g. "Node2D", "CharacterBody2D", "Control"
scene_pathYesWhere to write the new scene, e.g. scenes/Player.tscn
project_pathYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states the basic action without disclosing side effects like overwrite behavior, file creation failure handling, or permissions. For a mutation tool that creates a file, this is insufficient.

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, with the core action front-loaded. No fluff, efficient.

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

Completeness2/5

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

The tool has 5 parameters and 4 required, and no output schema. The description is minimal and doesn't explain the meaning of required parameters, overwrite behavior, or error conditions. It also doesn't clarify the distinction from editor_add_node, which could confuse an agent.

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

Parameters2/5

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

Schema coverage is only 40%, with root_type and scene_path described. The description does not add any parameter semantics beyond what the schema provides, leaving project_path, root_name, and overwrite unexplained. Given the low coverage, the description should compensate but doesn't.

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

Purpose4/5

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

The description clearly states it creates a new .tscn file with a single root node, which is a specific verb and resource. It also hints at the workflow with add_node, though it doesn't explicitly differentiate from other scene-related tools.

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

Usage Guidelines4/5

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

It provides a clear usage context: create the scene first, then use add_node to build the tree. However, it doesn't mention any alternatives or when not to use it, nor does it clarify prerequisites like project path existence.

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

editor_add_nodeA

Adds a node to the scene open in the Godot editor. It appears live and is selected; undo with Ctrl+Z. The scene is not saved until editor_save_scene (or the user saves). Prefer this over add_node while the editor is open.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYesGodot Node class, e.g. "Sprite2D"
propertiesNoGodot-syntax values, e.g. { "position": "Vector2(10, 20)", "shape": "RectangleShape2D.new()", "shape:size": "Vector2(32, 48)" }. Strings need quotes ("\"hi\""); ClassName.new() creates a Resource; "prop:subprop" reaches into a resource. Applied in order.
scene_pathNoOptional safety check: fail unless this is the scene currently open in the editor
parent_pathYesPath of the parent node in the open scene, e.g. "." or "Player"
script_pathNoAttach this script, e.g. res://scripts/coin.gd

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It covers live appearance, selection, undo via Ctrl+Z, and non-persistence until save. It does not mention failure modes or editor availability, so it is not exhaustive, but it is unusually informative.

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

Conciseness5/5

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

Three short sentences, each containing essential information: the core purpose, immediate behavioral effects, and save/alternative guidance. There is no filler.

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

Completeness4/5

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

For a mutation tool with no annotations or output schema, the description covers the most important operational facts: live update, selection, undo, non-save, and sibling distinction. It omits return values and edge cases like 'editor not open', but the essentials for correct invocation are present.

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 83%, so the schema already documents most parameters in detail. The description adds no parameter-specific meaning beyond what the schema provides, which is acceptable but not additive.

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: 'Adds a node to the scene open in the Godot editor.' It also explicitly differentiates itself from the sibling add_node by saying 'Prefer this over add_node while the editor is open.'

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

Usage Guidelines5/5

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

The description gives clear usage context: use this when the editor is open, prefer it over add_node under those conditions, and understand that the scene isn't saved until editor_save_scene. This effectively routes the agent between competing tools.

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

editor_get_scene_treeA

Returns the scene currently open in the Godot editor as a node tree, plus the list of open scenes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states that it 'returns' data, which implies a read-only operation, but does not disclose any side effects, performance implications, or limitations. For a simple getter, this is minimal but acceptable; it does not contradict anything and provides basic 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?

A single sentence that is front-loaded with the core action and result. No wasted words, and the return value is clearly specified. It is appropriately sized for a tool with no parameters.

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 is the sole source of return information. It clearly states both the scene tree and the list of open scenes, which is sufficient for an agent to know what to expect. Given the simplicity of the tool, this is complete enough, though it could optionally mention whether the result is read-only or cached.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description does not need to add parameter details because there are none. It correctly focuses on the output instead.

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 ('Returns') and resource ('scene currently open in the Godot editor as a node tree, plus the list of open scenes'). It clearly distinguishes itself from siblings like editor_get_selection (which returns selection) and editor_open_scene (which opens a scene). The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description gives no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives. However, the purpose is self-evident for a getter, and the context of siblings implies it is the tool for retrieving the scene tree. Still, no explicit routing guidance is provided, so a 3 is appropriate.

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

editor_get_selectionA

Returns the currently selected node(s) in the Godot editor.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately indicates this is a read-only retrieval operation, but it does not explain what the returned node selection looks like, whether it can be null/empty, or whether it reflects only the active editor viewport. The core behavior is stated, but the output format is left undefined.

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 one sentence with no filler, front-loading the action and resource. Every word contributes to the agent's understanding.

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 parameterless getter with no output schema, the description gives the essential purpose and no side-effect concerns. It would be more complete if it stated the returned value format in one clause, but the absence of inputs and the simple read-only nature make this largely sufficient.

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?

This tool has zero parameters, so there is nothing for the description to clarify beyond noting that no arguments are needed. The baseline of 4 applies because schema coverage is vacuously complete and no parameter semantics are required.

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 ('Returns'), a specific resource ('currently selected node(s)'), and a context ('Godot editor'). It is clearly distinct from siblings like editor_get_scene_tree, which returns a scene tree, and editor_ping, which highlights something in the editor.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as editor_get_scene_tree or read_scene. It does not mention prerequisites like an open scene, nor the kind of selection state needed for a useful call. The intended usage is only implied by the tool's name.

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

editor_open_sceneA

Opens a scene in the Godot editor (switching to its tab) so it can be edited live with editor_add_node, editor_set_properties and editor_remove_node.

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_pathYese.g. "res://scenes/Main.tscn" or "scenes/Main.tscn"

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the side effect of switching to the editor tab, which is useful, but does not disclose potential failure cases (e.g., if the scene does not exist) or that it changes the editor's UI state without modifying the scene. This is a moderate gap for a non-destructive operation.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the primary action and purpose. Every word contributes to understanding the tool's function, and it does not waste space on redundant details.

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 simple tool with one parameter and no output schema, the description is sufficient to guide an agent. It explains the action, the resource, and its role in the editing workflow. The only missing piece is explicit error behavior for non-existent scenes, which is a minor omission for an opening command.

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% coverage for the single parameter, including an example format. The description does not add additional parameter semantics beyond the schema, so the baseline of 3 is appropriate since the schema already documents the parameter thoroughly.

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

Purpose5/5

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

The description clearly states the specific action (opens a scene), the resource (a scene in the Godot editor), and the purpose (to enable live editing via editor_add_node, editor_set_properties, and editor_remove_node). It distinguishes itself from sibling tools by focusing on opening an existing scene for editing, rather than creating, reading, or manipulating nodes directly.

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 implies the tool is a prerequisite for live editing tools by stating it enables them. However, it does not explicitly mention when to avoid using it or alternative tools such as read_scene for inspection. The context is clear for its intended use, but lacks explicit exclusions.

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

editor_pingB

Checks whether the Godot editor is running with the godot_mcp_bridge plugin enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only check but does not specify the return value (e.g., boolean indicating success/failure), error behavior if the editor is not running, or whether the check has any side effects. This is a significant gap for a zero-parameter tool where the agent must know what to expect.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with its core purpose. It contains no fluff or redundancy. Every word contributes to the agent's understanding of what the tool does.

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

Completeness3/5

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

The tool is simple (0 params, no output schema), but the description still lacks critical context. It does not explain what the agent will receive (e.g., a boolean, a message, or an error if the editor is missing). It also does not position the tool among its siblings, such as whether it should be called before other editor tools. This makes it incomplete for an agent that needs to decide when and how to use 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?

The tool has no parameters, and the schema reflects that. Per the rule for 0 params, the baseline is 4. The description does not need to explain parameters since there are none, and the schema coverage is effectively 100%. The description adds no parameter-related value because there is nothing to add.

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 ('Checks') and resource ('whether the Godot editor is running with the godot_mcp_bridge plugin enabled'). This clearly distinguishes it from sibling tools like editor_run_scene or editor_get_selection, which perform different operations. The purpose is immediately unambiguous.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus the many sibling editor tools. It does not mention that it could be used as a prerequisite check or as a way to verify the environment before invoking other tools. There is no explicit when-to-use or when-not-to-use context.

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

editor_remove_nodeA

Removes a node (and its descendants) from the scene open in the Godot editor (live, undoable with Ctrl+Z).

ParametersJSON Schema
NameRequiredDescriptionDefault
node_pathYes
scene_pathNoOptional safety check: fail unless this is the scene currently open in the editor

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the destructive scope ('and its descendants'), the immediate live effect, and reversibility ('undoable with Ctrl+Z'). It does not mention potential auth or failure conditions, but the core behavioral traits are clearly exposed.

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

Conciseness5/5

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

A single sentence packs the action, scope, target context, and undo behavior with no filler. It is front-loaded and every part earns its place.

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

Completeness4/5

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

For a direct mutation tool with no annotations or output schema, this description covers the core behavior, scope, and reversibility, and the schema covers the safety parameter. The main missing piece is node_path syntax detail, which slightly limits completeness but does not undermine correct usage for an agent familiar with Godot paths.

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

Parameters3/5

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

Schema description coverage is 50%: node_path is undocumented while scene_path has a safety description. The tool description clarifies that node_path is the node to remove and implies an editor tree path, but it does not specify format, root-relative vs absolute, or example values, so it only partially compensates.

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 action ('Removes'), a precise resource ('a node (and its descendants)'), and the context ('from the scene open in the Godot editor'). It also adds distinctive traits—live and undoable—that separate it from siblings like remove_node or editor_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?

The context is clear: this operates on the live Godot editor scene and is undoable, implying it is for interactive editor edits. However, it does not explicitly contrast itself with remove_node or state when to prefer one over the other, so it misses full exclusion guidance.

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

editor_run_sceneA

Tells the running Godot editor to play a specific scene (like pressing the Play Scene button).

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_pathYese.g. "res://scenes/Main.tscn"

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the core behavior (sending a play command to the running editor), but it does not mention side effects, like whether current playback is stopped, whether unsaved changes are affected, or whether the call blocks until the scene loads. The analogy provides some context but not full transparency.

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

Conciseness5/5

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

A single concise sentence that immediately states the action and includes a useful analogy. No wasted words; all content earns its place.

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

Completeness4/5

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

For a simple, one-parameter command tool with no output schema, the description plus schema coverage are sufficient for an agent to call it correctly. It lacks details on failure modes or return behavior, but these are less critical given the low complexity and the editor-control nature.

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 parameter scene_path is already documented with an example. The description adds no extra meaning beyond what the schema provides, so the baseline score of 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?

States a specific action and resource: tells the running Godot editor to play a specific scene, with a helpful analogy to pressing the Play Scene button. This clearly distinguishes it from siblings like editor_stop and run_headless, which are about stopping or running without the editor.

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 analogy implies usage context (when you want to start a scene in the editor), but there is no explicit guidance on when to use this versus sibling tools like run_headless or editor_stop. No alternatives or exclusions are mentioned, so usage is left to inference.

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

editor_save_sceneA

Saves the scene currently open in the Godot editor to disk (like Ctrl+S).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool writes the current scene to disk, which is the key side effect, but it does not explicitly mention that an existing file will be overwritten, whether changes are reversible, or what happens if no scene is open. The Ctrl+S analogy partially covers standard overwrite behavior.

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

Conciseness5/5

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

One sentence, front-loaded with the action, and every word earns its place. The Ctrl+S comparison adds clarity without bloat.

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 zero-parameter tool, the description is largely complete: it names the action, target, and result. It would benefit from an explicit note about overwriting or failure behavior, but given the low complexity and the Ctrl+S analogy, the remaining gaps are minor.

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 accepts zero parameters and the input schema is empty, so the description cannot add parameter meanings. The baseline for a 0-parameter tool is 4, and no parameter documentation is needed here.

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 (Saves), resource (the scene currently open in the Godot editor), and destination (to disk). The Ctrl+S analogy makes behavior instantly recognizable and clearly distinguishes it from sibling tools like editor_open_scene or editor_run_scene.

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

Usage Guidelines3/5

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

The description implies when to use it: to persist the currently open scene, analogous to Ctrl+S. It does not explicitly discuss alternatives or when not to use it, but with no save-like siblings in the tool list the intended usage is reasonably clear.

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

editor_set_propertiesA

Sets properties on a node in the scene open in the Godot editor (live, undoable with Ctrl+Z, not saved until editor_save_scene).

ParametersJSON Schema
NameRequiredDescriptionDefault
node_pathYesPath in the open scene, "." for the root
propertiesYesGodot-syntax values, e.g. { "position": "Vector2(100, 50)", "visible": "false" }
scene_pathNoOptional safety check: fail unless this is the scene currently open in the editor

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly discloses that the operation is live, undoable, and not saved until editor_save_scene, which are important behavioral traits. It also mentions the optional scene_path safety check in the schema, but the description itself does not elaborate on failure modes or side effects beyond the undo/save behavior.

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

Conciseness5/5

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

The description is a single sentence that is concise and front-loaded with the core action ('Sets properties on a node'), followed by key behavioral caveats. Every word earns its place, and it avoids redundancy with the schema.

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

Completeness4/5

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

Given the tool's moderate complexity (3 params, no output schema, no annotations), the description covers the essential behavioral context: live, undoable, not saved. It could be more complete by explicitly mentioning the optional scene_path safety check or the Godot-syntax requirement, but the schema already covers those. The description is sufficient for an agent to understand the tool's role and side effects.

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 three parameters. The description adds a bit of context by noting the operation is live and undoable, but it does not add meaning beyond the schema for the parameters themselves. The example in the schema ('position': 'Vector2(100, 50)') already clarifies the Godot-syntax requirement, so the description's contribution is minimal.

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

Purpose4/5

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

The description states a specific verb ('Sets') and resource ('properties on a node in the scene open in the Godot editor'), which clearly identifies the tool's function. It does not explicitly differentiate from the sibling 'set_node_properties', but the mention of 'live, undoable with Ctrl+Z' and 'not saved until editor_save_scene' provides some distinguishing context.

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

Usage Guidelines3/5

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

The description implies usage context: it operates on the live editor scene and is undoable, and it notes that changes are not persisted until editor_save_scene. However, it does not explicitly state when to use this tool versus alternatives like set_node_properties or editor_add_node, nor does it mention any exclusions or prerequisites.

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

editor_stopA

Tells the running Godot editor to stop the currently playing scene.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It clarifies that this is a command to the running Godot editor rather than a file operation, which is useful. However, it does not disclose side effects such as whether the call is asynchronous, what happens when no scene is playing, or whether any error/status is returned.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It communicates the target environment, the action, and the affected resource without wasting 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?

For a parameterless control command, the description is largely complete: it names the target (running Godot editor) and the operation (stop currently playing scene). It would be marginally better with explicit note of no-op behavior or return semantics, but those are not essential given the tool's simplicity.

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

Parameters4/5

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

The tool has zero parameters, so the input schema imposes no documentation burden. The description does not need to explain parameter meaning, and the baseline score of 4 applies because there is nothing for the description to compensate for.

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

Purpose4/5

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

The description states a specific verb ('stop') and resource ('currently playing scene'), making the tool's purpose unambiguous. It does not explicitly differentiate itself from sibling tools like editor_run_scene, but the reverse relationship is clear enough for an agent to infer the operation.

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

Usage Guidelines3/5

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

The phrase 'currently playing scene' implies the tool should be used when a scene is running and needs to be stopped. However, there is no explicit guidance about when not to use it, what happens if no scene is playing, or how it compares to alternatives like editor_run_scene or run_headless.

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

edit_scriptB

Replaces one exact occurrence of old_text with new_text in a GDScript file (like a find-and-replace patch).

ParametersJSON Schema
NameRequiredDescriptionDefault
new_textYes
old_textYes
script_pathYes
project_pathYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully specifies that only one exact occurrence is replaced and frames the operation as patch-like, which adds real meaning. However, it does not disclose what happens if old_text is not found, whether the file is modified in place, or any side effects of this mutation.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the core operation and scope without technical filler. The analogy is compact and reinforces meaning without adding bulk. Every word serve the core message.

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

Completeness2/5

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

This is a mutating tool with no annotations, no output schema, and zero schema descriptions, so the description must do heavy lifting. It leaves important context missing: error behavior when the exact text is absent, path semantics, interaction with existing script state, and why edit_script is preferable to write_script.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for all four parameters. It clarifies the roles of old_text and new_text, but leaves project_path and script_path unexplained, including how they relate to each other. This is only partial compensation for completely undocumented parameters.

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

Purpose5/5

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

The description states a specific verb ('Replaces'), a precise resource ('one exact occurrence of old_text with new_text in a GDScript file'), and uses an analogy ('like a find-and-replace patch'). This clearly distinguishes it from sibling tools like write_script or read_script, which would operate on entire file contents rather than a single targeted occurrence.

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

Usage Guidelines2/5

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

The description explains the mechanism but gives no guidance on when to choose edit_script over alternatives such as write_script or read_script. There is no mention of prerequisites, exclusions, or scenarios where a full-file replacement would be more appropriate.

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

list_projectA

Lists scenes (.tscn), scripts (.gd), and resources (.tres/.res) in a Godot project folder, relative to project_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYesAbsolute path to the Godot project folder (containing project.godot)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It adds file-type scope and that output is relative to project_path, but does not disclose whether traversal is recursive, whether directories are included, or what the return format looks like.

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

Conciseness5/5

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

One clean, grammatically straightforward sentence with no filler. The action and object are front-loaded, and every clause adds relevant detail.

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

Completeness3/5

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

Adequate for a simple read-only tool, but incomplete on return details: there is no output schema, and the description does not state whether subfolders are scanned or how results are presented. An agent needs this to trust the listing's completeness.

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 schema already describes project_path as 'Absolute path to the Godot project folder', reaching 100% coverage. The description adds no new parameter meaning; 'relative to project_path' clarifies the output base, not the parameter itself.

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?

Describes a specific verb ('Lists') and resource (scenes, scripts, and resources in a Godot project folder), with precise file extensions (.tscn/.gd/.tres/.res). Clearly distinguishes from sibling tools like read_scene or create_scene.

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?

No explicit when-to-use or alternative routing is provided. The purpose implies it is for enumerating project files, but it doesn't mention when to prefer this over editor_get_scene_tree or other related tools.

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

read_sceneB

Parses a .tscn file and returns its node tree as JSON (name, type, parent path, properties).

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_pathYesPath to the .tscn file, relative to project_path or absolute
project_pathYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does indicate the return value and fields ('name, type, parent path, properties'), which is useful. However, it does not explicitly state that the tool is read-only, how invalid or missing files are handled, or whether it affects the editor state.

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

Conciseness5/5

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

The description is a single front-loaded sentence that communicates the core action, target file type, and return structure without any filler. Every element earns its place.

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 tool with no output schema, no annotations, and a partially documented input schema, the description provides the output shape but omits important operational context like project_path semantics, failure modes, and when to prefer this over editor-based siblings. It is adequate but not fully complete.

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

Parameters2/5

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

Schema coverage is only 50%: scene_path is described, but project_path has no schema description. The description does not add any parameter-level meaning beyond the schema, so it fails to compensate for the undocumented project_path parameter, leaving its role and relationship to scene_path mostly implicit.

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 ('Parses'), a specific resource ('.tscn file'), and the output format (JSON with name, type, parent path, properties). This clearly distinguishes it from siblings like editor_get_scene_tree, which operates on the editor's current scene, or read_script, which handles scripts.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool over alternatives such as editor_get_scene_tree, editor_open_scene, or list_project. The description only states what the tool does; the agent must infer usage from the phrase 'Parses a .tscn file' without any comparison or context.

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

read_scriptB

Reads a GDScript (.gd) file's contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
script_pathYes
project_pathYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. 'Reads' clearly indicates a non-destructive operation, but the description does not disclose details such as path interpretation, encoding, error behavior, or whether the full file content is returned verbatim.

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

Conciseness5/5

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

The description is a single, focused sentence with no filler. It states the verb, target file type, and what is returned in a compact, front-loaded way.

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

Completeness3/5

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

For a simple read tool, the description is minimally viable, but it lacks essential context for calling it correctly, such as how project_path and script_path relate and what the output looks like. There is no output schema to fill that gap.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description adds no meaning to project_path or script_path. The parameter names are somewhat self-explanatory, but the description does not explain expected formats, path relationships, or whether paths are relative to the project root.

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

Purpose5/5

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

The description uses a specific verb ('Reads') and resource ('GDScript (.gd) file's contents'), making the tool's purpose unmistakable. It also implicitly differentiates from sibling tools like write_script and edit_script by focusing only on reading.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. The description does not mention write_script, edit_script, or any conditions that would route an agent to one tool or the other.

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

remove_nodeB

Removes a node (and its descendants) from a scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_pathYes
scene_pathYes
project_pathYes

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior itself. It does disclose the key destructive detail that descendants are removed along with the node. However, it does not state that this mutates the scene file permanently, whether it requires special permissions, or what the effect is on the editor state, so transparency is incomplete.

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

Conciseness5/5

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

A single sentence with no filler. The verb and the most important behavioral caveat (descendants) are front-loaded.

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

Completeness2/5

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

Given no output schema and no annotations, this is a sparse tool definition. The description does not address how this differs from the sibling editor_remove_node, whether removal is permanent and saved, or what the tool returns/confirms on success. For a destructive operation with multiple similar siblings, more context is needed.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to explain the parameters. It only indicates that 'node' refers to the node being removed (including descendants), but does not clarify the meaning/format of project_path, scene_path, or node_path, nor how they relate. The parameter names help, but the description does not compensate for the missing schema descriptions.

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

Purpose4/5

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

States a specific verb and resource: 'Removes a node (and its descendants) from a scene.' This is clear and adds the descendant detail. However, it does not differentiate from the sibling editor_remove_node, which likely performs the same conceptual operation.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus editor_remove_node, add_node, or set_node_properties. The description only states what it does, not the conditions or context for choosing it. With a near-identical sibling name, this is a real gap.

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

run_headlessB

Runs the Godot project headlessly (no window) for a fixed duration to catch parse/runtime errors, or runs a specific scene headlessly. Requires the godot4 binary (or GODOT_BIN env var) to be installed.

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_pathNoSpecific scene to run instead of the project's main scene
timeout_msNo
project_pathYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'headlessly (no window)' and 'for a fixed duration', but fails to explain what happens after execution, how errors are reported, whether the call blocks, or the nature of the return value. This is a significant gap for a tool that runs a project.

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, consisting of two sentences. It front-loads the core purpose and includes only essential information, such as the binary requirement, with no filler or repetition.

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

Completeness2/5

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

Given the tool has no output schema and no annotations, the description should provide more details about the execution behavior, such as what constitutes success, how errors are surfaced, and whether the tool is blocking. The current description leaves critical operational aspects unspecified, making it incomplete for an agent to rely on.

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 schema has low coverage (33%) with only scene_path described. The description hints at scene_path via 'runs a specific scene' and timeout_ms via 'fixed duration', adding some context beyond the schema. However, it does not explicitly define parameters, defaults, or how they map to the two modes, leaving room for ambiguity.

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 action ('Runs the Godot project headlessly') and a clear purpose ('to catch parse/runtime errors'), with an alternative mode for running a specific scene. It clearly distinguishes from editor_run_scene by emphasizing headless execution, which is a key differentiator among siblings.

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

Usage Guidelines3/5

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

The description implies usage for validating a project's error-free state via headless execution, but it does not explicitly state when to prefer this over editor_run_scene or other tools, nor does it mention any exclusions. The requirement for the godot4 binary is a prerequisite rather than usage guidance.

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

set_node_propertiesC

Sets or overwrites one or more properties on an existing node in a scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_pathYes
propertiesYese.g. { "position": "Vector2(100, 50)", "visible": "false" }
scene_pathYes
project_pathYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that properties are set or overwritten, implying a write operation, but it does not explain what happens if the node does not exist, whether properties are merged or fully replaced, whether changes are persisted automatically, or any side effects. For a mutation tool, this is insufficient.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the action and object. There is no extraneous information, and it is well-structured for quick reading. It earns a perfect score for conciseness, though this brevity contributes to incompleteness elsewhere.

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

Completeness1/5

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

Given the tool has four required parameters, a nested object, no output schema, and no annotations, the description is severely incomplete. An agent has no information about return values, error conditions, the format of property values beyond an example, or how this tool relates to the editor_* siblings. It leaves too much to inference, making it inadequate for correct invocation.

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

Parameters2/5

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

Schema description coverage is only 25%, with only the 'properties' parameter having a description. The description does not compensate by explaining the roles of project_path, scene_path, or node_path. It only implicitly ties 'properties' to the action but adds no meaning beyond the schema's example. With low schema coverage, the description should clarify these parameters but does not.

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

Purpose4/5

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

The description clearly states the action: 'Sets or overwrites one or more properties on an existing node in a scene.' It identifies the verb (set/overwrite), the resource (properties on a node), and the context (scene). This distinguishes it from tools like add_node or remove_node, but it does not differentiate itself from the sibling editor_set_properties, which likely performs a similar operation in the editor context, so it lacks explicit differentiation.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. With siblings like editor_set_properties and various editor_* tools, an agent cannot infer whether this tool operates on files directly or requires an open scene, nor when to prefer it over the editor variant. The description offers no contextual cues for selection.

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

write_scriptB

Creates or fully overwrites a GDScript (.gd) file.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
script_pathYese.g. scripts/Player.gd
project_pathYes

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses the key behavioral trait: it fully overwrites, not merges or appends. With no annotations provided, the description carries the burden, and it does convey the destructive nature of the operation. However, it does not mention whether the file is created if missing, whether directories are created, or what happens on failure.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the key behavior ('Creates or fully overwrites'). It earns its place with no wasted words, though it could add a brief usage note without becoming bloated.

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 write tool with no annotations and no output schema, the description is adequate but thin. It tells the agent the operation is destructive, which is the most critical fact, but it omits details like whether parent directories are created, whether the file must already exist for overwrite, and how it differs from edit_script. Given the sibling set includes both read_script and edit_script, a bit more context would help.

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

Parameters3/5

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

Schema description coverage is only 33%, with only script_path having a description. The description itself adds no parameter-level detail beyond the schema. The tool description does clarify the overall purpose of content (the full file contents), but it does not explain project_path semantics or the relationship between project_path and script_path.

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

Purpose4/5

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

The description states a specific verb ('Creates or fully overwrites') and a specific resource ('GDScript (.gd) file'). It clearly distinguishes the write operation from sibling tools like read_script and edit_script, though it does not explicitly name those alternatives.

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

Usage Guidelines3/5

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

The description implies when to use this tool: when creating a new script or fully replacing an existing one. However, it does not explicitly contrast with edit_script, which is the natural alternative for partial modifications, nor does it state any prerequisites or conditions.

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. 20 tool updatesv0.2.0
    • First observedadd_node
    • First observedcreate_scene
    • First observededit_script
    • First observededitor_add_node
    • First observededitor_get_scene_tree
    • First observededitor_get_selection
    • First observededitor_open_scene
    • First observededitor_ping
    • First observededitor_remove_node
    • First observededitor_run_scene
    • First observededitor_save_scene
    • First observededitor_set_properties
    • First observededitor_stop
    • First observedlist_project
    • First observedread_scene
    • First observedread_script
    • First observedremove_node
    • First observedrun_headless
    • First observedset_node_properties
    • First observedwrite_script

TDQS

B3.4/5.0

Scored across 20 tools

Disambiguation5/5

File-based and editor-prefixed tools form two clearly separated groups, and parallel operations like add_node vs editor_add_node are distinguished by both naming and explicit live/undo behavior. Even similar returns like read_scene and editor_get_scene_tree are unambiguous because their sources (disk vs open editor tab) are clearly stated.

Naming Consistency4/5

Most tools follow a consistent verb_noun or editor_verb_noun pattern, and the editor_ prefix is applied uniformly across live-editor operations. Minor inconsistencies exist in retrieval verbs (list/read/get) and in set_node_properties vs editor_set_properties, but the overall pattern remains predictable.

Tool Count3/5

With 20 tools, the set sits at the heavy end of the range, largely because file-based operations and live-editor operations duplicate each other. Each tool does have a distinct purpose, but the count feels borderline for a single MCP server.

Completeness4/5

The toolset covers the core Godot workflow well: listing/reading/creating scenes, editing nodes and scripts, headless runs, and live editor control. Minor gaps such as deleting scene files, moving nodes, or deleting/renaming scripts are workable around rather than blocking.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers