Godotwright
Godotwright is an MCP server/CLI that helps coding agents check, edit, run, and model Godot 4 projects.
Map projects offline: scan scenes, node trees, scripts, signals, autoloads, input actions, settings, and broken references.
Review code with scores and findings for API correctness, performance, quality, and structure; detect Godot 3 habits and show Godot 4 fixes.
Look up/search the bundled official Godot 4.7 API and find every usage of names or
res://paths before renaming or deleting.Make safe changes: rename symbols/files everywhere, edit
project.godot, edit.tscnscenes, migrate Godot 3 scripts, and apply mechanical fixes with dry runs.Run real Godot headless: check load/runtime errors, run GUT or GdUnit4 tests, play scenes with scripted input and watched values, and render screenshots.
Work with 3D models: identify/brief a model, build clean
.glbfiles, lint/score them, inspect contents, view them as text, and add collision/contract checks.Learn from feedback and lessons, and support CI/GitHub Action review receipts.
Supports GitHub code scanning by emitting SARIF from godotwright review --sarif, allowing findings to appear inline on pull requests.
Provides a GitHub Actions workflow/action that runs godotwright ci on pull requests, downloads a checksum-verified Godot, runs review, checks, tests, and scenarios, posts results to the job summary and PR comment, and fails the job when a step fails.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GodotwrightReview my Godot project for Godot 3 mistakes and invented APIs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 is the check between the agent and your
project: the real Godot 4.7 API offline, a scored review of every script, headless Godot runs, and safe edits. It works
from files, so it needs no open editor, and it works fine next to an editor-driving MCP server.
Without and with
Your agent... | On its own | With Godotwright |
writes GDScript |
| each line flagged with the Godot 4 fix; |
calls an engine method | guesses a name from memory | looks it up in the bundled Godot 4.7 class reference |
renames a signal or moves a file | breaks the scene connections and |
|
says "it works" | without running anything |
|
needs a 3D model | needs Blender |
|
opens a pull request | nobody checks the Godot side | a GitHub Action posts a receipt: review, check and tests |
Related MCP server: godot-mcp-server
Quickstart
1. Review your game. Nothing to install:
npx -y godotwright review ~/games/my-gameYou get a score from 0 to 100 for api, performance, quality and structure, and each finding as
res://player.gd:12: error [rule] message with the Godot 4 fix. No Godot install needed.
2. Give it to your agent. In Claude Code:
/plugin install godotwright --marketplace laaielichter/Godotwright3. Ask for something. For example: "Review the project and fix what Godotwright finds." Every Godot file Claude edits is now reviewed right after the edit, and its errors go straight back to Claude.
Install in your agent
Client | How |
Claude Code |
|
Claude Desktop | Download |
Cursor | Add to Cursor (one click) |
VS Code (Copilot) | Install in VS Code (one click) |
Codex |
|
Gemini CLI |
|
Windsurf, Zed, others |
Run the agent from the Godot project folder, or pass --project <path>. --tier premium gives full detail for large
models; --tier cheap (the default) gives short output and step-by-step instructions for small ones. Needs Node.js 22.12+.
New in 0.4.0
A game that stays up between calls.
godot_sessionloads a scene once, headless and paused;godot_gamereads and sets values, steps frames with input until a condition holds, shows where 3D things really are and what is wrong with the UI per window size, and reloads the scripts you edited with every node's values kept.godot_doctorandgodot_fix. One call says what is wrong, in which order to fix it and why (with the lesson); the mechanical fixes are applied for you, each labelledsafeorcheck.godot_undo. Every Godotwright write can be taken back; your own later edits are never lost silently.What the build and the project really hold.
godot_exportfinds what an export will miss,godot_depsfinds unused files and why a file is used,godot_perfmeasures frame times against a budget and the last run.
All changes: CHANGELOG.md.
What it does
Check. review scores your scripts and scenes without Godot: Godot 3 code, unknown classes, methods and signals,
missing $Node paths, scene connections to missing methods, unknown input actions, per-frame lookups, static typing.
api answers from the official Godot 4.7 class reference (1078 classes), offline. check runs Godot headless and
reports each error once, as file:line.
Change. rename a function, signal, node or file everywhere; project edits settings, input actions and
autoloads; scene adds nodes, sets properties, connects signals and attaches scripts. Each one checks names and types
against Godot 4.7, shows a dry run first and touches only its own lines. migrate ports Godot 3 scripts to Godot 4
where that is mechanical (more on porting).
Run and see. test runs GUT or GdUnit4 tests and prints only what failed; play runs a scene, presses the keys
you give on the frames you give, and prints the values you watch; screenshot renders a scene or a model to a PNG.
Build 3D models. model build makes a clean .glb with no Blender: one of 59 ready-made kinds (vehicles, aircraft,
ships, buildings, plants, terrain with lakes and rivers) or your own JSON spec. model identify says what a thing is
(parts, sizes, pivots), model view draws it as text for agents that cannot see pictures, and model lint scores it.
Review every pull request. Add this to your game's repository:
# .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.4.0
with: { comment: "true" }It downloads a checksum-verified Godot, runs the review, the check and your tests, and posts the result as a comment.
No editor, no GPU. review-only: "true" skips Godot.
Learn. Rules that real Godot keeps contradicting turn into hints, findings you mark as wrong stay hidden, and lessons you add come back when the same error does. All of it stays on your machine; sharing anonymous counts is opt-in and off by default (PRIVACY.md).
Every command, option and rule: docs/reference.md.
The 32 tools
Tool | What it does |
| Start here when something is broken: the review and Godot grouped by cause, most urgent first, each with its lesson and fix, then numbered next steps |
| Map the project: scenes and node trees, scripts, signals, autoloads, input map |
| Exact Godot 4.7 lookup: signatures, inheritance, Godot 3 names |
| Search the Godot 4.7 class reference |
| AAA review with scores; also reviews unsaved code ( |
| Every AAA rule with its fix |
| Mark a review finding as wrong or right, or say whether a lesson helped, so Godotwright learns from it |
| Lessons from real Godot projects (symptom, cause, fix, test) by words, Godot error, rule or topic; |
| Keep a lesson learned here, scrubbed of names, paths and code; it comes back when the same error does |
| Every place a name or |
| Rename a name or move a file everywhere at once, keeping connections, node paths and |
| Change settings, input actions and autoloads in |
| Add or remove nodes, set properties, connect signals and attach scripts in a |
| Rewrite Godot 3 GDScript to Godot 4 where that is mechanical, and list what is left |
| The project as a graph of files from where the game starts: unused files with their size (paths the code builds count), why a file is used, what a scene loads with it, scene loops Godot cannot load |
| Undo the last Godotwright writes (edits, renames with their moves, migrations, fixes, model builds), newest first; a file changed by hand since is left alone |
| Apply the mechanical fixes for review findings, each labelled |
| Run Godot headless and report errors as |
| Run GUT or GdUnit4 tests headless; only what failed, with |
| Run a scene with an input timeline and return the values you watch per frame; |
| Before an export: files the presets leave out although the game loads them, plain data files missing from |
| Load a scene once and keep the game running between calls, headless and paused, until you stop it |
| Look at and drive that running game: live tree, get and set values, call, eval, step frames with input until a condition holds, 3D layout (floating, buried, scale), rays, UI issues per window size, hot reload of edited scripts (state kept), new errors with their call chain |
| Measure a scene's frame times: p50/p95/p99 against a budget, the slowest frames and what changed on them, the change since the last run |
| Render a scene or a |
| One page before you build, for small models: the kind to start from, parts, size, rules and the order of tools |
| What a thing is: parts, pivots, typical size with its source, variants (English or Dutch) |
| The model spec format, an example and the ready-made kinds |
| Build a clean |
| Score a |
| See a |
| What is in a |
Measured, with the limits stated
bench/ runs coding agents on fixed Godot tasks with and without Godotwright, and real Godot 4.7.2 judges each result
with a behavior test. First round: 168 runs of Claude Haiku, Sonnet and Opus on 12 tasks.
Correctness: no difference. Every run passed, with and without. These tasks do not separate the setups.
Code quality: a difference. With Godotwright 84 of 84 runs came out fully statically typed, without it 71 of 84.
Cost: about 3 s and $0.002 more per run for Haiku.
Method, raw data and a second, harder round: bench/RESULTS.md.
How it compares
Godotwright | Editor-driving Godot MCP servers | GDScript linters (gdtoolkit) | Godot's | |
Needs the Godot editor open | no | yes | no | no |
Scored review (api, performance, quality, structure) | yes | no | style, naming, complexity | no |
Godot 3 code | flagged with the Godot 4 fix; | no | no | rewrites scripts, scenes and settings |
Live control of the open editor | no | yes | no | no |
C# | no | some do | no | not yet |
Best for | checking and fixing what an agent writes, in the loop and in CI | working in the open editor with an agent | code style | a one-time port |
They work well together: an editor server to drive the editor, Godotwright to check what the agent wrote.
FAQ
Does it need Godot installed? Not for scan, api, review, migrate or the edits. check, test, play and
screenshot run Godot 4.7 headless.
Does it send my code anywhere? No. Your code stays on your machine. Sharing anonymous counts is opt-in and off by default; see PRIVACY.md.
Does it write my game? No. It checks, runs and fixes what you or your agent write, and builds base 3D models.
Older Godot 4 versions? Most findings apply to every Godot 4 version; API lookups answer for 4.7.
Small or local models? Yes, any MCP client. The cheap profile walks small models through checked steps;
see what we measured.
Docs
Reference: every command, option, rule and tool
Install page: every client, with one-click links
Lessons and road network lessons: the stories behind the rules
Contributing
Wrong review findings and ideas for new rules are the most useful reports. Start with a
good first issue, or see
CONTRIBUTING.md. Working on the code: npm ci && npm run check, and AGENTS.md for the
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
Available Tools
32 toolsgodot_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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | e.g. CharacterBody2D.move_and_slide, Node.ready, @export_range, lerp, Tween | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). |
TDQS
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.
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.
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.
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.
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.
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_api_searchSearch the Godot 4.7 APIARead-onlyIdempotent
Search the Godot 4.7 class reference offline by words: class, method, property and signal names, keywords and descriptions, best matches first. Use it when you know what you need but not its name ('raycast 3d', 'change scene'), then call godot_api on the best match for its full entry. For where your own project uses a name, use godot_usages. Returns one line per match with its kind and signature, e.g. method CharacterBody2D.is_on_floor() -> bool const, or 'no matches'. limit caps the list (default 10, at most 50). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max results (default 10) | |
| query | Yes | words, e.g. 'raycast 3d', 'change scene', 'is on floor' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description reinforces 'Read-only' while adding real behavioral context: results are ranked best-first, the return is one line per match with kind and signature (with a sample), and the 'no matches' case is disclosed. It stops short of describing ranking/collation details or performance constraints, so not a top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the capability, then usage, then return shape, then parameter note. Every sentence carries distinct information; no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two params, no output schema, and full schema coverage, the description supplies everything an agent needs: what is searched, how to phrase queries, routing to siblings for follow-up, result format, and match-count behavior including the empty case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented there, including the same example strings and the default/max for limit. The description restates the limit cap (default 10, at most 50) and query semantics but adds no format or syntax detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the Godot 4.7 class reference offline') plus exactly what fields are searched (class, method, property, signal names, keywords, descriptions). It differentiates itself from the named siblings godot_api (full entry) and godot_usages (project-local lookups).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use with concrete example queries ('raycast 3d', 'change scene'), plus a clear next step ('call godot_api on the best match') and an explicit exclusion routing to godot_usages for project-local name usage. 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_checkCheck with real GodotAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| scene | No | run this scene (a res:// path) instead of the main scene | |
| run_frames | No | also run the main scene for this many frames and return its output (default 0; 120 when scene is given) | |
| timeout_seconds | No | timeout per Godot run (default 600) |
TDQS
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.
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.
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.
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.
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.
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 checklistARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_depsThe project's files as a graph: unused, why used, what a scene loadsARead-onlyIdempotent
Follow what loads what, from where the game starts (main scene, autoloads, every res:// path in project.godot, export include filters, the shipped file list from godotwright.json, add-ons, tests, editor scripts), through ext_resource, preload, load, class_name, folders and file names the code builds paths from, textures next to models and import settings. op unused: files nothing reaches, biggest first, whole folders as one line (when in doubt a file counts as used, so the list can be trusted). op why (file): the chain from the game to the file, before you delete or move it. op of (file): what a scene or resource loads with it, biggest first, what it can load later, and paths that do not exist. op cycles: scenes or resources that load each other through ext_resource, which Godot cannot load (it reports "[ext_resource] referenced non-existent resource" for a file that is there). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | unused, why, of or cycles | |
| file | No | why and of: the res:// file | |
| path | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the simple 'Read-only' annotation, the description details the immense scope of the analysis, including textures, import settings, and how file paths are constructed. This specific technical detail is a rich disclosure of behavioral capabilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, every sentence is packed with technical, high-density information and is logically structured from overall function down to specific operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of Godot's internal dependency graph, the description is extremely complete, covering scope, implementation logic, and the exact data returned by each operational query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds maximum value by defining the semantic meaning of each enum value for the 'op' parameter. It explains exactly what result the AI should expect for 'why' versus 'of'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately establishes the tool's high-level purpose: treating project files as a dependency graph. It clearly outlines the four distinct operations (unused, why, of, cycles) available under this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool provides specific guidelines by defining the use case for each operation (e.g., when to look for an unused file vs. when to trace a load chain). The broad scope mentioned ('from project.godot' to 'godotwright.json') also provides clear boundaries for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_doctorWhat is wrong, and in which order to fix itARead-onlyIdempotent
One call for a project you do not know yet, or when something is broken and you do not know where to start: runs the review and, when Godot is installed, loads every script and scene with Godot; groups the findings by cause (twenty findings from one missing file are one problem), puts the most urgent first (Godot's errors, then the review's), and gives each the place, the lesson from real projects that explains it, the fix, and whether godot_fix or godot_migrate can do it. Pass symptom with what you see going wrong ("helicopter bounces on the moving deck") to add the lessons for it. Ends with numbered next steps. Read-only. Use godot_review for the full list and godot_check for Godot's raw output.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| files | No | only problems in these res:// files | |
| godot | No | run Godot too when it is installed (default true) | |
| limit | No | problems shown in full (default 12) | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). | |
| symptom | No | what you see going wrong, in plain words |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (read-only, idempotent, non-destructive), and the description adds substantially beyond that: Godot execution is conditional on installation, duplicate findings are collapsed by cause ('twenty findings from one missing file are one problem'), output is severity-ordered with Godot errors before review errors, and it ends with numbered next steps. The only redundancy is the phrase 'Read-only', which merely restates readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the decision cue before any mechanics, and every clause carries information (grouping, ordering, per-finding payload, automation handoff). It is a long run-on sentence with nested parentheticals that slightly slows parsing, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns, and it does: grouped findings, urgency ordering, and the four fields each finding carries. What it leaves unclear is how `limit` (problems shown in full) and `detail` (brief vs full) interact with the grouping, so an agent cannot predict truncation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns an extra point by giving `symptom` real meaning beyond the schema's 'what you see going wrong, in plain words' — it explains that the value is matched against lessons, with a concrete example ('helicopter bounces on the moving deck'). The remaining parameters (path, files, godot, limit, detail) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — runs the review, optionally loads every script and scene with Godot, groups findings by cause, orders them by urgency, and attaches place/lesson/fix/automation per finding. It explicitly distinguishes itself from godot_review (full list) and godot_check (raw Godot output), so an agent can pick it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with two concrete triggering conditions: a project you do not know yet, or something broken with no obvious starting point. Closes by naming the two alternatives and the condition that selects each, 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_exportCheck what the exported game will holdARead-onlyIdempotent
Compare the export presets (export_presets.cfg) with what the scripts and scenes load, without exporting: files that exclude_filter leaves out although they are preloaded or loaded (Godot leaves them out even when something needs them, so the build fails there), plain data files (text, binary, GeoJSON, cfg, XML, YAML; JSON and imported CSV are fine) that Godot only exports when include_filter names them, and paths built at run time under an excluded folder; plus whether export templates are installed. preset limits it to one preset (name or number). Read-only. Run it before an export and after changing what the game loads.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| preset | No | only this preset (its name or number) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and non-destructive, yet the description adds substantive domain behavior: no export is performed, Godot silently drops excluded files even when preloaded (so the build fails), plain data files must be named in include_filter while JSON and imported CSV are safe, and run-time built paths under excluded folders are flagged. It also discloses the export-template check. This is information an agent could not get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and the critical caveat ('without exporting') are front-loaded, then details follow. The long middle enumeration of file types and failure modes is dense but each item maps to a concrete warning the agent would otherwise miss. There is mild repetition in restating 'Read-only'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of telling the agent what comes back, and it does so by enumerating the finding categories (excluded-but-loaded files, unexported plain data files, run-time paths, missing export templates). What it omits is the result shape (list of issues? per-preset summary? severity?) and whether defaults include all presets when 'preset' is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented; the description only restates that 'preset' limits the run to one preset by name or number. The 'path' parameter (project folder, walk-up to project.godot) is not mentioned in the description at all. Baseline 3 applies when the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Compare the export presets (export_presets.cfg) with what the scripts and scenes load, without exporting.' That is far more precise than a tautology and an agent can immediately tell it is an export-readiness audit. It never names the adjacent siblings (godot_check, godot_doctor, godot_review), so the differentiation from generic check tools is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives explicit timing guidance: 'Run it before an export and after changing what the game loads.' That is a clear usage context with a concrete trigger. There are no stated exclusions or named alternatives for when a different tool would be better.
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, or whether a lesson from godot_lessons helped. Pass finding (the line exactly as godot_review printed it) or lesson (its id), not both. For a finding, verdict wrong hides it in later reviews on this machine and right counts it as confirmed; a rule marked wrong far more often than right is then reported one level lower. For a lesson, right means it helped and ranks it higher; wrong makes it show up less. 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, the lesson does not exist, or learning is off.
| Name | Required | Description | Default |
|---|---|---|---|
| lesson | No | a lesson id from godot_lessons, e.g. physics/moving-platform-velocity | |
| finding | No | the finding line, e.g. res://player.gd:12: error [api/unknown-member] ... | |
| verdict | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial context beyond the annotations, including the local-only write scope, the downstream effects of each verdict, ranking/hiding behavior, reset semantics, and the exact return/error conditions. It aligns with the annotations: it is a non-read-only local write, not an open-world or destructive project operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded and well-structured: purpose first, then parameter exclusivity, behavioral effects, usage restriction, side effects, and return/error behavior. Every sentence adds operational value for a tool with nuanced verdict semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 the return value as a one-line confirmation and lists the key error cases. Combined with its side-effect and usage guidance, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
It explains the semantics of all three parameters far beyond the schema: `finding` must be the exact line printed by godot_review, `lesson` is a lesson id, and `verdict` has different meanings for findings versus lessons. The schema has only 67% description coverage, so this param-level detail is especially valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: telling Godotwright that a godot_review finding was wrong/right or whether a godot_lessons lesson helped. It clearly distinguishes this feedback action from sibling tools like godot_review, godot_lessons, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage conditions: use only after checking the code with godot_api or godot_check, fix real findings instead of marking them wrong, and pass either `finding` or `lesson` but not both. These are clear when-to-use and when-not-to-use rules tied to concrete alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_fixFix review findings mechanicallyADestructive
Apply the mechanical fixes for review findings instead of editing them one by one: api/coroutine-without-await, api/freed-check-order, api/get-meta-null-default, api/infer-variant, api/multimesh-format-after-count, api/timer-start-outside-tree, quality/mojibake, quality/standalone-ternary, quality/string-signal. Each fix rewrites only the line a finding points to, only when it looks exactly as expected, and is labelled safe (it only removes the problem: a freed check put first, get_meta() with has_meta(), a lone ternary as if/else, text encoded twice decoded, emit_signal() as signal.emit(), a MultiMesh format moved before instance_count, Timer.start() moved after add_child(), weakref() typed WeakRef) or check (it changes more: an await added to a coroutine call makes its caller a coroutine; a guessed type). Without write it shows the changes; with write: true it applies them and reviews the changed files again, returning what is left. Only safe fixes unless include_check: true. Lines it cannot fix are listed with the reason. Run godot_review first to see the findings, and godot_check after writing.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| files | No | only these res:// files | |
| rules | No | only these rules (fixable: api/coroutine-without-await, api/freed-check-order, api/get-meta-null-default, api/infer-variant, api/multimesh-format-after-count, api/timer-start-outside-tree, quality/mojibake, quality/standalone-ternary, quality/string-signal) | |
| write | No | write the fixes (default false: show them only) | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). | |
| include_check | No | also apply fixes labelled check (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructive and non-idempotent; the description supplies the nuance an agent needs: fixes touch only the flagged line and only when it matches expectations, safe fixes are purely subtractive while `check` fixes can convert callers into coroutines or introduce guessed types, writes trigger a re-review, and unfixable lines are reported with reasons. No annotation contradiction — destructiveHint=true is consistent with a write-capable fixer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, and every clause carries information, but it is one long run-on paragraph with dense parentheticals enumerating rule semantics. Grouping the safe/check catalog into a shorter form would improve scanability without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write-capable tool with no output schema, the description covers mode selection, preconditions, side effects, post-write behavior, and what the response reports (applied vs remaining vs unfixable with reasons). Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 credit by explaining what `write`, `include_check`, and `rules` actually mean in terms of fix categories (safe vs check) and that non-listed rules are out of scope. It stops short of describing `detail` or `files`/`path` resolution, which stay schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Apply the mechanical fixes for review findings") and immediately distinguishes itself from manual editing and from the sibling review/check tools. The enumerated rule IDs and the safe/check taxonomy pin down scope precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: "Run godot_review first to see the findings, and godot_check after writing." It also states the default gating behavior (dry-run without `write`, safe-only unless `include_check: true`), so the agent knows exactly which mode to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_gameLook at and drive the running game sessionA
Ask the game that godot_session started. op tree (the live node tree: path, class, script; root, depth, limit), get (values now: watch ["Hero.position", "Hero.is_on_floor()"]), set (target "Hero.position", value "Vector3(0, 30, 0)" as Godot writes values), call (node, method, args), eval (a Godot Expression with the scene root as base, e.g. get_node("Hero").velocity.length()), step (play frames frames with an input timeline counted from this step, sample watch, stop early until a condition holds; the same frame-exact input as godot_play), signals (record these signals; later steps list when they fired), layout (3D objects: global position, size, lowest point, and whether each rests on, floats above or sinks into what is below, plus scale mistakes), ray (from, to: what a physics ray hits), ui (visible controls at one or more window sizes, with clipped text, off-screen panels, overlapping buttons and small targets), errors (what the game printed since the last call), reload (load the scripts you edited into the running game: every node keeps its values and runs the new code from the next step, so you try a fix without loading the world again; files, default every script changed since the last reload; a script that does not compile is left as it was). Every answer ends with the errors and warnings the game printed since the last call, runtime errors with their call chain. Time only moves on a step, so the session stays deterministic. Use it to try a fix live, find a state that is hard to reach, or watch a long scenario in parts.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | what to do | |
| to | No | ray: end | |
| args | No | call: arguments as Godot values | |
| expr | No | eval: the expression | |
| from | No | ray: start, Vector3(...) or Vector2(...) | |
| node | No | call: node path from the scene root | |
| path | No | 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. | |
| root | No | tree: start at this node (default the scene root) | |
| depth | No | tree: levels to show (default 3) | |
| every | No | step: sample every n frames (default: about 10 samples) | |
| files | No | reload: res:// scripts to reload (default: every script changed since the session started or the last reload) | |
| input | No | step: "0 press jump; 10 release jump; 20 hold right 30" | |
| limit | No | tree: nodes to show (default 80) | |
| sizes | No | ui: window sizes such as 1280x720 or 720x1280 (default the size the project sets) | |
| until | No | step: stop at the first frame where this holds, "Hero.is_on_floor() == true" | |
| value | No | set: the new value as Godot writes it | |
| watch | No | get and step: values to read, Node.property or Node.method() | |
| frames | No | step: frames to run (default 60) | |
| method | No | call: method name | |
| target | No | set: Node.property | |
| signals | No | signals: Node.signal to record |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: time advances only on step, answers end with printed errors and warnings, reload preserves node values and leaves non-compiling scripts unchanged, and runtime errors include call chains. These are exactly the operational traits an agent needs for a stateful live-game tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long, but the length is justified by twelve operations and twenty-one parameters. It front-loads the core purpose and keeps detail focused, though a bulleted op list would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex live-game inspector and driver with no output schema, the description covers operation semantics, defaults, determinism, error reporting, and reload behavior. It is complete enough for an agent to know what the tool can do and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter schema already carries most semantics. The description still adds useful op-level meaning, including examples for watch/until/input/sizes and mappings from each operation to its relevant parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb-and-resource purpose: inspect and drive the running game started by godot_session. It enumerates all supported operations, making clear this is a multiplexed live-game control tool rather than a session launcher or playback tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: try a fix live, reach hard-to-reach states, or watch a long scenario in parts. It also distinguishes itself from godot_session and godot_play, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_lesson_addKeep a lesson learned hereAIdempotent
Keep a lesson you learned in this project, so Godotwright (and the next session) knows it: when the same Godot message or question comes back, godot_check and godot_lessons show your fix. Write it in general words: title is the lesson in one line, fix what to do; add symptom, cause, error (the Godot message as printed, kept as a template), topic, tags, rules and test when you can. Names of this project (classes, nodes, files, its title), paths, links, e-mail addresses, codes, keys and source code are replaced before anything is stored; a lesson that is mostly names is refused with what to change. The same title again updates that lesson. It writes only to the local learning file and is never sent; godotwright lessons export prints these lessons for a person to propose for everyone. Add one whenever a fix took more than one try, and not for what a review rule already reports. Returns the stored lesson and what was replaced; an error when it is refused or learning is off.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | Yes | what to do instead | |
| tags | No | words to find it by | |
| test | No | how to test it | |
| cause | No | why, in Godot terms | |
| error | No | the Godot message it explains, as printed | |
| rules | No | review or model rule ids it belongs to | |
| title | Yes | the lesson in one line, e.g. 'A body placed on a moving deck must start at the deck speed' | |
| topic | No | default gdscript | |
| symptom | No | what went wrong, as it showed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare non-read-only, idempotent, non-destructive, closed-world; the description adds substantially more: redaction of names/paths/links/emails/keys/source before storage, refusal for name-heavy lessons, dedup-by-title behavior, local-only storage never sent anywhere, and the error conditions (refused, learning off). This is behavior an agent cannot infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the payoff, with no filler sentences. It is a dense single block covering purpose, field guidance, privacy, dedup, side effects and return values — all relevant, though splitting privacy/return details would aid scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine parameters and no output schema, the description covers what is returned ('the stored lesson and what was replaced'), the failure modes, the privacy transformation, and the upsert rule. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 guidance the schema lacks: write in general words, title is one line, fix is what to do instead, and `error` should be 'the Godot message as printed, kept as a template'. It also states which fields are optional and worth filling 'when you can'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — keep/store a lesson learned in this project — and distinguishes itself from godot_lessons (which shows lessons) and godot_check. The upsert semantics ('same title again updates that lesson') further sharpen what the call does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Add one whenever a fix took more than one try') and when not to ('not for what a review rule already reports'), and names the sibling tools whose output it feeds (godot_check, godot_lessons).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_lessonsLessons from real Godot projectsA
Answer from lessons learned in real Godot 4 projects and on this machine: what went wrong, why in Godot terms, the fix, and how to test it. Find them by query (words such as 'helicopter slides off moving ship', or a lesson id), by error (a Godot message exactly as printed: the lessons that explain it), by rule (the lessons behind a review or model rule), or narrow by topic (gdscript, physics, rendering, import, models, world, performance, gameplay, ui, audio, tooling, process). Without any of them it lists the lessons. gaps: true instead lists the Godot errors seen on this machine (and by other installs) that no review rule predicted and no lesson explains yet: what to teach Godotwright next. Use it when Godot shows an error you do not understand, and before you build moving platforms, vehicles, ships, large worlds, runtime-loaded models, shaders or headless tests. detail brief gives the title and fix; full adds symptom, cause, test, rules and the Godot message. Returns plain text; lessons learned here are marked. It counts which lessons were shown in the local learning file (GODOTWRIGHT_LEARN=0 turns that off). Say whether one helped with godot_feedback (lesson).
| Name | Required | Description | Default |
|---|---|---|---|
| gaps | No | list what Godotwright cannot predict yet instead of lessons | |
| rule | No | a rule id from godot_review or godot_model_lint, e.g. api/infer-variant | |
| error | No | a Godot error or warning message, as printed | |
| limit | No | max lessons (default 5; 20 when listing) | |
| query | No | words, or a lesson id | |
| topic | No | only lessons of this topic | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false the side effect would otherwise look contradictory to a lookup tool, but the description explicitly explains it: 'It counts which lessons were shown in the local learning file (GODOTWRIGHT_LEARN=0 turns that off).' It also discloses the return format (plain text, locally-learned lessons marked) and what detail levels yield. Lacks limits/pagination nuance, but the key non-obvious side effect is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage, and most sentences carry weight. However it re-enumerates all twelve topic enum values verbatim from the schema and packs multiple modes into long run-on sentences, which adds length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Seven optional parameters and no output schema, yet the description explains the four lookup modes, the list fallback, the gaps mode, the detail levels, and the return type. An agent can call it correctly without guessing; only the interaction between limit and detail is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, but the description genuinely adds semantics: query accepts free words like 'helicopter slides off moving ship' or a lesson id, error must be 'a Godot message exactly as printed', gaps:true switches the whole result set to unlearned errors, and no parameter at all means list mode. That mapping of modes to parameters goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Answer from lessons learned in real Godot 4 projects and on this machine', with the shape of an answer (what went wrong, why in Godot terms, the fix, how to test it). This is clearly distinct from sibling godot_lesson_add (which writes lessons) and from godot_fix/godot_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggers: 'Use it when Godot shows an error you do not understand, and before you build moving platforms, vehicles, ships, large worlds, runtime-loaded models, shaders or headless tests.' It also closes the loop by naming godot_feedback as the follow-up. It does not explicitly say when to reach for godot_fix or godot_check instead, so the routing is not fully exhaustive.
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 4ADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| files | No | only these res:// scripts | |
| write | No | rewrite the scripts on disk (default false: report only) | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). |
TDQS
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.
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.
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.
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.
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.
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 modelARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | what you want to make, e.g. 'a rowing boat', 'dragon', 'castle wall' |
TDQS
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.
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.
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.
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.
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.
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 codeADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | where to write the .glb, inside the project, e.g. models/car.glb | |
| kind | No | a ready-made kind: house, terrain, sea, airliner, apartment, barn, barrel, bicycle, boat, bridge, bus, bush, campfire, car, castle, chair, church, conifer, crash-barrier, crate, delineator, dragon, drone, fence, fighter, flower, grandstand, grass, guard-rail, helicopter, horse, humanoid, jet-engine, light-aircraft, motorcycle, palm, piston-engine, power-pylon, race-kerb, railway-track, road, rocket, rowing-boat, sailboat, satellite, ship, shipping-container, spaceship, street-lamp, table, tank, tower, tractor, traffic-sign, train, tree, truck, wind-turbine, windmill | |
| spec | No | a full model spec as a JSON object | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). | |
| params | No | parameter values, e.g. { width: 9, roof: 'hip' } | |
| textures | No | false writes plain colours instead of the texture maps of brick, wood, leaves and the like (smaller files, or for materials of your own); default true | |
| collision | No | 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) | |
| spec_file | No | or a path to a spec JSON file inside the project | |
| contract_out | No | also write a model.contract.json here (inside the project) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceeds the annotations usefully: 'out is replaced if it exists' explains the destructiveHint, 'same bytes every time' explains idempotency, and it discloses the Godot-import side effect of `collision` plus a `contract_out` artifact for future lint runs. It also says what is returned (size, triangle/node counts, then lint report) and that the file is still written even when the result is an error, which is exactly the kind of nuance an annotation cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the output artifact, and nearly every clause carries information (determinism, collision imports, contract file, error-on-lint behavior). It is dense, with several multi-clause sentences and parenthetical asides, so it reads heavier than it needs to, but there is little outright filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object tool with no output schema, the description still covers the input modes, the side artifacts, the Godot import consequences, the return payload, and the error-but-file-written case. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 on top: it explains the kind/params vs spec/spec_file alternatives, that `contract_out` writes a model.contract.json that godot_model_lint can later hold versions to, and that `detail=full` lists every finding with its fix. Minor gap: it does not mention the `textures` parameter at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: build a .glb from a `kind` or a `spec`, write it to `out`, and lint it, with concrete output properties (UVs, tangents, one node per part, deterministic bytes). It also names the sibling that covers the overlapping case (godot_model_lint for a .glb not built here), so an agent can route between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions ('Call godot_model_identify first and godot_model_spec for the format') and an explicit exclusion with the alternative to use instead ('To check a .glb you did not build here, use godot_model_lint'). It also spells out the input alternatives (kind+params, spec, spec_file), 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_identifyWhat is this thing?ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | what you want to make or check, e.g. 'a tractor', 'helikopter', 'wind turbine' |
TDQS
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.
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.
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.
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.
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.
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 modelARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to a .glb or .gltf file, inside the project. | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). |
TDQS
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.
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.
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.
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.
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.
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 modelARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to a .glb or .gltf file, inside the project. | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). | |
| contract | No | a model.contract.json inside the project | |
| archetype | No | what the model should be, e.g. car, helikopter, vehicle.wheeled.car | |
| max_triangles | No | flag a model with more triangles than this |
TDQS
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.
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.
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.
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.
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.
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 formatARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 textARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to a .glb or .gltf file, inside the project. | |
| only | No | show one view only | |
| width | No | width of the views in characters (default 48) |
TDQS
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.
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.
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.
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.
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.
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_perfMeasure a scene's frame timesA
Run a scene in Godot 4.7 headless and measure it the way a player feels it: frame-time p50, p95, p99 and max against a budget (default 16.6 ms), the physics step apart from the rest of the frame, the slowest frames with what changed on them (nodes made or freed in one frame, a heavy physics step, script work), node and orphan counts, and the change since the last run of the same scene (kept in .godot/godotwright/perf/). Headless measures the CPU side (scripts, physics, scene work), not the GPU. input plays a timeline as godot_play does, to measure while something happens. An error result when p95 is over budget or more than 10% worse than last time. Lessons that fit the numbers are named. Measure before and after every performance change.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| input | No | input while measuring: "10 hold right 300" | |
| scene | No | the res:// scene to measure (default: the main scene) | |
| frames | No | frames to measure (default 600) | |
| warmup | No | frames to run first without measuring (default 60) | |
| baseline | No | compare with and save the last run of this scene (default true) | |
| budget_ms | No | frame budget in ms (default 16.6) | |
| timeout_seconds | No | timeout of the run (default 300) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses a hard limitation (headless measures CPU-side scripts/physics/scene work, not GPU), where state is persisted (.godot/godotwright/perf/), and the precise failure condition (error when p95 exceeds budget or is >10% worse than last run) — all consistent with readOnlyHint=false, since baseline files are written. This goes well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core measurement scope is front-loaded and every sentence carries information, but the opening sentence is a long comma-spliced run-on that forces the reader to parse several distinct facts at once. Tightening it into shorter clauses would improve scanning without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description shoulders the full burden and does so — it describes the return payload (percentiles, per-frame deltas, node counts, named lessons) and error semantics. Combined with the annotation-declared write of baseline state, an agent has everything needed to invoke and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: `input` is clarified as a played timeline equivalent to godot_play, `budget_ms` is tied to the error threshold, and `baseline` persistence is explained. Remaining params (frames, warmup, timeout_seconds) are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (run + measure) and resource (a scene), and enumerates exactly what is measured: frame-time p50/p95/p99/max, physics step isolation, slowest-frame attribution, node/orphan counts, and delta vs the last run. It also distinguishes itself from the sibling godot_play by noting that `input` 'plays a timeline as godot_play does' and that godot_play is the tool for interactive play.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: 'Measure before and after every performance change' and 'to measure while something happens' via the input timeline. It does not explicitly state when NOT to use it (e.g. use godot_test for correctness, godot_play for interactive runs), so exclusions are only implied.
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 inputAIdempotent
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. until stops the run at the first frame a condition holds ("Heli.is_on_floor() == true"); signals records when signals fire, with their arguments; summary: true gives one line per watched value (start, end, min, max, first change) instead of a table, which saves tokens on long runs; expect checks claims such as "Heli.health > 0" or "Heli.position.y < 1 @ 90" and makes the result an error when one fails, so a play run doubles as a test. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| every | No | sample every n frames (default 10); frames with input and the last frame are always sampled | |
| input | No | timeline: "10 press jump; 30 release jump; 40 hold right 20; 50 tap Key:Space" | |
| scene | No | the res:// scene to run (default: the main scene) | |
| until | No | stop at the first frame where this holds: "Heli.is_on_floor() == true" | |
| watch | No | values to sample: Player.position, Player.velocity.y, Player.is_on_floor() | |
| expect | No | claims to check: "Heli.health > 0" (last frame) or "Heli.position.y < 1 @ 90"; their values are watched | |
| frames | No | physics frames to run (default 120) | |
| signals | No | signals to record: "Heli.landed", "Deck.body_entered" | |
| summary | No | one line per watched value instead of a table (samples every frame) | |
| timeout_seconds | No | timeout of the run (default 300) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say readOnlyHint=false, and the description explains exactly why: a temporary script is written under .godot/godotwright/ and removed afterwards, and the user's scenes and scripts are untouched. It further discloses determinism, frame-exact input timing, error-vs-warning semantics, and that expect failures turn the result into an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return shape are front-loaded, and nearly every clause carries information about a distinct parameter. It is one dense paragraph with heavy semicolon chaining, so a reader scanning for a specific knob has to parse the whole block; the table-vs-summary point is also made twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description covers the return shape (per-frame table plus errors and prints, or a compact summary), failure modes, and the deterministic execution model. It also reassures the agent that running it does not mutate project files, which is the main risk when calling a headless runner.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds meaning beyond the schema by explaining the 'hold' verb's frame count, that every sets the sampling cadence, and that summary yields start/end/min/max/first-change per watched value. It does not fully specify watch-entry resolution rules (node path from scene root plus a property or method call is stated, but not scoping edge cases).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: run a scene headless for N physics frames, inject inputs on given frames, and return watched values plus errors and prints. It immediately separates itself from godot_test (project-stored assertions) and godot_check (load errors), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('check that the player jumps, moves, takes damage or that a timer fires, without a screen') and explicit exclusions with named alternatives: 'For assertions kept in the project use godot_test; for load errors use godot_check.' It also states when to prefer summary mode over a table.
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 autoloadsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | what to change | |
| key | No | set/unset: the setting path, e.g. display/window/size/viewport_width | |
| file | No | autoload_add: res:// path of the script or scene | |
| name | No | autoload_add/autoload_remove: the autoload name, e.g. Game | |
| path | No | 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. | |
| value | No | set: the value, e.g. 1920, true, 1.5, a text, res://main.tscn or Vector2i(1920, 1080) | |
| write | No | write the change (default false: show the diff only) | |
| action | No | input_add/input_remove: the action name, e.g. jump | |
| events | No | input_add: events such as Key:Space, Mouse:Left, JoyButton:0, JoyAxis:1- | |
| global | No | autoload_add: make a global variable (default true) | |
| deadzone | No | input_add: deadzone of a new action (default 0.2) |
TDQS
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.
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.
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.
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.
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.
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 everywhereADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | the new name, or the new res:// path | |
| from | Yes | the current name, or a res:// path | |
| path | No | 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. | |
| write | No | apply the rename (default false: show the plan only) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | unsaved GDScript to review in place of the file on disk | |
| file | No | res:// path the code belongs to (required with code) | |
| path | No | 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. | |
| files | No | only show findings in these res:// files | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). | |
| only_new | No | show only what changed since the last review of this project (saves tokens in a fix loop) |
TDQS
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.
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.
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.
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.
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.
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 projectARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| detail | No | brief: short output with capped lists; full: everything (default for this premium profile: full). |
TDQS
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.
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.
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.
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.
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.
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 sceneADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | what to change | |
| to | No | connect/disconnect: path of the node that receives | |
| from | No | connect/disconnect: path of the node that emits | |
| name | No | add_node: name of the new node | |
| node | No | remove_node/set/attach_script: path of the node ("." is the root) | |
| type | No | add_node: a Godot node class, e.g. Sprite2D | |
| scene | Yes | the scene: res://main.tscn, or a path | |
| value | No | set: the value, e.g. Vector2(10, 20), 3, true, ALWAYS, res://icon.svg, null | |
| write | No | write the change (default false: show the diff only) | |
| method | No | connect/disconnect: method name | |
| parent | No | add_node: path of the parent ("." is the root) | |
| script | No | attach_script: res:// path of the script | |
| signal | No | connect/disconnect: signal name | |
| instance | No | add_node: a res:// scene to instance instead of a type | |
| property | No | set: property name, e.g. position |
TDQS
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.
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.
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.
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.
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.
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 modelAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 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. | |
| model | No | a .glb or .gltf file to look at instead of a scene | |
| scene | No | the res:// scene to render (default: the main scene) | |
| views | No | camera views for a model or a 3D scene without a camera (default [iso]) | |
| width | No | width of one view (default 640) | |
| frames | No | frames to run before the picture (default 10) | |
| height | No | height of one view (default 360) |
TDQS
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.
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.
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.
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.
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.
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_sessionStart or stop a game session that stays upA
Load a scene in Godot 4.7 headless once and keep it running between calls, paused at frame 0, so godot_game can look at the live game and move it frame by frame without loading the world again (a big world can take a minute to load; godot_play loads it on every call). op start (scene: default the main scene; restart: true loads it again), status, or stop. Only this machine can reach it (a loopback port with a token), the project is not changed (the script lives in .godot/godotwright/), and the game quits by itself after idle_minutes without a request (default 15). Stop it when you are done.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | start, status or stop | |
| path | No | 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. | |
| scene | No | the res:// scene to load (default: the main scene) | |
| restart | No | stop a running session and load the scene again | |
| idle_minutes | No | quit after this many minutes without a request (default 15) | |
| timeout_seconds | No | how long the scene may take to load (default 300) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: the session persists between calls, is paused at frame 0, is reachable only via a loopback port with a token, does not modify the project, stores its script under .godot/godotwright/, and auto-quits after idle_minutes. These details materially affect how and when an agent should use the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then covers operation modes, sibling comparison, security, and cleanup. It is dense but every sentence carries useful information, with no obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex lifecycle tool with no output schema, the description covers the important context: persistence, security, project isolation, idle shutdown, and operation modes. It does not describe what the `status` operation returns, which leaves a small gap for an agent invoking that op.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents op, path, scene, restart, idle_minutes, and timeout_seconds. The description repeats defaults for scene, restart, and idle_minutes but adds little semantic detail beyond the schema, and it does not mention path or timeout_seconds at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: load a Godot scene headless and keep the session running between calls, paused at frame 0. It explicitly distinguishes this from godot_play, which reloads the world on every call, so an agent can tell the two apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: use this when godot_game needs a live game to inspect and step frame by frame, especially when loading is slow. It names godot_play as the reload-every-call alternative and says to stop the session when done, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_testRun the unit testsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dirs | No | test folders or scripts as res:// paths (default: the framework's config, else res://test and res://tests) | |
| path | No | 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. | |
| filter | No | GUT only: run only tests whose name contains this text | |
| framework | No | which framework (default: whichever is installed) | |
| timeout_seconds | No | timeout of the run (default 600) |
TDQS
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.
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.
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.
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.
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.
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_undoUndo the last Godotwright writesADestructive
Undo what Godotwright wrote, newest first: scene and project edits, renames (moved files go back), migrations, fixes and model builds each keep the files as they were, in .godot/godotwright/journal/ (the last 40 writes). steps undoes that many writes (default 1); list only shows them. A file changed after the write (by hand or by another tool) stops the undo there, so your later edits are never lost silently; force undoes anyway. Use it when a write made things worse, instead of repairing by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | only list the writes that can be undone | |
| path | No | 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. | |
| force | No | undo even when a file changed after the write; those changes are lost | |
| steps | No | how many writes to undo (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: discloses the journal location and its 40-write cap, the conflict guard that stops an undo when a file changed afterward, and that `force` destroys those later changes. This is exactly the destructive-behavior context an agent needs beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then behavior, then when to use. Dense but each clause carries information; the nested parentheticals make it slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-mode tool with no output schema, it covers what is restored, the retention limit, the safety guard, the override, and the inspection mode. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description restates steps default 1, list-only mode, and force overriding the conflict guard, which matches but does not meaningfully extend the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Undo what Godotwright wrote, newest first') and enumerates the covered write categories: scene/project edits, renames, migrations, fixes, model builds. No sibling tool performs undo, and the description makes the resource boundary unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use it when a write made things worse') and names the alternative it replaces ('instead of repairing by hand'), plus the `list` mode for inspection before acting. It does not spell out when not to undo (e.g., after a conflict), though the force semantics imply it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
godot_usagesFind usagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | what to look for, e.g. take_damage, health_changed, Player, jump, res://scenes/enemy.tscn | |
| path | No | 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. |
TDQS
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.
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.
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.
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.
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.
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.
13 tool updates
v0.2.2- Added
godot_deps - Added
godot_doctor - Added
godot_export - Changed
godot_feedback2 fields changed- added
Input schema / properties / lessonAdded value: +{ + "description": "a lesson id from godot_lessons, e.g. physics/moving-platform-velocity", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "finding", - "verdict" -]New value: +[ + "verdict" +]
- Added
godot_fix - Added
godot_game - Added
godot_lesson_add - Added
godot_lessons - Changed
godot_model_build2 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"a 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"New value: +"a ready-made kind: house, terrain, sea, airliner, apartment, barn, barrel, bicycle, boat, bridge, bus, bush, campfire, car, castle, chair, church, conifer, crash-barrier, crate, delineator, dragon, drone, fence, fighter, flower, grandstand, grass, guard-rail, helicopter, horse, humanoid, jet-engine, light-aircraft, motorcycle, palm, piston-engine, power-pylon, race-kerb, railway-track, road, rocket, rowing-boat, sailboat, satellite, ship, shipping-container, spaceship, street-lamp, table, tank, tower, tractor, traffic-sign, train, tree, truck, wind-turbine, windmill" - added
Input schema / properties / texturesAdded value: +{ + "description": "false writes plain colours instead of the texture maps of brick, wood, leaves and the like (smaller files, or for materials of your own); default true", + "type": "boolean" +}
- Added
godot_perf - Changed
godot_play4 fields changed- added
Input schema / properties / expectAdded value: +{ + "description": "claims to check: \"Heli.health > 0\" (last frame) or \"Heli.position.y < 1 @ 90\"; their values are watched", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / signalsAdded value: +{ + "description": "signals to record: \"Heli.landed\", \"Deck.body_entered\"", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / summaryAdded value: +{ + "description": "one line per watched value instead of a table (samples every frame)", + "type": "boolean" +} - added
Input schema / properties / untilAdded value: +{ + "description": "stop at the first frame where this holds: \"Heli.is_on_floor() == true\"", + "type": "string" +}
- Added
godot_session - Added
godot_undo
14 tool updates
v0.1.1- Changed
godot_api1 field changed- changed
Input schema / properties / detail / descriptionPrevious 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)."
- Changed
godot_check1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_migrate2 fields changed- changed
Input schema / properties / detail / descriptionPrevious 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)." - changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_model_build3 fields changed- changed
Input schema / properties / collision / descriptionPrevious 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)" - changed
Input schema / properties / collision / enumPrevious value: -[ - "convex", - "trimesh" -]New value: +[ + "convex", + "trimesh", + "heightmap" +] - changed
Input schema / properties / detail / descriptionPrevious 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)."
- Changed
godot_model_inspect1 field changed- changed
Input schema / properties / detail / descriptionPrevious 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)."
- Changed
godot_model_lint1 field changed- changed
Input schema / properties / detail / descriptionPrevious 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)."
- Changed
godot_play1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_project_edit1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_rename1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_review2 fields changed- changed
Input schema / properties / detail / descriptionPrevious 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)." - changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_scan2 fields changed- changed
Input schema / properties / detail / descriptionPrevious 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)." - changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_screenshot1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_test1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
- Changed
godot_usages1 field changed- changed
Input schema / properties / path / descriptionPrevious 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."
22 tool updates
v0.1.0- First observed
godot_api - First observed
godot_api_search - First observed
godot_check - First observed
godot_checklist - First observed
godot_feedback - First observed
godot_migrate - First observed
godot_model_brief - First observed
godot_model_build - First observed
godot_model_identify - First observed
godot_model_inspect - First observed
godot_model_lint - First observed
godot_model_spec - First observed
godot_model_view - First observed
godot_play - First observed
godot_project_edit - First observed
godot_rename - First observed
godot_review - First observed
godot_scan - First observed
godot_scene_edit - First observed
godot_screenshot - First observed
godot_test - First observed
godot_usages
TDQS
Scored across 32 tools
Most tools are clearly separated by workflow: static review vs engine check vs play/session/perf, and the model tools each produce a distinct artifact. Some boundaries remain subtle, especially godot_model_identify/brief/spec and godot_review/doctor/check, where descriptions are needed to disambiguate.
All 32 tools use godot_ snake_case, with stable subdomain prefixes such as godot_model_ and godot_api_ and predictable suffixes. Minor noun/verb variation like doctor and checklist does not break the overall consistency.
32 tools is well above a typical well-scoped set, and while the server covers many workflows, the surface is heavy and several model/review tools could likely be consolidated. Each tool has a purpose, but the count makes selection and maintenance costly.
The surface covers discovery, API lookup, static and dynamic checks, editing, migration, dependencies/export, undo, runtime play/session, performance, screenshots, tests, and a model pipeline. Minor gaps exist around generic asset/animation/shader/UI authoring and project creation, but core Godot lifecycle coverage is strong.
Maintenance
Related MCP Connectors
Lints + auto-fixes how AI coding agents discover any new product. 24 rules, 6 tools, score 0-100.
Scores your code across 12 areas, with findings, fix prompts, and re-assessment in your AI agent
Scan AI agent skills, MCP server packages and MCP configs before you install them. Static analysis.
GodPrompt MCP + Agent Skill for coding agents with TDD, debugging, verification, and task routing.
Related MCP Servers
- AlicenseBqualityDmaintenanceAdvanced MCP server for Godot 4.6+ with 63 professional tools, enabling AI-assisted game development with backup/rollback, deep script validation, and project health diagnostics.63166 npm5MIT
- AlicenseCqualityCmaintenanceEnables 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.100890 npm5MIT
- AlicenseBqualityBmaintenanceEnables AI agents to inspect, modify, run, and debug Godot projects, including scene and script analysis, editor and project management, and visual verification through screenshots.2215 npm14MIT
- AlicenseNot gradedqualityAmaintenanceEnables 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.166 npm3MIT