Skip to main content
Glama

Coding agents learned Godot from years of Godot 3 tutorials. They write yield, export var and KinematicBody2D, invent methods, and wire signals to nodes that are not in the scene. Godotwright gives the agent the real Godot 4.7 API, a compact map of your project, real Godot checks and a fixed AAA review, as MCP tools and as a CLI.

Status: layer 1 (toolkit and MCP server) is done; see ROADMAP.md.

Quickstart

Try it on your game, nothing to install:

npx -y godotwright review ~/games/my-game

You get a score from 0 to 100 for api, performance, quality and structure, and each finding as res://file.gd:12: error [rule] message with the Godot 4 fix.

Then give it to your agent. In Claude Code:

/plugin install godotwright --marketplace laaielichter/Godotwright

Claude Desktop, Cursor, VS Code, Codex, Gemini CLI, Windsurf and Zed: one step each, see install in your coding agent or the install page.

Related MCP server: godot-mcp-server

What it does

A receipt on every pull request

# .github/workflows/godotwright.yml
on: pull_request
permissions: { contents: read, pull-requests: write }
jobs:
  receipt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: laaielichter/godotwright@v0.2.0
        with: { comment: "true" }

It downloads a checksum-verified Godot, runs godotwright ci (review, check, GUT or GdUnit4 tests, and your scenarios), puts the table in the job summary and in a pull request comment, and fails the job when a step fails. No editor, no GPU. review-only: "true" skips Godot.

It changes, runs and shows your project too

Reading is not enough for an agent that has to get work done, so Godotwright also does the work that usually needs the editor, checked against Godot 4.7 and with a dry run first:

  • Change it: rename a function, signal, node or file everywhere (code, scenes, connections, .uid files); project edits settings, input actions and autoloads; scene adds and removes nodes, sets properties, connects signals and attaches scripts. Only the lines of the change are touched. usages says where something is used.

  • Run it: test runs your GUT or GdUnit4 tests and prints only what failed, with file:line; play runs a scene, presses the keys you give on the frames you give, and prints the values you watch; check runs Godot headless.

  • See it: screenshot renders a scene or a model to a PNG, and says how much of the picture is drawn.

  • Port it: migrate rewrites Godot 3 scripts to Godot 4 where that is mechanical.

Twelve small-model agents did six everyday tasks like this: what we measured.

And it builds 3D models

A coding agent can also make, look at and check 3D models for Godot with no Blender: model identify says what a thing is (parts, sizes, pivots), model build makes a clean .glb from one of 53 ready-made kinds (vehicles, aircraft, ships, buildings, plants, terrain with lakes and rivers) or from your own JSON spec, model view shows it as text, and model lint scores it. It is set up to work with small, cheap models too: what we tested and learned with 3D models and with everyday Godot tasks.

Why Godotwright?

  • No more Godot 3 code. The review flags Godot 3 syntax and names and gives the Godot 4 replacement.

  • No invented API. Every class, method, property and signal is checked against the official Godot 4.7 class reference, bundled offline (1078 classes).

  • Mistakes found before you press F5. Missing $Node paths, scene connections to methods that do not exist, unknown input actions and broken preload() paths.

  • Safe edits. Renames, settings, input actions and scene changes are checked against the Godot 4.7 reference, show a dry run first, change only their own lines, and report the review errors before and after.

  • It can see the game run. Press keys on exact frames and read values back, run the tests, take a screenshot: all headless, nothing to click.

  • Cheap for the model. Compact, stable output, and a cheap profile that walks small models through small checked steps.

  • Local and private. scan, api and review need no Godot install and no network.

Commands

godotwright scan [path]               # compact project map, cheap to read
godotwright scan [path] --detail full # node trees, signatures, line numbers
godotwright scan [path] --json        # the full map as JSON
godotwright check [path]              # run Godot headless, report errors as file:line
godotwright check [path] --run        # also run the main scene for 120 frames and show what it printed
godotwright check --scene res://scenes/Test.tscn   # run one scene instead: put print() in the code and read it back here
godotwright test [path]               # run the GUT or GdUnit4 tests headless; prints only what failed, with file:line
godotwright play --input "10 tap jump; 20 hold right 30" --watch Player.position   # play input into a scene, see the values per frame
godotwright ci                                     # one receipt: review, check, tests and scenarios (markdown, exit 1 on a failure)
godotwright screenshot --model car.glb --view front,side,top,iso   # a PNG of a model from four sides (or of a scene); says how much is drawn
godotwright api Node2D.look_at        # offline Godot 4.7 API: classes, methods, signals
godotwright api --search "is on floor"
godotwright review [path]             # AAA review with a score per category
godotwright usages take_damage       # every place a name or res:// path is used: code, scenes, connections, groups, settings
godotwright rename take_damage apply_damage --write   # rename everywhere (code, scenes, connections, node paths); dry run without --write
godotwright rename res://a.tscn res://scenes/a.tscn --write   # move a file with its .uid and .import, and every reference
godotwright project set display/window/size/viewport_width 1920 --write   # change a setting; name and type checked against Godot 4.7
godotwright project input add jump --key Space --joy-button A --write   # input map without hand-editing Object(InputEventKey,...)
godotwright project autoload add Game res://game.gd --write   # checks the file is a Node and the name is free
godotwright scene add main.tscn . Music AudioStreamPlayer --write   # add a node (or an instance: res://enemy.tscn); only that line changes
godotwright scene set main.tscn Timer wait_time 0.5 --write   # property name and type checked; enums by name, resources as res:// files
godotwright scene connect main.tscn Timer timeout . _on_timer_timeout   # warns when the method is missing or takes other arguments
godotwright migrate --write         # port Godot 3 scripts to Godot 4 where that is mechanical; lists what is left
godotwright review --sarif > review.sarif   # for GitHub code scanning: findings inline on pull requests
godotwright review --only-new       # in a fix loop: only what changed since the last review, the rest as one line each
godotwright review [path] --detail full --min-score 90
godotwright model car.glb             # what is in a 3D model: nodes, triangles, textures, size
godotwright model lint car.glb        # model review with a score per category
godotwright model contract car.glb    # write a model.contract.json: node names, size, budget
godotwright model contract --archetype car   # the same, from what a car usually is (no model yet)
godotwright model lint car.glb --archetype car   # also check it is what it should be
godotwright model lint car.glb --contract model.contract.json
godotwright model brief "a tractor"    # one page before you build: kind to start from, parts, size, rules, order of work (for small models)
godotwright model identify "a tractor" # what it is: parts, size, variants, what to anticipate
godotwright model archetypes          # the family tree of things Godotwright knows
godotwright model kinds               # what `model build` can make, with parameters
godotwright model view car.glb       # see a model as text: front, side and top views, the parts, what does not touch
godotwright model recipes             # the ready-made recipes and the archetype each one is checked against
godotwright model recipes tractor     # print one recipe as a spec to edit
godotwright model build house -o house.glb --set floors=3 --set roof=hip
godotwright model build house -o house.glb --collision trimesh   # Godot adds collision shapes on import (-col / -convcol names)
godotwright model build terrain -o world/tile.glb --collision heightmap   # terrain: a HeightMapShape3D and a ready tile scene
godotwright learn                     # what Godotwright learned on this machine

scan reads project.godot, scenes, resources and scripts without starting Godot. It lists scenes with their node trees, scripts with signals, functions and exports, autoloads, input actions and key settings, and warns about broken references (missing files, a missing main scene or autoload, bad preload() paths).

check needs Godot 4.7: --godot <path>, $GODOT, godot on your PATH, or a Godot 4 download it finds by itself (Program Files, Steam, Scoop, Downloads, Desktop). It imports the project, loads and instantiates every script and scene, and can run the main scene. Each problem comes back once, as res://path/file.gd:12: error: .... The exit code is 1 when there are errors.

api answers from the official Godot 4.7 class reference, bundled offline (1078 classes). It accepts Class, Class.member, Class.Enum.VALUE, @annotation or a global function, follows inheritance, and explains Godot 3 names (KinematicBody2D is CharacterBody2D in Godot 4). See data/README.md.

review needs no Godot install. It scores four categories from 0 to 100 and lists each finding as res://file.gd:12: error [rule] message:

Category

What it checks

api

Godot 3 code, unknown classes, functions, members and signals, wrong argument counts, input actions missing from the Input Map

performance

node lookups, load(), prints and physics calls in per-frame callbacks, empty callbacks, shadow-casting lights

quality

static typing coverage, long or deeply nested functions, signals never emitted, string-based signals, naming, TODOs

structure

broken references, scene connections to missing methods or signals, $Node paths missing from the scene, unknown groups, file naming

The checks follow Godot's own rules (inheritance, scripts on more specific nodes, inherited scenes, built-in scripts, duck typing with has_method()), and are tuned on the official demo projects so they report real problems, not noise. The exit code is 1 when there are errors, or when the score is below --min-score.

model reads a .glb or .gltf file without Godot. model alone shows the node tree, triangle count, materials, textures (with an estimate of texture memory), size and lowest point. model lint scores four categories from 0 to 100:

Category

What it checks

geometry

triangles facing against their own normals (pink backfaces, wrong light), open edges on single-sided surfaces, edges shared by more than two triangles, triangles without area, negative scale, models that are almost but not quite left-right symmetric

materials

missing normals, UVs or tangents, UVs outside 0..1, very large or non-power-of-two textures

performance

triangle budget (--max-triangles), texture memory budget (--max-texture-mb), many materials

rig

sibling nodes with the same name, unnamed nodes, a model that does not sit on y = 0, an empty file

Findings are grouped per node, and their severity follows how much of the surface is affected, so one stray triangle is an info and a flipped panel is an error. A model contract (model.contract.json) pins what a model must keep, so a renamed node or a hull that grows 3 cm wider is caught. model contract writes one from the model as it is now; review it, add a source to each size, and keep it next to the model. model contract --archetype car starts instead from what a thing usually is (its single parts by name, the middle of the typical size, a triangle budget), for a model that does not exist yet. With --contract, model lint reports contract-missing-node, contract-order, contract-extra-node, contract-size, contract-ground and contract-triangles. Sizes default to a 1% tolerance, or set tolerance in metres. The exit code is 1 when there are errors, or when the score is below --min-score.

model build makes a model from code, with no Blender or other tool: a clean .glb with UVs and tangents, named parts with sensible pivots, standing on y = 0, and the same bytes every time for the same parameters. The result goes straight through model lint, and --contract-out writes a model.contract.json for it. model kinds lists the kinds with their parameters, ranges and defaults; set them with --set name=value or --spec file.json. These are clean, parametric base models, built to be refined, not hand-sculpted art. Kinds today: house, the open-world kinds terrain (a heightmap tile from seeded noise whose neighbours continue it exactly, with an optional lake and an optional river carved into it) and sea (a subdivided water plane at y = 0 with a floor), plus recipes, which are ready-made specs in data/recipes/: car, tractor, helicopter, airliner, ship, tree, conifer, wind-turbine, shipping-container, truck, bus, motorcycle, bicycle, train, tank, light-aircraft, fighter, drone, boat, sailboat, piston-engine, jet-engine, barn, tower, church, windmill, apartment, bridge, road, railway-track, street-lamp, fence, power-pylon, palm, bush, grass, flower, crate, barrel, chair and table. Every recipe names its archetype, so model build checks it as it builds, and every recipe is tested to stay clean at the lowest and highest value of each parameter.

Small, cheap models can work blind: see docs/cheap-models.md for a test and what model view and the floating-part check do about it.

model identify says what a thing is before you build it, from its name in English or Dutch (typos, plurals and Dutch compounds like "vrachtauto" included) or from a description ("something with wheels and an engine"). It answers with the family it belongs to, the parts a model of it needs (and which move, about which axis, with the pivot where), a typical size range with its source and a confidence class, the variants (a car can be a sedan, a hatchback, a pickup), the Godot conventions (+Y up, the front faces +Z), what to anticipate (collision, LODs, lights) and the usual mistakes. A word that means two things (the Dutch "windmolen") is reported as ambiguous, and something it does not know gets the nearest family, marked generic, instead of a made-up answer. The library is data in data/archetypes/ and grows with pull requests. It also knows the pieces an open world is made of: terrain tiles, mountains, islands, coasts, seas, lakes, rivers, biomes and settlements, with their own rules (tiles that share border heights, y = 0 as sea level, collision from the same heights, levels of detail, instanced scatter, a floating origin for very large worlds).

model lint --archetype <what> (or "archetype": "vehicle.wheeled.car" in a spec, or any built-in kind) holds a model against what identify says that thing is, as a fifth category, archetype, worth a fifth of the score:

Rule

What it catches

archetype/missing-part

a car without wheels, a helicopter without a rotor (parts are recognised by node name in English or Dutch)

archetype/part-count

two wheels on a car, five on a bicycle

archetype/pivot

a wheel not turning about its hub, a door not pivoting on its hinge line, a turret not on its base

archetype/wheel-axis

a wheel lying the wrong way

archetype/size

a model about 10 times too big or small, which is nearly always a unit mistake (it only flags a difference of more than 3 times, since the ranges are typical, not exact)

archetype/orientation

a car that points sideways instead of along z

archetype/optional-part

the usual parts that are not there (info)

Anything else is built from a model spec: a JSON tree of named parts (box, cylinder, ellipsoid, lathe, loft, extrude, roof) with at, rotate, mirror, repeat, variables and arithmetic expressions ("$width / 2 - 0.1", never executed as code). model spec explains the format and prints a small car as an example; model build --spec car.json --set width=1.9 builds it. Every moving part is its own node with its pivot at its origin (a wheel at its hub), and a spec that goes wrong gets a message with its path (nodes[0].children[2].size[1]: unknown variable $x).

Port Godot 3 scripts to Godot 4

godotwright migrate                 # shows every change it would make, and what still needs a hand
godotwright migrate --write         # applies them
godotwright review                  # what is still wrong, with line numbers

migrate rewrites the mechanical part of a port: export, onready and tool become annotations (with @export_range, @export_enum, @export_file and typed arrays where the hint is clear), renamed classes, functions, properties and constants get their Godot 4 names (only when the old name no longer exists in Godot 4 and is not defined in the script), yield(x, "sig") becomes await x.sig, connect("sig", target, "method", [binds]) becomes sig.connect(target.method.bind(...)), emit_signal and funcref become signals and callables, and members that moved (OS.get_ticks_msec()) move to their new class. Strings, comments and node paths are left alone. What it cannot do safely it lists with the line: setget, move_and_slide(velocity), remote func, export hints it does not know. Scenes and project settings are not touched; Godot's own --convert-3to4 does those. Commit first; a second run makes no further changes.

Cheaper fix loops: only what changed

godotwright review --only-new

Every review remembers its findings in .godot/godotwright/review-last.json (Godot projects ignore .godot/ in git). With --only-new (MCP: only_new: true) the next review prints the findings that are new since then in full, the ones you already saw as one short line each (file:line [rule]), and how many are fixed. A finding keeps its identity when its line moves. An agent fixing a long list reads the list once instead of after every edit.

Review in GitHub Actions

Save this as .github/workflows/godot-review.yml in your game repository. It reviews the project on every push and pull request, failing if there are errors or the overall score is below 80. The static review needs only Node.js 22.12+ (Node 24 below), not a Godot install, model or API key.

name: Review Godot project
on: [push, pull_request]
permissions:
  contents: read
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-node@v5
        with:
          node-version: 24
      - run: npx --yes github:laaielichter/godotwright#0dd9ce885df21fafefc09f8ddd6e92745d5ae303 review . --min-score 80

The toolkit is pinned to a revision; update that revision deliberately when you want a newer version. For a game in a subdirectory, set working-directory on the review step to the folder containing project.godot.

To see the findings inline on pull requests, upload the review as SARIF to GitHub code scanning (this needs security-events: write and the repository's code scanning enabled):

permissions:
  contents: read
  security-events: write
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-node@v5
        with:
          node-version: 24
      - run: npx --yes godotwright review . --sarif > godotwright.sarif || true
      - uses: github/codeql-action/upload-sarif@v4
        with:
          sarif_file: godotwright.sarif

Mods and patches over a game

A mod or patch often uses scripts, scenes and models that live in the game, not in the mod's folder. Point Godotwright at the game so they count as present:

godotwright review mod/ --base game/                       # the game's source folder
godotwright review mod/ --base-files game/pck-manifest.json # files the shipped .pck holds

or put it in godotwright.json in the mod's root (paths relative to that root):

{ "base": ["../game"], "baseFiles": ["../manifests/pck-files.json"] }

The game's classes, autoloads, input map and scenes are then known, the mod's own files win where both have the same path, and only the mod's files are reviewed. A file list is text with one path per line, or JSON (strings, or objects with a path, resource or file key); exported names such as x.glb.import and x.gdc map back to their source.

Install in your coding agent (MCP)

One step for each client. Every setup and one-click button is on the install page.

Client

How

Claude Code

Plugin with the MCP server and three skills: /plugin install godotwright --marketplace laaielichter/Godotwright

Claude Desktop

Download godotwright.mcpb and open it (from release 0.2.0)

Cursor

Add to Cursor (one click)

VS Code (Copilot)

Install in VS Code (one click)

Codex

codex mcp add godotwright -- npx -y godotwright mcp --tier premium

Gemini CLI

gemini extensions install https://github.com/laaielichter/Godotwright

Windsurf, Zed, others

JSON for your client

The Claude Code plugin adds /godotwright:review (review the project and fix what it finds), /godotwright:port (port Godot 3 code to Godot 4) and a Godot workflow Claude follows on its own. On Claude Code older than 2.1.275, run /plugin marketplace add laaielichter/Godotwright and then /plugin install godotwright@godotwright. Only the MCP server, without the skills:

claude mcp add godotwright -- npx -y godotwright mcp --tier premium

Codex can also read it from ~/.codex/config.toml:

[mcp_servers.godotwright]
command = "npx"
args = ["-y", "godotwright", "mcp", "--tier", "premium"]
startup_timeout_sec = 30 # the first npx run downloads the package

Run the agent from the Godot project folder, or pass --project <path> (or set GODOTWRIGHT_PROJECT). Pick a profile with --tier:

  • premium: full detail, all findings with fixes. Use it with large models.

  • cheap (the default): short output, and server instructions that walk a small model through checked steps (scan, look up, review before saving, review after each edit).

CI connects both Claude Code and Codex to the server on every push.

The 22 tools

Tool

What it does

godot_scan

Map the project: scenes and node trees, scripts, signals, autoloads, input map

godot_api

Exact Godot 4.7 lookup: signatures, inheritance, Godot 3 names

godot_api_search

Search the Godot 4.7 class reference

godot_review

AAA review with scores; also reviews unsaved code (code + file), or only what changed (only_new)

godot_checklist

Every AAA rule with its fix

godot_feedback

Mark a review finding as wrong or right, so later reviews learn from it

godot_usages

Every place a name or res:// path is used: code, scenes, connections, groups, settings

godot_rename

Rename a name or move a file everywhere at once, keeping connections, node paths and .uid files right

godot_project_edit

Change settings, input actions and autoloads in project.godot, touching only that entry

godot_scene_edit

Add or remove nodes, set properties, connect signals and attach scripts in a .tscn

godot_migrate

Rewrite Godot 3 GDScript to Godot 4 where that is mechanical, and list what is left

godot_check

Run Godot headless and report errors as file:line

godot_test

Run GUT or GdUnit4 tests headless; only what failed, with file:line

godot_play

Run a scene with an input timeline and return the values you watch per frame

godot_screenshot

Render a scene or a .glb to a PNG and say how much is drawn

godot_model_brief

One page before you build, for small models: the kind to start from, parts, size, rules and the order of tools

godot_model_identify

What a thing is: parts, pivots, typical size with its source, variants (English or Dutch)

godot_model_spec

The model spec format, an example and the ready-made kinds

godot_model_build

Build a clean .glb from a kind or a spec (inside the project), and lint it

godot_model_lint

Score a .glb; with archetype also check it is what it should be

godot_model_view

See a .glb as text: front, side and top views, parts with sizes, parts that do not touch

godot_model_inspect

What is in a .glb: nodes, triangles, textures, size

Learning

Godotwright learns from every use, on your machine:

  • Rules Godot keeps contradicting. After each check, it compares the review with what real Godot reported. When an error rule is contradicted 3 times here and never confirmed, its findings become warnings, marked as hints.

  • False alarms. godotwright learn feedback wrong "<finding line>" (or the godot_feedback MCP tool) hides that finding in later reviews.

  • API lookups. When a lookup finds nothing and the next one does, the next failed lookup of the same name says what it usually means.

Nothing leaves your machine unless you say yes. The learning file (godotwright learn shows where) holds counters, rule names, API names and message templates without names or paths; findings marked as wrong are stored as hashes.

godotwright learn          # status: what was learned, where the file is
godotwright learn off      # stop learning (or set GODOTWRIGHT_LEARN=0)
godotwright learn on
godotwright learn reset    # forget everything
godotwright learn preview  # the exact report sharing would send
godotwright learn share on # opt in: send anonymous counts once a day

Sharing helps every user: what many installs learn ships with later releases. It is off by default, sends no code, file names, paths or project names, and respects DO_NOT_TRACK. See PRIVACY.md. Set GODOTWRIGHT_HOME to keep the file somewhere else.

Godotwright also learns for free from public projects: every week the Learn workflow reviews the official Godot demos, and the same demos written for Godot 3, checks them with real Godot, and records which rules Godot confirmed or contradicted. That, plus what opted-in installs share, ships in data/learned.json: API hints for common typos, and rules Godot keeps contradicting. What your own machine saw wins: one confirmation by Godot keeps a rule an error.

Lessons from real builds also become rules. LESSONS.md is an anonymised reflection on one large build (no code, no project names); each lesson says whether Godotwright checks it, and the ones that can be checked, like slow motion that is never undone, are review rules.

For maintainers, godotwright collector serve accepts reports (checked again, stored without IP addresses), and godotwright collector aggregate <dir> --out data/learned.json sums them, keeping only what at least 3 installs reported. godotwright collector projects <dirs...> learns from public projects.

Benchmark

bench/ runs coding agents on fixed Godot tasks with and without Godotwright, and lets real Godot 4.7.2 judge the result with a behavior test per task. First round (168 runs, Claude Haiku, Sonnet and Opus 5.5, 12 tasks): every run passed, with and without Godotwright, so these tasks do not separate the setups on correctness. With Godotwright, all code came out fully statically typed (84 of 84 runs, against 71 of 84 without). Details and limits: bench/RESULTS.md.

How it compares

Godotwright

Agent on its own

Godot editor

Godot 4.7 API

bundled class reference, offline

from training data

built in

Flags Godot 3 code with the fix

yes

sometimes

parse errors only

Usable by the agent itself

MCP + CLI

n/a

needs a human

Performance and structure review

scored per category

no

warnings only

Needs Godot installed

only for check

no

yes

Does not

write your game, replace playtesting, review C#

run Godot

talk to agents

FAQ

Does it need Godot installed? No for scan, api and review. Only check runs Godot 4.7 headless.

Which agents does it work with? Any agent that speaks MCP over stdio. CI connects Claude Code and Codex on every push. The CLI works from any shell.

Does it send my code anywhere? No. See Learning and PRIVACY.md.

Older Godot 4 versions? Most findings apply to every Godot 4 version, but API lookups answer for 4.7.

Contributing

Wrong review findings and ideas for new rules are the most useful reports. See CONTRIBUTING.md.

Requirements

  • Node.js 22.12 or newer

  • Target engine: Godot 4.7.x

Development

npm ci
npm run check
node dist/cli.js --help

See AGENTS.md for project conventions.

Support

Godotwright is free and open source. If it saves you or your agent time, a gift is welcome but never expected. SOL and any token on Solana (such as USDC) can be sent to:

  • Solana: BDRA7dHGBYtPsZPNzVQccDYZ8BqstJGCsWx3kopPSCDK

Gifts go to new model credits to keep building and improving Godotwright, and to work on better working conditions and wellbeing for large language models, neural networks and agents. In the future they will also go to a better environment for AI.

License

MIT

Available Tools

22 tools
godot_apiLook up the Godot 4.7 APIA

Exact lookup in the official Godot 4.7 class reference, offline: Class, Class.member, Class.Enum.VALUE, @annotation or a global function. A class gives its parents, properties with defaults, methods, signals and enums; a member gives its exact signature and description, found through inheritance. Use it before calling any engine API you are not sure about; when you do not know the exact name, use godot_api_search first. detail brief gives the signature and the first paragraph; full gives the whole entry. An unknown name returns an error with close matches, and a Godot 3 name with its Godot 4 name. It changes no project files; when learning is on, it counts the lookup in Godotwright's local learning file so later misses get better hints (GODOTWRIGHT_LEARN=0 turns that off).

NameRequiredDescriptionDefault
queryYese.g. CharacterBody2D.move_and_slide, Node.ready, @export_range, lerp, Tween
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, it discloses offline behavior, per-query-type return shapes, that member lookup resolves through inheritance, that unknown names return an error with close matches, and that Godot 3 names are mapped to their Godot 4 equivalents. It also honestly discloses the side effect — a lookup is written to a local learning file unless GODOTWRIGHT_LEARN=0 — which reconciles the 'changes no project files' claim with readOnlyHint=false.

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 lookup target and the sibling routing are front-loaded, and the paragraph moves logically from input forms to output shapes to error behavior to side effects. It is dense but every sentence carries information; the learning-file clause is the one piece that could be relegated to a shorter parenthetical.

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 covers return values for each query type, error behavior, and the only meaningful side effect. Nothing an agent needs in order to call this correctly and interpret the result 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; the description goes slightly beyond by explaining what the two `detail` levels actually contain ('brief gives the signature and the first paragraph; full gives the whole entry'), clarifying the enum's practical effect. It adds modest value but does not elaborate on formatting or escaping of the `query` string, which the schema examples already cover.

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 — 'Exact lookup in the official Godot 4.7 class reference, offline' — and enumerates the accepted query forms (Class, Class.member, Class.Enum.VALUE, @annotation, global function). It explicitly contrasts with the sibling godot_api_search, so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use rule ('Use it before calling any engine API you are not sure about') and routes the agent to the alternative when the exact name is unknown ('use godot_api_search first'). Both the trigger and the fallback condition are stated outright.

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

godot_checkCheck with real GodotA
Idempotent

Run Godot 4.7 headless on the project: import, load and instantiate every script and scene, and optionally run the main scene (or the scene you name) for run_frames frames and return what it printed. Reports engine errors as res://file:line. Put print() calls in the code you are testing and read them back here. run_frames defaults to 0 (load only), or 120 when you pass scene; timeout_seconds caps each Godot run. Returns the errors and warnings with file:line, the totals and the printed output; an error result when Godot reports an error or is not installed. Your scenes and scripts are not changed: Godot updates its import cache in .godot/, where Godotwright also puts its checker script. Needs Godot on this machine and is slower than godot_review, so review first. To drive input and watch values use godot_play; for unit tests use godot_test.

NameRequiredDescriptionDefault
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
sceneNorun this scene (a res:// path) instead of the main scene
run_framesNoalso run the main scene for this many frames and return its output (default 0; 120 when scene is given)
timeout_secondsNotimeout per Godot run (default 600)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond annotations: discloses side effects ('Godot updates its import cache in .godot/, where Godotwright also puts its checker script'), reassures 'your scenes and scripts are not changed', states timeouts cap each run, and describes the error result when Godot errors or is missing. This is consistent with readOnlyHint=false and rich enough that the agent knows what it will leave behind.

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 with the core action, then defaults, then return values, then prerequisites and alternatives. Every sentence earns its place; it is a touch long and packs a lot of clauses into single sentences, but nothing is redundant.

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 return values (errors/warnings with file:line, totals, printed output, error result), side effects on .godot/, prerequisites, cost relative to siblings, and alternative tools. With no output schema, the description fully carries the burden for a tool that shells out to an external engine.

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 meaning the schema lacks: the conditional default ('run_frames defaults to 0, or 120 when you pass scene') and how timeout_seconds applies ('caps each Godot run'). Minor gap: it doesn't explain res:// path semantics for scene, but the schema covers 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?

States a specific verb and resource ('Run Godot 4.7 headless on the project') and enumerates exactly what that entails: import, load/instantiate every script and scene, optionally run a scene for N frames, return printed output. An agent can distinguish it from godot_review, godot_play and godot_test purely from the description.

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 and when-not: 'review first' with godot_review, use godot_play to drive input and watch values, use godot_test for unit tests. Also flags the prerequisite ('needs Godot on this machine') and relative cost ('slower than godot_review'). 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.

godot_checklistAAA checklistA
Read-onlyIdempotent

List the fixed AAA checklist that godot_review applies: plain text grouped by category (api, performance, quality, structure), one line per rule with its fix (on the premium profile also its id and severity). Read it before writing code to know the rules, or to look up a rule id from a finding. It does not look at the project; to check the project against these rules, use godot_review. Read-only.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description reinforces this with 'Read-only'. It adds genuinely new context the annotations cannot carry: the output format, the category grouping, the per-line rule+fix shape, and the premium-profile variation that adds id and severity.

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 tight paragraph that front-loads what is returned, then when to read it, then the sibling redirect, then the read-only note. Every sentence adds distinct information 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?

With no parameters, no output schema, and simple annotations, the description fills exactly the gaps that matter: the return format, the category grouping, the premium-profile difference, and the boundary against godot_review. An agent can select and call it correctly from this text alone.

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, so the baseline is 4. The description correctly describes no inputs and instead spends its words on output shape, which is the only semantic a caller needs 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 and resource ('List the fixed AAA checklist that godot_review applies') and immediately characterizes the payload (plain text grouped by category, one line per rule with its fix). It is unambiguous against the sibling godot_review, which it explicitly names as the tool that checks a 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?

Gives two concrete use cases ('before writing code to know the rules', 'look up a rule id from a finding') and an explicit exclusion plus redirect ('It does not look at the project; to check the project against these rules, use godot_review'). 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.

godot_feedbackFeedback on a review findingA

Tell Godotwright that a godot_review finding was wrong (a false alarm you verified) or right. finding is the line exactly as godot_review printed it; verdict wrong hides that finding in later reviews on this machine, right counts it as confirmed. Both teach Godotwright which rules to trust. Only use it after checking the code (godot_api, godot_check); fix real findings instead of marking them. It writes to the local learning file only (godotwright learn reset forgets everything). Returns a one-line confirmation; an error when the line is not a finding or learning is off.

NameRequiredDescriptionDefault
findingYesthe finding line, e.g. res://player.gd:12: error [api/unknown-member] ...
verdictYes

TDQS

A5/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: wrong hides the finding in later reviews on this machine, right counts it as confirmed, and both teach the local learning system. It also discloses the local-file write scope, reset behavior, return format, and error conditions, which is strong transparency for a non-read-only 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 dense but front-loaded and free of filler. Each sentence carries useful information: purpose, parameter meaning, side effects, usage conditions, reset behavior, and return/error 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?

For a two-parameter mutation tool with no output schema, the description covers everything an agent needs: what it does, when to use it, what each verdict changes, where data is written, how to undo it, and what the response or error looks like.

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

Parameters5/5

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

Although schema coverage is only 50%, the description fully explains both parameters. It clarifies that `finding` is the exact line as godot_review printed it, and it explains what each `verdict` value does, adding meaning well beyond the enum and schema example.

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, resource, and effect: tell Godotwright that a godot_review finding was wrong or right. It explicitly names the related sibling godot_review and distinguishes the feedback role from code-checking siblings like godot_api and godot_check.

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: only after checking the code with godot_api or godot_check, and fix real findings instead of marking them. It also explains the consequences of each verdict, which routes the agent correctly between marking wrong versus right.

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

godot_migratePort Godot 3 scripts to Godot 4A
DestructiveIdempotent

Rewrite Godot 3 GDScript to Godot 4 where that is mechanical: @export/@onready/@tool, renamed classes, functions, properties and constants, yield() to await, connect()/emit_signal() to signals, funcref() to callables, members that moved (OS.get_ticks_msec() to Time). Strings, comments and node paths are left alone. Without write it only reports the changes; with write: true it rewrites the scripts. It also lists what still needs a hand (setget, move_and_slide arguments, rpc keywords, export hints it does not know). Scenes and project settings are not migrated; Godot's --convert-3to4 does those. files limits it to some res:// scripts; detail brief shows up to 12 changes per file, full shows every change. Running it twice changes nothing more. Use it before fixing Godot 3 findings from godot_review one by one, and run godot_review afterwards.

NameRequiredDescriptionDefault
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
filesNoonly these res:// scripts
writeNorewrite the scripts on disk (default false: report only)
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is largely carried by structured data. The description still adds real value on top: the no-write report-only default, the idempotency guarantee ('running it twice changes nothing more'), and the explicit list of what it deliberately leaves for manual fixes. It stops short of describing output shape or failure behavior, so this is solid but not exceptional given the annotation coverage.

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 mechanical-rewrite scope comes first, then behavior, then scope limits, then usage ordering. Every sentence carries information, though the run is long and several clauses could be tightened into a list without losing meaning.

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, and the description compensates fully: it says the tool reports changes, lists what still needs a hand (setget, move_and_slide arguments, rpc keywords, unknown export hints), and explains how `detail` shapes the report. 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. The description adds genuine meaning beyond the schema: 'write: true' rewrites scripts while omission only reports, `files` narrows to res:// scripts, and `detail` brief caps at 12 changes per file versus full showing everything.

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 (rewrite/migrate) and resource (Godot 3 GDScript to Godot 4), then enumerates the exact constructs handled and explicitly excludes strings, comments, node paths, scenes and project settings. An agent can tell it apart from godot_review, godot_rename, or Godot's own --convert-3to4 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 ordering guidance: use it before fixing Godot 3 findings from godot_review one by one, and run godot_review afterwards. It also names the alternative for out-of-scope work (--convert-3to4 handles scenes and project settings) and states the dry-run default versus write:true.

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

godot_model_briefBriefing before you build a modelA
Read-onlyIdempotent

One page to read before building a 3D model, made for small models: what the thing is, the ready-made kind to start from (with its build command), the parts to name your nodes after, typical size, rules, the usual mistakes, the order of tools to call, and a short spec cheat sheet. text is a name or a short description in English or Dutch; typos and plurals work. Replaces calling godot_model_identify and godot_model_spec separately when you just want to start; call those instead when you need every detail (all variants and sizes, or the full spec). Returns plain text. Read-only.

NameRequiredDescriptionDefault
textYeswhat you want to make, e.g. 'a rowing boat', 'dragon', 'castle wall'

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely new behavior: it returns plain text, targets small models, is fuzzy-tolerant ('typos and plurals work', English or Dutch), and covers both identify and spec in one call. 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.

Conciseness4/5

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

The content inventory is front-loaded and the fallback routing comes after, which is the right order. The enumeration of eight briefing sections is dense but each item tells the agent what to expect; it is one long sentence-heavy block but 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?

With no output schema, the description correctly explains that the return is plain text and inventories what that text contains, so an agent knows what to do with the result. Input tolerance and sibling routing are also covered; nothing needed 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% and the schema example already illustrates the single `text` parameter, so the baseline is 3. The description goes beyond it by stating the parameter accepts a name or short description, that typos and plurals still resolve, and that Dutch is accepted — information absent from 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 states exactly what the tool returns — a one-page pre-build briefing — and enumerates its contents (what the thing is, ready-made starting kind with build command, node names, typical size, rules, common mistakes, tool order, spec cheat sheet). It explicitly distinguishes itself from godot_model_identify and godot_model_spec, so an agent can pick it 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?

It gives both sides of the decision: use this when you just want to start, and call godot_model_identify / godot_model_spec instead when you need every detail (all variants and sizes, or the full spec). The alternative and the condition that selects it are named explicitly.

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

godot_model_buildBuild a 3D model from codeA
DestructiveIdempotent

Build a clean .glb (UVs, tangents, one node per part, same bytes every time) from a ready-made kind or a model spec, write it to out, and lint it. Pass collision so Godot adds collision shapes when it imports the file (most models need one; nobody remembers to add it by hand). If the spec has an "archetype" (or the kind has one), the result is also checked against what that thing should be. Give kind (with optional params), spec or spec_file; contract_out also writes a model.contract.json that godot_model_lint can hold later versions to. out is replaced if it exists. Returns the size, triangle and node count, then the lint report (detail full lists every finding with its fix); an error result when the lint finds errors, though the file is still written. Call godot_model_identify first and godot_model_spec for the format. To check a .glb you did not build here, use godot_model_lint.

NameRequiredDescriptionDefault
outYeswhere to write the .glb, inside the project, e.g. models/car.glb
kindNoa ready-made kind: house, terrain, sea, airliner, apartment, barn, barrel, bicycle, boat, bridge, bus, bush, campfire, car, castle, chair, church, conifer, crate, dragon, drone, fence, fighter, flower, grass, helicopter, horse, humanoid, jet-engine, light-aircraft, motorcycle, palm, piston-engine, power-pylon, railway-track, road, rocket, rowing-boat, sailboat, satellite, ship, shipping-container, spaceship, street-lamp, table, tank, tower, tractor, train, tree, truck, wind-turbine, windmill
specNoa full model spec as a JSON object
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).
paramsNoparameter values, e.g. { width: 9, roof: 'hip' }
collisionNocollision for Godot: convex (a hull per mesh on import, for props and vehicles), trimesh (exact triangles on import, for buildings), or heightmap (terrain tiles: writes <name>.heightmap.tres and <name>.tscn with a StaticBody3D, faster than trimesh)
spec_fileNoor a path to a spec JSON file inside the project
contract_outNoalso write a model.contract.json here (inside the project)

TDQS

A4.6/5.0
Behavior4/5

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

Adds genuinely non-obvious behavior beyond the destructive/idempotent annotations: `out` is replaced if it exists, builds are byte-stable, heightmap collision writes extra .tres/.tscn files, and an error result still leaves the file on disk. The one gap is that it doesn't say what specifically the lint errors imply for downstream use, but the critical surprise (file written on error) is disclosed.

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

Conciseness4/5

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

Front-loaded with the core action and tightly packed with useful constraints. Some parenthetical asides ('nobody remembers to add it by hand') and the run-on sentence about returns and error results add length without adding information, but nothing is redundant with the schema.

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

Completeness5/5

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

With no output schema, the description must describe return values — it does (size, triangle and node count, then the lint report, with `detail` controlling verbosity). For a destructive, multi-input build tool, the description covers inputs, outputs, side effects, and escalation paths.

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 earns extra by explaining the mutual-exclusivity of `kind`/`spec`/`spec_file` (not expressed in the schema, which only requires `out`) and by giving the purpose of `collision` and `contract_out` rather than restating their 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?

Opens with a specific verb+resource (build a .glb from a kind or spec) plus the three side effects: write to `out`, lint it, optionally write a contract. It also explicitly carves out its boundaries against siblings, pointing to godot_model_lint for .glb files built elsewhere.

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 concrete routing rules: call godot_model_identify first, godot_model_spec for the format, godot_model_lint for files not built here. It also states the input alternatives (kind + optional params, or spec, or spec_file) so the agent knows which path to take.

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

godot_model_identifyWhat is this thing?A
Read-onlyIdempotent

Say what a thing is before you build or check a 3D model of it: its family, the parts a model needs (and which move, about which axis, with the pivot where), a typical size range with its source and a confidence class, variants, Godot conventions (+Y up, front faces +Z), what to anticipate and the usual mistakes. Works from a name in English or Dutch (plurals, typos, compounds like 'vrachtauto') or a description ('something with wheels and an engine'). A word that means two things is reported as ambiguous; something unknown gets the nearest family, marked generic. Use it for the full facts about a thing, and its archetype name for godot_model_lint; for one short page that also names the ready-made kind and the spec format, use godot_model_brief instead. Read-only.

NameRequiredDescriptionDefault
textYeswhat you want to make or check, e.g. 'a tractor', 'helikopter', 'wind turbine'

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so safety is covered; the description redundantly says 'Read-only' but adds genuine behavior: ambiguous words are reported as ambiguous, unknown things return the nearest family marked generic, and input tolerates English/Dutch plurals, typos and compounds. It does not describe output shape or latency, keeping it short of 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?

Front-loaded with the core action and the returned content, then the alternative routing, then input flexibility. It is a long dense sentence-chain, but nearly every clause carries routing or behavioral information; only the trailing 'Read-only' is wasted given annotations.

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, so the description carries the return-value burden, and it does: family, required parts with movement/axis/pivot, size range with source and confidence class, variants, conventions, pitfalls. With one fully documented parameter and clear sibling routing, an agent has everything needed to call and interpret 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 100% and the single schema description already gives examples ('a tractor', 'helikopter'), so the baseline is met by the schema. The description adds value by clarifying accepted input forms (English or Dutch, plurals, typos, compound words, or a freeform description like 'something with wheels and an engine'), which the schema does not.

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 ('say what a thing is') and enumerates exactly what it returns: family, parts, movement axes, pivots, size range with source and confidence, variants, Godot conventions. It explicitly distinguishes itself from godot_model_lint and godot_model_brief, so the agent can route without opening sibling 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?

Explicit when-to-use ('before you build or check a 3D model', for full facts) and names alternatives with the condition that selects them: godot_model_lint for the archetype name, godot_model_brief for a short page naming the ready-made kind and spec format. 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.

godot_model_inspectInspect a 3D modelA
Read-onlyIdempotent

Show what is in a .glb or .gltf, without Godot: file size, triangles, nodes, materials, textures with a memory estimate, the size in metres and the lowest point, then the node tree with triangles per mesh. detail brief lists the first 40 nodes; full lists every node, the materials and the textures. Use it for the numbers, for example to check a triangle budget or why a model floats. Read-only. To see the shape use godot_model_view; to find problems use godot_model_lint.

NameRequiredDescriptionDefault
fileYesPath to a .glb or .gltf file, inside the project.
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/destructive=false, so the 'Read-only' line is redundant, but the description adds real behavioral detail: what `detail` changes at output level (first 40 nodes vs every node, plus materials and textures) and what estimates are produced. It doesn't describe pagination or output shape, which is a minor gap.

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: what it returns, then the detail modes, then use cases, then alternatives. Slight redundancy with 'Read-only' repeating the annotation and a run-on inventory sentence, but 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?

With no output schema, the description carries the return-value burden and does so by naming every reported field and how detail level affects them. For a 2-parameter read-only inspection tool, an agent has everything needed to call it and interpret results.

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

Parameters4/5

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

Schema coverage is 100%, so the enum is already documented, but the description adds concrete meaning beyond it — the 40-node cap for `brief` and the fact that `full` also emits materials and textures. The default (full) is only in the schema, so it's slightly short of a 5.

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 ('Show what is in a .glb or .gltf') and enumerates the exact outputs: file size, triangles, nodes, materials, textures with memory estimate, bounds in metres, lowest point, and per-mesh node tree. It is unmistakably distinct from siblings like godot_model_view or godot_model_lint.

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 concrete triggering scenarios ('check a triangle budget or why a model floats') and explicitly routes to alternatives: godot_model_view for shape, godot_model_lint for problems. The when-to-use and when-not-to-use are both covered.

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

godot_model_lintReview a 3D modelA
Read-onlyIdempotent

Score a .glb or .gltf without Godot: flipped faces, open edges, missing normals, UVs or tangents, textures, node names, budgets. Pass archetype (a name such as 'car' or 'helikopter', or an id) to also check it is what it should be: required parts, pivots, wheel axes, size (unit mistakes), direction. Pass contract to hold it to a model.contract.json, and max_triangles to flag a heavy model. Returns an overall score, a score per category (geometry, materials, performance, rig, and archetype when given) and the findings: detail brief shows up to 25 errors and warnings, full shows every finding with its fix. An error result when there are errors. Read-only. godot_model_build already lints what it builds; to see the shape use godot_model_view, for the raw contents godot_model_inspect.

NameRequiredDescriptionDefault
fileYesPath to a .glb or .gltf file, inside the project.
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).
contractNoa model.contract.json inside the project
archetypeNowhat the model should be, e.g. car, helikopter, vehicle.wheeled.car
max_trianglesNoflag a model with more triangles than this

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds real value: it describes the return shape (overall score, per-category scores, findings), the brief vs full detail behavior, and the fact that an error result is returned when errors exist. The only redundancy is restating 'Read-only', which duplicates readOnlyHint=true.

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 and scope, and every clause carries information. It is dense — long comma-separated enumerations and a packed final routing sentence — but nothing is genuinely wasteful.

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 5-parameter read-only lint tool with no output schema, the description supplies the missing pieces: what is checked, what the optional parameters unlock, what is returned, how detail affects output volume, and when errors surface. An agent can call this correctly without opening any other 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?

Schema coverage is 100%, so baseline is 3, but the description goes further by explaining what archetype actually checks (required parts, pivots, wheel axes, size/unit mistakes, direction) and that archetype accepts a name or an id. That is meaning beyond the schema's bare 'what the model should be, e.g. car, helikopter'.

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 ('Score a .glb or .gltf') and immediately enumerates what is inspected: flipped faces, open edges, normals, UVs, tangents, textures, node names, budgets. It also differentiates itself from siblings by naming godot_model_build, godot_model_view and godot_model_inspect in the same breath.

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 routing: build already lints what it builds, use godot_model_view for shape and godot_model_inspect for raw contents. It also states the conditions for the optional parameters (archetype to check it is what it should be, contract to hold it to model.contract.json, max_triangles to flag a heavy model).

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

godot_model_specModel spec formatA
Read-onlyIdempotent

Explain the model spec: a JSON tree of named parts that godot_model_build turns into a .glb. Returns plain text: the spec rules, a JSON example (a small car), then one line per ready-made kind with its parameters and their defaults. Read it before you write a spec or pass params to godot_model_build; skip it when a ready-made kind with its defaults is enough. godot_model_brief has a shorter cheat sheet. Read-only.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, closed-world behavior, so the safety profile is covered. The description adds substantive context beyond that: it discloses the exact return format (rules, a small-car JSON example, one line per kind with defaults), which is valuable since there is no output schema. 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?

Three compact sentences, front-loaded with the core purpose, then return shape, then usage routing and alternatives. Every sentence carries distinct value 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 zero-parameter, read-only educational tool with no output schema, the description covers purpose, output content, when to call it, when to skip it, and the lighter sibling alternative. Nothing an agent needs to select or use 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, so the baseline is 4. The description does clarify that the output documents each ready-made kind's parameters and defaults, which helps an agent understand what spec/param information it will get, though there are no tool arguments to explain.

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 — 'Explain the model spec' — and defines what the spec is: 'a JSON tree of named parts that godot_model_build turns into a .glb.' This distinguishes it from godot_model_build (the consumer) and godot_model_brief (the shorter cheat sheet) without requiring 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 explicit when-to-use ('Read it before you write a `spec` or pass `params` to godot_model_build') and when-to-skip ('skip it when a ready-made `kind` with its defaults is enough'). It also names the lighter alternative sibling, godot_model_brief, 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.

godot_model_viewSee a 3D model as textA
Read-onlyIdempotent

Look at a .glb or .gltf without Godot or a picture: three views (front, side, top) drawn with letters, one letter per part, then a list of the parts with their sizes and heights, and which parts do not touch the rest of the model (a ladder away from its tree, a wheel without an axle, something floating). only shows one of the views; width sets the characters per view (default 48). Use it after building to check the shape, proportions and that everything is attached. Read-only. For a rendered picture use godot_screenshot (needs Godot); for triangles, materials and textures use godot_model_inspect; for problems use godot_model_lint.

NameRequiredDescriptionDefault
fileYesPath to a .glb or .gltf file, inside the project.
onlyNoshow one view only
widthNowidth of the views in characters (default 48)

TDQS

A4.4/5.0
Behavior4/5

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

The description adds substantial behavior beyond the annotations: it discloses that no Godot install or image is needed, what the output contains (per-part letters, sizes, heights, floating/detached-part detection), and restates "Read-only" consistently with readOnlyHint=true. It slightly repeats what the annotations already declare rather than adding new safety/permission context, which keeps it off 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?

The first clause front-loads the core purpose and the output description follows; nearly every sentence earns its place, including the routing sentence. It is dense and slightly run-on with the parenthetical examples ("a ladder away from its tree"), which costs a point but not 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?

With no output schema, the description compensates by describing the returned content in detail (three views, parts list with sizes and heights, detached-part detection). For a read-only, 3-parameter inspection tool it gives an agent everything needed to call it and interpret the result.

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 file, only, and width are already documented with types, enum, bounds and default. The description's "`only` shows one of the views; `width` sets the characters per view (default 48)" essentially mirrors the schema wording, so baseline 3 applies — it does not add format or edge-case semantics the schema lacks.

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: viewing a .glb/.gltf file without Godot or an image, rendered as three letter-drawn views plus a parts list. It fully describes the output shape and explicitly distinguishes itself from godot_screenshot, godot_model_inspect and godot_model_lint by naming what each of those does 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?

Gives an explicit triggering condition ("Use it after building to check the shape, proportions and that everything is attached") and routes three alternatives with their distinguishing conditions — rendered picture vs. triangles/materials/textures vs. problem reporting. Nothing about when to pick this tool 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.

godot_playPlay a scene with inputA
Idempotent

Run a scene in Godot 4.7 headless for a number of physics frames, press and release input actions (or keys, mouse and joypad buttons) on the frames you give, and return a table of the values you watch per frame, plus errors and prints. The game sees each input on exactly that physics frame, and runs are deterministic. input steps are a frame, a verb (press, release, tap, or hold with a frame count) and an action or an event such as Key:Space; watch entries are a node path from the scene root, a dot, then a property or a method call; every sets how often values are sampled. Use it to check that the player jumps, moves, takes damage or that a timer fires, without a screen. An error result when the run does not finish or Godot reports an error; an unknown input action gives a warning. Your scenes and scripts are not changed: Godotwright runs it through a temporary script in .godot/godotwright/ and removes it afterwards. For assertions kept in the project use godot_test; for load errors use godot_check.

NameRequiredDescriptionDefault
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
everyNosample every n frames (default 10); frames with input and the last frame are always sampled
inputNotimeline: "10 press jump; 30 release jump; 40 hold right 20; 50 tap Key:Space"
sceneNothe res:// scene to run (default: the main scene)
watchNovalues to sample: Player.position, Player.velocity.y, Player.is_on_floor()
framesNophysics frames to run (default 120)
timeout_secondsNotimeout of the run (default 300)

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: input is seen on exactly the given physics frame, runs are deterministic, an error result means the run did not finish or Godot reported an error, while an unknown action only warns. It also explains why readOnlyHint=false is safe here — the project is unmodified and the temporary script in .godot/godotwright/ is removed afterwards.

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 and return value, then parameters, then use cases, then sibling routing — a sensible progression. It is dense but nearly every sentence carries information; a slightly tighter split into shorter sentences would help scanning.

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

Completeness5/5

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

For a complex multi-parameter simulation tool with no output schema, the description covers the return value (per-frame table plus errors and prints), failure semantics, determinism, and side effects on disk. An agent has everything needed to call it and interpret results.

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

Parameters4/5

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

Schema coverage is already 100%, but the description still adds meaning: the `input` timeline grammars are (frame, verb press/release/tap/hold with count, action or event like Key:Space), `watch` entries are node path + dot + property or method call, and `every` controls sampling cadence. Useful reinforcement rather than pure repetition.

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 concrete verb-resource pair: run a res:// scene headless in Godot 4.7 for N physics frames, inject input on specific frames, and sample watched values per frame. It is clearly distinguishable from godot_test (in-project assertions) and godot_check (load errors), which it names explicitly.

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 concrete when-to-use cases (verify the player jumps, moves, takes damage, a timer fires — without a screen) and explicit alternatives with the selection condition: godot_test for assertions kept in the project, godot_check for load errors. Nothing is left to inference about routing.

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

godot_project_editChange project settings, input map or autoloadsA
Destructive

Change project.godot safely, without the editor: set or unset a setting (name and type checked against the Godot 4.7 reference), add events to an input action or remove it, add or remove an autoload (the file must exist and be a Node script or a scene; the name must not clash with a class). Only the lines of that entry change. Events: Key:Space, Key:Ctrl+S, Mouse:Left, JoyButton:A, JoyAxis:left_y-. op picks the change and which fields it needs: set (key, value), unset (key), input_add (action, events, deadzone), input_remove (action), autoload_add (name, file, global), autoload_remove (name). Without write it changes nothing and returns the diff and warnings; with write: true it writes and reports the review errors before and after (an error result when there are more after). A missing field or a change it refuses (bad event, unknown action, name clash) returns an error and writes nothing. Use it instead of editing project.godot by hand: the input map format is easy to break. For .tscn files use godot_scene_edit; to rename an action or autoload everywhere, use godot_rename.

NameRequiredDescriptionDefault
opYeswhat to change
keyNoset/unset: the setting path, e.g. display/window/size/viewport_width
fileNoautoload_add: res:// path of the script or scene
nameNoautoload_add/autoload_remove: the autoload name, e.g. Game
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
valueNoset: the value, e.g. 1920, true, 1.5, a text, res://main.tscn or Vector2i(1920, 1080)
writeNowrite the change (default false: show the diff only)
actionNoinput_add/input_remove: the action name, e.g. jump
eventsNoinput_add: events such as Key:Space, Mouse:Left, JoyButton:0, JoyAxis:1-
globalNoautoload_add: make a global variable (default true)
deadzoneNoinput_add: deadzone of a new action (default 0.2)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false): it discloses the dry-run default, that only the lines of that entry change, that refusals and missing fields return an error and write nothing, and that with write it reports review errors before and after with an error result if errors increase. This is exactly the mutation-safety context annotations 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?

Front-loaded with the safety model and the tool's scope before the dense op/field enumeration. Every sentence carries information, though the middle section is a long run-on that would read better as a list.

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

Completeness5/5

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

For an 11-parameter destructive mutation with no output schema, the description covers what is returned in both modes (diff, warnings, before/after review errors), what happens on failure, and the validation rules for every op. Nothing an agent needs to call it 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 baseline is 3, but the description adds the op-to-field dependency mapping (set/key+value, input_add/action+events+deadzone, autoload_add/name+file+global) that the schema only implies, plus event string syntax with concrete examples. It does not restate path/write defaults, which the schema already covers.

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 (edit project.godot: settings, input map, autoloads) and immediately names the boundaries against siblings godot_scene_edit and godot_rename. An agent can distinguish this from every other godot_* tool 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 says to use it instead of hand-editing project.godot because the input map format is easy to break, and routes .tscn work to godot_scene_edit and renaming to godot_rename. The dry-run-first workflow ('without write it changes nothing and returns the diff') is also spelled out as guidance.

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

godot_renameRename everywhereA
Destructive

Rename a function, signal, variable, class_name, autoload, input action, group or node name everywhere it is used (GDScript, scene connections, node paths, groups, project settings), or move a res:// file together with its .uid and .import files and every reference to it. from and to are both names or both res:// paths. Without write it changes nothing and returns the exact lines it would change and what it could not change; with write: true it applies them and reports the review errors before and after (an error result when there are more after). Refuses, with an error, when the new name is already taken. Call godot_usages first to see what it will touch. For a setting value, an input event or a node property, use godot_project_edit or godot_scene_edit instead.

NameRequiredDescriptionDefault
toYesthe new name, or the new res:// path
fromYesthe current name, or a res:// path
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
writeNoapply the rename (default false: show the plan only)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: default is a no-op dry run returning the exact lines that would change and what could not change; write:true applies and reports review errors before and after, erroring when post-count exceeds pre-count; it refuses when the new name is taken. This is consistent with destructiveHint=true and readOnlyHint=false (the danger only materializes under write:true).

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: the rename surface comes first, then the file-move mode, then dry-run/write behavior, then the safety refusal and sibling routing. Individual sentences are long and clause-heavy, but nothing is redundant.

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 carries the return-value burden and does so fully: exact changed lines, unchangeable locations, and before/after review errors. For a destructive, non-idempotent rewrite tool, an agent has everything needed to call it safely.

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 express: 'from and to are both names or both res:// paths,' and it clarifies write's semantics (default false = plan only). Path's project-root resolution is left to 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 (rename) plus the full resource surface (functions, signals, variables, class_name, autoloads, input actions, groups, node names) and a second mode (moving a res:// file with .uid/.import and references). This is enough for an agent to distinguish it from godot_project_edit and godot_scene_edit 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 routes the agent: 'Call godot_usages first to see what it will touch' and 'For a setting value, an input event or a node property, use godot_project_edit or godot_scene_edit instead.' Both the when and the when-not-with-alternative are named.

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

godot_reviewAAA reviewA

Static AAA review of the project, no Godot needed: API correctness (Godot 3 code, unknown classes, functions, members, signals, wrong argument counts, missing input actions), performance, code quality and structure. Returns a 0-100 score per category, then one line per finding: res://file.gd:12: error [rule] message; detail full adds the fix under each finding. Pass files to list only findings in files you changed. Pass code and file to review GDScript before writing it to disk. Pass only_new: true while you are fixing: new findings in full, the ones you already saw as one short line each, and how many are fixed. It never changes your code; it keeps the last review in .godot/godotwright/ for only_new and counts rule hits in the local learning file. For errors only the engine finds, run godot_check after it; godot_checklist lists every rule.

NameRequiredDescriptionDefault
codeNounsaved GDScript to review in place of the file on disk
fileNores:// path the code belongs to (required with code)
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
filesNoonly show findings in these res:// files
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).
only_newNoshow only what changed since the last review of this project (saves tokens in a fix loop)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false/destructiveHint=false; the description goes further, disclosing that it never mutates code but does persist side effects — the last review in .godot/godotwright/ and rule-hit counts in a local learning file. That is exactly the kind of state-change detail annotations 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?

Purpose and output shape are front-loaded and nearly every clause carries information (side effects, output format, sibling routing). It is dense to the point of being run-on and slightly harder to scan than it needs to be.

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 takes on the return-format burden and delivers: a 0-100 score per category plus the exact `res://file.gd:12: error [rule] message` line format. For a six-parameter, stateful review 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 baseline is 3, but the description adds usage-level meaning the schema lacks: `files` targets changed files, `code`+`file` reviews unsaved GDScript, `only_new` collapses already-seen findings and reports a fixed count, and `detail: full` inlines fixes. Only `path` is left entirely to 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 — 'Static AAA review of the project, no Godot needed' — and enumerates exactly what it checks (API correctness, performance, quality, structure). It explicitly distinguishes itself from siblings: godot_check handles 'errors only the engine finds' and godot_checklist 'lists every rule.'

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 concrete when-to-use modes: pass `files` for changed files, `code` + `file` to review GDScript before writing to disk, `only_new: true` during a fix loop. It also names the complementary alternative (godot_check) and when to escalate to it.

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

godot_scanMap the Godot projectA
Read-onlyIdempotent

Map a Godot 4 project from its files, without running Godot: scenes with node trees, scripts with class_name, signals, functions and exports, autoloads, input actions, key settings, and broken references. Call this first in a project, and again after large changes. For one name use godot_usages; for engine classes use godot_api. detail brief gives one line per scene and script; full adds node trees with line numbers, signal connections, input events and settings. Read-only. Returns an error when there is no project.godot at or above path.

NameRequiredDescriptionDefault
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
detailNobrief: short output with capped lists; full: everything (default for this premium profile: full).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces that with the higher-value fact that no Godot process is required ('without running Godot') and that it errors when no project.godot exists at or above `path` — a failure mode the annotations cannot express. It stops short of describing output shape or cost/scale for large projects, which is the remaining gap.

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

Conciseness5/5

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

Front-loaded with purpose, then when-to-use, then sibling routing, then the `detail` tradeoff, then safety and the error case. Four dense sentences with no filler — every clause carries decision-relevant 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 exists, so the description carries the return-value burden itself — and it does, enumerating the mapped artifacts and what each detail level emits. Combined with the error condition and read-only guarantee, an agent has everything needed to call it correctly on a two-parameter 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?

Schema coverage is 100%, so baseline is 3; the description earns extra by spelling out what `detail` actually changes ('brief gives one line per scene and script; full adds node trees with line numbers, signal connections, input events and settings'), which is more concrete than the schema's 'short output with capped lists'. It also implicitly clarifies `path` behavior via the 'at or above `path`' walk-up reference, though that detail is mostly carried by 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 ('Map a Godot 4 project from its files') and enumerates exactly what is extracted: scenes with node trees, scripts with class_name/signals/functions/exports, autoloads, input actions, settings, broken references. It also carves out the sibling territory explicitly ('For one name use godot_usages; for engine classes use godot_api'), so an agent can distinguish it from godot_usages and godot_api 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?

Gives explicit timing ('Call this first in a project, and again after large changes') plus named alternatives and the condition that selects each. Nothing about when to prefer a sibling 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.

godot_scene_editChange a sceneA
Destructive

Change a .tscn safely, without the editor: add a node (a Godot class or an instanced scene), remove a node (with its children, connections and the resources only it used), set a property (name and type checked against Godot 4.7; enums by name, resources as res:// files), connect or disconnect a signal (checks the signal exists, and warns when the method is missing or takes the wrong number of arguments, with the func line to add), or attach a script (refuses one that extends another node type). Node paths are relative to the scene root, which is ".". op picks the change and which fields it needs: add_node (parent, name, and type or instance), remove_node (node), set (node, property, value), connect and disconnect (from, signal, to, method), attach_script (node, script). Only the lines of that change are touched. Without write it changes nothing and returns the diff and warnings; with write: true it writes and reports the review errors before and after (an error result when there are more after). A missing field or a change it refuses returns an error and writes nothing. Use it instead of editing .tscn files by hand. For project.godot use godot_project_edit; to rename a node everywhere, use godot_rename.

NameRequiredDescriptionDefault
opYeswhat to change
toNoconnect/disconnect: path of the node that receives
fromNoconnect/disconnect: path of the node that emits
nameNoadd_node: name of the new node
nodeNoremove_node/set/attach_script: path of the node ("." is the root)
typeNoadd_node: a Godot node class, e.g. Sprite2D
sceneYesthe scene: res://main.tscn, or a path
valueNoset: the value, e.g. Vector2(10, 20), 3, true, ALWAYS, res://icon.svg, null
writeNowrite the change (default false: show the diff only)
methodNoconnect/disconnect: method name
parentNoadd_node: path of the parent ("." is the root)
scriptNoattach_script: res:// path of the script
signalNoconnect/disconnect: signal name
instanceNoadd_node: a res:// scene to instance instead of a type
propertyNoset: property name, e.g. position

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint/readOnlyHint annotations, the description discloses that writes are opt-in via `write`, that dry-run returns diff plus warnings, that validation occurs against Godot 4.7 (signal existence, method arity, script base-type refusal), that only the lines of the change are touched, and that refused/incomplete changes write nothing. This is exactly the mutation context an agent needs and it is consistent with destructiveHint=true.

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 and the destructive/alternative routing, and every clause carries information (validation rules, write semantics, op-field mapping). It is a dense single paragraph, though quite long for one breath; a small structural break would aid scanning without losing content.

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 15-parameter mutating tool with no output schema, it covers the essentials: dry-run vs write, return of diff and warnings, before/after review errors, and no-write-on-error behavior. Minor gaps remain, such as whether a preview diff is stable enough to approve blindly or how concurrent edits are handled, but nothing required 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 baseline is 3, but the description adds cross-field semantics the schema cannot express per-property: which fields each `op` requires (add_node needs parent/name plus type or instance, etc.) and the node-path convention ('relative to the scene root, which is "."'). Value formats (enums by name, res:// resources) partially duplicate the schema's `value` description, keeping it below a 5.

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

Purpose5/5

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

Opens with a specific verb+resource ('Change a .tscn safely, without the editor') and then enumerates the six concrete mutations supported. It explicitly names the sibling tools it is not (godot_project_edit, godot_rename), so an agent can route correctly without inspecting 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?

States explicit when-to-use ('Use it instead of editing .tscn files by hand'), when-not ('For project.godot use godot_project_edit; to rename a node everywhere, use godot_rename'), and the dry-run vs write decision rule ('Without `write` it changes nothing... with `write: true` it writes'). 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.

godot_screenshotScreenshot a scene or modelA
Idempotent

Render a scene, or a .glb/.gltf model framed by a camera and lit, to a PNG with Godot 4.7 (Compatibility renderer, works on software OpenGL; on Linux without a display it uses xvfb-run). Returns the picture and a short text: how much of each view is drawn and where, so you can tell an empty or off-screen picture even without reading the image. For a model, views front (from +Z, where models face), back, side, top and iso; several make a grid. width and height are per view; frames lets the scene settle before the picture. The PNG is written next to the model (car.glb gives car.png) or, for a scene, to .godot/godotwright/screenshot.png. An error result when Godot is missing or the scene cannot run. Use it to look at what you built. Without Godot, godot_model_view shows a model as text; to check behaviour rather than looks, use godot_play.

NameRequiredDescriptionDefault
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
modelNoa .glb or .gltf file to look at instead of a scene
sceneNothe res:// scene to render (default: the main scene)
viewsNocamera views for a model or a 3D scene without a camera (default [iso])
widthNowidth of one view (default 640)
framesNoframes to run before the picture (default 10)
heightNoheight of one view (default 360)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations by disclosing the renderer (Godot 4.7 Compatibility, software OpenGL), the xvfb-run fallback on headless Linux, the exact output paths written (.godot/godotwright/screenshot.png, or car.png beside car.glb), and the fact that a coverage-metadata text accompanies the image so empty or off-screen renders are detectable. The filesystem write is consistent with readOnlyHint=false, and the idempotent/non-destructive profile is implicitly supported by the deterministic per-view 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?

Dense and front-loaded — capability, then inputs, then output behaviour, then alternatives. A few sentences are fragments ("An error result when Godot is missing or the scene cannot run.") and the output-path sentence is slightly buried, but essentially no 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?

With no output schema, the description still explains both return components (the PNG and the coverage text) and where the file lands, plus failure mode. For a 7-parameter tool with zero required params, that is enough for an agent to call it correctly on the first attempt.

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 meaning: width/height are per-view (matters when several views grid up), frames is for letting the scene settle, and multiple views compose a grid. It doesn't define the view directions in param terms beyond 'front (from +Z, where models face)', which is still useful orientation context.

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 specific verb and resource — render a scene or .glb/.gltf model to a PNG — plus the engine and renderer used. It clearly separates the two input modes (scene vs. model) and is distinguishable from siblings like godot_model_view and godot_play.

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 states the primary use ("Use it to look at what you built") and names two alternatives with the conditions that select them: godot_model_view when Godot is unavailable, godot_play when behaviour rather than looks matters. Both when-to-use and when-not-to-use are covered.

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

godot_testRun the unit testsA
Idempotent

Run the project's GUT or GdUnit4 tests in Godot 4.7 headless and return only the totals and the failing tests, each with res://file:line and the failure message, plus script errors from the run. Use it after a change to see whether the tests still pass. Needs Godot on this machine and GUT (res://addons/gut) or GdUnit4 (res://addons/gdUnit4) in the project. framework picks one when both are installed; dirs chooses the test folders or scripts (default: the framework's config, else res://test and res://tests); filter runs only matching GUT tests. An error result when a test fails, or when Godot or a framework is missing. Test files are not changed; reports go to a temporary folder or .godot/godotwright/. To try input without writing tests use godot_play; for load errors only use godot_check.

NameRequiredDescriptionDefault
dirsNotest folders or scripts as res:// paths (default: the framework's config, else res://test and res://tests)
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.
filterNoGUT only: run only tests whose name contains this text
frameworkNowhich framework (default: whichever is installed)
timeout_secondsNotimeout of the run (default 600)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses prerequisites (Godot installed, addons/gut or addons/gdUnit4 present), the error-result contract (error when a test fails or a dependency is missing), and the on-disk side effects (test files untouched, reports written to a temp folder or .godot/godotwright/). That last point usefully explains why readOnlyHint is false despite the tool being non-destructive and idempotent.

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 and return shape, then prerequisites, then parameters, then alternatives — a sensible ordering with no filler sentences. It is a dense single paragraph with heavy backtick usage, which makes it slightly harder to skim than a short bulleted split would be.

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?

There is no output schema, so the description carries the return-value burden, and it does: totals, failing tests with locations and messages, plus script errors from the run. Combined with prerequisites, failure semantics, and side effects, an agent has everything needed to decide and 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 already 100%, so the baseline is 3; the description adds real meaning on top by explaining resolution order for `framework` (picked explicitly when both are installed), the defaulting cascade for `dirs` (framework config, else res://test and res://tests), and that `filter` is GUT-only. It does not touch `path` or `timeout_seconds`, but the schema handles those 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?

States a specific verb and resource (run the project's GUT/GdUnit4 tests in Godot headless) and pins down return content (totals plus failing tests with res://file:line and messages). It also explicitly distinguishes itself from godot_play and godot_check by naming when each of those is the right tool 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?

"Use it after a change to see whether the tests still pass" gives the trigger, and the final sentence names two alternatives with their selecting conditions (godot_play for trying input without writing tests, godot_check for load errors only). "Use when both frameworks are installed" for `framework` resolves the one common ambiguity.

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

godot_usagesFind usagesA
Read-onlyIdempotent

Find every place a name is used in the project, offline and without the editor: a function, signal, variable, constant, class_name, autoload, input action, group or node name, or a res:// path / uid:// (which files refer to it, and whether it exists). Looks in GDScript code (not comments), in strings where Godot looks names up (connect, emit_signal, is_action_pressed, add_to_group, get_node, load), in scene connections, node names and groups, and in project settings. Call it before you rename, move or delete anything; to make the change everywhere, use godot_rename. For engine API names use godot_api. Returns where the name is defined, then each file with the line number, the kind of use and the line itself (very common names are capped). Read-only.

NameRequiredDescriptionDefault
nameYeswhat to look for, e.g. take_damage, health_changed, Player, jump, res://scenes/enemy.tscn
pathNoThe project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, but the description adds substantial context beyond them: works offline without the editor, skips comments, searches specific lookup contexts (connect, emit_signal, get_node, load), and warns that very common names are capped. It even describes the return layout, which is valuable since no output schema exists.

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

Conciseness4/5

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

Front-loaded with the core action and scope, then the routing guidance, then the return format. It is a dense paragraph with multiple clauses, but each sentence carries actionable information; only the trailing 'Read-only.' is redundant with the annotations.

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 shape (definition location, then per-file line number, use kind, line text) and the capping caveat. Combined with the scope and alternative routing, an agent has everything needed to invoke and interpret results.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters are documented and the baseline is 3. The description nonetheless adds semantic breadth by clarifying what 'name' can be (class_name, autoload, uid://, input action), helping an agent choose the right query form beyond the schema's examples.

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 ('find every place a name is used') and enumerates the exact resource domains covered (function, signal, class_name, autoload, input action, res:// path, uid://). It also explicitly distinguishes itself from godot_rename and godot_api, so an agent can route correctly 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?

Gives a concrete when-to-use trigger ('Call it before you rename, move or delete anything') and names the alternatives with their selecting conditions: godot_rename for making the change, godot_api for engine API names. 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.

Tool Schema Changelog

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

  1. 14 tool updatesv0.1.1
    • Changedgodot_api1 field changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
    • Changedgodot_check1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_migrate2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_model_build3 fields changed
      • changedInput schema / properties / collision / description
        Previous value: -"name the meshes so Godot makes collision shapes on import: convex (a hull per mesh, for props and vehicles) or trimesh (exact triangles, for buildings and terrain)"New value: +"collision for Godot: convex (a hull per mesh on import, for props and vehicles), trimesh (exact triangles on import, for buildings), or heightmap (terrain tiles: writes <name>.heightmap.tres and <name>.tscn with a StaticBody3D, faster than trimesh)"
      • changedInput schema / properties / collision / enum
        Previous value: -[
        -  "convex",
        -  "trimesh"
        -]New value: +[
        +  "convex",
        +  "trimesh",
        +  "heightmap"
        +]
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
    • Changedgodot_model_inspect1 field changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
    • Changedgodot_model_lint1 field changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
    • Changedgodot_play1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_project_edit1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_rename1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_review2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_scan2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"Output detail (default for this premium profile: full)."New value: +"brief: short output with capped lists; full: everything (default for this premium profile: full)."
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_screenshot1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_test1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
    • Changedgodot_usages1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Project directory or a path inside it (default: the current project)."New value: +"The project folder, or any file or folder inside it (Godotwright walks up to project.godot). Relative paths start at the server's folder. Default: the current project."
  2. 22 tool updatesv0.1.0
    • First observedgodot_api
    • First observedgodot_api_search
    • First observedgodot_check
    • First observedgodot_checklist
    • First observedgodot_feedback
    • First observedgodot_migrate
    • First observedgodot_model_brief
    • First observedgodot_model_build
    • First observedgodot_model_identify
    • First observedgodot_model_inspect
    • First observedgodot_model_lint
    • First observedgodot_model_spec
    • First observedgodot_model_view
    • First observedgodot_play
    • First observedgodot_project_edit
    • First observedgodot_rename
    • First observedgodot_review
    • First observedgodot_scan
    • First observedgodot_scene_edit
    • First observedgodot_screenshot
    • First observedgodot_test
    • First observedgodot_usages

TDQS

A4.4/5.0

Scored across 22 tools

Disambiguation4/5

Most tools occupy distinct niches (scan, usages, rename, review, check, play, test), and descriptions actively route the agent between them ('for engine classes use godot_api', 'for a picture use godot_screenshot'). A few clusters blur at the edges: godot_api vs godot_api_search (search vs exact lookup), godot_review vs godot_check vs godot_checklist, and especially godot_model_brief vs godot_model_identify vs godot_model_spec, plus godot_model_view vs godot_model_inspect vs godot_screenshot. These are separable but require reading long descriptions to choose correctly.

Naming Consistency4/5

Every tool is prefixed godot_ with snake_case, and the 3D model family (godot_model_*) is grouped predictably. Deviations are minor: several names are bare nouns or verbs without an object (godot_scan, godot_review, godot_check, godot_api) rather than a uniform verb_noun pattern, and godot_check/godot_checklist sit close enough to invite confusion.

Tool Count3/5

22 tools is at the heavy end of the range and effectively covers two surfaces: project/code work (scan, review, edit, run, test, rename, migrate) and 3D model authoring (identify, brief, spec, build, lint, view, inspect, screenshot). Each tool does have a job, but the model subfamily alone is eight tools, several of which are thin conveniences (brief, spec, identify) an agent could absorb.

Completeness4/5

Lifecycle coverage is strong: discovery (scan, usages, api, api_search, checklist), analysis (review, check, play, test), mutation (rename, project_edit, scene_edit, migrate) and a full model pipeline from identification through build, lint, view, inspect and screenshot. Gaps are mostly around asset/script file authoring — no tool to create or delete a .gd/.tres, and scene_edit covers node add/remove/set/connect but not duplication, reorder or scene creation.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    Enables AI agents to interact with the Godot game engine, including project inspection, scene/script parsing, headless exports, runtime control with live scene-tree inspection and evaluation, and API documentation search.
    100
    980 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to inspect, author, debug, simulate, and visually verify Godot 4.x projects through standard MCP tools, including scene editing, runtime control, and viewport capture.
    194 npm
    3
    MIT