Skip to main content
Glama

bl-mcp

Blender for AI agents, with numbers instead of guesses. An MCP server plus a Blender add-on: 113 typed tools that build, measure, check, compare and render in a live Blender. Every tool answers with what it really did, and the mesh tools refuse instead of leaving an open or broken mesh.

Most Blender MCP servers give the agent one execute_code tool and a screenshot. That is enough to make something, and not enough to make it right: the agent cannot see 3D, and a part that sits 3 cm off produces no error. bl-mcp turns those mistakes into numbers and pictures the agent reads after every step.

A brass lantern built by an agent with the tools: Cycles render

render_sheet: the overview the agent gets after each step

compare_view: reference, model, overlay, difference

render_sheet

compare_view

What the agent reads instead of a screenshot:

bevel_edges {"object": "lamp_base", "width": 0.002, "segments": 2}
{"bevelled": 480, "width": 0.002, "achieved_width": {"min": 0.002, "median": 0.002}, "clamped": 0, "tris": 2880}

find_floating {"names": [...9 parts], "ground_z": 0}
{"parts": 9, "connected_groups": 1, "floating": ["none"], "tiny_gaps": ["none"]}

The lantern was built, textured, lit and rendered by an agent through these tools; a level blockout with routes, sightlines and a passed spec is the second demo. Both runs, with their numbers, are in docs/demos.md.

Contents

Related MCP server: Blender Universal & Token-Efficient MCP Server

What it does

  • Builds in world units. Primitives, profiles, lathe, sweep, arrays, booleans, bevels, sculpting by numbers. Metres, Z up, no hidden scale.

  • Measures and checks. measure, check_mesh, check_symmetry, find_floating, check_contacts, assert_spec (a spec of sizes, ratios, gaps and symmetry the agent runs after every change).

  • Compares with references. Masks and outlines from reference sheets, silhouette IoU per view with a band table and an overlay, automatic fit of parts, camera matching for photos.

  • Refuses to break the mesh. boolean cleans and checks its result and tries other solvers; weld names a safe distance; bevel_edges reports the width it really achieved.

  • Ships to a game. Materials with maps, procedural materials baked to textures, check_game_ready, GLB export with a texture size limit, inspection of the written file.

  • Levels. Blockout from a text plan, walkability, routes, passage widths, sightlines, scatter, terrain.

  • Knows the workflow. recipe serves step-by-step recipes (character, prop, weapon from a sheet, scene from a photo, level, materials, export) with the traps found in real agent sessions.

  • Stays usable. Long tools run as background jobs in Blender; checkpoint, diff_since and rollback make experiments cheap.

Where it comes from

bl-mcp was not designed as a tool catalogue. It grew while an agent built real game assets in Blender: a character from references, props, a pistol from an orthographic sheet, level blockouts for a game. Each round was an agent session, a report of where it fell back to raw Python or where a tool lied by omission, then changes to the tools and the next session. The recipes are the distilled logs of those sessions. Every tool has a headless test and a smoke call through the real server; tools no session needed were merged or removed. Details and numbers: docs/demos.md.

Install

Needs uv and Blender 5.0 or newer.

  1. Get the code: git clone https://github.com/asedias/bl-mcp.

  2. Install the add-on: uv run --project bl-mcp bl-mcp-install-addon. It finds Blender, copies addon/bl_bridge into its add-ons folder and enables it (--link symlinks instead, so a git pull updates the add-on; --blender PATH picks a Blender). Restart Blender if it was open. By hand instead: the bl_bridge-<version>.zip of a release through Edit > Preferences > Add-ons > Install from Disk, or copy the folder into ~/Library/Application Support/Blender/<version>/scripts/addons/ (macOS) and enable BL MCP Bridge. The console prints listening on 127.0.0.1:9877.

  3. Add the server to the MCP client. Claude Code:

claude mcp add blender -- uv run --project /path/to/bl-mcp bl-mcp

Any client with a JSON config:

{
  "mcpServers": {
    "blender": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "--project", "/path/to/bl-mcp", "bl-mcp"]
    }
  }
}

The server alone also runs without a clone: uvx --from git+https://github.com/asedias/bl-mcp bl-mcp. The add-on still has to come from the repository, at the same version.

The agent calls status first. It shows both versions, compares the tools of the server with the handlers of the add-on, and says which side to restart when they differ. When Blender is not open it says where Blender is installed.

The server and the add-on talk by JSON lines on 127.0.0.1:9877. Set BL_MCP_PORT on both sides to change the port.

Security. The add-on listens on localhost only, without authentication: any local process can connect and run run_python, which executes arbitrary Python inside your Blender. This is the purpose of the tool, and the same trust you give the MCP client. Do not run it on a shared machine, and keep the port closed in your firewall. BL_MCP_NO_PYTHON=1 removes run_python: set it for the server (the tool disappears) and for Blender (the add-on refuses it), for pipelines where the agent may only use the typed tools. No data leaves the machine: there is no telemetry, no cloud service, no asset download.

Toolsets

The server has 113 tools in 7 sets. All sets are on by default. Clients that load tool descriptions on demand (Claude Code, Codex) handle this well. For a client with a tool limit, pick the sets with BL_MCP_TOOLSETS (a comma list; core is always on):

"env": { "BL_MCP_TOOLSETS": "core,model,reference,game" }

Set

Tools

For

core

32

scene, measuring, placing, review renders, checks, checkpoints, recipes, run_python

model

30

mesh editing by selection, sculpting, booleans, arrays, lathe, sweep

reference

11

reference images and photos: masks, outlines, comparison, camera matching

level

14

blockout from a plan, walkability, routes, sightlines, terrain, scatter

look

12

materials, baking, lights, camera, world, final render

rig

10

armature, skinning, poses, UV, vertex colour

game

4

game checks, GLB export, import and inspection

dev

1

reload_addon; off unless named

status lists the sets that are off with their tools. bl_mcp/toolsets.py is the table; the server refuses to start when a tool has no set.

Recipes and the skill

The agent sees only the server instructions and the tool descriptions, so the workflow knowledge ships inside the package:

  • bl_mcp/recipes/, served by the tool recipe (no argument lists the topics; recipe(topic) returns one with the general rules) and by the MCP prompts built from the same files. Topics: rules, character-from-reference, prop-hard-surface, weapon-from-sheet, scene-from-photo, level-blockout, materials-and-render, export-for-game.

  • skills/bl-mcp/SKILL.md for Claude Code: when to use the server, how to start, the rules for every task. Copy the folder into .claude/skills/ of a project or into ~/.claude/skills/:

cp -r /path/to/bl-mcp/skills/bl-mcp .claude/skills/

The recipes stay in the server; the skill only points at them, so both never disagree.

Documentation

docs/tools.md

every tool by set, units and conventions, background jobs, how Blender is found

docs/limits.md

what the tools cannot do and the traps worth knowing

docs/demos.md

where the tools come from; the lantern and the level blockout demos with their call counts

docs/comparison.md

bl-mcp next to mcp-for-blender, Blender Lab MCP and blender-ai-mcp

docs/development.md

parts of the code, adding a tool, tests, CI and releases

License

MIT, see LICENSE.

Available Tools

113 tools
add_lightA

Create or update one light you control (setup_lighting makes a whole preset instead). The same name updates that light and keeps every setting you omit; it never makes a copy. A new light is a spot of 1000 W. spot is a cone, point shines all ways, area is a panel, sun gives parallel rays. location is in world metres; look_at is the point a spot, area or sun aims at. A new light without them sits at [0, 0, 3] and points down. power_w is watts; for a sun it is W/m2 (1-5, about 3 is a normal day). A point or spot needs about 40 W at 1 m, 150 W at 2 m, 600 W at 4 m for a normal exposure; an area panel a third of that. color is '#rrggbb' or linear [r, g, b]; temperature_k (800-20000) multiplies it with a blackbody tint. Spot: spot_size_deg is the full cone angle (1-180), blend (0-1) softens its edge. cutoff_m stops a spot or point hard at that distance. radius (spot, point) is the source size in metres: bigger means softer shadows. size (area) is [width, height] in metres or one number for a square (1 m when empty). shadow_soft=false makes hard shadows. Names that start with bl_light_ belong to setup_lighting and are refused. Remove lights with delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
nameNolight
sizeNo
blendNo
colorNo
radiusNo
look_atNo
power_wNo
cutoff_mNo
locationNo
shadow_softNo
spot_size_degNo
temperature_kNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare it is a non-read-only, non-destructive, closed-world call; the description adds substantial behavior beyond that — update-by-name semantics that preserve omitted settings and never copy, new-light defaults (spot, 1000 W, [0,0,3] pointing down), and a refusal rule for bl_light_ names. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Dense but nearly every sentence carries parameter or behavior information that is otherwise unavailable at 0% schema coverage. It is front-loaded with the create/update distinction, though the long unstructured paragraph could be easier to scan as a parameter list.

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

Completeness5/5

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

For a 13-parameter, zero-coverage mutation tool with no output schema and only thin annotations, the description supplies defaults, units, per-kind constraints, naming restrictions, and update semantics. Nothing an agent needs to invoke it correctly appears to be missing.

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

Parameters5/5

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

Schema description coverage is 0% across 13 parameters, so the description must compensate and it does: units for location/look_at, wattage semantics including the W/m2 sun case and exposure guidance, color formats, temperature_k range, cone angle and blend ranges, cutoff_m, radius vs size, and shadow_soft are all explained.

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

Purpose5/5

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

States a precise verb+resource ('Create or update one light') and immediately distinguishes itself from setup_lighting, which makes whole presets. An agent can tell add_light apart from the lighting siblings without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes to setup_lighting for presets and to delete for removal, and states the bl_light_ name restriction. It does not say how to discover existing light names (e.g. list_lights) or what to do when several lights are needed, so the when-to-use picture is clear but not exhaustive.

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

apply_transformsA
Destructive

Bake the transform of meshes into their vertices, as Ctrl+A does. mode all also bakes the position: the origin goes to the world origin. Shared meshes are made single-user first, children keep their place in the world, mirrored (negative) scale is handled without flipped normals.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoscale
namesYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, so the mutation risk is declared. The description adds real behavioral detail beyond that: shared meshes are made single-user first, children retain their world position, and mirrored negative scale is handled without flipped normals. It stops short of saying whether the bake is undoable or what it returns.

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

Conciseness4/5

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

Three tightly packed sentences with the core purpose front-loaded and the Ctrl+A reference immediately orienting the reader. Slightly dense, but every clause carries distinct information about edge-case handling.

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

Completeness4/5

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

With no output schema and annotations covering the safety profile, the description supplies the edge-case behaviors (single-user meshes, child placement, mirrored scale) an agent needs. It omits mode enumeration details and any mode/selection prerequisites, but is broadly sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the parameter burden, yet it only expands on `mode: all` (origin goes to world origin) and never explains `scale` or `scale_rotation`, nor the `names` array. Partial compensation gives a baseline 3.

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

Purpose4/5

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

States a specific verb+resource ('Bake the transform of meshes into their vertices') and anchors it to a familiar operator ('as Ctrl+A does'). It does not distinguish itself from nearby siblings such as transform_objects or set_origin, which apply or move transforms rather than baking them.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus transform_objects, set_origin, or transform_region, and no preconditions (object mode, selection requirements, undo behavior). The Ctrl+A analogy implies familiar Blender usage but no actual routing guidance is given.

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

arrayB
Destructive

Repeat an object count times along the world vector offset (step in metres) and merge the copies into one mesh. Fences, stairs, windows, planks, teeth.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
countYes
objectYes
offsetYes
keep_sourceNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known. The description adds useful context by saying copies are merged into one mesh (i.e., the result is a single combined object rather than separate instances), but it stays silent on whether the source object is consumed or preserved, which is a material detail for a destructive operation.

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

Conciseness4/5

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

Two short sentences with the core action front-loaded and no filler. The trailing example list is efficient but reads as a verbless fragment, which is mildly cryptic rather than wasteful.

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

Completeness2/5

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

With 5 parameters, 0% schema description coverage, and no output schema, the description leaves significant gaps for an agent: keep_source behavior, the role of `name`, and the fate of the source object are never addressed. The core operation is clear, but not enough is disclosed to call this tool correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load, and it only partially does: it defines `count` (times to repeat) and `offset` (world vector, step in metres). The `object`, `name`, and especially `keep_source` parameters — the latter directly tied to the destructive annotation — receive no explanation anywhere.

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

Purpose4/5

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

The description gives a specific verb+resource ('repeat an object count times ... merge copies into one mesh') that an agent can act on, and the 'along the world vector offset' phrasing implicitly separates it from the sibling radial_array. It does not explicitly name radial_array/duplicate/mirror, so sibling differentiation is inferential rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied via the trailing examples ('Fences, stairs, windows, planks, teeth'), which sketch realistic use cases but give no when-to-use rule or comparison to radial_array, duplicate, or mirror. There is no statement of when NOT to use it or what alternative to pick for radial/circular repetition.

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

assert_specA
Read-only

Write what the model must be, run all checks in one call, get pass or fail with the real numbers. State your expectations before you look at the result, then fix only the failures. Each check is a dict with "type" and optional "label". Types and fields: size {object, axis x|y|z, equals+tol | min | max, with_children?} world size in metres. position {object, axis, which min|max|center, equals+tol | min | max} world coordinate. ratio {a, b, axis, min | max | equals+tol} size of a divided by size of b (head vs body proportions). gap {a, b, min | max | equals+tol} distance between two meshes (0 if they overlap). contact {a, b, state touching|intersecting|apart|connected, max_depth?} 'connected' is touching or overlapping. symmetry {objects, axis, at?, tolerance?, max_unmatched_share?} mirror match of all vertices. inside {object, container, margin?} bounding box inside another's. on_ground {object, z?, tol?} lowest point of the object and its children. clean {object, ignore?} no open holes, loose parts, zero faces, inward normals. budget {names?, max_tris?, max_objects?, max_materials?, max_draw_calls?}. connected {names?, ground_z?} no floating groups. A failure shows 'actual', 'expected' and a 'fix' tool. A bad check or a missing object is reported as an 'error' and the rest still run.

ParametersJSON Schema
NameRequiredDescriptionDefault
checksYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: a failure returns 'actual', 'expected' and a 'fix' tool, and a bad check or missing object is reported as an 'error' while the remaining checks still run. Error-isolation and response shape are disclosed; rate/permission behavior is not applicable here.

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

Conciseness4/5

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

Front-loaded with the purpose and workflow in the first two sentences, followed by a dense but necessary reference list of check types. Every line documents a distinct check, so the length is earned, though the block is heavy enough that some structure loss is unavoidable.

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

Completeness5/5

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

No output schema exists, so the description must explain return values, and it does: pass or fail with real numbers, failure objects containing actual/expected/fix, and error reporting for invalid checks or missing objects. For a single-parameter, high-complexity validation tool this is complete.

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

Parameters5/5

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

Schema coverage is 0% and the schema is a generic array of open objects, so the description carries the full burden. It does so thoroughly, documenting every check type with its fields, units (world size in metres, distance, max_depth, margin, tolerance, max_unmatched_share), and semantics such as 'connected' meaning touching or overlapping and gap being 0 on overlap.

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

Purpose5/5

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

States a specific verb+resource: it runs a set of declarative assertions against the model and returns pass/fail with actual numbers. The enumeration of check types (size, position, ratio, gap, contact, symmetry, inside, on_ground, clean, budget, connected) makes it unmistakable against siblings like check_mesh, check_symmetry, check_contacts, and check_game_ready, which each cover a subset.

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

Usage Guidelines4/5

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

Gives clear workflow guidance: state expectations before looking at the result, then fix only the failures, and use one call for all checks. That implicitly routes the agent here instead of the single-purpose check_* siblings, but it never explicitly names an alternative or an exclusion condition, so it falls short of a 5.

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

assign_material_facesA
Destructive

Put an existing material on part of a mesh: the picked faces get it, the other faces keep theirs. Adds a slot if the object has none for it. Other faces keep their material. One mesh with several materials costs one draw call per material in the engine, so keep the count low. Create the material first with set_material. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNo
objectYes
materialYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, so mutation is known; the description adds non-obvious cost behavior (one draw call per material in-engine) and the slot-auto-creation side effect, both beyond annotations. It does not disclose what happens to the overwritten faces' prior material assignment or error behavior for a missing material.

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

Conciseness4/5

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

Dense but front-loaded: purpose first, then cost caveat, then the where grammar. Slightly redundant — 'the other faces keep theirs' and 'Other faces keep their material' restate the same fact in adjacent sentences.

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

Completeness5/5

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

For a 3-param mutation tool with no output schema and no meaningful schema descriptions, the description covers the what, the prerequisite chain, the selection grammar, and the performance consequence. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 0% and `where` is an opaque open object, so the description must carry the burden — and it does, enumerating all supported keys (normal, angle, x/y/z, box, area, index) with defaults and the {} / null meaning. The `object` and `material` parameters are only implicitly explained (name strings, material must already exist), leaving some ambiguity about accepted identifier formats.

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

Purpose5/5

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

States a specific verb (put/assign) and resource (material on picked faces) with the exact scope: picked faces get it, others keep theirs, slot added if needed. This is clearly separable from sibling set_material, which is explicitly named as the prerequisite for creation rather than assignment.

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

Usage Guidelines4/5

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

Provides real workflow sequencing: create the material first with set_material, and inspect mesh_info before picking faces. That is genuine when-to-use guidance, though it never states when NOT to use it or what to do if the material does not exist on the object.

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

attachA
Destructive

Align by bounding boxes: move part (with its children) so an anchor of its world box lands on an anchor of the box of to. Surfaces are not looked at: move_to_contact closes a real gap, place_on drops onto a surface. Anchors are fractions 0..1 per axis: (0.5,0.5,0) is bottom centre, (0.5,0.5,1) is top centre. Default puts the part on top of the target. offset is in metres. Both boxes include the children of each object; with_children=false measures the two objects alone (the children still move with the part). The answer gives boxes_used (objects, min, max, size of both boxes after the move) and moved_by; min and max at the top level are of part alone. Boxes do not follow round or slanted surfaces: use move_to_contact to close the real gap, place_on to drop onto uneven ground, transform_objects for a known offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
partYes
offsetNo
to_anchorNo
part_anchorNo
with_childrenNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations (destructiveHint=true) already flag that this mutates the scene, and the description adds real context beyond that: the default places part on top, child boxes are included, with_children=false measures objects alone while children still move, and it names the return fields (`boxes_used`, `moved_by`). It stops short of stating explicitly that the part's existing placement is overwritten, so not a full 5.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, and each following sentence adds constraints, anchor format, or return shape rather than filler. It is dense and slightly blocky but nothing is wasted.

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

Completeness5/5

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

No output schema exists, yet the description explains the return payload (`boxes_used` with objects/min/max/size, `moved_by`, top-level min/max being of `part` alone). Combined with the defaults, anchor semantics, and surface limitations, 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.

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so: anchors are explained as fractions 0..1 per axis with concrete examples ('(0.5,0.5,0)' bottom centre, '(0.5,0.5,1)' top centre), `offset` is stated to be in metres, and `with_children` semantics are spelled out. Every non-obvious parameter is decoded.

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

Purpose5/5

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

States a specific verb and resource with the exact mechanism: 'move `part` (with its children) so an anchor of its world box lands on an anchor of the box of `to`'. It also distinguishes itself from siblings by naming move_to_contact, place_on, and transform_objects as the routes for surface-aware or known-offset moves.

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

Usage Guidelines5/5

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

Explicitly covers when NOT to use it and why: 'Surfaces are not looked at', 'Boxes do not follow round or slanted surfaces', and directs the agent to move_to_contact for real gaps, place_on for uneven ground, and transform_objects for a known offset. Alternative selection is fully resolved.

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

bake_mapsA
Destructive

Bake the material of one mesh into PNG maps on its UV, so glTF can carry a procedural or layered material. Uses Cycles on the CPU. maps: base_color (sRGB), normal (tangent space), roughness, metallic, ao, orm (one image: R occlusion, G roughness, B metallic). Empty means base_color, normal, roughness, ao. For a metal ask for base_color, normal, orm. Files are _.png in out_dir (the work folder, bakes/, when empty). size is pixels, a power of two: 512-1024 for props, 2048 for a hero asset. margin is the pixel padding around UV islands. samples: 16 is enough for colour and normal, raise it for a clean ao. bevel_radius (metres, about 0.2-0.5% of the object size) rounds hard edges in the normal map only; it needs a material without an image normal map. The mesh needs a UV map without overlaps (check_mesh reports the UV); without one it is unwrapped with smart project. uv_layer picks another layer. A material without bump gives a flat normal map and the answer says so. replace_material=true builds the Principled material <object>_baked from the images and puts it on the mesh, so export_glb writes the textures. ao alone stays a file; inside orm it becomes occlusionTexture. One call bakes one object. Background job, one map per step (a 2048 px map takes 20-60 s): after wait seconds the answer is a job id for job_status (cancel=true stops it). Do not edit the object while it runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
mapsNo
sizeNo
waitNo
marginNo
objectYes
out_dirNo
samplesNo
uv_layerNo
bevel_radiusNo
replace_materialNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false; the description adds substantial behavioral context: Cycles CPU, background job with one map per step, 20–60 s timing, job_status polling, cancel behavior, and the warning not to edit the object while running. No contradictions.

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

Conciseness5/5

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

Long but justified by 10 undocumented parameters and a multi-step job workflow. The first sentence front-loads purpose, and every following sentence supplies needed operational or parameter detail without redundancy.

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

Completeness5/5

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

Complete for a destructive, background-job baking tool with no output schema: it covers prerequisites (UV map), job return via job_status, material replacement effects on export_glb, and edge cases like flat normal maps. Nothing essential is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It explains all ten parameters, including map choices and defaults, output naming and out_dir fallback, size recommendations, margin, samples, bevel_radius constraints, UV layer selection, and replace_material behavior.

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

Purpose5/5

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

States a specific verb (bake) and resource (material of one mesh into PNG maps on its UV), and ties the purpose to glTF carrying procedural or layered materials. It distinguishes itself from material-creation siblings by being the baking step.

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

Usage Guidelines4/5

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

Provides clear context, including that export_glb writes the textures when replace_material is true, and gives map-selection guidance for metals and occlusion. However, it does not explicitly name when to choose it over siblings like procedural_material or set_material, nor 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.

bevel_edgesA
Destructive

Round or chamfer the edges sharper than angle degrees (optionally only those whose midpoint is inside where, which uses x, y, z ranges and box). width is in metres (empty: 0.02 m, less on objects under 0.3 m), segments 1 is a chamfer, 3 is round. profile 0.5 is circular. width_type width is the distance between the two new edges. Only edges with two faces can be bevelled. Overlapping bevels are clamped, and one tight edge limits every bevel of the call: the answer gives width (asked), achieved_width (min and median measured on the result, in metres), clamped (edges under 90% of the asked width) and a warning when most are clamped. Doubled vertices and zero-area faces are removed afterwards (merged_vertices, removed_zero_faces).

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
whereNo
widthNo
objectYes
profileNo
segmentsNo
width_typeNooffset

TDQS

A4/5.0
Behavior5/5

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

Despite annotations already flagging destructiveHint=true, the description adds substantial behavioral context: clamping of overlapping bevels, the 'one tight edge limits every bevel' rule, the returned fields (achieved_width, clamped, warning), and post-processing that removes doubled vertices and zero-area faces. This goes well beyond the annotation layer.

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

Conciseness4/5

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

The purpose is front-loaded and every sentence carries technical information (defaults, return fields, cleanup). It is dense and runs long as a single block, but there is little wasted wording.

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

Completeness4/5

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

For a 7-parameter mesh-mutation tool with no output schema, the description supplies return-value semantics and clamping/warning behavior, which is exactly what an agent needs. Coverage of the remaining width_type enum values is the only notable omission.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the burden and does so well: it defines width units and default, segments (1=chamfer, 3=round), profile (0.5=circular), width_type 'width' semantics, and where as x/y/z ranges and box. It omits the other enum values (offset, depth, percent, absolute), leaving a small gap.

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

Purpose4/5

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

The opening clause names a specific verb and resource: 'Round or chamfer the edges sharper than `angle` degrees', which uniquely identifies a bevel operation. It does not name any sibling (e.g. weld, subdivide, extrude_faces) to disambiguate, so it is clear but stops short of explicit sibling differentiation.

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

Usage Guidelines3/5

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

Usage conditions are implied through constraints ('Only edges with two faces can be bevelled', angle threshold, optional `where` filter) rather than stated as when-to-use guidance. There is no explicit statement of when to prefer this over alternatives like subdivide or inset_faces.

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

bindA
Destructive

Skin meshes to an armature: adds one vertex group per bone, the Armature modifier and the parent. method 'proximity' weights each vertex by its distance to the nearest bones (up to max_influences, power falloff; fast, works on any mesh, good for stylised low-poly); 'auto' uses Blender's heat-map weights and falls back to proximity when the mesh is not clean. Existing groups with the same names are overwritten. Check with check_weights, then try poses with pose_sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
meshesYes
methodNoproximity
falloffNo
armatureYes
max_influencesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare destructiveHint=true but say nothing about what is destroyed; the description supplies that by stating existing same-named groups are overwritten. It also discloses the auto→proximity fallback and the relative performance of each method. It still doesn't state permission/context requirements or whether non-matching groups are preserved.

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

Conciseness4/5

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

Front-loads the action, then the concrete effects, then method trade-offs, then overwrite semantics, then workflow pointers. Dense but each clause adds information; the parenthetical semicolon style is slightly heavy but not wasteful.

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

Completeness4/5

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

For a destructive, no-output-schema tool this covers the essential agent needs: what it mutates, what it overwrites, method choice, and how to verify the result. Missing only finer details such as context/selection requirements and treatment of pre-existing groups that don't share bone names.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden, and it meaningfully explains three of five parameters: the two method enum values with their trade-offs, max_influences as the influence cap, and falloff as a power exponent. 'meshes' and 'armature' are only implied by the opening sentence rather than defined (e.g. name references), leaving a small gap.

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

Purpose5/5

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

Opens with a specific verb+resource ('Skin meshes to an armature') and immediately enumerates the concrete effects (vertex group per bone, Armature modifier, parent). This distinguishes it from siblings like parent, attach, and transfer_weights, which an agent could otherwise confuse it with.

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

Usage Guidelines4/5

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

Gives method-selection guidance with conditions: 'proximity' for fast/stylised low-poly, 'auto' for clean meshes with a proximity fallback. It also routes the agent downstream ('Check with check_weights, then try poses with pose_sheet'). No explicit when-not-to-use or prerequisites (e.g. selection/context requirements) are stated, so it stops short of a 5.

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

bisectA
Destructive

Cut the mesh with a world plane (across axis at the coordinate at): adds an edge loop there, like a loop cut placed in metres. clear removes one side (the inner side is the negative side of the axis); fill=true closes the cut. Use it to slice, to add a loop for later extrusion, or to trim a part flat.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
axisNoZ
fillNo
clearNo
objectYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and that this is not a read-only or open-world operation. The description goes beyond them by explaining what the destruction actually is: 'clear' discards one side of the cut, the discarded inner side is defined as the negative side of the axis, and 'fill' closes the resulting cut. It does not address reversibility/undo or mesh prerequisites, which keeps 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.

Conciseness5/5

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

Two dense sentences with the core operation front-loaded, followed by parameter behavior, then use cases. Nothing is repeated from the schema or annotations and no sentence is filler.

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

Completeness4/5

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

For a five-parameter destructive mesh edit with no output schema and annotation-only safety hints, this covers the operation, the parameter conventions, and intended uses well. Minor gaps remain around prerequisites (e.g. whether the object must be manifold or selected) and undo expectations.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the parameters and largely does: it explains 'axis' and 'at' as the cutting plane, 'clear' as inner/outer removal with the convention that inner = negative side of the axis, and 'fill' as closing the cut. Only the required 'object' parameter is left unexplained, which is near-universal for this toolset.

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

Purpose4/5

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

States a concrete verb and resource ('Cut the mesh with a world plane') and pins the operation down with a useful analogy ('like a loop cut placed in metres') plus the exact axis/coordinate it acts on. It does not explicitly contrast itself with nearby siblings like boolean, subdivide, or mirror, but the operation is unmistakable.

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

Usage Guidelines4/5

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

The final sentence gives three concrete use cases: slice, add a loop for later extrusion, or trim a part flat. There is no explicit when-not guidance or named alternative (e.g. when to prefer boolean or a face-based cut over a world-plane cut), so it stops short of full routing guidance.

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

blobA

Make one smooth organic mesh from overlapping balls (metaballs): the balls merge into a single skin. Good for hands, clouds, bushes, rocks, creature bodies. One radius per point; nearby balls blend, so use radii a bit larger than the surface you want.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
radiiYes
pointsYes
thresholdNo
resolutionNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare non-readOnly, non-destructive, non-openWorld, so safety is covered; the description adds real behavioral context about how overlapping balls blend and how radii interact with the resulting surface. It does not say that a new object is created, how it is named, or what resolution/threshold do to output density.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the technique, then use cases, then the one non-obvious parameter rule. Nothing is padding and the sizing advice is actionable.

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

Completeness2/5

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

A five-parameter generative tool with no output schema and no schema descriptions needs more than this: the effect of threshold and resolution on the result is never explained, and the description never states what is produced (a new named object) or whether it replaces existing geometry.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden. It usefully clarifies that radii is one value per point (the key mapping between the two parallel arrays), but leaves name, threshold, and resolution — the latter two defaulting to 0.6 and 0.05 with no explanation of their effect on the mesh — entirely undocumented.

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

Purpose4/5

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

States a specific verb and resource ("make one smooth organic mesh from overlapping balls (metaballs)") and explains the defining mechanic: the balls merge into a single skin. It clearly separates itself from hard-surface siblings like create_primitive or loft by naming the metaball technique, though it never names a sibling explicitly.

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

Usage Guidelines4/5

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

Gives concrete when-to-use context ("Good for hands, clouds, bushes, rocks, creature bodies") plus a practical sizing rule ("use radii a bit larger than the surface you want"). It stops short of when-not-to-use or pointing to an alternative tool for hard-surface or single-primitive work.

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

booleanA
Destructive

Combine two meshes: a is changed, b is the tool and is deleted unless keep_tool. difference cuts b out of a. Both should be closed and have outward normals (check_mesh). With repair=true an open mesh is first healed with repair_mesh (the answer lists repaired). If that does not close it, the call fails and names the object, the number of open edges and where they are (world box). a keeps its own material slots: the faces made by b take the material of the faces of a next to them, and empty slots are removed. The result is welded and its zero-area faces are dissolved (merged_vertices, removed_zero_faces; doubled_vertices_left where parts only touch along an edge). The result is checked: when solver leaves new boundary or non-manifold edges, the other solvers and a tool shifted by a few micrometres are tried; the answer names the solver used (and tool_shift_m). If none gives a closed result the call fails, changes nothing, and gives the edge counts and their world box. allow_open=true skips the input check and keeps such a result with a warning. Use it for windows, doors, holes, notches.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes
repairNo
solverNoEXACT
keep_toolNo
operationNodifference
allow_openNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses substantial behavior: repair/repair_mesh healing, exact failure conditions and what they report, solver fallback logic including a micrometre tool shift, material slot inheritance rules, welding and zero-area face dissolution, and the allow_open override with a warning. This is a model of behavioral disclosure for a mutation tool.

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

Conciseness4/5

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

Dense and long, but front-loaded with the core action and every sentence carries distinct information (failure modes, returned fields, materials). Slight over-density but appropriate for a tool with this many interacting behaviors.

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

Completeness5/5

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

Complete for a 7-parameter, no-output-schema tool: it even names the answer fields (repaired, merged_vertices, removed_zero_faces, doubled_vertices_left, solver, tool_shift_m), covers failure paths, and closes the loop on both input preconditions and result validation.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so well: it explains keep_tool, repair, allow_open, the solver fallback, and operation ('difference' is spelled out, union/intersect implied by the enum). The enum values EXACT/MANIFOLD/FLOAT themselves are not individually defined, but their selection mechanism is described.

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

Purpose4/5

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

States a specific verb+resource ('Combine two meshes') and explains the transformation precisely: `a` is changed, `b` is the tool and deleted unless keep_tool, and difference cuts b out of a. However, it never differentiates itself from the sibling `combine` tool, leaving ambiguity about which to pick for merging meshes.

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

Usage Guidelines4/5

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

Gives clear application context ('Use it for windows, doors, holes, notches') and states the key precondition that both meshes should be closed with outward normals (check_mesh). It stops short of naming alternatives or when-not to use it, e.g. versus `combine`.

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

build_from_gridA

Block out a level from a text plan, one string per row, row 0 at the top (+Y), column 0 at the left. Default characters: '#' wall, '.' floor, ' ' nothing, 'D' doorway (floor, with a wall above door_height), 'C' cover box (cover_height high, cover_fill of the cell), 'S' spawn marker, 'O' objective marker. legend adds or changes characters: {"W": {"kind": "wall", "height": 1.2}} makes low walls; kinds are wall, floor, door, cover, marker (with "name"), void. Makes {name}_floor, {name}_walls, {name}_cover meshes and {name}_spawn_1 style empties. Then prove it with walkable_map, route, check_passages, sightline_map. One cell is cell metres: use 1 for rooms, 0.5 for detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNo
nameNolevel
layoutYes
legendNo
originNo
cover_fillNo
door_heightNo
wall_heightNo
cover_heightNo
floor_thicknessNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real behavioral context: the exact named meshes/empties produced, the coordinate orientation, and the door/cover height semantics. It does not say whether same-named objects are overwritten or how the operation fails, which keeps it from a 5.

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

Conciseness4/5

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

Front-loaded with the core purpose, then packed with necessary encoding details; almost every clause adds usable information. It runs long and the unit guidance ('cell metres') arrives last as an addendum, but there is little outright waste.

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

Completeness4/5

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

For a 10-parameter, no-output-schema creation tool, this covers input encoding, produced artifacts, and downstream verification adequately. The unmentioned origin/floor_thickness/wall_height parameters are the only real gap for correct invocation.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the burden and largely does: it explains layout format, legend structure with kinds, cell units, and ties cover_height/cover_fill/door_height to the 'C' and 'D' characters. However, origin, floor_thickness, and wall_height (as distinct from per-legend height) are never mentioned, leaving part of the 10-param surface undocumented.

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

Purpose5/5

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

States a specific verb and resource ('Block out a level from a text plan') and immediately pins down the input format (one string per row, row 0 at top/+Y, column 0 at left). The character legend and output artifacts ({name}_floor, {name}_walls, {name}_cover, {name}_spawn_1) make it unmistakably distinct from generic siblings like create_primitive or terrain.

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

Usage Guidelines4/5

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

Explicitly routes the agent to verification tools ('prove it with walkable_map, route, check_passages, sightline_map') and gives a selection heuristic for cell size ('1 for rooms, 0.5 for detail'). It lacks any when-not-to-use or comparison against alternative level-blocking siblings, so it stops short of 5.

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

check_contactsB
Read-only

State of two meshes: 'intersecting' (one pushes into the other), 'touching' or 'apart' (with the smallest vertex distance). For an overlap it gives the deepest sample, the median depth and the share of each mesh that lies inside the other: a glaze shell on a donut may have a deep spot (a drip) but a small median. Use it to find floating or sunken parts.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare a safe read-only, closed-world operation, and the description adds genuinely useful behavioral detail beyond them: the exact states returned and, for overlaps, the deep-sample/median-depth/inside-share metrics with an illustrative donut-glaze example. It stops short of noting performance or mesh-validity prerequisites, but the output semantics are unusually well disclosed.

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

Conciseness4/5

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

The state definitions are front-loaded and the two sentences carry no filler; the donut example earns its place by clarifying a non-obvious metric. Density is high but readable.

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

Completeness3/5

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

With no output schema, the description usefully explains the returned states and overlap metrics, covering the return-value gap. It still leaves the parameters undefined and mirrors the floating-parts use case of a sibling (find_floating) without disambiguating, so an agent has enough to try the call but not to call it confidently.

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

Parameters2/5

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

Schema coverage is 0% and the two required parameters are named only 'a' and 'b'. The description's phrase 'two meshes' indirectly implies they are mesh identifiers, but it never states that a and b are mesh names/IDs, their format, or their ordering effect. The parameter gap is largely uncompensated.

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

Purpose4/5

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

The description states a specific operation on a concrete resource: reporting the contact state (intersecting/touching/apart) between exactly two meshes, including depth metrics. It is clearly distinguishable from most siblings, though it never explicitly contrasts itself with closely related tools like check_mesh, measure or find_floating.

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

Usage Guidelines3/5

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

It gives one concrete use case ('find floating or sunken parts'), which is real usage guidance. However, it names no alternatives (e.g. find_floating, line_of_sight, check_mesh) and states no when-not-to-use conditions, so routing among similar siblings 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.

check_game_readyA
Read-only

Pre-export gate. Errors: bad names, unapplied scale, no material, faces without a material (a boolean cutter without one leaves them), inward normals, zero-area faces, oversized textures, budget overruns (the max_* limits). Warnings: duplicate suffixes (.001), many material slots, empty material slots, missing UV, n-gons, open shells, and a mesh that is nearly but not fully symmetric about symmetry_axis: under 10 percent of its vertices have no mirror partner (plane: the middle of its box, or 0). That is a side broken by an uneven selection; a silhouette does not show it. symmetry_axis=null skips it. ready is true when there are no errors. budget_only=true is the cheap budget question at any stage: it only counts tris, objects, materials and estimated draw calls of names (or all visible meshes) and lists the limits exceeded in over_budget. It also gives draw_calls_if_instanced: objects that repeat one mesh with the same materials cost one call with GPU instancing; the hint says when merging them with combine pays off.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNo
max_trisNo
require_uvNo
budget_onlyNo
max_objectsNo
max_textureNo
name_patternNo^[A-Za-z0-9_]+$
max_materialsNo
symmetry_axisNoX
max_draw_callsNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only establish read-only/non-destructive/no-open-world, and the description goes well beyond that: it distinguishes errors from warnings, states that `ready` is true only with zero errors, explains that a boolean cutter without a material leaves faces behind, warns that near-symmetry faults are invisible in silhouette, and notes symmetry_axis=null skips the check. It also discloses the instancing/draw-call economics that budget_only reports. This is rich behavioral context the annotations cannot supply.

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

Conciseness4/5

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

Front-loaded with the purpose, then errors, then warnings, then the budget_only mode — a logical order with no filler sentences. It is dense and slightly long as a single block, which costs it a point, but every clause maps to an actual check or parameter.

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

Completeness4/5

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

For a 10-parameter tool with no output schema, the description covers the validation taxonomy, the `ready` flag semantics, and two output fields (over_budget, draw_calls_if_instanced) plus the instancing hint. Some parameter defaults and the remainder of the return payload are left implicit, so it is nearly but not fully complete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does map most parameters to meaning: names, the `max_*` budget limits, max_texture ('oversized textures'), max_materials ('many/empty material slots'), require_uv ('missing UV'), name_pattern ('bad names'), and symmetry_axis including the null-skip behavior. It does not individually disambiguate max_tris vs max_objects vs max_draw_calls or explain default values, so it is strong but not complete.

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

Purpose4/5

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

Opens with a concrete framing ('Pre-export gate') and then enumerates the exact error and warning categories checked, so an agent knows precisely what class of validation this performs. It clearly separates itself from mesh-level siblings like check_mesh through the export-readiness framing. It never names a sibling, so it stops short of the explicit differentiation a 5 requires.

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

Usage Guidelines4/5

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

'Pre-export gate' establishes the primary call site, and the budget_only paragraph explicitly states it is 'the cheap budget question at any stage', giving a clear when-to-use rule for the fast mode. There is no explicit statement of when NOT to call it or which sibling to prefer for narrower checks (e.g. check_symmetry, check_mesh).

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

check_meshB
Read-only

Triangle and n-gon count, open holes, loose parts, zero-area faces, doubled vertices, inward normals and unapplied scale. 'issues' is ['none'] when the mesh is clean. uv is the quality of the UV map: island count, used area, faces outside 0..1, degenerate faces and texel_density_spread (largest to smallest UV area per surface area: 1 is even, above 4 is stretched), or 'none' when the mesh has no UV map.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds valuable output semantics beyond the annotations: it explains that 'issues' is ['none'] when the mesh is clean and defines the UV quality fields, including the texel_density_spread threshold where above 4 means stretched.

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

Conciseness5/5

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

The description is front-loaded with the diagnostic list, followed by concise explanations of the 'issues' and 'uv' fields. Every sentence adds useful information, with no filler or repetition.

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

Completeness3/5

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

There is no output schema, so the description must explain return values; it does so for 'issues' and the UV map fields but not for the full return structure, such as counts, arrays of holes, or loose parts. It also leaves the required 'name' parameter unexplained and provides no usage context, making it only minimally complete for an agent to invoke it correctly.

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

Parameters1/5

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

The schema has one required parameter, 'name', with 0% description coverage, and the description never mentions or explains it. With low schema coverage, the description is expected to compensate, but it provides no information about what the name refers to or how to supply it.

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

Purpose4/5

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

The description clearly states that the tool reports mesh diagnostics: triangle/n-gon counts, open holes, loose parts, zero-area faces, doubled vertices, inward normals, unapplied scale, and UV quality. It distinguishes itself from generic mesh-info siblings by focusing on quality issues and UV metrics, but it never explicitly says how it differs from tools like mesh_info or check_game_ready.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to call this tool versus alternatives such as mesh_info, check_game_ready, or repair_mesh. The implied use case—validating a mesh—is inferable from the name and output list, but the description provides no when-to-use, when-not-to-use, or routing guidance.

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

check_passagesA
Read-only

Find doorways and corridors of a level that are too narrow. It follows the centre line of the walkable area and reports narrow runs: a run up to door_length metres long is a doorway (limit min_door), a longer one a corridor (limit min_corridor). The width is the free width including the agent radius, accurate to about one cell, and it errs on the small side. Returns violations with positions and a map. start picks the area when there are several levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNo
namesNo
startNo
min_doorNo
door_lengthNo
agent_heightNo
agent_radiusNo
min_corridorNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and a closed world, so safety is covered. The description adds real behavioral value beyond that: width is measured as free width including agent radius, accuracy is 'about one cell', and the error 'errs on the small side' — a conservative bias an agent must know when interpreting pass/fail. It also discloses the return shape ('violations with positions and a map').

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

Conciseness4/5

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

The core purpose is front-loaded in the first sentence, and the following sentences each add a distinct fact (classification rule, measurement semantics, accuracy, return shape, level selection). It is dense but nearly every clause earns its place; the run-on middle sentence is the only mild structural wrinkle.

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

Completeness4/5

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

For a read-only analysis tool with no output schema, the description covers what an agent needs to call and interpret it: the measurement definition, the conservative error direction, and the returned artifacts. Minor gaps remain around 'names' and 'agent_height' and around cost/scale on large levels, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is 0% across 8 parameters, so the description must carry the load, and it does substantially: it defines min_door, min_corridor, door_length, the role of start, and implies agent_radius ('including the agent radius') and cell ('accurate to about one cell'). Only 'names' and 'agent_height' are left undefined, so it compensates well but not completely.

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

Purpose5/5

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

States a specific verb and resource — 'Find doorways and corridors of a level that are too narrow' — and defines the check precisely (narrow runs along the walkable centre line, doorway vs corridor classification). It is clearly distinguishable from siblings like walkable_map, route, and line_of_sight, which deal with reachability rather than narrowness.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the tool is evidently a navigation-clearance validator, but the description never says when to prefer it over walkable_map, check_game_ready, or measure, nor does it state prerequisites such as needing geometry already built. The mention that 'start' picks the area 'when there are several levels' is the only contextual trigger offered.

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

checkpointB

Save the scene as a named restore point. Checkpoints belong to the open file (an id kept in the scene): a new or another file does not see them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNolast

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=false (a write), destructiveHint=false, and openWorldHint=false. The description adds non-obvious scope semantics beyond those annotations: checkpoints are bound to the open file and are not visible to a new or different file. It still doesn't disclose overwrite behavior for the default name.

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

Conciseness4/5

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

Two compact sentences with the core action front-loaded. The second sentence is longer than strictly necessary but carries genuinely useful scoping information rather than filler.

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

Completeness3/5

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

For a one-parameter write tool with annotations covering the safety profile and no output schema, the definition covers purpose and persistence scope but omits when to use it relative to rollback and the meaning of the name argument. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 0% for the single 'name' parameter. The description's word 'named' hints that the argument labels the checkpoint, but it does not explain the default value 'last' or what naming implies (e.g., overwriting an existing checkpoint), so it only partially compensates.

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

Purpose4/5

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

States a specific verb and resource: 'Save the scene as a named restore point.' An agent can understand what it produces, but the description never names or contrasts with the obvious sibling (rollback), so differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives such as rollback or save_blend. The only context is a note about file scoping, which describes behavior rather than when to invoke the tool.

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

check_symmetryA
Read-only

Mirror all vertices of the objects across a plane and count those without a partner within tolerance. at is the plane position on the axis; empty means the middle of the bounding box. Empty tolerance means 0.005 m for objects of 0.3 m and more, and less for small ones (it follows the size). The answer shows the value used.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
axisNoX
namesYes
toleranceNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish read-only, non-destructive, closed-world behavior, so the bar is lower. The description still adds real value by disclosing the default for `at` (bbox middle) and a context-dependent default for `tolerance` (0.005 m for objects >= 0.3 m, smaller for small ones) and noting the result echoes the value used.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core operation, then the two parameter defaults. Every sentence earns its place; only the somewhat compressed backtick phrasing slightly slows reading.

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

Completeness3/5

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

For a 4-parameter tool with no output schema, the description covers the trickiest defaults but leaves `axis` semantics, the relationship between `axis` and `at`, and any detail of the returned answer unspecified beyond one clause.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden. It covers `at` and `tolerance` defaults well, but `axis` (the enum that `at` is measured along) is never mentioned, and `names` is only obliquely referenced as 'the objects'.

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

Purpose4/5

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

The description states a specific operation (mirror vertices across a plane and count unmatched ones), which is precise enough to reveal that this is a symmetry analysis rather than a geometry edit. It does not explicitly differentiate itself from the sibling `mirror` tool, which an agent could easily confuse it with given the shared 'mirror' wording.

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

Usage Guidelines3/5

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

Usage is implied by the name and the counting semantics, but there is no statement of when to use this versus `mirror`, `check_mesh`, or `check_contacts`. No exclusions or prerequisites are given.

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

check_weightsB
Read-only

Skin quality: vertices without weight, with more than max_influences bones (glTF wants 4), weights that do not sum to 1, groups that match no bone, a missing Armature modifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
meshYes
max_influencesNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this as a safe, read-only, closed-world operation, so the safety profile is covered. The description adds genuine value by listing the failure conditions it detects, but says nothing about what the result looks like (report, list of offending vertices, pass/fail) or how severe each finding is, which matters for a tool with no output schema.

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

Conciseness4/5

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

A single front-loaded fragment beginning with 'Skin quality:' followed by a tight list of checks. Every clause carries information and nothing is padded, though the sentence fragment style is less readable than a complete sentence would be.

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

Completeness3/5

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

For a two-parameter read-only diagnostic with no output schema, the description covers what is checked but not what the agent receives or what to do next. Given sibling tools like transfer_weights, bind, and repair_mesh exist, a hint about remediation after a failed check would round it out.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden. It explains max_influences indirectly by noting the glTF target of 4 bones, which clarifies the threshold's purpose, but the required 'mesh' parameter is not described at all (e.g., whether it takes an object name or a mesh datablock).

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

Purpose4/5

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

The description names a specific resource (skin weights) and enumerates exactly what is inspected: unweighted vertices, excess bone influences, non-normalized weights, orphan vertex groups, and a missing Armature modifier. That is far more concrete than a generic 'check' tool, though it never names how it differs from nearby diagnostics like check_mesh or check_game_ready.

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

Usage Guidelines2/5

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

There is no explicit when-to-use statement and no named alternative. The parenthetical 'glTF wants 4' faintly implies a pre-export validation context, but the agent is left to infer that this is a pre-export or post-bind quality gate rather than being told.

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

combineA
Destructive

Merge several meshes into one mesh object, as Join (Ctrl+J) does in Blender (in world space, materials kept). Do it before export to save draw calls. The parts are not welded or moved: use move_to_contact to close a gap.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
namesYes
delete_sourcesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral facts beyond them: the merge happens in world space, materials are preserved, and geometry is neither welded nor moved. It omits, however, that source objects are removed by default (delete_sources=true), which is the concrete destructive consequence.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core operation, followed by motivation and the key semantic caveat. No filler or repetition.

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

Completeness3/5

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

There is no output schema, so the description should carry more weight. It covers purpose, timing, and geometry semantics well, but leaves the fate of the source objects (default deletion) and the naming of the result unexplained — significant omissions for a destructive mutation tool.

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

Parameters2/5

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

Schema description coverage is 0% and the description says nothing about any of the three parameters. It never explains that `names` is the list of objects to merge, what `name` does (output object naming), or — most importantly — that `delete_sources` defaults to true and destroys the originals. With zero schema documentation, the description needed to carry this load and does not.

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

Purpose5/5

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

States a specific verb and resource ('Merge several meshes into one mesh object') and anchors it to a familiar reference behavior ('as Join (Ctrl+J) does in Blender'). It also contrasts the operation with siblings by clarifying it is not welding (vs `weld`) and not a positioning op (vs `move_to_contact`).

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

Usage Guidelines4/5

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

Gives a concrete when-to-use rule ('Do it before export to save draw calls') and routes a related need to an alternative ('use move_to_contact to close a gap'). It stops short of naming when NOT to combine, e.g. when separate objects are still needed downstream (vs `attach`/`parent`), but the guidance is clearly actionable.

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

compare_viewA
Read-only

Compare the model with a reference image in one flat view: the main metric of a build from references. The reference is placed in the world: its bottom on the model bottom, horizontal centres equal. Scale: height_m is the real size of the subject along the VERTICAL of the (turned) picture, width_m along its horizontal; give one, and a model that is too big or too small is caught. With none the reference is fitted to the model height and only the outline shape is compared. iou_outline is always that shape-only match. Views (the model front faces -Y, Z up) and the picture each expects. front: +X to the right. back: -X to the right. right (side is the same): camera on +X, the front points LEFT. left: the front points right. top: +X to the right, the front at the BOTTOM. bottom: the front at the top. flip ('x' left-right, 'y' top-bottom) and rotate (degrees clockwise; flip first) turn the reference for this call. names is the model (empty: everything visible but a huge floor or backdrop, listed in excluded). Returns iou_registered, both sizes, a table per band along the vertical (widths, delta, shift, verdict; worst first) and inner_detail: edge_agreement 0..1 between the reference inner edges and the creases and depth steps of the model (the IoU does not see slots and holes inside the outline). Under IoU 0.3 a hint says if a mirrored or turned reference fits far better. The image: reference, model, overlay (red reference outline, green model outline, yellow and blue inner edges), difference; out also saves it. colors=N adds the match of N colour classes of the reference. For a perspective photo use match_camera and overlay_reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNo
flipNo
sizeNo
viewNofront
bandsNo
namesNo
colorsNo
rotateNo
width_mNo
height_mNo
referenceYes
thresholdNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark it readOnly/non-destructive, and the description goes well beyond them: it enumerates return values (iou_registered, both sizes, per-band table with verdicts, inner_detail edge_agreement), explains the sub-0.3 IoU hint, the empty-`names` behavior listing a huge floor/backdrop in `excluded`, and that `out` writes the composite image. That is rich behavioral disclosure the annotations cannot carry.

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

Conciseness3/5

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

Nearly every sentence carries non-redundant information, but it is delivered as one dense run-on paragraph with no headers or bullets, forcing the agent to parse view-by-view orientation details mixed with return-value notes. Appropriately sized for a 12-parameter tool, but poorly structured for front-loaded scanning.

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

Completeness4/5

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

For a complex 12-parameter tool with no output schema, the description covers the interaction model, scale semantics, view conventions, output payload, and side effects of `out`, which is close to sufficient. Gaps remain on size, bands, and threshold semantics.

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

Parameters4/5

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

With 0% schema description coverage the description must do the work, and it explains view (with per-view axis orientation), flip/rotate ordering, height_m vs width_m semantics, names, colors, and out in real detail. It leaves size, bands, and threshold unexplained, so it compensates for most but not all of the 12 parameters.

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

Purpose5/5

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

States a specific verb+resource+scope: comparing a model against a reference image in a single flat orthographic view, and calls out that it produces the main build-from-references metric. It also separates itself from neighbors, explicitly routing perspective photos to match_camera and overlay_reference, so an agent can distinguish it from fit_to_reference/overlay_reference without opening a schema.

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

Usage Guidelines4/5

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

Gives a clear alternative route ('For a perspective photo use match_camera and overlay_reference') and conditions for the scale parameters (give height_m/width_m to catch a size mismatch, omit both to compare shape-only). It lacks an explicit when-not-to-use statement or a direct comparison to the closer sibling fit_to_reference.

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

create_armatureA

Make a skeleton from numbers. bones is a list of {"name", "head": [x,y,z], "tail": [x,y,z], "parent": name (optional), "connect": bool (optional)} in world metres; list parents before children. For a biped: root, spine, chest, neck, head, and arms and legs with L/R suffixes. Then bind a mesh with bind, and test with pose.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
bonesYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare it is a non-destructive, non-open-world write. The description adds real behavioral context beyond that: bones are in world metres and parents must be listed before children, an ordering constraint that will cause failures if violated. It does not say what happens on name collision or what is returned.

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

Conciseness3/5

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

Purpose is front-loaded in the first sentence, but the bones schema is rendered with stray quotes and mid-sentence line breaks, making the spec harder to parse than it needs to be. Content mostly earns its place, but the formatting is sloppy.

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

Completeness4/5

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

For a two-parameter creation tool with annotations covering the safety profile and no output schema, the description covers the input format, ordering requirement, and follow-up workflow. Missing only the armature 'name' semantics and error/collision behavior.

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

Parameters4/5

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

Schema coverage is 0% and the bones array is an untyped object with additionalProperties, so the schema documents nothing. The description compensates by enumerating the exact item keys (name, head, tail, parent, connect) and units, which is substantial added meaning; only the top-level 'name' parameter is left unexplained.

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

Purpose4/5

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

States a concrete verb and resource: make a skeleton (armature) from numeric bone data. An agent can distinguish it from mesh-creation siblings like create_primitive or limb, though it never explicitly contrasts itself with limb or list_bones.

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

Usage Guidelines4/5

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

Gives a clear workflow: create the armature, then 'bind a mesh with bind, and test with pose', naming the two sibling tools that follow this one. It does not state when NOT to use it or prerequisites (e.g. mesh must already exist), so it stops short of a 5.

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

create_primitiveA

Create a primitive with a real size in metres (no hidden scale). For a torus size is [outer width, outer depth, tube thickness], segments is the count around the ring. The anchor point of its bounding box (fractions 0..1) is placed at world point at: anchor (0.5,0.5,0) with at (0,0,0) stands the shape on the ground. size is the size before rotation. rotate_deg [rx, ry, rz] turns the shape about the point at around the world X, then Y, then Z axis, after it is placed. A barrel along +X: a cylinder with rotate_deg [0, 90, 0]. The answer shows the size and box after the turn.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
kindYes
nameYes
sizeNo
anchorNo
segmentsNo
rotate_degNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the write/non-destructive/non-open-world profile, so the bar is lower, and the description adds real context beyond that: size is in metres with no hidden scale, anchor is a fraction of the bounding box placed at the world point, rotation order is world X then Y then Z about 'at', and size is pre-rotation. It also hints at the return ('the size and box after the turn'). It doesn't cover failure modes or permission needs, keeping it below 5.

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

Conciseness4/5

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

The text is dense and front-loaded, leading with the core sizing constraint and then unpacking anchor, size, and rotation in logical order. Every sentence carries geometric information, though the run-on style (multiple concepts per sentence) slightly reduces scannability.

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

Completeness4/5

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

For a 7-parameter creation tool with no output schema and no schema descriptions, the definition supplies the placement, sizing, rotation, and segment semantics an agent needs, plus a note on the returned size/box. It is nearly complete, with only the 'kind' enum meanings and naming conventions left unstated.

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

Parameters5/5

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

With 0% schema description coverage across 7 parameters, the description carries the full burden and mostly delivers: it explains size semantics (including the torus-specific [outer width, outer depth, tube thickness]), segments as the count around the ring, anchor as bounding-box fractions 0..1, at as the world point, and rotate_deg as [rx, ry, rz] with order. Only 'kind' enum values and 'name' are left implicit, which is minor.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Create a primitive with a real size in metres (no hidden scale).' It clearly defines the geometric construction domain and even names the shape set indirectly through the torus example. However, it never distinguishes itself from siblings like loft, text_mesh, or build_from_grid, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the entry point for placing a parametric shape at a world point. There is no explicit when-to-use or when-not-to-use guidance and no reference to alternative creation tools among the many siblings. Adequate but leaves routing to inference.

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

decimateA
Destructive

Reduce the triangle count. collapse: merges vertices to reach ratio (0..1 of the current triangles) or target_tris; it can distort shapes and UVs, so check with compare_view afterwards. planar: dissolves flat faces whose neighbours differ less than angle degrees (cleans up subdivided flat surfaces without changing the shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocollapse
angleNo
ratioNo
objectYes
target_trisNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag it as destructive (readOnlyHint false, destructiveHint true). The description adds mode-specific effects beyond annotations: collapse can distort shapes and UVs and should be validated with compare_view, while planar removes flat coplanar faces with minimal shape change. It stops short of describing what data is destroyed or any permission requirements.

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

Conciseness5/5

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

The definition is front-loaded with the core purpose, then uses two compact mode-specific clauses. Every sentence earns its place and parameter names are formatted clearly with backticks.

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

Completeness4/5

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

Given no output schema and annotations covering the destructive safety profile, the description is nearly complete: it explains behavior and mode selection. The main gap is the required 'object' parameter, which is never mentioned, leaving the agent to infer it from the schema property name.

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

Parameters3/5

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

With 0% schema description coverage, the description must compensate. It explains mode, defines ratio as 0..1 of current triangles, notes target_tris as an alternative, and describes angle in degrees. It entirely omits the required 'object' parameter and does not clarify defaults or the target_tris type.

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

Purpose5/5

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

The description gives a specific verb and resource: 'Reduce the triangle count,' then defines the two operational modes. This clearly separates it from siblings like subdivide (increases geometry) and repair_mesh (fixes topology).

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

Usage Guidelines4/5

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

It provides clear context for each mode: collapse for hitting a ratio/target_tris, planar for cleaning flat subdivided surfaces, and recommends checking with compare_view after collapse. However, it does not state when to choose decimate over alternative reduction tools or list any explicit exclusions.

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

dedupe_materialsA
Destructive

Merge materials that look the same: same colour, roughness, metallic, alpha, emission, coat and same textures, each within tolerance (0.01 means 1 percent). Users move to the first material of each group, the extras are deleted, and slots that now repeat inside a mesh are joined. Fewer materials means fewer draw calls. names limits the check. Returns how many were removed and the material count before and after. Textured and procedural materials only merge when their images and node types are the same. It also cleans up, on every mesh: clean_slots=true removes empty slots and slots that no face uses (empty_slots_removed, unused_slots_removed); remove_orphans=true deletes materials with zero users (orphans_removed). An empty slot that faces still point at is kept and listed in faces_without_material: assign those faces first. tolerance=0 merges only exact copies.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNo
toleranceNo
clean_slotsNo
remove_orphansNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description goes well beyond that: it explains that users are moved to the first material, extras deleted, repeated in-mesh slots joined, and which cleanup flags delete what (empty/unused slots, orphans). It also flags the risky edge case that empty slots still referenced by faces are kept and listed in `faces_without_material`.

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

Conciseness4/5

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

Dense and front-loaded with the core merge behavior before the cleanup caveats, and nearly every sentence carries distinct information. It runs long and could compress the per-flag cleanup enumeration, but nothing is filler.

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

Completeness5/5

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

With no output schema, the description still reports what is returned (removed count, before/after material counts, empty_slots_removed, unused_slots_removed, orphans_removed, faces_without_material) and covers the destructive semantics that the annotations only hint at. Nothing needed to invoke it safely is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description must carry the full burden, and it does: `names` limits the check, `tolerance` is explained with units and the 0.01 = 1 percent example plus the tolerance=0 special case, and clean_slots/remove_orphans are each tied to their effect and returned counters.

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

Purpose5/5

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

States a specific verb and resource ('merge materials that look the same') plus the exact matching criteria (colour, roughness, metallic, alpha, emission, coat, textures). An agent can distinguish this from set_material, list_materials, and procedural_material without opening any schema.

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

Usage Guidelines4/5

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

Gives clear operative conditions: `names` limits the check, `tolerance=0` merges only exact copies, and textured/procedural materials merge only when images and node types match. It never names an alternative tool or states when NOT to dedupe, so it falls short of full routing guidance.

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

deformA
Destructive

Bend, twist, taper or stretch the whole mesh. bend and twist take amount in degrees, taper and stretch a factor. axis: for twist, taper and stretch it is the long axis of the part; for bend it is the axis the part curls around, so a standing bar (long along Z) bends forward with axis X or sideways with axis Y. origin is a world point (default the object origin); limits [0,1] restrict the effect to a fraction of the length. The mesh needs enough vertices along the axis: subdivide_faces first.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoZ
kindYes
amountYes
limitsNo
lock_xNo
lock_yNo
objectYes
originNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond annotations: the vertex-density requirement and that subdivide_faces should precede it, plus that origin defaults to the object origin.

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

Conciseness4/5

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

Front-loads the purpose, then walks through parameters in a compact, information-dense way. Every sentence targets a parameter or prerequisite; slightly dense but no filler.

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

Completeness4/5

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

No output schema exists, and for a destructive mutation tool the description supplies purpose, units, geometry semantics, and a prerequisite. The main gap is the undocumented lock_x/lock_y flags, which an agent may need to interpret.

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

Parameters4/5

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

With 0% schema coverage the description carries the burden, and it delivers: it specifies amount units (degrees for bend/twist, factor for taper/stretch), the axis meaning per kind with a worked example, origin as a world point, and limits as a [0,1] fraction. It leaves lock_x, lock_y, object, and kind unexplained, so it covers roughly half the parameters richly.

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

Purpose5/5

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

States a specific verb (bend/twist/taper/stretch) and resource (the whole mesh), enumerating the exact deformation modes. It is clearly distinguishable from siblings like transform_objects, sculpt, or noise_displace without opening any schema.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite: 'The mesh needs enough vertices along the axis: subdivide_faces first,' routing the agent to subdivide_faces when appropriate. It lacks explicit when-not conditions or alternative-tool exclusions, but the prerequisite guidance is clear context.

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

deleteA
Destructive

Delete whole objects. Take a checkpoint first if you are not sure. Give at least one of: names; prefix (every object whose name starts with it: 'bl_light_' removes the setup_lighting preset); lights (added: the lights made by add_light, all: every light). with_children=true also deletes everything parented to them. Otherwise the children stay where they are in the world and lose the parent: the answer lists them as unparented. Use delete_faces to remove a part of a mesh.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNo
lightsNo
prefixNo
with_childrenNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavior: with_children=true cascades to parented objects, otherwise children are unparented and returned in the answer as `unparented`, plus the checkpoint recommendation. It does not mention irreversibility beyond the checkpoint hint, so not a full 5.

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

Conciseness4/5

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

Front-loaded with the core action, then selectors, then child behavior, then the alternative. Dense but every clause carries information. Slightly sprawling with parentheticals, keeping it short of a 5.

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

Completeness4/5

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

No output schema exists, but the description partially covers returns (children reported as `unparented`). Selector requirements, cascade behavior, and the sibling alternative are all present, leaving only return-format details thin for a destructive, multi-mode tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry all four parameters — and it does: `names`, `prefix` with a concrete example ('bl_light_' removes setup_lighting), `lights` with both enum values explained (added = lights made by add_light, all = every light), and `with_children` semantics. This fully compensates for the empty schema.

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

Purpose5/5

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

States a specific verb+resource ('Delete whole objects') and explicitly distinguishes the scope from the sibling delete_faces ('Use delete_faces to remove a part of a mesh'). An agent can tell which deletion tool to pick without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative tool and the condition that selects it (partial mesh deletion -> delete_faces), and gives a prerequisite/when-to-use caution ('Take a checkpoint first if you are not sure'). It also states the selector requirement (at least one of names/prefix/lights), which is real routing guidance.

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

delete_facesA
Destructive

Delete the picked faces of one mesh (makes openings: doors, windows, open boxes). Use delete to remove whole objects. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNo
objectYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real context beyond that: what the operation produces (openings), how the selector behaves ({} or null picks everything), and the default angle of 25 degrees. It does not cover reversibility or failure modes, so not a 5.

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

Conciseness4/5

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

Front-loaded with purpose and the sibling distinction, then the selector grammar. Dense but every clause is load-bearing for a 0%-coverage schema. Slightly long for a single paragraph, which keeps it off a 5.

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

Completeness4/5

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

Given no output schema and only two params, the description supplies what an agent needs: destructiveness, the prerequisite inspection step, and complete selector syntax. Minor gaps remain around whether the deletion is undoable and what is returned on success.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it does: it enumerates every `where` key (normal with angle default, x/y/z ranges with null-as-open, box, area, index), states the AND semantics of 'all given keys must hold', and defines the empty-selector case. Only `object` is left implicit, which is trivially inferable as the mesh name.

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

Purpose5/5

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

States a specific verb and resource (delete faces of one mesh) and immediately clarifies the effect ('makes openings: doors, windows, open boxes'). It also distinguishes itself from the sibling `delete` by scope (faces vs whole objects), so an agent can route correctly without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent to the alternative: 'Use delete to remove whole objects.' It also gives a prerequisite ('Look at mesh_info first to see where the faces are'). No explicit when-not-to-use beyond the sibling comparison, so short of the top band.

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

diff_sinceA
Read-only

What changed since a checkpoint: added and removed objects, and objects that moved or changed size by more than tolerance metres, with sizes before and now. A changed object also gets topology (counts of verts, edges, faces and tris, before -> now) and material_slots (the slot lists before and now) when they differ, so an edit that keeps the size still shows. Use it to review a long session or to see what a tool did.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNolast
toleranceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish that this is a safe, non-destructive, closed-world read. The description goes further by disclosing the tolerance-based change-detection rule, that topology and material_slots are attached only when they differ, and the useful edge case that size-preserving edits still surface. It doesn't cover pagination or volume limits, which keeps it from a 5.

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

Conciseness4/5

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

The change-detection result is front-loaded, then the optional topology/material_slots detail, then usage. Dense but every sentence carries information; only the parenthetical before -> now phrasing is slightly repetitive.

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

Completeness4/5

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

With no output schema, the description usefully specifies what the return contains, including the conditional topology and material_slots fields. The main gap is the unexplained `name` parameter, but for a read-only diff tool the definition is otherwise sufficient to call it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden. It explains `tolerance` well (change threshold in metres, applied to movement and size), but `name` — the checkpoint reference with default 'last' — is never explained, leaving half the parameters to inference.

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

Purpose5/5

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

The description names a specific operation and resource — a diff of the scene since a checkpoint — and enumerates exactly what appears in the result (added, removed, moved/resized objects with before-and-now sizes). It is immediately distinguishable from siblings like checkpoint, rollback, and scene_tree.

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

Usage Guidelines4/5

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

It gives concrete usage contexts: 'review a long session' or 'see what a tool did'. That is clear when-to-use guidance, but it offers no exclusions or explicit routing against the closest siblings (checkpoint, rollback, scene_tree), so it stops short of a 5.

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

duplicateA

Copy an object and move the copy by offset metres. linked=true shares the mesh data. rotate_deg [rx, ry, rz] then turns the copy around the world X, Y, Z axes (in that order) about pivot, a world point. The default pivot is the centre of the copy's bounding box, after the offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
pivotNo
linkedNo
offsetNo
new_nameNo
rotate_degNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare it a non-read-only, non-destructive write. The description adds real behavioral context beyond that: `linked=true` shares mesh data, rotation order is world X then Y then Z, and the default pivot is the copy's bounding-box centre *after* the offset. That ordering subtlety is exactly the kind of detail an agent could not infer elsewhere.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the core action and then progressively adding linked-copy, rotation-order, and pivot-default semantics. No filler, though the pivot sentence could be tightened.

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

Completeness4/5

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

For a 6-param mutation tool with no output schema, the description covers the non-obvious transform behavior well. It omits what the tool returns (e.g. the new object's identifier) and the meaning of `name` vs `new_name`, which an agent calling this would plausibly want.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the burden, and it does for 4 of 6 params: `offset` (metres), `linked` (mesh sharing), `rotate_deg` (axis order), and `pivot` (world point, default bbox centre after offset). `name` and `new_name` are not explained, leaving the source-identification and copy-naming semantics to inference.

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

Purpose4/5

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

States a specific verb (copy/duplicate) and resource (an object), plus the two transformations applied to the copy. It does not explicitly differentiate itself from siblings like `array` or `mirror`, which also produce derived copies, so sibling routing is left to inference.

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

Usage Guidelines2/5

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

No when-to-use guidance or named alternatives. Among ~90 siblings that also generate copies (`array`, `mirror`, `radial_array`, `scatter`), the description never says when to pick `duplicate` instead. Usage is implied by the parameter semantics only.

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

export_glbA

Write a GLB of the named objects (with children), or of all visible geometry. glTF uses +Y up and triangulates every face. influences 4 (or 8) is the bones per vertex that the game engine reads. draco compresses geometry (the game needs the Draco decoder). Options this Blender does not know are reported as ignored_options. scale multiplies the whole export about the world origin (a 0.1 m model with scale 10 leaves as 1 m). The scene is restored after the export; the scale is written as the node scale of the top objects. max_texture_size (pixels on the longer side) writes smaller copies of larger textures into the GLB; the images in the scene and on disk stay as they are. Nine 2048 px maps make a file of about 25 MB: 1024 or 512 is enough for a small prop. The answer has textures: count, bytes, and name, size and bytes of each image in the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
dracoNo
namesNo
scaleNo
skinsNo
tangentsNo
animationsNo
influencesNo
apply_modifiersNo
max_texture_sizeNo

TDQS

A4.1/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing that the scene is restored after export, that the export scale is baked into top-object node scale, that images on disk are untouched, and that unknown options surface as ignored_options. It stops short of stating overwrite/auth semantics for the target path, but the non-destructive behavior is clearly confirmed against destructiveHint=false.

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

Conciseness4/5

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

Front-loads the core action and then attaches caveats to the parameters that need them; most sentences earn their place with concrete detail (25 MB for nine 2048 px maps). It is dense and occasionally run-on, but not padded.

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

Completeness4/5

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

For a 10-parameter mutating export with no output schema, it covers the destructive/restorative behavior, the key option semantics, and even describes the returned 'textures' payload. The remaining gap is the undocumented boolean flags (skins, tangents, animations, apply_modifiers).

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

Parameters4/5

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

With 0% schema coverage the description must carry the load and it does for the tricky parameters: draco (needs runtime decoder), influences (bones per vertex the engine reads), scale (with a concrete 0.1 m x 10 = 1 m example), and max_texture_size (with size/bytes guidance). skins, tangents, animations and apply_modifiers are left unexplained, so coverage is good but not complete.

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

Purpose5/5

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

States a specific verb and resource ('Write a GLB') and immediately scopes it ('of the named objects (with children), or of all visible geometry'), which separates it from import_glb, inspect_glb, check_game_ready and save_blend. An agent knows exactly what artifact this produces and from which selection.

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

Usage Guidelines3/5

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

Usage context is only implied via the game-engine framing (Draco decoder, influences read by the engine, game-ready file sizes); there is no explicit statement of when to prefer export_glb over save_blend or run_spec. The reader must infer the alternatives.

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

extrude_facesA
Destructive

Extrude the picked faces as one region. distance is along their average normal (negative digs in); offset is a world vector instead. scale resizes the new cap about its centre (a taper); inset first shrinks the region by that many metres. Typical: raise a roof, make a post, a step, a window recess. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
insetNo
scaleNo
whereNo
objectYes
offsetNo
distanceNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutating nature is covered. The description adds real behavioral context beyond that: negative distance 'digs in', 'as one region' implies face merging, and it names the target-prerequisite tool (mesh_info). It omits what happens to the original faces or selection afterward, keeping it out of 5 territory.

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

Conciseness4/5

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

Front-loads the core action, then parameter semantics, then typical uses and the mesh_info hint. Every sentence earns its place given 0% schema coverage, though the dense run-on parameter block borders on terse rather than cleanly structured.

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

Completeness4/5

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

With no output schema and 6 parameters, the description documents all behavioral knobs, workflow order, and the where-filter grammar, while annotations cover the safety profile. It only lacks detail on the post-extrusion state (return value, face identity), which is minor for this class of tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so thoroughly: distance (average normal, negative direction), offset (world vector alternative), scale (taper about centre), inset (metres), and an exhaustive spec of the `where` sub-keys (normal/angle, x/y/z ranges, box, area, index, {} meaning everything). This compensates completely for the missing schema docs.

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

Purpose5/5

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

States a specific verb and resource ('Extrude the picked faces as one region') and quantifies the scope ('as one region'). An agent can distinguish this from siblings like inset_faces, extrude_profile, or transform_region without opening any schema.

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

Usage Guidelines4/5

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

Gives concrete usage context ('raise a roof, make a post, a step, a window recess') and a workflow prerequisite ('Look at mesh_info first to see where the faces are'). It stops short of naming alternatives or exclusions, so it does not reach the routing precision of a 5.

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

extrude_profileA

Make a solid by extruding a closed 2D polygon, centred on its depth. plane XZ: points are [x, z] and the depth runs along Y (front outline); YZ: [y, z], depth along X (side outline); XY: [x, y], depth along Z (top). at shifts the result in the world. holes is a list of polygons in the same coordinates (or the holes of trace_outline as they are): each is cut through the solid with the checks of boolean; a flawed cut is kept and listed in warnings. Good for soles, panels, signs, floor plans, outline-based parts.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameYes
depthYes
holesNo
planeNoXZ
pointsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-destructive, closed-world operation, but the description adds genuinely new behavior: the solid is centred on its depth, holes are cut with boolean checks, and a flawed cut is kept rather than aborting the operation and is surfaced in `warnings`. That failure-handling contract is exactly the kind of trait annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the core action, then dense but non-redundant detail on plane conventions, offset, holes and use cases. Every clause carries information; it is slightly long but nothing reads as filler.

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

Completeness5/5

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

For a non-destructive creation tool with no output schema, the description supplies what is missing: geometry conventions, offset semantics, hole behavior and the fact that problems are reported in `warnings` rather than raised. An agent has enough to invoke 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: it defines the coordinate ordering of `points` for each `plane` enum value and the resulting axis of `depth`, explains that `at` shifts the result in world space, and specifies `holes` as same-coordinate polygons or trace_outline's `holes`. Only `name` goes unexplained, which is trivial.

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

Purpose5/5

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

States a specific verb+resource with scope: 'Make a solid by extruding a closed 2D polygon'. The mention of a closed 2D outline cleanly separates it from face-based sibling extrude_faces and from lathe/sweep/loft, so an agent can route without opening a schema.

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

Usage Guidelines4/5

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

Gives concrete when-to-use context ('soles, panels, signs, floor plans, outline-based parts') and links to trace_outline as the source of `holes`. It does not, however, name an alternative for when an existing mesh face should be extruded instead (extrude_faces), so no explicit exclusions are given.

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

find_floatingA
Read-only

Find parts that hang in the air. Meshes that touch or overlap form groups; the main group is the one that stands on ground_z (or the largest). Every other group is floating: the answer names its nearest part and the gap. tiny_gaps lists pairs that miss by touch..near metres (seams you cannot see). Run it after assembling a model, then fix with move_to_contact or attach. Long lists are folded to max_listed entries with a count. Empty touch and search follow the part size: 0.001 m and 1 m for parts of 0.3 m and more, less for small parts (a 5 cm part gets about a sixth). Empty near is 2 percent of the size of each pair (the diagonal of both parts together), at most 0.03 m: about 6 mm for a pair 0.3 m across. Each tiny gap shows the near it was held against. Give numbers in metres to fix them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nearNo
namesNo
touchNo
searchNo
ground_zNo
max_listedNo

TDQS

A4.5/5.0
Behavior5/5

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

With annotations already covering the read-only, non-destructive safety profile, the description adds rich behavioral detail: grouping logic, how the main group is chosen, tiny-gap detection, default touch/search/near values, max_listed folding, and even the nearest-part output. This is well beyond what the annotations provide.

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

Conciseness4/5

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

The purpose is front-loaded and most sentences carry necessary information, especially the default-value rules that compensate for missing schema descriptions. The text is dense and could be more scannable, but it avoids empty filler.

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

Completeness4/5

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

For a complex spatial analysis tool with no output schema and no parameter descriptions, the description covers purpose, behavior, defaults, usage, and output shape well. The main omission is the names parameter, which prevents a perfect score.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It successfully defines ground_z, touch, near, search, and max_listed defaults and units, but the names parameter is never explained, leaving one of six parameters semantically undocumented.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Find parts that hang in the air.' It immediately clarifies the exact output (floating groups, nearest part, gap) and distinguishes the diagnostic operation from sibling fixers like move_to_contact and attach.

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

Usage Guidelines4/5

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

It gives clear timing ('Run it after assembling a model') and names the follow-up tools (move_to_contact or attach). However, it does not state when not to use this tool or discuss alternative analysis tools such as check_contacts.

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

fit_to_referenceA
Destructive

Move, scale and tilt parts by itself to raise the match with reference silhouettes. Use it when the forms are roughly right: it fixes placement and proportions, not shapes. For each part in parts it keeps the changes that raise the world-registered IoU over all views (as compare_view measures it). references maps a view (as in compare_view) to an image; names is the whole model (everything visible but a huge floor or backdrop when empty). Scale per view, as in compare_view: height_m (vertical of the picture) or width_m (horizontal). Each is one number for all views or a dict per view, and every view needs one: height_m=0.152 with width_m={"top": 0.0325}. A size that names the view wins over a plain number. mirror_pairs [["arm_L","arm_R"]] keeps pairs symmetric (list both in parts). tune picks what may change. Guard: a move that raises the IoU but hides the part is refused: visible_share (the share of the part that the rest of the model does not cover) may drop by max_hide at most (1 turns the guard off). The answer lists rejected moves and visible_share [before, after]. It takes the checkpoint 'before_fit' first: rollback undoes it. Background job: after wait seconds the answer is a job id for job_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
tuneNo
waitNo
namesNo
partsYes
step_mNo
width_mNo
height_mNo
max_hideNo
max_tiltNo
tilt_degNo
max_shiftNo
thresholdNo
iterationsNo
referencesYes
scale_stepNo
time_limitNo
mirror_pairsNo

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that a checkpoint 'before_fit' is taken first and that rollback undoes it, that the guard refuses moves which raise IoU but hide a part (with the max_hide semantics and 1 = off), what the answer contains (rejected moves and visible_share [before, after]), and the background-job behavior (after `wait`, the answer becomes a job id for job_status). These are exactly the operational traits an agent needs and none are derivable from readOnlyHint/destructiveHint.

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

Conciseness4/5

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

Long but appropriately sized for an 18-parameter tool, and it is front-loaded: purpose and the when-to-use condition come first, then inputs, then the guard and checkpoint/job behavior. Some sentences are grammatically tangled ('Move, scale and tilt parts by itself') and a few (e.g. the scale-per-view example) could be tightened, but there is little true filler.

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

Completeness4/5

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

For a complex mutation tool with 18 params and no output schema, it covers the essentials an agent would otherwise guess wrong about: the checkpoint/rollback contract, the hide guard and its return fields, and the deferred job-status flow. The remaining gap is the unexplained tuning parameters, which prevents a 5.

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

Parameters3/5

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

With 0% schema coverage the description carries the full burden, and it does explain the hardest parameters: the per-view `references` mapping, `names` semantics ('everything visible but a huge floor or backdrop when empty'), the single-number-or-dict per-view form of height_m/width_m and the view-name-wins rule, `mirror_pairs`, `tune`, and `max_hide`. However, many numeric knobs that materially change behavior (size, step_m, scale_step, threshold, iterations, max_shift, max_tilt, tilt_deg, time_limit) are entirely unexplained, so the coverage is partial.

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

Purpose5/5

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

States a specific verb set (move, scale, tilt), the resource (parts), and the mechanism/goal (raise match with reference silhouettes via world-registered IoU). It implicitly separates itself from sibling measurement tools ('as compare_view measures it') and from pure transforms (transform_objects/apply_transforms), so an agent can distinguish 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.

Usage Guidelines4/5

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

Gives a clear selection condition and an exclusion: 'Use it when the forms are roughly right: it fixes placement and proportions, not shapes.' That tells the agent both when to reach for it and when not to. It stops short of naming a specific alternative tool for the 'wrong shapes' case, so it is strong but not fully routing.

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

groundA
Destructive

Set a level floor: move objects (all top-level objects when names is empty) so their lowest point sits at height z. No other object is looked at: use place_on when the floor is another object or not level.

ParametersJSON Schema
NameRequiredDescriptionDefault
zNo
namesNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it will not look at any other object (so overlaps are possible), and empty names means all top-level objects are affected. It does not state return format, but no output schema exists to lean on.

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

Conciseness5/5

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

Two dense sentences, front-loaded with the core action and followed by the scoping caveat and the routing alternative. Every clause earns its place with no filler.

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

Completeness4/5

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

For a 2-param mutation tool with no output schema, the description covers the action, both parameters, default scope, and the sibling alternative, while annotations carry the destructive profile. Slightly short of complete because it doesn't mention what happens to objects with existing transforms beyond the lowest-point alignment.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: 'z' is defined as the height the lowest point sits at, and 'names' semantics (all top-level objects when empty) are spelled out. Only minor gaps remain, e.g. whether z accepts negative values or units.

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

Purpose5/5

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

States a specific verb and resource: it moves objects so their lowest point sits at a given height z, i.e. sets a level floor. It also distinguishes itself from the sibling place_on, so an agent can tell the two apart without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('use place_on when the floor is another object or not level') and the condition that selects it. It also implies the default scope (all top-level objects when names is empty), leaving nothing to inference about when to reach for this tool.

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

import_glbA

Import a GLB or glTF file and list the new objects with their world sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is partly covered. The description adds useful context that new objects are created and reported with world sizes, but it omits placement/origin behavior, coordinate handling, and how path is resolved.

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

Conciseness5/5

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

A single well-formed sentence with the core action front-loaded and no filler; every clause earns its place.

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

Completeness4/5

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

With no output schema, the description partially compensates by describing the return (new objects and their world sizes), and annotations carry the safety profile. For a one-parameter import tool this is nearly complete, though path semantics remain unaddressed.

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

Parameters3/5

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

There is a single parameter at 0% schema description coverage, so the schema does not document 'path' at all. The description only implies it is a file path via 'GLB or glTF file', adding minimal meaning (no format, relative vs absolute, or directory semantics).

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

Purpose4/5

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

The description states a specific verb and resource ('Import a GLB or glTF file') and adds a scope note that it lists the new objects with their world sizes. This clearly distinguishes it from sibling tools like export_glb and inspect_glb, though it doesn't name those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the verb 'import' and the file-type constraint (GLB or glTF), but there is no explicit when-to-use guidance or reference to alternatives such as inspect_glb (for inspecting without importing) or export_glb (for the reverse operation).

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

inset_facesA
Destructive

Inset the picked faces by thickness metres (empty: 0.02 m, less on objects under 0.3 m), optionally pushing the inner face by depth (negative is a recess). individual=true insets each face on its own. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
whereNo
objectYes
thicknessNo
individualNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the destructive/open-world profile, so the bar is lower. The description adds real behavioral context beyond that: default thickness (0.02 m, less on objects under 0.3 m), the meaning of negative depth (a recess), and the per-face semantics of individual=true. It does not explain reversibility or result format, but it earns credit for the defaults and recess semantics.

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

Conciseness4/5

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

The core operation (thickness/depth/individual) is front-loaded, and the longer `where` clause is dense but justified given the zero schema coverage. Slightly run-on, but essentially every sentence earns its place.

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

Completeness5/5

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

For a destructive mesh-edit tool with annotations covering safety, no output schema needed, and an undocumented schema, the description supplies the operation, its defaults, and a full `where` grammar. An agent has everything required to call it correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so well: it documents `thickness` defaults, `depth` sign convention, `individual`, and exhaustively the `where` filter keys (normal with angle default 25, x/y/z ranges with null-open, box, area, index, and {} / null meaning everything). This is strong compensation for the empty schema.

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

Purpose5/5

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

The description opens with a precise verb+resource ('Inset the picked faces') and immediately specifies the operative parameters (`thickness`, `depth`, `individual`). This is clearly distinct from siblings like extrude_faces or bevel_edges — an agent can tell it apart without opening any schema.

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

Usage Guidelines3/5

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

It gives a useful prerequisite hint ('Look at mesh_info first to see where the faces are'), which is a genuine workflow cue. However, it never states when to choose this over alternatives such as extrude_faces or bevel_edges, nor any when-not conditions, so usage is only implied.

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

inspect_glbA
Read-only

Read a GLB file without Blender: triangles, vertices, materials, textures with sizes, extensions, file size and warnings (missing normals or UV, oversized or non-power-of-two textures, duplicate node names). Run it on the file you exported, because that is what the game loads.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_textureNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: it runs standalone without a Blender session and it enumerates the specific warnings it surfaces (missing normals/UV, oversized or non-power-of-two textures, duplicate node names), which tells the agent what failure modes it will detect.

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

Conciseness5/5

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

Two sentences, zero waste. The capability list is front-loaded and the usage rationale follows immediately, so an agent gets both what and when in a single glance.

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

Completeness4/5

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

For a read-only inspection tool with no output schema, the description enumerates the reported fields thoroughly and annotations carry the safety profile. The only real gap is the undocumented max_texture threshold, which leaves one invocation decision unresolved.

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

Parameters2/5

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

Schema description coverage is 0% and neither parameter is explained. 'path' is inferable from context, but 'max_texture' (default 2048) is never mentioned, even though the description alludes to 'oversized' texture warnings — the parameter that presumably sets that threshold is left undefined, so the description does not compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb (read) and resource (a GLB file), then enumerates exactly what it reports: triangles, vertices, materials, textures with sizes, extensions, file size, and warnings. The phrase 'without Blender' distinguishes it from in-scene siblings like check_mesh, mesh_info, and import_glb, which operate inside the Blender session.

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

Usage Guidelines4/5

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

'Run it on the file you exported, because that is what the game loads' gives clear context for when to reach for this tool — validating the exported artifact. It stops short of naming alternatives (e.g., check_mesh for in-scene geometry) or stating when not to use it, so it is clear guidance without explicit routing.

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

job_statusA

State of a background job: running with progress, done with its result, failed with the error. Long tools (fit_to_reference, match_camera, bake_maps) return a job id when they run longer than their wait seconds. Without job it lists all jobs of this Blender session. cancel=true stops the job; the scene keeps the changes the job already made: use rollback to undo them.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobNo
cancelNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false): it explains that cancel=true stops the job, that already-applied scene changes PERSIST, and that rollback is required to undo them. That is exactly the 'what survives/what gets destroyed' context the annotations cannot express, and it is consistent with them.

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

Conciseness5/5

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

Three sentences, front-loaded with the resource and its states, then the trigger condition, then the mutation/undo semantics. Every clause (including the named long-running tools) earns its place.

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

Completeness5/5

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

With no output schema, the description supplies the return-value shape (progress/result/error) itself, covers both parameters despite 0% schema coverage, and reconciles the mutation with the destructive=false annotation. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry both parameters — and it does: omitting `job` lists all jobs, and `cancel=true` stops the job. It does not state the expected format of the `job` id, a minor residual gap.

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

Purpose4/5

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

States a specific resource (background job) and enumerates the returned states (running/done/failed), so the agent knows exactly what this reports. It never explicitly distinguishes itself from the sibling `status`, which is the only real ambiguity in an otherwise clear statement.

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

Usage Guidelines5/5

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

Gives the precise trigger condition (long tools like fit_to_reference/match_camera/bake_maps return a job id when they exceed `wait`), the no-argument behavior (lists all jobs), and routes the undo case to the `rollback` sibling. Nothing about when to reach for 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.

latheA

Spin a profile around an axis. profile is a list of [radius, height] points from the bottom up. A profile that touches the axis (radius 0) at both ends makes a solid (vase, bottle, column, cone). A profile that stays away from the axis is an open tube: close=true repeats the first point so the loop is closed and the spin gives a ring (donut, tyre, pipe section, torus-like shapes). angle under 360 makes a wedge.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
capNo
axisNoZ
nameYes
angleNo
closeNo
profileYes
segmentsNo

TDQS

A3.7/5.0
Behavior4/5

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

With annotations already declaring this a non-destructive write (readOnlyHint=false, destructiveHint=false), the description usefully adds outcome behavior: close=true closes the loop into a ring, angle under 360 yields a wedge. It does not mention where the new object lands in the scene, whether it is undoable, or how it interacts with existing geometry, so it stops short of full transparency.

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

Conciseness4/5

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

The core action is front-loaded in the first sentence and the remaining sentences each add distinct shape/topology information without filler. It is dense but every clause earns its place; it could be tightened slightly but wastes little.

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

Completeness4/5

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

No output schema exists, but the description compensates by enumerating the resulting geometry types. For an 8-parameter geometry-creation tool it is reasonably complete on the central concept, though it omits what `name`, `at`, `axis`, `cap`, and `segments` control and does not say it creates a new scene object.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does define `profile` (list of [radius, height] points bottom-up), `close`, and `angle`. It leaves name, at, axis, cap, and segments entirely unexplained, so over half the parameters remain opaque.

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

Purpose4/5

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

"Spin a profile around an axis" gives a specific verb (spin/lathe) and resource (profile) and even enumerates the resulting shapes (vase, bottle, donut, wedge). It is clear what the tool produces, but it never contrasts itself with close siblings such as sweep, extrude_profile, or radial_array, so an agent gets no explicit disambiguation.

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

Usage Guidelines3/5

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

The description explains how profile topology maps to output (axis-touching = solid, off-axis = tube, angle < 360 = wedge), which implicitly guides usage. However, it never states when to choose lathe over sweep/extrude_profile/loft, nor any prerequisites or when-not-to-use conditions, so guidance is only implied.

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

limbB

Make a smooth tube along a polyline of world points (Skin plus Subdivision). One radius per point, or one radius for all. Good for arms, legs, tails, tentacles, branches. Ends are rounded and stay inside the path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
applyNo
radiiYes
sidesNo
pointsYes
subdivisionsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful geometry behavior ('ends are rounded and stay inside the path'), but says nothing about whether it creates a new object, needs a selection, or how apply=true affects the scene.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core action and output before the radius rule and use cases. No filler, though the 'Good for arms, legs...' list is more flavor than essential information.

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

Completeness3/5

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

For a six-parameter creation tool with no output schema and no parameter documentation, the description conveys the result geometry and radii rule but omits return values, object naming, and the effect of sides/subdivisions/apply. Adequate but with clear gaps an agent would hit in practice.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden and only partially meets it. It clarifies radii semantics well ('one radius per point, or one radius for all'), but points, name, sides, subdivisions, and apply are left entirely undocumented in both schema and description.

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

Purpose4/5

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

States a concrete verb and output ('Make a smooth tube along a polyline of world points') plus the technique used ('Skin plus Subdivision'), so an agent knows exactly what geometry it produces. It stops short of naming sibling generators (sweep, loft, extrude_profile) that also build geometry along a path, so differentiation is only partial.

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

Usage Guidelines3/5

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

The phrase 'Good for arms, legs, tails, tentacles, branches' gives real use-case context for when this tool fits. However it offers no when-not guidance and never points to alternatives such as sweep, loft, or extrude_profile, leaving the agent to infer which path-based generator to pick.

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

line_of_sightA
Read-only

Can point or object a see b? Each is a world point or an object name (its bounding-box centre). The two named objects never block the ray. Returns the first blocker. Use it for sight lines, cover and corridors.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

TDQS

A4.6/5.0
Behavior5/5

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

The annotations already establish this as a safe, non-destructive read. The description adds important behavior beyond the annotations: object names resolve to bounding-box centres, the two named objects never block the ray, and the result is the first blocker.

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

Conciseness5/5

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

The description is front-loaded with the core question, then efficiently adds parameter semantics, ray-blocking behavior, return value, and intended use. Every sentence adds value without repetition.

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

Completeness5/5

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

For a two-parameter visibility query with no output schema, the description supplies the essential input forms, blocking rule, return value, and typical use cases. An agent has enough information to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It does so fully by explaining that each parameter may be a world point or an object name, and that object names use the bounding-box centre.

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

Purpose4/5

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

The description states a specific query: whether point or object `a` can see `b`. It clearly describes the resource and operation, but does not explicitly differentiate itself from nearby siblings such as `sightline_map`, `viewshed`, or `raycast`.

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

Usage Guidelines4/5

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

It gives a clear use context: 'Use it for sight lines, cover and corridors.' However, it does not state when not to use it or which alternative siblings are preferred for related visibility tasks.

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

list_bonesC
Read-only

Bones of an armature with parent, world head and tail, length.

ParametersJSON Schema
NameRequiredDescriptionDefault
armatureYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the shape of the return values (parent, world head/tail, length) and says nothing about errors, armature lookup behavior, or whether bones are filtered. Minimal added context beyond annotations.

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

Conciseness3/5

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

A single short sentence with no padding, which is efficient. But it is a sentence fragment that front-loads the return fields rather than the action, so it is terse rather than well-structured.

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

Completeness3/5

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

For a simple one-parameter read tool with no output schema, the description usefully enumerates the returned fields, partially compensating for the missing output schema. However, the required armature parameter remains unexplained, which is a real gap for invocation correctness.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for the single 'armature' parameter, yet it never explains how the armature is identified (name, object reference, path). The phrase 'of an armature' only weakly implies the parameter selects the armature, which is insufficient compensation for the coverage gap.

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

Purpose3/5

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

The description names the resource (bones of an armature) and enumerates the returned fields, which lets an agent infer this is a listing/read tool. However, it never states the action verb explicitly and doesn't distinguish itself from armature-related siblings like create_armature or bind. Purpose is inferable but vague.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as create_armature, bind, or pose. There is no mention of prerequisites or context of use; the agent must infer usage from the name alone.

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

list_lightsA
Read-only

List every light in the scene: name, kind, place, aim (direction), power, colour and the kind's settings. preset is true for the bl_light_* lights that setup_lighting makes. Remove lights with delete (names, prefix or lights).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive/not-open-world, so the safety profile is covered. The description adds genuine behavior beyond that: it defines the `preset` flag's meaning (true for bl_light_* lights created by setup_lighting) and points to delete for mutation, which is useful context.

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

Conciseness4/5

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

Two compact sentences with the core action front-loaded and no filler. The trailing deletion note is slightly tangential to the tool's own function, but it is brief and useful for routing.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of explaining what is returned, and it does so thoroughly (name, kind, place, direction, power, colour, settings, preset). For a parameterless read tool this is complete.

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

Parameters4/5

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

There are zero parameters, so per the rubric the baseline is 4. The description introduces no parameter information (none exists), and the schema fully covers the empty object, so no compensation is needed.

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

Purpose4/5

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

The description opens with a specific verb and resource ('List every light in the scene') and enumerates the returned fields, so the agent immediately knows what it returns. It references related siblings (setup_lighting produces the bl_light_* lights; delete removes lights), which helps distinguish it, though it doesn't explicitly contrast with other list_* tools.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: it's a scene-inventory listing, and the last clause routes to delete for removal. There is no explicit 'use this when...' or condition distinguishing it from siblings like scene_tree or list_materials, so guidance is only implicit.

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

list_materialsA
Read-only

Every material: name, colour, number of users, whether it has a texture and which procedural nodes it has. Procedural nodes (noise, gradients, math) are not exported to glTF: not_exported marks those materials. faces_without_material counts, per object, the faces that sit in an empty slot or have no slot. Fix them with assign_material_faces. Use it to find look-alikes before dedupe_materials. With name the answer is the card of that one material: colour, roughness, metallic, alpha, emission, coat, subsurface, the paths of its texture and maps (and the normal map colour space, which must be Non-Color), procedural nodes, users and faces per object. alpha_mode is the glTF alphaMode that export_glb writes (OPAQUE, BLEND or MASK); render_method is the EEVEE draw mode (DITHERED is the normal one for opaque).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/non-destructive, but the description adds substantial behavioral context beyond them: procedural nodes are not exported to glTF and are marked `not_exported`, `faces_without_material` counts empty slots per object, and it explains `alpha_mode` vs `render_method` and the normal map colour space requirement. No contradiction with annotations.

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

Conciseness4/5

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

The definition is dense and mostly front-loaded: the first sentence states the default output, then the `name` behavior follows. Every sentence adds value, but the description is long and somewhat sprawling, with multiple clauses that could be organized more tightly. It is efficient but not maximally concise.

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

Completeness5/5

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

Given the annotations cover safety and no output schema exists, the description fully explains return values, field meanings, and special cases like glTF export behavior and `render_method`. Nothing an agent needs in order to call and interpret this read-only inspection tool is missing.

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

Parameters5/5

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

Schema coverage is 0% for the single optional `name` parameter, so the description must carry the full burden. It does: 'With `name` the answer is the card of that one material' and then details exactly which fields that card contains, making the parameter's effect and output shape unambiguous.

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

Purpose5/5

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

The description states a specific verb (list/inspect) and resource (materials), and distinguishes between the all-materials list and the single-material card via the `name` parameter. It also names sibling tools (`dedupe_materials`, `assign_material_faces`) to contrast its role. An agent can tell exactly what this tool returns and how it differs from nearby tools.

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

Usage Guidelines4/5

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

It gives explicit usage context: 'Use it to find look-alikes before dedupe_materials' and points to `assign_material_faces` for fixing empty slots. This is clear when-to-use guidance tied to sibling tools. It does not state explicit when-not-to-use conditions, so it falls short of a full 5.

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

loftA

Make a closed body from cross-sections you give as numbers along an axis. A section is {"at": [x,y,z], "size": [w,d], "roundness": 2}: roundness 2 is an ellipse, 4 is a rounded box. Sections go in order along the axis. Good for torsos, heads, bottles, columns. With a front and a side image of the form use loft_from_masks: it reads the sections from the images.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoZ
capsNo
nameYes
sectionsYes
segmentsNo
subdivisionsNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, closed-world creation tool, so the safety profile is covered. The description usefully adds that the output is a 'closed body', that sections must be ordered along the axis, and what 'roundness' values mean, but it never states what is returned (new object name/handle) or any post-creation behavior. With annotations carrying the safety burden, this is adequate but not rich.

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

Conciseness4/5

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

Front-loaded with the core action and the section format, then routing guidance. Dense but every sentence adds information; only the inline JSON example makes it slightly heavy to parse.

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

Completeness4/5

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

For a creation tool with annotations covering safety and no output schema, the description covers the non-obvious parts: section data shape, ordering, and the loft_from_masks alternative. The remaining gap is unexplained geometry controls (axis, segments, subdivisions) and no indication of the return value.

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

Parameters4/5

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

Schema description coverage is 0% and the 'sections' items object is opaque (additionalProperties: true), so the description carries the full burden — and it does document the critical nested shape with a concrete example ({'at': [x,y,z], 'size': [w,d], 'roundness': 2}) plus the roundness scale (2=ellipse, 4=rounded box) and ordering rule. It leaves axis, caps, segments, and subdivisions unexplained, which prevents a 5.

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

Purpose5/5

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

States a specific verb and resource: 'Make a closed body from cross-sections you give as numbers along an axis.' It also names the sibling it is not (loft_from_masks) and the shapes it targets, so an agent can distinguish it from array, lathe, sweep, and extrude_profile 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.

Usage Guidelines5/5

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

Gives concrete when-to-use examples ('torsos, heads, bottles, columns') and an explicit alternative with a selecting condition: 'With a front and a side image of the form use loft_from_masks.' That is an explicit when/when-not plus alternative routing.

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

loft_from_masksA

Build one rounded body from a front and a side silhouette image (with numbers instead of images use loft): per band the width comes from the front image and the depth and forward offset from the side image, so the cross-sections follow both outlines. part=largest uses the widest run in a band (the torso, not the arms); part=extent uses everything. side_faces says which way the figure looks in the side image (left matches the world: the front is -Y). z_range limits the height as fractions (0.0 to 0.5 builds the lower half). roundness 2 is an ellipse, 4 a rounded box. The body spans the full height (or z_range): the first and the last band end flat at their outer edge.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameYes
partNolargest
sideYes
bandsNo
frontYes
z_rangeNo
height_mYes
segmentsNo
roundnessNo
thresholdNo
side_facesNoleft
subdivisionsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare the safety profile (not readOnly, not destructive, closed world), so the description carries the real burden and delivers: it explains how cross-sections are derived from both images, the full-height span, and that the first and last band end flat. It still omits whether an object is created fresh vs. replaced and what happens on failure.

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

Conciseness3/5

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

Information density is high and the purpose is front-loaded, but it is delivered as one unstructured run-on paragraph with no separation between core behavior and per-parameter notes. Clauses largely earn their place, yet a bulleted or sentence-split form would scan far better.

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

Completeness3/5

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

For a 13-parameter geometry tool with no output schema and no annotation depth, the description covers the conceptually important knobs but leaves more than half the parameters (including the required height_m) undocumented. It is usable but not fully sufficient to invoke correctly without guessing.

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

Parameters3/5

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

Schema description coverage is 0% across 13 parameters, so the description is the only source of meaning. It usefully defines part, side_faces, z_range, and roundness, but leaves at, name, bands, segments, threshold, subdivisions, and the required height_m completely unexplained.

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

Purpose4/5

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

The opening states a specific verb and resource ('Build one rounded body from a front and a side silhouette image') and explicitly routes numeric-input cases to the sibling 'loft', so an agent can separate the two. The remaining text is mostly mechanics, but the core purpose is unmistakable.

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

Usage Guidelines4/5

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

It names the alternative ('with numbers instead of images use loft') and gives selection criteria between the two enum modes ('part=largest uses the widest run... part=extent uses everything'). It stops short of stating prerequisites, e.g. that a 3D scene/object must exist or what happens if the silhouettes don't align.

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

match_cameraA

Find the camera that shows the model like a perspective photo of the real object (for flat orthographic views use compare_view). It tunes position, rotation, roll and field of view until the model silhouette best matches the reference silhouette. The camera camera is created or updated and becomes the scene camera. The answer has location, rotation, look_at, fov_deg and the IoU before and after. Give the whole original photo, not a crop: the picture frame is the camera frame. The outline comes from alpha or from the corner colour (plain background); threshold is the colour distance. Start: init {"location": [x,y,z], "look_at": [x,y,z], "fov_deg": 40}, else the active perspective camera, else 8 azimuths at 2 elevations are tried. A close start gives a better result. fov_deg fixes the angle across the LONGER image side: a known lens is far more reliable, because distance and field of view trade off. ground_z keeps the camera above that height. size is the working resolution; iterations is how many times the step is halved. A silhouette does not tell front from back on a symmetric model: check with overlay_reference. Background job: after wait seconds the answer is a job id for job_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
initNo
sizeNo
waitNo
namesNo
cameraNomatch_cam
fov_degNo
ground_zNo
referenceYes
thresholdNo
iterationsNo
time_limitNo

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that the camera is created/updated and becomes the scene camera (a side effect), the fallback starting strategies, the background-job mode returning a job id for job_status after `wait` seconds, and the exact return fields (location, rotation, look_at, fov_deg, IoU before/after). This is rich behavioral context consistent with readOnlyHint=false.

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

Conciseness4/5

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

Dense and front-loaded, with the core purpose and alternative stated first. Most sentences earn their place, though the parameter-detail block is long and could be tightened slightly.

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

Completeness4/5

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

For an 11-param mutation tool with no output schema, it covers the essential behavior, starting conditions, return values, and background-job path. The gaps are minor (undocumented `names` and `time_limit`).

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

Parameters4/5

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

With 0% schema coverage across 11 parameters, the description compensates well: it explains init with an example, fov_deg semantics (angle fixed on the longer image side, distance/FOV tradeoff), ground_z, size, iterations, threshold, camera, reference, and wait. Only `names` and `time_limit` are left undocumented.

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

Purpose5/5

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

States a specific verb+resource ('Find the camera that shows the model like a perspective photo') and immediately distinguishes itself from the sibling compare_view for flat orthographic views. An agent can identify the tool and its scope without opening the schema.

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

Usage Guidelines4/5

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

Names the alternative compare_view and the condition selecting it, and points to overlay_reference for the front/back ambiguity on symmetric models. It also gives start-condition guidance, but does not state explicit when-not-to-use boundaries beyond the orthographic case.

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

measureB
Read-only

World-space size, min, max, center, origin position, origin inside the bounding box (0..1 per axis), rotation in degrees and scale. Notes say 'scale not applied' or 'negative scale'. Use it after every move. Use measure_profile to measure a reference image instead of an object.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a genuine behavioral detail beyond the annotations – that output Notes may report 'scale not applied' or 'negative scale' – but does not cover invalid names, empty arrays, or cost. Useful incremental context against a low bar.

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

Conciseness4/5

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

Dense but efficient: the return fields are front-loaded, followed by usage and the alternative. Every clause carries information and there is no filler, though the opening field list reads as a run-on.

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

Completeness3/5

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

With no output schema, the description does the right thing by enumerating the returned fields, which largely covers the return contract. However, it says nothing about the required 'names' input, and for a tool an agent is told to call after every move, that input contract should be stated.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter 'names' is a bare array of strings with no description. The description never explains what 'names' refers to (object names? scene paths?), so it fails to compensate for the coverage gap; only the phrase 'after every move' hints at the input.

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

Purpose4/5

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

The description enumerates the exact quantities returned (world-space size, min/max, center, origin position and its normalized coordinates, rotation, scale), so an agent can tell this is a per-object measurement query. The verb is implied by the name 'measure' rather than stated, but the scope is unambiguous and it distinguishes itself from measure_profile explicitly.

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

Usage Guidelines4/5

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

It gives a concrete trigger ('Use it after every move') and names the alternative for a common adjacent case ('Use measure_profile to measure a reference image instead of an object'). No explicit when-not beyond that one alternative, but the routing condition is clear.

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

measure_profileA
Read-only

Measure a silhouette in a reference image in metres (use measure for an object of the scene). The image height is mapped to height_m. Returns, for each horizontal band from the bottom: width, left and right edge from the centre, the separate runs (arms and legs are separate runs) and the filled width. Use the numbers for loft sections, assert_spec checks or to find where the model differs. The outline comes from alpha or from the corner colour (see prepare_reference). grid=true also returns the reference with a metric grid (labels in millimetres, the same coordinates as the bands: x from the centre of the silhouette box, z from its bottom), to read where parts and details are. region [x0, z0, x1, z1] in metres zooms the grid picture into a part; grid_size is its long side in pixels; out saves it to a file.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNo
gridNo
bandsNo
regionNo
height_mYes
grid_sizeNo
referenceYes
thresholdNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare a safe read-only, non-destructive profile, yet the description goes well beyond them: it discloses the exact return structure per band (width, left/right edge from centre, separate runs for arms/legs, filled width), the coordinate frames for the grid (x from silhouette box centre, z from its bottom, labels in millimetres), and where the outline comes from ('alpha or from the corner colour'). This is unusually rich context for a measurement tool.

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

Conciseness4/5

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

Purpose and the measure/measure_profile distinction are front-loaded, and the following sentences each add a distinct piece of information (return shape, outline source, grid/region/out behavior). It is dense rather than padded, though the return-shape enumeration makes it longer than strictly necessary.

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

Completeness4/5

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

For an 8-parameter tool with no output schema and zero schema descriptions, the description supplies the return format, coordinate conventions, image-source dependency and file output, so an agent can call it correctly. The two unexplained parameters (bands, threshold) are the only meaningful omission.

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

Parameters4/5

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

Schema description coverage is 0% across 8 parameters, so the description must carry the load, and it explains most of them: height_m ('image height is mapped to height_m'), grid, region ([x0, z0, x1, z1] in metres), grid_size (long side in pixels) and out (saves it to a file). It leaves 'bands' and 'threshold' undocumented, which is the main remaining gap.

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

Purpose5/5

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

States a specific verb and resource ('Measure a silhouette in a reference image in metres') and immediately disambiguates from the nearest sibling: 'use measure for an object of the scene.' An agent can choose between measure_profile and measure without opening either schema.

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

Usage Guidelines4/5

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

Gives clear routing ('use measure for an object of the scene') plus concrete downstream uses for the numbers: 'loft sections, assert_spec checks or to find where the model differs.' It does not state prerequisites (e.g. that the reference must have alpha or a distinguishable corner colour) as an explicit when-not, so it stops short of a 5.

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

mesh_infoA
Read-only

Counts of vertices, edges and faces, and the faces grouped by direction (+X, -X, +Y, -Y, +Z, -Z, other) with their area and the world range of their centres. Read it before you pick faces with where.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds real value beyond that by enumerating the exact contents returned (counts, direction-grouped faces, areas, centre world ranges), which matters because no output schema exists.

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

Conciseness4/5

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

Two sentences, no filler, and the returned content is front-loaded ahead of the usage hint. Appropriately sized, though the run-on listing of direction groups slightly hampers scanning.

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

Completeness4/5

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

For a read-only, single-parameter info tool with no output schema, the description covers what an agent needs: the returned fields and when to call it. The only unaddressed element is the object parameter's expected form.

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

Parameters3/5

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

There is one required parameter (object) with 0% schema description coverage, so the description would need to clarify it—and it does not mention the parameter at all. However, "object" is largely self-explanatory in a mesh-editing context, so the gap is modest rather than severe.

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

Purpose4/5

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

States a specific output: counts of vertices, edges and faces plus faces grouped by direction (+X, -X, +Y, -Y, +Z, -Z, other) with area and world range of centres. This is a concrete verb+resource description that tells an agent exactly what this returns. It doesn't differentiate from siblings like check_mesh or scene_tree, which may also report mesh statistics.

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

Usage Guidelines4/5

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

"Read it before you pick faces with `where`" gives a clear when-to-use condition tied to a downstream workflow. It doesn't name an explicit alternative or exclusion (e.g., vs check_mesh or scene_tree), but the context of use is unambiguous.

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

mirrorA

Make a mirrored copy of a mesh across the plane at at on the axis. Normals stay outward. The name swaps L/R, Left/Right (arm_L becomes arm_R), or gets '_mirror'. The origin of the copy is the mirror image of the source origin; the copy has no rotation and scale 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
axisNoX
nameYes
new_nameNo

TDQS

A4.3/5.0
Behavior5/5

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

Despite annotations only covering the safety profile, the description discloses rich behavioral traits: normals remain outward, origin/rotation/scale of the copy, and the exact name-swapping rules. This is far beyond what the annotations provide and genuinely informs the outcome.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core operation before the naming and origin details. Every sentence adds distinct information with no padding.

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

Completeness5/5

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

For a transformation tool with no output schema, the description covers what is produced, how it is oriented, how it is named, and its transform state. An agent has everything needed to predict the result.

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

Parameters3/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It explains 'at' and 'axis' implicitly and describes naming behavior, but never distinguishes the required 'name' (source) from the optional 'new_name' override, leaving the relationship between the two name params ambiguous.

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

Purpose5/5

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

States a specific verb and resource ('Make a mirrored copy of a mesh') plus axis/plane scope, which clearly separates it from the generic 'duplicate' sibling. An agent knows exactly what operation this performs without opening the schema.

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

Usage Guidelines3/5

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

The description implies the use case (producing a mirrored copy) but names no alternatives and gives no when-not guidance versus siblings like 'duplicate', 'array', or 'radial_array'. Usage is inferable but not routed.

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

move_to_contactA
Destructive

Close a gap by surfaces: slide a (with children) until its mesh touches the mesh of to (attach aligns boxes instead, place_on drops by a ray). Without axis it takes the shortest way; with an axis it slides along that axis only, so other coordinates stay. depth sinks the part into the target by that many metres to hide the seam: use 0.005..0.02 for limbs and necks. If the parts already overlap nothing moves. The whole object moves, never only its end: for a long part that must stay put at the other end, resize it with set_dimensions and anchor, or rebuild it with limb. Use attach to align by bounding boxes, combine to merge meshes into one object.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
toYes
axisNo
depthNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the write/mutation nature is covered. The description adds genuinely useful behavioral context beyond that: the whole object moves including children, overlapping parts are a no-op, and `depth` sinks the part to hide seams. It does not detail permissions or reversibility, but for a local mesh transform that is a minor gap.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries actionable information (mechanism, axis behavior, depth values, sibling routing, the long-part caveat). It is dense rather than padded, though the single long block could be tightened slightly for scanning.

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

Completeness4/5

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

For a 4-parameter mutation tool with no output schema, the description covers mechanism, parameter meaning, no-op behavior, and alternatives. What an agent needs to invoke it correctly is present; only permission/reversibility context is absent.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: `a` is the part that slides with its children, `to` is the contact target, `axis` is explained functionally ('without axis it takes the shortest way; with an axis it slides along that axis only, so other coordinates stay'), and `depth` gets units plus a concrete range (0.005..0.02 for limbs and necks).

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

Purpose5/5

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

States a specific verb and resource up front: 'Close a gap by surfaces: slide `a` (with children) until its mesh touches the mesh of `to`'. It immediately distinguishes itself from the nearest siblings by contrasting the mechanism ('attach aligns boxes instead, place_on drops by a ray'), so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use guidance: names `attach` for bounding-box alignment, `place_on` for ray drops, `combine` for merging, and `set_dimensions`/`limb` for the case where a long part must stay anchored. It also states the no-op condition ('if the parts already overlap nothing moves'), 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.

noise_displaceA
Destructive

Move the vertices by fractal noise. Use it for bumps on a surface, worn stone, uneven ground. amount is the largest shift in metres: no vertex moves further. scale is the size of the biggest bumps in metres (smaller scale gives finer bumps). octaves 1 to 8 adds finer detail on top, each at half strength. The same seed gives the same result. Another seed gives other bumps. The noise is sampled in world space. mode: normal (along each vertex normal), z (up and down only, for ground), vector (any direction, rough lumps). where picks faces like extrude_faces does (normal, x, y, z ranges, box, area, index); nothing outside is moved. spread is a soft border in metres around the picked faces, shaped by falloff. Without where the whole mesh moves. The mesh needs enough vertices to show the bumps: subdivide_faces or subdivide first. Returns the largest shift that happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNonormal
seedNo
scaleNo
whereNo
amountYes
objectYes
spreadNo
falloffNosmooth
octavesNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true; the description adds rich behavior beyond them: deterministic seeding, world-space sampling, the bounding meaning of `amount`, per-mode semantics, the soft-border `spread`/`falloff` behavior, and the return value ('largest shift that happened'). This is consistent with and additive to the destructive annotation.

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

Conciseness4/5

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

Purpose is front-loaded and the parameter notes are dense and well-ordered with no filler. It runs somewhat long, but nearly every sentence adds actionable meaning about a 9-parameter tool.

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

Completeness5/5

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

For a complex 9-parameter mesh mutation with no output schema, the description covers modes, scoping, falloff, determinism, prerequisites, and the return value, leaving no significant gap an agent would need before calling it.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: amount, scale, octaves, seed, mode, where, spread, and falloff are each explained with units and qualitative effects. Only `object` is left implicit, which is self-evident.

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

Purpose4/5

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

The description opens with a concrete verb+resource ('Move the vertices by fractal noise') and names concrete use cases (bumps, worn stone, uneven ground). It is specific and distinguishable from generic transforms, though it never explicitly contrasts itself with adjacent siblings like deform, sculpt, or rock, which also reshape geometry.

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

Usage Guidelines4/5

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

It gives clear usage context ('Use it for bumps... uneven ground') and an important prerequisite with named alternatives ('The mesh needs enough vertices... subdivide_faces or subdivide first'). It also notes the default scope ('Without `where` the whole mesh moves'). No explicit when-not guidance is given.

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

overlay_referenceA
Read-only

Draw the model and a reference picture on top of each other, seen through a scene camera: it shows how far the camera and the model are from the photo. The model is rendered from camera (the scene camera when empty; without one call set_camera or match_camera first) at the proportions of the reference; the long side is size pixels. names is the model (everything visible when empty). Modes: blend (the reference at alpha); edges (red reference outline, yellow reference inner edges, green model outline over the dimmed model: best for small shifts); difference (black is a match); split (reference left of a line at the split fraction of the width, model right: lines must continue across it). The answer has the path, the silhouette IoU and the picture. The reference outline comes from alpha or the corner colour; threshold is the colour distance. Give the original photo, not a crop. grid_height_m (the real height of the reference silhouette) draws a metric grid with millimetre labels; zero is the bottom centre of the silhouette box. It is true for a flat-on (orthographic) reference only. Before a model exists, read coordinates with measure_profile grid=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNo
modeNoblend
sizeNo
alphaNo
namesNo
splitNo
cameraNo
referenceYes
thresholdNo
grid_height_mNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly/not destructive), yet the description adds substantial behavior: the four modes and what each renders, where the reference outline comes from (alpha or corner colour), what 'the answer' contains (path, silhouette IoU, picture), and the flat-on-only constraint on grid_height_m. This is rich disclosure beyond structured fields.

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

Conciseness4/5

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

The purpose is front-loaded and nearly every clause carries load, but the dense run-on prose around modes and grid semantics is hard to scan compared to a short bulleted list. Information density is high, so little is wasted.

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

Completeness5/5

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

With 10 parameters, 0% schema coverage and no output schema, the description still tells the agent what the returned answer contains and covers prerequisites and mode selection. An agent could invoke this correctly without reading further documentation.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and largely succeeds: it defines camera, names, size (long side in pixels), alpha, split (fraction of width), threshold (colour distance), and grid_height_m (real millimetre height with zero at bottom-centre). Only `out` is left unexplained.

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

Purpose5/5

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

The first sentence states a concrete verb and resource: draw the model and reference picture overlaid through a scene camera. It distinguishes itself from siblings like compare_view and measure_profile by describing the overlay/IoU output and by explicitly naming measure_profile grid=true for the pre-model case.

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

Usage Guidelines4/5

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

It gives concrete prerequisites ('without one call set_camera or match_camera first'), the situation each mode suits ('edges ... best for small shifts'), and a gotcha ('Give the original photo, not a crop'). It stops short of saying when NOT to use the tool versus compare_view or fit_to_reference.

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

paint_facesA
Destructive

Colour faces without a material or a texture: vertex colour on the picked faces (see select_faces for where: normal, x/y/z ranges, box, area, index). Colour is '#rrggbb' or [r,g,b]. For stylised models that use vertex colours instead of textures.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorYes
whereNo
objectYes
attributeNoColor

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates state. The description adds that no material/texture is created and that colour lands on 'picked faces', but it never says whether existing vertex colours are overwritten or appended, nor whether a selection must exist first — the most important behavioral risk for a destructive paint tool.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and the key differentiator ('without a material or a texture'), then the colour format and the pointer to select_faces. No filler.

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

Completeness3/5

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

For a 4-parameter destructive mutation with no output schema and 0% schema coverage, the description covers the colour format and the predicate reference but omits overwrite semantics, required selection state, and the meaning of `attribute`/`object`. Adequate to invoke, not complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden: it documents the `color` format ('#rrggbb' or [r,g,b]) and points to select_faces for the `where` predicate values. However, it never explains `object` or `attribute` (default 'Color'), leaving two of four parameters undocumented in both schema and prose.

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

Purpose5/5

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

States a specific verb and resource ('Colour faces ... vertex colour on the picked faces') and immediately carves out its niche by saying it works 'without a material or a texture', which distinguishes it from siblings like assign_material_faces and set_material. An agent can pick it without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear use condition ('For stylised models that use vertex colours instead of textures') and routes the agent to select_faces for the `where` semantics. It does not explicitly say when NOT to use it versus assign_material_faces/set_material, so no exclusions are stated.

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

palette_uvA
Destructive

Colour faces from a shared palette texture: point the UVs of the picked faces at the centre of one cell, so the face takes that flat colour: cell [column, row] with row 0 at the top, grid [columns, rows]. For palette-atlas styles (one small colour grid image shared by all models).

ParametersJSON Schema
NameRequiredDescriptionDefault
cellYes
gridNo
whereNo
objectYes
uv_layerNoUVMap

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already flag this as a non-read-only, destructive, non-open-world operation. The description adds the mechanism of repointing UVs on picked faces, which explains what is changed, but does not describe reversibility, permission needs, or what happens to existing UV layouts beyond the implied overwrite.

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

Conciseness4/5

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

The description is front-loaded with the core action and uses a single dense sentence structure with no filler. It is slightly run-on due to the colon-and-semicolon construction, but every clause contributes information.

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

Completeness3/5

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

The core concept and palette-atlas context are covered, and annotations carry the safety profile. With five parameters, zero schema description coverage, and no output schema, the description still leaves important parameter semantics (object, where, uv_layer) unstated for a destructive tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It defines 'cell' as [column, row] with row 0 at the top and 'grid' as [columns, rows], adding useful meaning for two parameters. However, 'object', 'where', and 'uv_layer' remain unexplained in both schema descriptions and the description text.

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

Purpose5/5

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

The description states a specific verb and resource: colouring faces by repointing picked-face UVs to a palette cell. It also gives the underlying mechanism (UVs to cell centre) and the intended style context, so an agent can distinguish this from general face painting or material assignment.

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

Usage Guidelines4/5

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

The phrase 'For palette-atlas styles (one small colour grid image shared by all models)' gives a clear usage context. It does not explicitly state when to avoid the tool or name a direct sibling alternative, but the context is sufficient to select it over generic material tools.

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

parentB
Destructive

Make child follow to. With keep_world the child stays where it is.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
childYes
keep_worldNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description usefully adds the keep_world semantics (world position preserved versus snapping to the parent), which is real behavioral context beyond the annotations, but it does not say what happens to any existing parent relationship or whether the child's transform is rewritten.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core operation and followed by the one modifier that matters. Nothing is wasted, though the terseness borders on under-specification rather than true efficiency.

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

Completeness3/5

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

For a hierarchy-mutating tool flagged destructive with no output schema and zero schema documentation, the description covers the core mechanic but leaves out error conditions, re-parenting behavior, and whether the change is reversible. Adequate but with clear gaps for a destructive operation.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It does define all three parameters in plain terms (child, to, and keep_world), which is more than the schema offers, but it omits the default value of keep_world and gives no format hints for the string identifiers.

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

Purpose4/5

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

The description states a concrete operation on two named resources: it makes `child` follow `to`, which is the parenting relationship, and it names the key modifier. However, it never distinguishes itself from plausible siblings like `attach`, `bind`, or `combine`, so an agent must infer the difference from the name alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as `attach` or `bind`. The agent is given the mechanics but not the conditions under which parenting is the correct choice over a sibling tool.

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

path_carveA
Destructive

Press a road, a ditch or a path into a terrain mesh along a polyline. points are world [x, y] pairs (extra values are ignored); give at least two. width is the full width in metres of the level floor. depth is how far the floor sinks, in metres (a negative value raises a bank). falloff is the width in metres of the sloped edge on each side; default is half of width. 0 gives a hard edge. The terrain needs a grid fine enough for the width: resolution of at most a third of width looks right. Existing vertices move only down by depth times a weight, so the road follows the hills. Use this on a mesh from the terrain tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthYes
widthYes
pointsYes
falloffNo
terrainYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses the actual deformation semantics: 'Existing vertices move only down by depth times a weight, so the road follows the hills.' This tells the agent precisely what gets modified and the directional constraint of the effect, plus a resolution caveat (grid resolution at most a third of width). Rich context the annotations alone cannot convey.

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

Conciseness4/5

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

The definition is front-loaded with the core purpose before parameter detail, and nearly every sentence adds usable information. It is somewhat dense and could tighten the resolution aside, but no sentence is wasted.

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

Completeness5/5

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

For a 5-parameter mutation tool with no output schema, the description covers purpose, all parameter semantics, the deformation behavior, the source-mesh requirement, and a practical resolution guideline. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so well: points (world [x,y] pairs, extras ignored, minimum two), width (full width in metres of the level floor), depth (sink distance, negative raises a bank), and falloff (sloped-edge width, defaults to half of width, 0 = hard edge). Every non-trivial parameter gains meaning beyond the raw JSON types.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Press a road, a ditch or a path into a terrain mesh along a polyline.' This is far more concrete than the bare tool name and immediately distinguishes the operation from generic deformation siblings like sculpt, deform, or noise_displace.

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

Usage Guidelines4/5

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

It gives a clear precondition and intended context: 'Use this on a mesh from the terrain tool,' which routes the agent to the right source object. It does not, however, name alternatives or state when NOT to use this versus e.g. sculpt or noise_displace, so it stops short of explicit routing.

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

pixel_to_worldA
Read-only

Turn picture pixels into world points. A ray goes from the camera through each pixel and hits the plane z=plane_z (the floor by default) or plane {"point": [x,y,z], "normal": [x,y,z]}. pixels is a list of [x, y]: x to the right, y down, from the top left of a picture of image_size [width, height]. It uses the field of view, the sensor fit, the lens shift and orthographic cameras. A point is null if the ray is parallel to the plane or the plane is behind the camera. Use it to read sizes and positions off a photo after match_camera (for example the width of something that stands on the floor). Heights above the plane cannot be read from one view.

ParametersJSON Schema
NameRequiredDescriptionDefault
planeNo
cameraYes
pixelsYes
plane_zNo
image_sizeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and lower the bar, but the description adds real behavioral detail beyond them: the null result when the ray is parallel to or behind the plane, and support for field of view, sensor fit, lens shift and orthographic cameras. It does not describe return container/ordering or rate/cost characteristics.

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

Conciseness4/5

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

Every sentence earns its place (mechanism, defaults, coordinate convention, edge cases, limitation), and the purpose is front-loaded in the first sentence. The middle is dense with parentheticals and multi-clause sentences that slow parsing, but no content is filler.

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

Completeness5/5

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

With no output schema, the description still conveys the return shape (world points, possibly null) and the failure conditions that produce nulls, plus the fundamental single-view limitation. Combined with the safety annotations, nothing an agent needs to call this correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: it defines plane_z (floor by default), the `plane` object shape with point/normal, the `pixels` convention (list of [x,y], x right, y down, from top-left), and image_size as [width, height]. Only the `camera` string is left to inference, which is self-evident from the sibling set.

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

Purpose5/5

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

States a precise verb+resource ('turn picture pixels into world points') and immediately specifies the geometric mechanism (ray from camera through each pixel hitting a plane), which is distinct from siblings like place_at_pixel (the inverse) and raycast. An agent can identify this as the 2D-image-to-3D-ground unwrap tool without opening the schema.

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

Usage Guidelines4/5

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

Explicitly names the prerequisite and use case: 'Use it to read sizes and positions off a photo after match_camera', with a concrete example (width of something standing on the floor) and a stated limitation ('Heights above the plane cannot be read from one view'). It does not name sibling alternatives (e.g. raycast/place_at_pixel) for related tasks, so it stops short of full when-not guidance.

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

place_at_pixelA
Destructive

Move an object so that a point of its box lands where a picture pixel points. anchor is the point of the box of the object with its children as fractions (0.5, 0.5, 0 is the middle of the bottom). pixel is [x, y] in a picture of image_size [width, height], y down. With plane_z the ray from camera hits that horizontal plane. Without it the ray stops on the first surface of the scene (the object itself is ignored) and, if there is none, on the plane at the bottom height of the object. It only moves: size and rotation stay. Returns the description of the object and what it was placed on. Use it to put parts where the photo shows them, after match_camera. Without a photo use attach, move_to_contact or place_on.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelYes
anchorNo
cameraYes
objectYes
plane_zNo
image_sizeYes

TDQS

A4.7/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=false and destructiveHint=true, the description still adds real behavior: the ray-cast fallback chain (plane_z, first scene surface with the object ignored, then the object's own bottom plane), and that size and rotation are preserved. It also discloses the return payload. The destructiveHint=true label is not reconciled with an operation framed as pure translation, which is a small gap, but nothing is contradicted.

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

Conciseness4/5

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

Front-loaded with the action, then parameters, then output, then usage — a sensible order. The plane_z sentence is dense and takes a second read, but no sentence is padding; it is verbose without being wasteful.

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

Completeness5/5

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

For a six-parameter mutation with no output schema, the description covers behavior, coordinate conventions, fallback semantics, the return value, and sibling routing. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: it defines the anchor fraction convention with a default example, pixel as [x, y] with y down, image_size as [width, height], and plane_z as the plane the camera ray intersects. That is the substantive semantics an agent needs for all six parameters.

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

Purpose5/5

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

The first sentence names a specific verb and effect ('Move an object so that a point of its box lands where a picture pixel points'), and the closing line explicitly separates it from siblings (attach, move_to_contact, place_on, match_camera). An agent can distinguish this from the other placement tools without opening any schema.

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

Usage Guidelines5/5

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

States the positive precondition ('after match_camera', 'where the photo shows them') and the negative case with named alternatives ('Without a photo use attach, move_to_contact or place_on'). Routing is fully explicit.

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

place_onA
Destructive

Drop by a ray: lower an object (with children) until its lowest point lands on the first surface under it (or under world xy at). Use it for props on tables, floors with height changes, terrain. Use ground for a level floor at a known height, attach to align by bounding boxes, scatter for many copies.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
objectYes
surfaceYes
yaw_degNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations declare destructiveHint=true, openWorldHint=false, readOnlyHint=false, so the mutation risk is known. The description adds ray-based placement semantics and that children move with the object. However, it omits side effects like parent/ transform changes, whether it constitutes a mutation on existing transforms, and does not address the destructiveHint in a way that goes beyond the annotation.

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

Conciseness4/5

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

The description is dense but front-loaded with the core operation before the alternatives. It splits into two sentences: mechanism then routing. No gratuitous filler, though the second sentence is a bit of an enumeration that could be tighter.

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

Completeness3/5

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

For a 4-parameter mutation tool with no output schema and 0% schema coverage, the description should fully compensate for missing parameter docs. It explains the core operation and mentions alternatives, but leaves the meaning of yaw_deg and the surface list format to inference. Complete enough for the general behavior but not for all parameters.

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

Parameters2/5

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

Schema description coverage is 0%, so the four parameters (at, object, surface, yaw_deg) are undocumented in both schema and description. The description mentions 'object', 'surface' conceptually, and 'world xy at', and mentions yaw only indirectly ('drop by a ray' does not explain yaw_deg). It does not explain surface as a list of strings or the format of at. This leaves the parameters underspecified.

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

Purpose5/5

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

The description uses a precise verb and mechanism: 'Drop by a ray: lower an object (with children) until its lowest point lands on the first surface under it.' It clearly distinguishes from siblings by naming ground, attach, and scatter with their specific semantics.

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

Usage Guidelines5/5

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

It gives explicit when-to-use examples ('props on tables, floors with height changes, terrain') and explicitly steers away to alternatives: 'Use ground for a level floor at a known height, attach to align by bounding boxes, scatter for many copies.'

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

poseA
Destructive

Pose bones by numbers: {"bone": [rx, ry, rz]} in degrees (Euler XYZ, local to the bone), or {"bone": {"rot": [..], "loc": [..], "scale": [..]}}. reset=true clears all other bones first. An empty pose returns to rest. A bone along Z bends forward when rotated about X.

ParametersJSON Schema
NameRequiredDescriptionDefault
poseNo
resetNo
armatureYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, but the description adds genuinely useful context beyond them: reset defaults to clearing all other bones, an empty pose reverts to rest, rotations are Euler XYZ local to each bone, and a Z-aligned bone bends forward about X. It stops short of covering failure modes such as invalid bone names or out-of-range values.

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

Conciseness4/5

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

Format specification is front-loaded and the sentences are dense but purposeful, with no filler. The inline JSON literals make it slightly harder to scan than plain prose, but nothing could be cut without losing real information.

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

Completeness3/5

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

No output schema exists, so the description must stand alone, and it covers the posing format, reset semantics and rest behavior adequately. It omits how the target armature is identified and what happens on invalid bone names, which matters for a destructive mutation tool with 0% schema coverage.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It does that well for 'pose' (both the [rx,ry,rz] shorthand and the rot/loc/scale object form, in degrees, bone-local) and for the effect of 'reset', but the required 'armature' parameter is never explained at all.

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

Purpose5/5

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

States a specific verb and resource ('Pose bones by numbers') and immediately defines the exact numeric input format, so an agent knows this is direct channel-level posing rather than armature creation (create_armature/limb) or weight binding (bind). The scope is unambiguous and does not overlap with the other rigging siblings.

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

Usage Guidelines2/5

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

There is no statement of when to choose this tool over pose_sheet, limb, move_to_contact, or run_python. Statements like 'reset=true clears all other bones first' and 'An empty pose returns to rest' are behavioral facts, not routing guidance, so the agent must infer applicability from the name alone.

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

pose_sheetA
Read-only

One image with the mesh in several poses side by side, left to right in the order given: {"rest": {}, "walk": {"thigh_L": [30,0,0]}}. Use it to see joints bend, find tearing and collapsing, and compare with check_weights. The rest pose is restored afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
viewNofront
posesYes
meshesNo
armatureYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a non-destructive read, and the description adds a genuinely useful state note the annotations cannot express: 'The rest pose is restored afterwards,' which tells the agent the temporary deformation is cleaned up. It does not disclose cost, render time, or whether poses are applied cumulatively.

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

Conciseness4/5

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

Front-loaded with what the tool produces, followed by usage and the state-restoration caveat. Three compact sentences, no filler, though the inline JSON example makes the first sentence heavy to parse.

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

Completeness4/5

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

For a tool with no output schema, the description covers the output (a single left-to-right sheet) and the ordering contract, and the state side effect is called out. What is missing is how the 'meshes' filter and 'armature' scope affect the result, which an agent may need before invoking.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does for the hardest parameter by showing the exact poses structure ({"rest": {}, "walk": {"thigh_L": [30,0,0]}}), which the schema only types as a free-form object. The other four parameters (armature, meshes, size, view) carry no descriptive meaning, keeping this short of a 5.

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

Purpose5/5

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

The description names a concrete artifact (one composite image), the resource (mesh in several poses), and the layout rule ('side by side, left to right in the order given'), with a literal example payload. This is enough for an agent to distinguish it from render_sheet or pose without opening the schema.

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

Usage Guidelines4/5

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

It states when to reach for it ('see joints bend, find tearing and collapsing') and names a companion check (check_weights) for comparison. There is no explicit when-not guidance, but the intended inspection context is unambiguous.

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

prepare_referenceA

Clean a real-world reference for the other reference tools: crop it, remove the background and keep only the biggest object (a photo with two donuts and a caption becomes one donut with a transparent background). crop is [x0, y0, x1, y1] as fractions of the image from the top left (one panel of a sheet of views). keep=all keeps every blob. threshold is the colour distance from the background; leave it out and it is set just above the noise of the picture border (the answer shows the value). The background must be plain. fill_holes closes holes inside the object that are smaller than this share of the object area (glare on steel that looks like background); bigger openings such as a trigger guard stay. 0 closes nothing, 1 closes all. flip 'x' mirrors left-right, 'y' top-bottom; rotate turns clockwise by degrees (flip first). Use them to bring a panel to the picture a view expects (see compare_view). The result is an RGBA PNG cropped to the silhouette with pad margin; use its path as the reference of compare_view, fit_to_reference, visual_hull, measure_profile. The answer has the hole count and hole area share before and after filling, the blobs dropped, a warning (many open holes, the object touches the crop border, a big part dropped) and a preview picture: the cut-out over magenta and the mask (white object, green filled holes, red open holes). Look at the preview: alpha is not visible in the PNG itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNo
padNo
cropNo
flipNo
keepNolargest
imageYes
rotateNo
thresholdNo
fill_holesNo

TDQS

A4.7/5.0
Behavior5/5

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

With annotations declaring readOnlyHint=false/destructiveHint=false, the description goes well beyond them: it discloses that it writes an RGBA PNG, that the background must be plain, that threshold defaults to just above border noise, that holes smaller than fill_holes are closed while larger openings (trigger guard) stay, that flip is applied before rotate, and that many-open-holes/border-touch/large-drop conditions raise a `warning`. This is unusually rich behavioral disclosure.

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

Conciseness4/5

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

Front-loaded with the purpose and worked example, and most sentences carry parameter or behavioral payload. It is dense and occasionally sprawling (the return-value sentence bundles warnings, counts, and preview colours), but little is redundant.

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

Completeness5/5

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

For a 9-parameter image-processing tool with no output schema, the description covers input semantics, the required 'plain background' precondition, the produced artifact, and the full payload of the answer including warning conditions and preview contents. 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.

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so: crop as [x0,y0,x1,y1] fractions from top-left, keep=all vs largest, threshold as colour distance with an auto-default, fill_holes as a share of object area with 0/1 boundary semantics, flip axis meaning and rotate direction/order, and pad margin. Only `out` is left implicit via 'use its path'.

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

Purpose5/5

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

States a specific verb and resource ('clean a real-world reference ... crop it, remove the background and keep only the biggest object') and immediately grounds it with a concrete example (two donuts + caption -> one donut, transparent background). It also distinguishes itself from the downstream reference tools by framing itself as their preprocessing step.

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

Usage Guidelines4/5

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

Gives clear downstream context: the output path is meant to be used as the reference for compare_view, fit_to_reference, visual_hull, and measure_profile, and it names the transformation options used to bring a panel into the expected view. It does not state explicit exclusions or when NOT to use it, but the role among siblings is unambiguous.

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

procedural_materialA
Destructive

Give meshes a procedural node material for renders. It does NOT reach glTF: run bake_maps afterwards to turn it into images. Kinds: wood (rings, fibres, knots), checker, diamond (knurled bump), bricks (with mortar), noise (mottled), marble (veins), worn_metal (used steel: dirt in cavities, bright edges, scratches, rounded edges). color_a is the main colour, color_b the second (dark grain, mortar, veins, dirt), both '#rrggbb'; each kind has its own when empty. scale is the pattern frequency; seed shifts the pattern. roughness is 0-1; for worn_metal it is the clean metal, dirt and scratches add to it. Patterns lie on the UV map (a mesh without one is unwrapped with smart project and listed in unwrapped), so their size follows the UV islands. worn_metal works in object space instead: no seams, sizes follow the object. Its dirt, edge wear and rounding use ray-traced nodes: seen in cycles and bake_maps, not in eevee, and neighbour objects darken the cavities, so build the model first. params (optional): bump_strength; wood: grain_stretch (6), knots (true), distortion; marble: distortion; bricks: mortar (0.03); noise: detail_scale; worn_metal: dirt (0.6), edge_wear (0.5), scratches (0.3), metallic (1.0), and in metres bevel_radius, wear_width, ao_distance. The same material name rebuilds it. Slot 0 of each mesh gets it. For a plain colour or image maps use set_material.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
seedNo
namesYes
scaleNo
paramsNo
color_aNo
color_bNo
materialNo
roughnessNo

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses overwrite semantics ('The same `material` name rebuilds it'), that slot 0 of each mesh is targeted, that a mesh without UVs is smart-projected and listed in `unwrapped`, and that worn_metal's ray-traced dirt/AO renders in cycles and bake_maps but not eevee and is affected by neighbour objects.

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

Conciseness4/5

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

Dense and long, but front-loaded with the highest-value caveat (does not reach glTF) and organised into purpose, per-kind, UV/object-space, and params blocks. Nearly every clause carries information an agent needs; only the per-kind parentheticals border on over-detailed.

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

Completeness5/5

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

For a mutation tool with no output schema, the description covers the destructive overwrite behavior, the render-engine limitations, the UV/object-space distinction, and even names the `unwrapped` side-effect field. Nothing needed to invoke it correctly is missing.

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

Parameters5/5

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

With 0% schema coverage and 9 parameters, the description compensates fully: color_a/color_b roles per kind, per-kind empty defaults, scale as pattern frequency, seed as pattern shift, roughness semantics (and its meaning for worn_metal), and a full breakdown of the nested `params` keys with defaults for each kind.

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

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Give meshes a procedural node material for renders') and immediately differentiates from siblings by naming set_material ('For a plain colour or image maps use set_material') and bake_maps. The enumerated kinds make the scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not: 'It does NOT reach glTF: run bake_maps afterwards' tells the agent this is not an exportable material, and set_material is named as the alternative for plain colours or image maps. Preconditions for worn_metal ('build the model first') are also stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

radial_arrayA
Destructive

Repeat an object around a world axis through center, over angle degrees (360 is a full circle), and merge the copies. Wheels' spokes, columns in a ring, petals, gears.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNoZ
nameNo
angleNo
countYes
centerNo
objectYes
keep_sourceNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates the scene. The description adds useful context beyond that: it discloses that copies are merged and that the axis is a world axis. It does not disclose what happens to the source object (see keep_source) or whether the merge is irreversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core behavior front-loaded and illustrative examples trailing. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 7-parameter tool with 0% schema coverage and no output schema, the description covers the geometry basics but omits critical details such as the effect of `keep_source` on the original object and the naming behavior. Adequate but incomplete for a tool with this much destructive potential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and it partially does: it explains `center`, `angle` (degrees, 360 = full circle), and `axis` (world axis). It leaves `keep_source` and `name` entirely unexplained, which is a meaningful gap for a destructive merge operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (repeat), resource (object), and result (merge the copies), plus clarifies parameter semantics like 360 = full circle. It is clear enough that an agent can distinguish it from most siblings, but it never names or contrasts with the closest sibling `array` or `duplicate`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples (spokes, columns in a ring, petals, gears) imply the kinds of tasks this is for, giving implied usage context. However, there is no explicit when-to-use vs when-not guidance, and no mention of when to prefer the sibling `array` or `duplicate` instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

raycastA
Read-only

Shoot one ray in world space. Returns the first object hit, the distance, the point and the surface normal. Use it to find floors, ceilings, wall thickness and free space.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
directionYes
max_distanceNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value by spelling out the return shape (hit object, distance, point, normal), which matters since no output schema exists, but it omits what happens on a miss and how max_distance truncation behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, return contract stated first and usage second, with no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter query with annotations covering safety, the description covers purpose and return values adequately. Gaps remain on miss behavior, units, and max_distance semantics, but nothing critical to issuing a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the load. 'In world space' usefully pins the coordinate space for origin and direction, but max_distance is never mentioned and neither parameter's expected shape (3-component vector vs other) or distance units are clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Shoot one ray in world space') and enumerates the return payload (first hit, distance, point, normal), so the agent knows this is a single-ray intersection query. It does not differentiate from closely adjacent siblings like line_of_sight or viewshed, which likely answer overlapping visibility questions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete use cases ('find floors, ceilings, wall thickness and free space'), giving the agent a clear sense of when this tool applies. It stops short of naming alternatives or exclusions, so the agent must infer the boundary with line_of_sight on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recipeA
Read-only

Step-by-step recipe for a task: the tool calls in order, the numbers to check and the known traps. Call it before a task of these kinds: a character from reference images, a hard-surface prop, a weapon or object from an orthographic sheet, a scene from a perspective photo, a level blockout, materials and a final render, export for a game. Without topic it lists the topics, one line each. With a topic it returns the universal rules and that recipe. An unknown topic is an error that lists the topics. It works when Blender is closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavior beyond that: it runs with Blender closed, an unknown topic errors and lists topics, and omitting topic returns a one-line-per-topic list. That is useful operational context not derivable from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the first clause, then usage triggers, then parameter behavior, then the offline note. The mid-sentence enumeration of task kinds is long but each item earns its place as a trigger condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only lookup with no output schema, so the description carries the burden and largely does: it explains both return shapes (topic list vs. rules + recipe) and the error case. Nothing critical is missing for an agent deciding to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single topic parameter, so the description must carry the meaning, and it does: no topic lists topics, a valid topic returns universal rules plus that recipe, and an invalid topic errors with the topic list. The only gap is that it never hints at topic naming/format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and its content precisely: a step-by-step recipe giving the tool calls in order, the numbers to check, and the known traps. This is unmistakably distinct from every sibling tool, which are all Blender action primitives rather than guidance lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly enumerates the task kinds that should trigger a call (character from reference images, hard-surface prop, weapon from ortho sheet, scene from perspective photo, level blockout, materials/final render, game export). It gives a strong 'when', but no explicit 'when-not' or named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remeshA
Destructive

Replace the topology: rebuild the mesh as an even voxel surface that fuses overlapping parts into one skin, for sculpting. A smaller voxel_size means more detail and many more triangles. The old topology and UVs are lost. Use subdivide to round a mesh and keep its topology, subdivide_faces to add geometry to picked faces.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectYes
voxel_sizeNo
smooth_shadingNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the safety profile is covered, but the description goes further by specifying exactly what is destroyed — the old topology and UVs are lost — and by explaining the voxel_size/detail/triangle-count tradeoff, which the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the cost (detail vs triangles), then the destructive consequence, then alternatives — each sentence earns its place. Minor line-break fragmentation inside the first sentence is the only structural blemish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, output-schema-less mesh operation the description covers the essentials: what it produces, the resolution knob's tradeoff, what is irreversibly lost, and which siblings to prefer instead. Only the smooth_shading parameter remains unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for three parameters. The description explains voxel_size's effect on detail and triangle count, which is genuinely useful and beyond the bare schema, but it adds nothing about smooth_shading or the object parameter, leaving a third of the parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replace the topology: rebuild the mesh as an even voxel surface that fuses overlapping parts into one skin') and distinguishes itself from sibling operations by naming subdivide and subdivide_faces as the topology-preserving alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use context ('for sculpting') and explicitly routes to alternatives when topology must be kept ('Use subdivide to round a mesh and keep its topology, subdivide_faces to add geometry to picked faces'). It does not state outright when remesh is the wrong choice, but the alternative routing covers the practical decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_finalA

The presentation picture: render through the scene camera with the scene lights and materials to a file. Needs a camera: call set_camera first (or pass camera). For check pictures use render_sheet (overview) or render_view (any angle), they need no set-up. path is absolute, or relative to the work folder; the folder is created. engine: eevee (fast), cycles (slow, CPU, real light), workbench (flat preview, no lights needed). size is pixels for a square, or [width, height]. samples is the quality: 16-64 for eevee, 32-256 for cycles. transparent writes alpha (PNG, WEBP, TIFF, OPEN_EXR) and hides the world. denoise is for cycles only. view_transform: Standard keeps colours true; Filmic, AgX or Khronos PBR Neutral if the Blender build has them. exposure is in stops for this render only (+1 doubles the light); without it the scene exposure (set_post) is used. auto_exposure=true first renders a small probe and picks the exposure that puts the median luminance of the geometry at mid grey; the answer has auto_exposure. meter is a list of object names (with children) to measure instead of all geometry: give the model, so a floor or backdrop does not steer the exposure. Except for OPEN_EXR the answer has tone numbers of the written picture (0-1): frame and, when the geometry is known (meter, auto_exposure or transparent), object: median, mean, clipped_highlights and crushed_blacks. warnings appears when over 10% is clipped or over 50% is black. Read these numbers before you trust the picture. The scene settings are restored afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sizeNo
meterNo
cameraNo
engineNoeevee
denoiseNo
samplesNo
exposureNo
file_formatNoPNG
transparentNo
auto_exposureNo
view_transformNoStandard

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly=false, destructive=false, openWorld=false; the description adds substantial context beyond that – the folder is created, scene settings are restored afterwards, exposure is per-render, auto_exposure runs a probe pass, and the return carries tone numbers plus warnings at clipping/black thresholds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the camera requirement and sibling routing come first, then parameter semantics, then return values. Given 12 parameters at 0% schema coverage the length is largely earned, though a few clauses could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 12 undocumented parameters, the description supplies prerequisites, side effects, per-parameter meaning, and the shape of the response (tone statistics, warnings). Nothing an agent needs to call it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden and it does: it explains path resolution and folder creation, engine trade-offs, size as square vs [width,height], samples ranges per engine, transparent's format and world-hiding behavior, denoise being cycles-only, view_transform options, exposure in stops, auto_exposure, and meter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: 'render through the scene camera with the scene lights and materials to a file.' It also distinguishes itself from siblings by naming render_sheet and render_view and describing how they differ (no set-up required).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives prerequisites ('Needs a camera: call set_camera first (or pass camera)') and routes the agent to alternatives for check pictures. The condition selecting each sibling is stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_sheetA
Read-only

Overview picture for checking: several fixed views on a metre grid, no scene camera or lights needed. The flat views are orthographic and share one scale. A grid shows metres, coloured lines show the world axes (X red, Y green, Z blue). names limits the objects (with children). color_by object gives every object its own colour and the answer has a legend of name to '#rrggbb' (the lit picture is a little darker or lighter). Use render_view for one free angle, a close-up or a check mode, render_final for the lit picture through the scene camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
namesNo
viewsNo
color_byNomaterial

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine behavioural context beyond that: orthographic projection, shared scale across views, the metre grid and axis colour convention, and that the answer carries a name-to-hex legend when color_by='object'. It stops short of describing resolution behaviour for `size` or the exact response shape, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause and the routing sentence is placed last, which is the right order. The middle is dense and telegraphic ('color_by `object` gives every object its own colour and the answer has a `legend`...'), but nearly every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must hint at returns, and it does mention the legend of name to '#rrggbb'. Combined with the safety annotations and clear sibling routing, an agent has enough to call it correctly; only the `size` parameter and exact view set remain unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains `names` (limits objects, includes children) and `color_by` (object gives per-object colour plus a legend of '#rrggbb', noting the lit picture shifts slightly), which is valuable. However `size` and the `views` selection are not addressed beyond the implicit 'several fixed views', leaving half the parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific action (render an overview sheet) with concrete output characteristics: fixed orthographic views on a metre grid, shared scale, world-axis colour coding. It also explicitly distinguishes itself from render_view and render_final, so an agent can pick it without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use render_view for one free angle, a close-up or check mode; use render_final for the lit picture through the scene camera. This is a clear when-to-use-this-vs-alternatives statement, and it also notes that no scene camera or lights are needed here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_viewA
Read-only

Close-up picture for checking: one free angle with its own camera and light, no set-up needed. The camera frames the bounding volume of target (with children; empty means everything), so a tall figure and a small bolt both fill the picture. Azimuth 0 looks at the front (from -Y), 90 from +X, 180 from the back; elevation 0 is level, 90 is from above. fov 0 means orthographic. isolate=false draws the whole scene but still frames target: use it for close-ups of joints in context. Modes: solid (studio light, material colours), clay (one grey, shows form only), xray (see-through), flat (material colours without light), wire (edges: topology, hidden parts; lines are about 2 pixels wide at the centre of the frame at any zoom), ids (one flat colour per object, with a legend), normals (world normal as colour), backfaces (red where you see the inside of a face: flipped normals, open shells). eye puts the camera at a world point looking at look_at with fov (no framing): a player's view from a spawn at eye height, a look through a doorway. Use render_sheet for the overview with a metre grid, render_final for the scene lights, materials and camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
eyeNo
fovNo
modeNosolid
nameNoview
sizeNo
marginNo
targetNo
azimuthNo
isolateNo
look_atNo
elevationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds rich behavioral detail beyond that: what each of the eight modes actually shows, that isolate=false still frames target, that wire lines are ~2px wide at any zoom, and that empty target means everything. It does not say what the render produces or where the image lands, which is the one remaining opaque trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first clause and then earns most of its length with camera math and mode semantics that are not in any structured field. It is dense, however: the mode list is a long parenthetical run-on, and the eye explanation is wedged mid-paragraph rather than given its own lead-in.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter rendering tool with zero schema descriptions and no output schema, the description supplies the camera geometry, framing behavior and mode semantics an agent needs to call it correctly. It omits the output story (file naming via `name`, what size/margin control, what is returned), which is a real gap given there is no output schema to lean on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and nearly does: azimuth/elevation are given explicit reference frames, fov=0 explained as orthographic, target explained as a bounding volume that includes children and empty=everything, isolate explained, eye explained as a world point looking at look_at with no framing, and every mode enum value is described. Only name, size and margin are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Close-up picture for checking') with scope, and explicitly distinguishes itself from siblings: 'Use render_sheet for the overview with a metre grid, render_final for the scene lights, materials and camera.' An agent can route to it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the two alternative render tools and the exact condition that selects each, plus concrete use-contexts for isolate ('use it for close-ups of joints in context') and for eye mode ('a player's view from a spawn, a look through a doorway'). When/when-not/alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repair_meshA
Destructive

Heal one mesh in place: merge doubled vertices (weld in metres; empty follows the size, 0.0001 m for 0.3 m and more; 0 skips it), drop zero-area faces and edges (dissolve_degenerate), delete loose edges and vertices (remove_loose), fill holes of up to hole_sides edges (0 means any size; fill_holes=false skips it), turn normals outward, and remove material slots without a material (remove_empty_slots; their faces go to the first slot left). The answer gives removed (doubled_vertices, zero_area_faces, loose_edges, loose_vertices, empty_material_slots) and before and after counts: open_edges, non_manifold_edges (3 or more faces on one edge, not repaired), doubles, zero_faces, junk_vertices. Run it before boolean on parts you cut or joined by hand.

ParametersJSON Schema
NameRequiredDescriptionDefault
weldNo
objectYes
fill_holesNo
hole_sidesNo
remove_looseNo
recalc_normalsNo
remove_empty_slotsNo
dissolve_degenerateNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description goes well beyond them by enumerating exactly what is mutated (vertices welded, degenerate faces/edges dissolved, loose geometry deleted, holes filled, normals flipped, empty slots stripped and their faces reassigned). It also discloses a key limitation the annotations cannot convey: non-manifold edges of 3+ faces are reported but "not repaired."

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and effect, then parameter semantics, then the return payload and the workflow hint — no filler sentences. It is dense and runs long as a single compounded sentence, but every clause carries parameter or behavior information that the structured fields lack.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still documents the returned `removed` counters and before/after counts (open_edges, non_manifold_edges, doubles, zero_faces, junk_vertices), covers all eight parameters, and states the use case. 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full load and does: `weld` is expressed in metres with default-following and skip semantics, `hole_sides` 0 means any size, `fill_holes=false` skips the step, and the remaining booleans are mapped to their effects. This is a strong compensation for otherwise undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Heal one mesh in place") and enumerates the full composite pipeline, which distinguishes it from single-operation siblings like `weld`, `subdivide`, or `boolean`. An agent can tell this is a multi-step repair pass rather than a single edit without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one concrete when-to-use trigger: "Run it before boolean on parts you cut or joined by hand," which ties the tool to a clear workflow stage. It does not name alternative repair tools or state when not to use it, so it falls short of the explicit alternatives-plus-exclusions bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rockA

Make a closed rock mesh: an icosphere roughened by noise and squashed. Same seed, same rock. radius is the half width in metres: the wider of the X and Y extents is 2 x radius. roughness 0 to 1 is how far the shape departs from a ball. flatness 0 to below 1 squashes it down (0.5 is a flat boulder). detail 1 to 5 is the subdivision: 1 gives 20 triangles, 2 gives 80, 3 gives 320, 4 gives 1280. For a low-poly game use detail 1 or 2 with facets=true. facets=true shades each face flat (hard crystal look); false shades smooth. at is where the bottom centre of the rock sits in world space; the object origin is there, so the rock stands on the ground. Vary seed, radius and flatness to make a set of different stones. The mesh passes check_mesh.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameYes
seedNo
detailNo
facetsNo
radiusNo
flatnessNo
roughnessNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries the rest and does so well: determinism ('Same seed, same rock'), that the mesh is closed, that the object origin sits at the bottom centre so the rock stands on the ground, and that the output passes check_mesh. It does not say whether the new object is added to the scene/selection or what the return payload is, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then one clause per parameter with no filler. Every sentence carries usable information: the 'same seed, same rock' line, the low-poly recipe, and the origin/ground-contact note all change how an agent would call it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, no-output-schema generation tool, the description covers geometry, determinism, scale semantics, shading mode, placement and validation. The remaining gap is scene-side behavior (is the object selected, returned, or only added by name) and the meaning of the required 'name' parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with 8 parameters, so the description must compensate and does: it defines radius (half-width; X/Y extent = 2x radius), roughness (0–1 departure from a ball), flatness (0 to below 1, 0.5 = flat boulder), detail (1–5 with triangle counts 20/80/320/1280), facets (flat vs smooth shading), at (bottom-centre world placement) and seed (reproducibility). Only 'name' is left undefined, which is self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Make a closed rock mesh: an icosphere roughened by noise and squashed.' That distinguishes it from siblings like blob, create_primitive, terrain and sculpt, which produce different geometry. The construction method (icosphere + noise + squash) is explicit enough that an agent knows exactly what object it will get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete selection guidance: 'For a low-poly game use detail 1 or 2 with facets=true' and 'Vary seed, radius and flatness to make a set of different stones.' It also implies the quality gate ('The mesh passes check_mesh'). It stops short of naming a competing sibling (e.g. blob or terrain) or stating when NOT to use this tool, so it is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rollbackA
Destructive

Return to a checkpoint of this file: everything done after it is lost. The open file becomes the checkpoint copy: use Save As before you save. Without name nothing is rolled back: the answer lists the checkpoints of the open file.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it names exactly what is destroyed ('everything done after it is lost'), explains the surprising post-state (the open file becomes the checkpoint copy), and warns the user to Save As first. It also discloses the query-mode behavior when `name` is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the destructive consequence front-loaded in the first clause, followed by the Save As warning and the no-argument fallback. Every sentence carries distinct information; nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param, no-output-schema tool, the description covers destruction semantics, the mutation of the open file, the required Save As step, and the no-name listing behavior. It is close to complete; only the meaning/format of a valid checkpoint `name` and any error behavior are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden, and it does so by defining the two modes of the single `name` parameter: present = roll back to that checkpoint, absent = no rollback and a checkpoint listing is returned. It never clarifies the expected name format (e.g., checkpoint label vs. index), leaving one gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return to a checkpoint of this file') and makes the effect unambiguous: the file reverts and later work is discarded. It contrasts semantically with the sibling 'checkpoint' by describing the destructive inverse, but never names an alternative tool, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: call with `name` to roll back, call without `name` to list checkpoints, and a workflow warning ('use Save As before you save'). It does not explicitly frame when to choose this over the related checkpoint/diff_since tools, so no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

routeA
Read-only

Shortest walkable route between two world points. Returns the length, the straight-line length, the narrowest free width on the route with its position, the highest step and waypoints, plus an image. min_width forbids narrower passages: use it to ask 'can a group or a wide vehicle go from A to B?'. If the points are in different regions it says so and why.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
cellNo
namesNo
startYes
max_stepNo
min_widthNo
agent_heightNo
agent_radiusNo
max_slope_degNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description goes beyond by enumerating returned metrics (length, straight-line length, narrowest width, highest step, waypoints, image) and disclosing error behavior ('if the points are in different regions it says so and why').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then return values, then the min_width use case, then failure behavior. Sentences are dense with facts and none is filler, though the return-value enumeration makes it dense rather than tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates what the tool returns, which is a real contribution. But for a 9-parameter navigation tool with 0% schema coverage, it omits the meaning of most tunable parameters (agent size, slope/step limits), leaving the definition only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it only explains min_width. Eight parameters (cell, names, max_step, agent_height, agent_radius, max_slope_deg, and even start/end beyond 'two world points') carry no meaning anywhere, including the navigation constraints that define walkability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Shortest walkable route between two world points.' This immediately distinguishes it from siblings like line_of_sight, walkable_map, and check_passages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete use case for min_width ('can a group or a wide vehicle go from A to B?'), which is helpful context. However it never explicitly routes the agent between alternatives (line_of_sight, check_passages, walkable_map) or states when not to use it, leaving sibling selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_pythonA
Destructive

Run Python in Blender (bpy, bmesh, mathutils, Vector, np, math are ready). Returns stdout, and the added, changed and removed objects with their world sizes, so silent mistakes show up. Prefer the other tools for moving, sizing and checking. The tool descriptions are the documentation: do not read the add-on source here. With session the variables, functions and imports stay between calls under that name (reset=true clears them; rollback clears all sessions). paths are folders added to the import path: keep your helper modules there and import them once.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
pathsNo
resetNo
sessionNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint=false and destructiveHint=true, so the safety profile is covered structurally. The description adds meaningful context beyond that: it returns stdout plus added/changed/removed objects with world sizes so 'silent mistakes show up', warns not to read the add-on source, and explains that session state persists and is wiped by rollback. It never states plainly that the code can mutate or destroy scene data, which the destructive hint implies but the text leaves implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the returned value in the first sentence, then covers routing, documentation policy, and session/paths semantics compactly. Dense but every sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an arbitrary-code-execution tool with no output schema, the description is notably complete: it describes the return payload (stdout plus object diffs with world sizes), the persistence model, and the paths mechanism. Given there is no output schema, the return-value explanation is a real contribution, though failure modes and sandboxing limits go unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry all parameter meaning and largely does: `session` keeps variables/functions/imports alive under a name, `reset=true` clears that session, `paths` are folders added to the import path for helper modules. Only `code` is left self-evident. Minor gap: no mention of interaction between paths and sessions or scoping subtleties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Run Python) in a specific environment (Blender, listing bpy/bmesh/mathutils/Vector/np/math as preloaded), and explicitly routes away from it for other tasks ('Prefer the other tools for moving, sizing and checking'). An agent can distinguish it from the many modeling siblings like transform_objects or check_mesh without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete routing rule: prefer the dedicated tools for moving, sizing and checking, implying this is the escape hatch for arbitrary logic. It also establishes the session lifecycle (reset=true clears a session; rollback clears all). It lacks a crisp statement of when raw Python is actually the right choice vs. a specialized tool, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_specA
Read-only

Run a stored spec (see save_spec) and return the assert_spec result. Without name nothing runs: the answer lists the stored specs with their number of checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, closed-world profile, but the description adds the non-obvious dual-mode behavior: with `name` it executes and returns an assert result, without `name` it performs no execution and instead lists stored specs with check counts. That is real behavioral context beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core action is front-loaded before the fallback case. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description names the return ('assert_spec result') and the fallback listing. For a single-optional-param read-only tool this is nearly complete; only a brief note on what the listing/assert result contains would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single `name` parameter is optional with a null default, so the description must carry the meaning. It does: the effect of omitting `name` is spelled out (no run, list specs with check counts), which is the key semantic an agent needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run a stored spec') and the return ('assert_spec result'), and names two siblings (save_spec, assert_spec) so the agent can place it precisely in the workflow. It is distinguishable from save_spec (writes) and assert_spec (asserts) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Points to save_spec as the producer of the specs this tool consumes and explicitly describes the no-argument path ('Without `name` nothing runs'). It gives clear context for when to call it, though it stops short of stating explicit when-not-to-use or alternative conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_blendA

Save the scene to a .blend file. By default it saves a copy: the open file and its name stay as they were. make_current=true makes the saved file the open one (like Save As). path is absolute or relative to the work folder; .blend is added if missing. compress=true gives a smaller file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
compressNo
make_currentNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false; the description goes much further by disclosing that the default leaves the open file and its name unchanged, that make_current converts the operation into a Save As, how paths resolve (absolute or relative to the work folder), and that .blend is appended if missing. That is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action and default behavior, then the two flags. Every sentence carries information; nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no rich annotations, the description covers the operation, the default-vs-Save-As distinction, and path handling well. The one unstated risk is overwrite behavior when the target .blend already exists, which matters for a file-writing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must document all three params, and it does: path (absolute or work-folder-relative, extension auto-added), compress (smaller file), and make_current (Save As semantics). Each parameter gains meaning beyond its bare type and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Save the scene to a .blend file") and the format qualifier (.blend) implicitly separates it from siblings like export_glb, save_spec, or checkpoint. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the two modes: default is a non-destructive copy, make_current=true is Save As. That is explicit when-to-use guidance for the key flag, though it never names a sibling tool or an exclusion case (e.g., when to prefer export_glb instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_specA

Store a list of assert_spec checks under a name inside the scene (it is saved with the .blend). Rerun it with run_spec after every change, in this or a later session.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
checksYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds real behavioral context beyond them: the checks are persisted inside the scene file and survive into later sessions. It does not disclose what happens on a name collision (overwrite vs. append), which would be the remaining useful detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the follow-up workflow note immediately after. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal annotations, the description supplies the essential facts: what is stored, where, and how to reuse it. Minor gaps remain (collision/overwrite behavior, expected check object shape), but nothing critical to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It maps 'name' and 'checks' conceptually ('a list of assert_spec checks under a name'), but gives no structure or format hints for the opaque check objects the schema accepts. Partial compensation for a fully undescribed schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Store a list of assert_spec checks under a name inside the scene') and clarifies the persistent scope. It is immediately distinguishable from its nearest sibling run_spec, which executes rather than stores. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to run_spec and states the workflow condition ('rerun it ... after every change, in this or a later session'), which explains why persistence matters. It lacks an explicit 'use this instead when...' framing or exclusion cases, but the when-to-use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scatterA

Place count copies of an object at random on top of surface objects, standing on the surface: trees, rocks, crates, grass, sprinkles. source may be a list: each copy takes one at random and weights sets the odds. area [x0,y0,x1,y1] limits where (default: the surface bounds); min_distance keeps copies apart; max_slope_deg skips steep ground; align_to_normal tilts them with the ground; scale_range [min,max] and yaw_random vary them. The same seed gives the same result. linked=true shares one mesh (cheap). The answer counts the copies per source and why tries were rejected (too_close, not_on_surface, too_steep). For one object at a chosen spot use place_on.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNo
nameNo
seedNo
countYes
linkedNo
sourceYes
surfaceYes
weightsNo
yaw_randomNo
scale_rangeNo
min_distanceNo
max_slope_degNo
align_to_normalNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly=false/destructive=false/openWorld=false, which is consistent with adding objects to a scene. The description adds substantial unsurfaced behavior: seed determinism ('The same seed gives the same result'), a performance tradeoff ('linked=true shares one mesh (cheap)'), and the nature of the returned result (counts per source and rejection reasons too_close/not_on_surface/too_steep).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and sentences are densely informative with almost no filler, which is justified for 13 undocumented parameters. It is delivered as a single unstructured paragraph, so parameter groups are harder to scan than they could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the return value (per-source counts plus rejection reasons), covers determinism, memory cost, and the sibling alternative. For a complex 13-parameter mutation tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 13 params, so the description carries the full burden and mostly succeeds: it defines `source` list semantics, `weights` odds, `area` as [x0,y0,x1,y1] with a default, plus min_distance, max_slope_deg, align_to_normal, scale_range [min,max], yaw_random, seed, and linked. Gaps remain for `name` and the format of `surface`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Place') plus resource ('`count` copies of an object at random on top of surface objects') with examples of what gets scattered (trees, rocks, crates, grass). It explicitly distinguishes itself from the sibling `place_on` by naming that tool for the single-placement case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes the agent to the alternative explicitly: 'For one object at a chosen spot use place_on.' That is a clear selection condition. It lacks broader when-to-use framing (e.g., scene-population intent) or when-not-to-use, but the sibling handoff is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_treeA
Read-only

Every object with type, collection, parent (by indent), world size, world minimum corner and triangle count. Shows the first limit objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, destructiveHint=false and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral detail not in the annotations: the parent relationship is conveyed via indentation, and each row carries world-space bounds and triangle counts. It does not describe ordering or pagination beyond truncation, keeping it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the returned fields before the truncation caveat. No filler, though the field list is packed densely without structure that would help an agent parse it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe return content, and it does so reasonably: field names, the indent-based hierarchy, and truncation. Gaps remain around ordering and whether the traversal is hierarchical or flat, but for a simple listing tool this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 0%, the description must carry the parameter. It does explain that `limit` caps the number of objects shown, which is real added meaning, but it omits the default value of 200 and says nothing about ordering (which objects count as the 'first'). Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (every object in the scene) and enumerates the specific attributes returned: type, collection, parent-by-indent, world size, world minimum corner, triangle count. That is concrete and specific. It does not, however, differentiate itself from plausible siblings such as `array` or `mesh_info`, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus alternatives (e.g., `array` for a flat list or `mesh_info` for a single object's details). The only contextual sentence, 'Shows the first `limit` objects,' is truncation behavior, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sculptA
Destructive

Sculpt by numbers: move the vertices under a brush. Brush: either at + radius (a sphere in the world, strongest at the centre), or where (+ mode) with spread, the number of metres around the region that still feel the brush; falloff shapes the fade. The mesh needs enough vertices: subdivide_faces first. op grab: pull the surface by the world vector move. op inflate: push it out (or in, negative) along its normals by amount metres. op smooth: relax it towards the average of the neighbours, iterations times by factor; with no brush it smooths the whole mesh; keep_boundary leaves open edges in place. For shading only use shade. op flatten: press the area onto its own average plane; strength 1 (default) is fully flat. Soles, table tops. op pinch: draw the area towards its centre in the surface plane (sharpens creases, narrows a part); strength 1 collapses it, default 0.5. Parameters of another op are ignored. The answer has vertices_moved. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
opYes
modeNofaces
moveNo
whereNo
amountNo
factorNo
objectYes
radiusNo
spreadNo
falloffNosmooth
strengthNo
iterationsNo
keep_boundaryNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (destructive, not read-only, closed-world); the description adds genuinely useful behavior beyond that: 'Parameters of another op are ignored', keep_boundary semantics, the smoothing-without-brush default, and the return value (vertices_moved). It omits any warning about the destructive nature or undo/checkpoint recovery, which is a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well organized: brush definition first, then one line per op, then the `where` selector keys. Nearly every sentence earns its place by defining a parameter's effect, though the op-by-op formatting and heavy backtick use make it longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema, the description supplies the prerequisite, per-op parameter semantics, ignored-parameter rule, `where` grammar, and the return field. It could still say more about the destructive/mutation implications and required `object`/`op`, but it is broadly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 14 params, the description carries the full burden and does so thoroughly: it defines at/radius vs where/mode/spread/falloff, and gives per-op meaning for move, amount, factor, iterations, keep_boundary, and strength. It even details every supported key inside `where` (normal/angle, x/y/z ranges, box, area, index), leaving essentially nothing to the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('move the vertices under a brush') and enumerates the five sculpting operations, mapping each to its own parameters. An agent can distinguish this from siblings like shade, subdivide_faces, deform, or shrinkwrap without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite ('The mesh needs enough vertices: subdivide_faces first') and routes shading-only work to sibling 'shade'. It doesn't cover when to prefer this over deform/shrinkwrap/noise_displace, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

select_facesA
Read-only

Preview a face selection without changing anything: how many faces, their area, the world range of their centres and the first indices. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNo
objectYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the description doesn't need to establish the safety profile. It goes beyond that by specifying the exact return shape (count, area, world range, first indices) and the default angle (25°), which is meaningful behavioral detail. It doesn't discuss pagination or size limits on large selections, keeping it from 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key preview behavior and return fields are front-loaded in the first sentence, and the `where` grammar follows. It's dense but every clause carries parameter meaning. Slightly prose-heavy for a tool description but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter read-only tool with no output schema and 0% schema coverage, the description covers the selection grammar thoroughly and names the preview output. It leaves minor gaps (no mention of performance on large meshes, no reference to sibling selection-based operations), but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for `where`, and it delivers: it enumerates every supported key (normal with angle default 25°, x/y/z ranges with null-open semantics, box, area, index) and states the AND-semantics ('all given keys must hold') plus the empty-object/null default. This is exactly the compensation needed at 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource and scope: 'Preview a face selection without changing anything'. It also enumerates exactly what is returned (count, area, world range of centres, first indices), which distinguishes it sharply from siblings like `delete_faces` or `extrude_faces` that actually mutate the selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is clear ('Preview...without changing anything', 'Look at mesh_info first to see where the faces are'), and the read-only intent implies this is used before mutating operations. It doesn't explicitly name the mutating alternatives (extrude_faces, delete_faces, inset_faces, etc.) it's meant to precede, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_cameraA

Create or update a camera for render_final. Place it one of two ways. Explicit: location and look_at in world metres; on an existing camera, one of them keeps the other. Framed: frame is a list of object names (with children); the camera stands so their box fits the view. azimuth (degrees around Z: 0 looks from the front at -Y, 90 from +X; 35 when empty) and elevation (above the horizon; 20 when empty) set the side; margin is spare room (1.15 = 15%); look_at overrides the aim point. fov_deg is the vertical field of view and is applied on every call, so repeat it on updates. fov_deg=0 or an ortho_scale (metres across) makes it orthographic. roll_deg rolls about the view axis. make_active sets the scene camera. Returns the location, the forward vector and the projection. For a camera that matches a photo use match_camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNocamera
frameNo
marginNo
azimuthNo
fov_degNo
look_atNo
locationNo
roll_degNo
elevationNo
make_activeNo
ortho_scaleNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish only the safety profile (readOnly=false, destructive=false, openWorld=false); the description adds the behavioral details that matter, notably that fov_deg is applied on every call and must be repeated on updates, that one of location/look_at is preserved on an existing camera, that frame includes children, that make_active sets the scene camera, and what the return payload contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core create/update statement and the two placement modes, and nearly every clause carries information. It is, however, a dense wall of semicolon-joined clauses with no visual separation, which makes it slower to scan than it needs to be for an 11-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating the return values (location, forward vector, projection). Combined with full parameter coverage and the update-semantics caveat, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are 11 parameters, so the description must carry the load — and it does, explaining location/look_at (world metres, override behavior), frame (object names with children), azimuth/elevation (units, reference axes, defaults), margin, fov_deg, ortho_scale, roll_deg, and make_active. Only 'name' is left implicit, which its obvious default justifies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Create or update a camera for render_final') and immediately scopes it to its purpose, then distinguishes itself from the only relevant sibling by routing photo-matching to match_camera. An agent can tell what this does and what it is not without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the two mutually exclusive placement modes (Explicit via location/look_at vs Framed via frame) and the condition that selects each, gives defaults for the optional orientation inputs, and ends with an explicit alternative ('For a camera that matches a photo use match_camera'). When-to-use and when-to-use-something-else are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_dimensionsA
Destructive

Set the size in metres. Empty axes stay. With uniform=true the first given axis sets a factor for all axes. The anchor point of the bounding box (fractions 0..1) stays where it is; (0.5,0.5,0) keeps the bottom. With apply=true the scale is baked into the mesh, so the object keeps scale 1 and exports cleanly.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
zNo
nameYes
applyNo
anchorNo
uniformNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare a mutation (readOnlyHint=false, destructiveHint=true), and the description usefully adds what happens beyond that: empty axes are preserved, the anchor point stays fixed, and apply=true bakes the scale so the object keeps scale 1 and exports cleanly. This is meaningful behavioral context rather than repetition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, and each subsequent sentence earns its place by disambiguating uniform, anchor, and apply respectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with 0% schema coverage and no output schema, the description conveys enough to call it correctly, though it never names the required target parameter or notes any return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the params, and it largely does: it clarifies x/y/z nullability ('empty axes stay'), uniform (first axis sets a factor for all), anchor (fractions 0..1, (0.5,0.5,0) keeps the bottom) and apply. Only the required 'name' target goes unmentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (set the size in metres), which is clearer than generic siblings like transform_objects or apply_transforms. The scope is well defined, though it never explicitly contrasts itself against those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains behavioral options (uniform, anchor, apply) but gives no when-to-use guidance or alternatives. Nothing tells the agent when to pick set_dimensions over transform_objects or apply_transforms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_materialA
Destructive

Create or rebuild a material (Principled BSDF, exports to glTF) and put it on whole meshes. The quick form is names and color: '#rrggbb' or [r, g, b] in 0..1. Without material the name comes from the numbers, so equal parameters reuse one material (fewer draw calls); an existing name is rebuilt. Slot 0 gets it: use assign_material_faces for parts of a mesh. alpha below 1 is glTF BLEND: glass only, transparent faces cost sorting. emission is {"color": "#ffcc66", "strength": 2.0}. coat is a clear layer. transmission 1 is clear glass (refracting, Cycles and KHR_materials_transmission; use alpha for cheap glass). subsurface does not reach glTF. Image paths (the meshes need a UV map: unwrap or palette_uv first): texture (base colour; color then tints it, '#ffffff' keeps it; alpha multiplies its alpha), normal_map (tangent space), roughness_map and metallic_map (grey), or orm_map instead of those two (R occlusion, G roughness, B metallic). A map replaces its number. bump {"scale": 20, "strength": 0.3} is a procedural noise for renders only: bake_maps turns it into a normal map. The answer has gltf: alphaMode, the factors and the texture slots that will be written. For patterns (wood, bricks, worn metal) use procedural_material.

ParametersJSON Schema
NameRequiredDescriptionDefault
bumpNo
coatNo
alphaNo
colorYes
namesYes
orm_mapNo
textureNo
emissionNo
materialNo
metallicNo
roughnessNo
normal_mapNo
subsurfaceNo
metallic_mapNo
transmissionNo
roughness_mapNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds real behavior: an existing name is rebuilt, slot 0 is targeted, alpha<1 triggers glTF BLEND and sorting cost, subsurface does not reach glTF, and a map replaces its number. It also notes image maps require a UV map first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and the quick `names`+`color` form, then layers optional features. It is dense and occasionally telegraphic (e.g. 'coat is a clear layer'), but with 16 params and no schema descriptions nearly every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, it still describes the return ('The answer has `gltf`: alphaMode, the factors and the texture slots that will be written'), and it covers prerequisites (UV map) and glTF export caveats. Complete for a high-complexity mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the whole burden across 16 params and does so: color formats ('#rrggbb' or [r,g,b] in 0..1), material-name derivation, emission shape, coat/transmission/alpha semantics, texture/normal/roughness/metallic/orm map roles, and bump. This substantially compensates for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verb+resource ('Create or rebuild a material (Principled BSDF, exports to glTF)') and scope ('put it on whole meshes'). It explicitly distinguishes itself from siblings: 'use assign_material_faces for parts of a mesh' and 'For patterns ... use procedural_material.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names alternatives and the selecting condition: assign_material_faces for parts, procedural_material for patterns, bake_maps to convert a bump, alpha for cheap glass vs transmission for refracting glass. It also gates texture maps behind a prior unwrap/palette_uv step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_originA
Destructive

Move the origin of each object without moving its geometry or its children in the world. Give either at (one world point for all) or anchor (fractions of the world box of each object, without children: (0.5, 0.5, 0) is the bottom centre, (0.5, 0.5, 0.5) the centre). Use it for pivots: a hinge axis, the base of a prop, the grip of a weapon. Mesh data shared with other objects becomes a private copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
namesYes
anchorNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false; the description goes beyond them by disclosing the side effect that 'Mesh data shared with other objects becomes a private copy' and by clarifying that geometry and children are not moved. Missing any note on reversibility or permission requirements, but the important mutation consequence is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core behavior, then the parameter contract, then the mesh-copy side effect. Dense but every clause earns its place; no padding or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% schema coverage, the description is the sole source of parameter and behavior information, and it covers both params plus the shared-mesh side effect. It does not address whether the change is undoable or how multi-object selection interacts across differing origins, which is a minor residual gap for a destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load and largely does: it defines `at` as one world point for all and `anchor` as box fractions without children, with worked examples ((0.5, 0.5, 0) is bottom centre). Only `names` is left implicit, which is self-evident from the plural and required status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Move the origin of each object') plus the critical scope qualifier ('without moving its geometry or its children in the world'). An agent can distinguish this from transform_objects or move_to_contact without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use-case framing: 'Use it for pivots: a hinge axis, the base of a prop, the grip of a weapon.' That tells the agent when the tool is the right choice, but names no alternative or when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_postA
Destructive

Set post-processing for render_final: vignette, glare, colour, exposure, contrast. It builds a compositor tree, works with every engine and is not shown in the viewport. A call changes only what you pass and keeps the rest. Pass false to switch one effect off (vignette=false); reset=true removes everything this tool set. vignette {"strength": 0-1 (how dark the corners get), "softness": 0-1 (how far in the fade starts)}; both start at 0.5. The darkening is an ellipse that follows the picture shape. glare {"type": "bloom" | "fog_glow" | "streaks", "threshold": 1.0 (how bright a pixel must be to glow; lower = more glow), "size": 1-9 (8 when empty)}. It needs pixels above 1: strong lights or emission. color {"saturation": 1.0 (0 = grey), "gamma": 1.0 (above 1 brightens the mid-tones)}. exposure is in stops (+1 doubles the light). contrast is -1 to 1. It refuses to replace a compositor tree it did not make. Returns the active settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNo
glareNo
resetNo
contrastNo
exposureNo
vignetteNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint=true annotation, the description discloses a lot: it builds a compositor tree, works with every engine, is invisible in the viewport, applies deltas rather than replacing settings, uses false to disable an individual effect, reset=true removes everything it set, and it 'refuses to replace a compositor tree it did not make'. This is exactly the extra context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and update semantics before the dense per-parameter block; every clause adds information. The parameter block is somewhat run-on, but the density is justified given 6 undocumented parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with six undocumented parameters and no output schema, the description covers purpose, update semantics, per-effect meaning, safety constraints, and even the return ('Returns the active settings'). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and does: it gives ranges and defaults for vignette strength/softness (0-1, start 0.5), glare type (bloom/fog_glow/streaks), threshold, size (1-9, 8 when empty), color saturation/gamma, exposure in stops, contrast (-1 to 1). This fully compensates for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set) and resource (post-processing for render_final), then enumerates the exact effects (vignette, glare, colour, exposure, contrast). It clearly distinguishes itself from sibling render tools like render_final and setup_lighting, which do the actual rendering or lighting rather than post effects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'for render_final' framing and the disclosure that it is 'not shown in the viewport' establish when this applies, and 'A call changes only what you pass and keeps the rest' plus reset=true describes the update semantics clearly. It stops short of naming an explicit alternative tool or a when-not condition, so it does not reach 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setup_lightingA
Destructive

Replace the studio lights with a preset. Lights are named bl_light_*; earlier ones are deleted first, so a second call never doubles them. Other lights in the scene are not touched. Presets: three_point (key, fill, rim), sun (one hard sun), soft_studio (large soft panels, even light), night (dim blue moon and a warm lamp), metal (for metal and glossy product shots: an interior HDRI that the surface reflects, a key spot and a rim spot). strength scales all of them (1 is a normal exposure). metal also replaces the world: set_world hdri='interior' at strength 0.6, hidden from the camera, so the backdrop keeps the colour it had. The answer has it under world; call set_world afterwards for another HDRI, rotation or backdrop. The other presets do not touch the world: with area lights only, metal has nothing to reflect and renders black or blown. target is a list of object names; light size and distance follow their box (default: all visible geometry). The key light stands front-right (azimuth 40) so it suits the default set_camera view. color tints the lights: '#rrggbb' or [r, g, b] (0-1). Pair it with set_world for the background.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNo
presetNothree_point
targetNo
strengthNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them by enumerating exactly what is destroyed ('earlier ones are deleted first'), what is preserved ('other lights are not touched'), and the non-obvious side effect that the metal preset also overwrites the world. That is precisely the extra context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-sentence purpose, then scoped by side effects, then presets, then parameters – a sensible order with no filler. It runs long and some lines (the key-light azimuth aside, the metal/world caveat) are dense, but each sentence adds operational information rather than restating structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent where the result surfaces ('The answer has it under `world`') and how to continue (set_world for another HDRI or rotation). Coupled with the destructive scope, preset semantics and target/color guidance, nothing required to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full load and does so: all five preset enum values are explained with their lighting composition, `strength` is defined as a normal-exposure multiplier, `target` is documented as object names with box-derived size/distance and a default of all visible geometry, and `color` is given as '#rrggbb' or [r,g,b] 0-1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replace the studio lights with a preset') and immediately scopes it by naming the lights it manages (bl_light_*) versus those it does not touch. An agent can distinguish this from add_light, list_lights and set_world without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: idempotent re-calls are safe, other lights are untouched, and it names set_world as the follow-up for HDRI/rotation/backdrop changes plus a warning that metal needs set_world afterward. It does not explicitly say when to prefer this over add_light for hand-placed lights, so it stops short of full alternatives routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_worldA
Destructive

Set the background and ambient light: a plain colour or an HDRI image. color is '#rrggbb' or [r, g, b] (0-1). An explicit color wins over the preset colour. strength multiplies the light (1 is normal). With neither colour, preset nor hdri only the strength changes. hdri lights the scene with an image and gives metal and glass something to reflect. It is a path to an .hdr or .exr file, or the name of a studio light shipped with Blender: city, courtyard, forest, interior, night, studio, sunrise, sunset (the answer lists them in builtin_hdris; an unknown name gives the list in the error). rotation_deg turns it about Z. visible_to_camera=false keeps the HDRI for light and reflections, and the camera sees the plain color or preset colour instead (without them: the colour the world had). Works in eevee and cycles. A later call without hdri and with a colour or preset makes the world a plain colour again. transparent=true makes the render background transparent (alpha 0) and the world only lights the scene. The flag stays on until set_world is called again with transparent=false.

ParametersJSON Schema
NameRequiredDescriptionDefault
hdriNo
colorNo
presetNo
strengthNo
transparentNo
rotation_degNo
visible_to_cameraNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false. The description adds substantial behavioral context: color/preset precedence, strength multiplication, HDRI builtin names and error behavior, rotation about Z, visible_to_camera masking, transparent flag stickiness, and engine compatibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded and every sentence carries specific operational meaning. It specifies scope first, then precedence, persistence, parameter behavior, and engine support without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, zero-schema-description mutation tool with no output schema, the description supplies nearly all missing behavioral and parameter context. It covers core semantics, persistence rules, and compatibility; return values need not be explained because no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It defines color format and precedence, strength behavior, HDRI path and builtin names, rotation semantics, transparent alpha behavior, and visible_to_camera effects; only individual preset meanings are left largely to the schema enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: set the world background and ambient light. It clearly scopes the world/environment, though it does not explicitly distinguish itself from lighting siblings such as add_light or setup_lighting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied by the purpose: setting background and ambient light. However, there is no explicit when-to-use vs alternatives guidance or exclusions, so the agent must infer that this is the world-level lighting tool rather than a per-light tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shadeA
Destructive

Set shading of meshes. smooth: every face and edge smooth. flat: every face flat. auto: smooth faces, but edges sharper than angle degrees stay sharp (a cube stays crisp, a sphere becomes smooth). Cheap and exports as is. weighted_normals=true (with smooth or auto) adds a Weighted Normal modifier that keeps sharp edges: large flat faces stay flat and only the bevels blend. Use it for parts with both bevels and flat chamfers, where no single angle works. export_glb writes these normals while apply_modifiers is true. A later shade call without it removes it. It changes normals only: to move vertices use sculpt with op smooth.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNosmooth
angleNo
namesYes
weighted_normalsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds real value beyond them: it discloses that the tool is 'cheap and exports as is', that weighted_normals installs a Weighted Normal modifier, that export_glb honors the normals while apply_modifiers is true, and that a later shade call removes it. It also bounds the destructiveness ('changes normals only'). Persistence of the modifier is the notable non-obvious behavior it surfaces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and mode semantics before the more advanced weighted-normals nuance, and every sentence carries information. It is dense and one continuous block rather than scannable, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four params, no output schema, and annotations present, the description covers mode behavior, the modifier side-effect, export interaction, and scope limits. An agent has enough to invoke it correctly; only the 'names' argument and error/edge behavior are unaddressed, which are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameters, and it does for three of four: it explains each enum value of mode, what 'angle' controls (edges sharper than `angle` degrees stay sharp), and what weighted_normals=true does. Only 'names' is left implicit, but it is self-evident as the target meshes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set shading of meshes') and then decomposes the three modes with concrete outcomes ('a cube stays crisp, a sphere becomes smooth'). It also explicitly distinguishes itself from sibling 'sculpt' by scope ('changes normals only'), so an agent can place it correctly among the many mesh-editing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions for the weighted_normals option ('Use it for parts with both bevels and flat chamfers, where no single angle works') and routes vertex-moving work to the alternative ('to move vertices use sculpt with op smooth'). No explicit when-not to shade at all, but the context for each mode/flag is well covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shrinkwrapA
Destructive

Snap the vertices of object onto the surface of target (clothes onto a body, a clean mesh onto a sculpt, a floor onto terrain). Method project moves them along axis (default Z) in direction. offset keeps a gap in metres. Subdivide the object first for a smooth fit.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisNo
methodNonearest_surface
objectYes
offsetNo
targetYes
directionNoboth

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds context beyond that: it specifies that vertices are moved (what gets modified), how offset creates a gap in metres, and the subdivide-first workflow prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences front-load the core action before drilling into method, offset, and the prerequisite. Every sentence carries information, though the parameter detail could be organized more cleanly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter destructive tool with no schema descriptions and no output schema, the description leaves meaningful gaps: two of three method enum values are unexplained and the object/target inputs are only implied. It is adequate but not complete enough to call the tool correctly without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry the full parameter burden and only partly does. It explains `axis`, `direction`, and `offset` (metres) but only describes the `project` method, leaving `nearest_surface` (the actual default) and `nearest_vertex` undefined; it also claims `axis` defaults to Z while the schema default is null.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource relationship ('Snap the vertices of `object` onto the surface of `target`') rather than a vague action. The vertex-level framing plus concrete examples (clothes onto a body, a clean mesh onto a sculpt) distinguish it from placement siblings like place_on or move_to_contact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical examples give clear use-case context for when this tool applies, and 'Subdivide the object first for a smooth fit' is a useful prerequisite. It never names or excludes alternatives such as place_on or ground, so the routing guidance stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sightline_mapA
Read-only

Exposure of a level. For every reachable cell it shoots rays around at eye height and measures how far one can see. Returns a heat map (blue enclosed, red exposed), the longest sight lines with their positions and the area that has a sight line longer than long_sightline. Use it to find sniper alleys and to check that cover and corners break long views. Same agent settings as walkable_map.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNo
raysNo
namesNo
startNo
max_rangeNo
eye_heightNo
long_sightlineNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, closed-world profile, and the description adds substantive behavioral detail: the ray-casting computation and the exact return contents (colored heat map, longest sight lines, area over threshold). It omits cost/performance characteristics of the per-cell scan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool does, then outputs, then intended use, in a tight four-sentence block. No filler, though the return-value sentence is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents the return shape, and annotations cover safety. But for a seven-parameter tool lacking any schema descriptions, several inputs (names, start, max_range) are left undocumented, leaving the definition only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the seven parameters, but it only loosely touches long_sightline (explicit), eye_height, rays and cell. names, start, and max_range are entirely unexplained, with no format, units, or default values given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with mechanism: it shoots rays at eye height from every reachable cell and measures visibility, producing a heat map. Distinguishable from single-line siblings like line_of_sight or raycast, though it never names the alternative it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use context (find sniper alleys, verify cover/corners break long views) and cross-references walkable_map for shared agent settings. It stops short of explicit when-not/alternatives routing against viewshed or line_of_sight.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solidifyA
Destructive

Give a surface thickness in metres (walls from planes, cloth, leaves). offset -1 grows inward, 1 outward, 0 both ways.

ParametersJSON Schema
NameRequiredDescriptionDefault
evenNo
objectYes
offsetNo
thicknessYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this mutates geometry. The description adds useful offset direction semantics, but it does not explain what happens to the original surface, whether the operation is reversible, or how materials/normals are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero filler. The core operation is front-loaded, and the offset explanation follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mesh operation with four parameters, no output schema, and no schema descriptions, the definition is only partially complete. It covers the key thickness and offset semantics but omits object, even, and the post-operation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It adds meaningful semantics for thickness ('in metres') and offset ('-1 grows inward, 1 outward, 0 both ways'), but it leaves the required object parameter and the even parameter unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation ('Give a surface thickness') on a clear resource and gives examples (walls, cloth, leaves). It does not explicitly differentiate itself from nearby mesh-editing siblings such as extrude, inset, or subdivide, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical examples imply useful contexts, but there is no explicit when-to-use guidance, no when-not-to-use guidance, and no alternative sibling named. Usage is suggested rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA
Read-only

Call it first. Blender version, add-on version, open file, scene and its object count, and the toolsets of this server. It compares the tools of this server with the handlers of the add-on: server_is_stale means restart the MCP server, addon_is_stale means restart Blender. When Blender is not reachable it says where Blender is installed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, non-destructive, closed-world), so the bar is lower, and the description clears it by disclosing non-obvious behavior: it compares server tools against add-on handlers to produce staleness verdicts, and it reports Blender's install location when unreachable. These are actionable traits absent from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences with the imperative 'Call it first' front-loaded. The middle sentence is a dense comma list of returned fields, but each item is load-bearing; little could be removed without losing diagnostic meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and annotations covering safety, the description carries the remaining burden and does so: it names what is returned and interprets the two staleness outcomes. An agent has everything needed to call it correctly and act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to add on parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates exactly what the tool returns (Blender version, add-on version, open file, scene and object count, server toolsets) and adds a diagnostic role (server_is_stale / addon_is_stale). That is a specific verb+resource, though it never explicitly distinguishes itself from the sibling job_status, which an agent could plausibly confuse with a generic 'status' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call it first" gives an unambiguous ordering instruction, and the description goes on to state what each diagnostic result means and what action to take (restart the MCP server vs restart Blender). The when-to-use condition is explicit rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subdivideA
Destructive

Round the whole mesh with Catmull-Clark subdivision: the shape changes, each level quadruples the faces. apply=true bakes it into the mesh and sets smooth shading. Watch the triangle count in the answer against your budget. Use subdivide_faces to cut picked faces into a grid without rounding, remesh for an even skin over merged parts.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNo
namesYes
levelsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds substantive behavior: shape morphing, per-level face quadrupling, that apply=true bakes the change and sets smooth shading, and a warning to watch triangle count against budget. It omits permission or reversibility notes, but the added context well exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its mechanism in the first clause. Every subsequent sentence carries distinct load: parameter behavior, a budgeting warning, and sibling routing. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema and 0% parameter coverage, the description covers effect, the apply/levels semantics, alternatives, and a poly-count caution. The gap is the undocumented 'names' argument and any note on how the output reports the triangle count it references.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry all three parameters. It explains apply ('bakes it into the mesh and sets smooth shading') and gives levels real meaning ('each level quadruples the faces'), but 'names' is never addressed and levels' default/cost tradeoff is only implied, leaving partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Round the whole mesh with Catmull-Clark subdivision') and explains the resulting effect ('the shape changes, each level quadruples the faces'). It explicitly distinguishes itself from the two nearest siblings, subdivide_faces and remesh, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternatives and the conditions that select them: subdivide_faces for cutting picked faces into a grid 'without rounding', remesh for 'an even skin over merged parts'. Implicitly the use case for this tool is rounding the whole mesh, but it never states an explicit when-not-to-use condition, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subdivide_facesA
Destructive

Add geometry without changing the shape: split the picked faces into a grid, cuts cuts per edge, to bend, sculpt or displace later. Use subdivide to round the whole mesh, remesh for an even skin over merged parts. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
cutsNo
whereNo
objectYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is known. The description adds real context beyond that: it clarifies the operation adds topology 'without changing the shape', which is a non-obvious behavioral trait. It does not mention reversibility/rollback, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core effect and the sibling differentiation before the dense parameter block, and every sentence carries information. The `where` explanation is necessarily long but tightly packed; slightly run-on but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mesh-mutation tool with no output schema and no annotation detail, the description covers effect, alternatives, prerequisite, and the full selector vocabulary. The only gap is the required `object` argument and what the call returns/changes on the target, but overall it is sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load and largely does: it defines `cuts` as cuts per edge, and fully documents the `where` selector keys (normal, angle default 25, x/y/z ranges, box, area, index, empty/null semantics). The required `object` parameter is only implied, not described, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and effect ('split the picked faces into a grid') plus the intended downstream use ('to bend, sculpt or displace later'), and explicitly distinguishes itself from the sibling tools subdivide and remesh. An agent can tell it apart from those without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternatives explicitly with the condition that selects them: 'Use subdivide to round the whole mesh, remesh for an even skin over merged parts.' It also prescribes a prerequisite workflow ('Look at mesh_info first to see where the faces are'), so when-to-use and what-to-do-before are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sweepA

Pull a cross-section along a path of world points: pipes, cables, railings, trims, horns, tails, roads. Instead of path, arc gives a circular arc without computing points: {"center": [x, y, z], "radius": 0.09, "plane": "XZ", "start_deg": 0, "end_deg": 180, "points": 24} (angles from the first axis of the plane, counter-clockwise; a bail handle over X is plane XZ from 0 to 180). radii gives one radius per point (a taper). profile is a closed 2D polygon [[right, up], ...] of the cross-section (default a circle with sides); the frame turns smoothly along the path, up is the starting up direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
upNo
arcNo
capsNo
nameYes
pathNo
radiiNo
sidesNo
closedNo
radiusNo
profileNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds some non-obvious behavior (the frame turns smoothly along the path; a default circular profile), but is otherwise parameter documentation and does not disclose side effects such as whether a new named object is created or how existing scene content is affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence and the remaining detail is dense but nearly all load-bearing for a 10-parameter tool with no schema descriptions. The single run-on paragraph with an inline JSON blob is heavy but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex geometry tool with no output schema and 10 undocumented parameters, the description covers the geometrically difficult parts (arc generation, taper, profile frame, up vector) thoroughly. It is less complete on object/side-effect semantics, but an agent has enough to invoke it correctly on the geometry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry all semantics, and it does so well for the hardest parameters: arc gets a full JSON example plus an angle convention and a worked 'bail handle over X' case, and radii (taper), profile ([[right, up]] closed polygon, default circle), and up (starting up direction) are explained. It leaves name, caps, closed, and radius (distinct from radii) unexplained, so compensation is substantial but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Pull a cross-section along a path of world points,' immediately grounded by concrete examples (pipes, cables, railings, horns, roads). An agent can tell this builds tubular/linear geometry, but no sibling (lathe, loft, extrude_profile) is named to make the boundary explicit, so sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples of what the tool produces (pipes, cables, railings, roads) imply usage context, but there is no explicit when-to-use, when-not-to-use, or alternative guidance relative to lathe/loft/extrude_profile. Usage is left implicit rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrainA

Make a ground mesh from a noise height map, for outdoor levels. Same seed, same ground. size is [width along X, depth along Y] and resolution the grid step, in metres (0.5 looks low-poly). Over 160000 vertices is an error: raise resolution. height is the full range above the z of the object. scale is the size of the biggest hills in metres; octaves adds finer bumps. at is the world position of the centre and the origin. edge_falloff 0-1 makes an island: the share of the half size at the border where the ground sinks to zero. flat_center is the radius of a level circle in the middle (for a building); it blends out over half that radius. plateau_levels (2 or more) makes terraces of equal height. The bottom is open. skirt (a world z below the lowest border point) adds walls down to that z and a flat bottom: a closed block. Faces are flat shaded unless smooth=true. Returns the vertex count and height range. Then use path_carve for roads and scatter for rocks and trees.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameYes
seedNo
sizeNo
scaleNo
skirtNo
heightNo
smoothNo
octavesNo
resolutionNo
flat_centerNo
edge_falloffNo
plateau_levelsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: a hard vertex limit (160000 is an error, raise resolution), that the bottom is open unless skirt is set (which yields a closed block), flat shading as default, determinism from seed, and the returned values. Annotations only say non-readonly/non-destructive, so the description carries real extra weight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then dense telegraphic lines each documenting a parameter or a behavioral constraint. No filler sentences or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mesh generator with no output schema and only generic annotations, the description covers geometry constraints, error limits, defaults, and the return payload (vertex count and height range), plus next-step tools. 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it defines size, resolution, height, scale, octaves, at, edge_falloff, flat_center, plateau_levels, skirt, and smooth with units and semantics (metres, fraction of half-size, equal-height terraces). Only 'name' is left implicit, which is self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Make a ground mesh from a noise height map') plus the target context ('for outdoor levels'), and routes to sibling follow-ups (path_carve, scatter). An agent can distinguish this from ground, rock, or scatter without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context ('for outdoor levels') and names the follow-on tools path_carve and scatter for roads/vegetation. However it never states when NOT to use it or how it differs from the sibling 'ground' tool, so the alternative-selection guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

text_meshA
Destructive

Make a text label as a closed mesh, or engrave text into a mesh. size is the height of a capital letter and depth the thickness, in metres. \n starts a new line. plane: XZ stands upright and reads from the front (-Y), XY lies flat and reads from above, YZ stands and reads from +X. The back face is on the plane. at is the anchor in the world (the origin when empty) and the object origin; align puts the middle, the left end or the right end of the text there; vertically the text is centred. font is a path to a .ttf or .otf file. The built-in font has Latin and Cyrillic; a font without a glyph shows nothing for that character. bevel rounds the edges (0 to depth/2). The same name replaces the earlier text. on_object (a mesh) puts the text on its surface: a ray through at along the plane normal finds the first hit, and the text lands offset metres above it (a decal that does not z-fight). The text stays flat: use it on flat or nearly flat surfaces. engrave=true cuts the letters depth deep into on_object instead, with the checks and clean-up of boolean; no text object stays and bevel is ignored. The mesh must be closed. The answer has the volume before and after.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
fontNo
nameNotext
sizeNo
textYes
alignNocenter
bevelNo
depthNo
planeNoXZ
offsetNo
engraveNo
on_objectNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false; the description goes well beyond them, disclosing that the same `name` replaces earlier text, that engrave removes the text object and ignores `bevel`, that the target mesh must be closed, that the decal avoids z-fighting, and that the response reports volume before and after.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a dense block of prose but virtually every clause carries new information needed to call the tool correctly, and it is front-loaded with the dual purpose. Structure is a bit uneven — a long run-on rather than clearly partitioned sections — which keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no output schema and no schema descriptions, the description covers geometry interpretation, units, orientation, failure modes (missing glyphs, non-closed mesh, curved surfaces), and the returned volume data. 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 12 parameters, so the description carries the whole burden and does: it defines size as cap height in metres, depth as thickness, the meaning of each plane enum orientation, `at` as world anchor plus object origin, `align` as horizontal placement with vertical centring, `bevel` bounds (0 to depth/2), `font` as a .ttf/.otf path with built-in Latin/Cyrillic and missing-glyph behaviour, and `offset` in metres above the hit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource with two clear modes: 'Make a text label as a closed mesh, or engrave text into a mesh.' No sibling tool produces text geometry, so this is immediately distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the condition for the engrave path (cuts letters into on_object, with boolean checks, no text object remains) versus the decal path, and warns to use on_object only on flat or nearly flat surfaces. It does not name alternative tools or state when not to use this tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trace_outlineA
Read-only

Trace the outer outline of a reference silhouette as a closed polygon of [x, z] points in metres (x from the centre of the silhouette box, z from its bottom). simplify is the largest allowed deviation in metres. Feed the points to extrude_profile, or build a hull with visual_hull. holes=true also returns holes: the openings inside the outline (a trigger guard, a handle) as polygons, largest first, each at least min_hole of the outline area; give them to extrude_profile as holes. The reference must keep its openings (prepare_reference fill_holes).

ParametersJSON Schema
NameRequiredDescriptionDefault
holesNo
height_mYes
min_holeNo
simplifyNo
referenceYes
thresholdNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, non-destructive, non-open-world. The description goes well beyond: it specifies the coordinate system and units of the returned points, the ordering and area threshold of returned holes, and a required precondition on the reference. This is rich behavioral context an agent cannot get from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and output format, then downstream usage and the holes/min_hole details. Dense but each sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description competently documents the return shape and hole semantics. It falls short only on the unexplained height_m and threshold parameters, which an agent must still guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It explains simplify (max deviation in metres), holes (returns openings), and min_hole (fraction of outline area), but says nothing about height_m (required), threshold, or reference beyond the implied silhouette.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (trace) and resource (outer outline of a reference silhouette) plus the exact output form ([x, z] points in metres with a stated origin). An agent can distinguish it from siblings like measure_profile or visual_hull from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes output to extrude_profile or visual_hull and states the condition for holes=true. It also gives the prerequisite that the reference must keep its openings (prepare_reference fill_holes). It lacks an explicit when-not-to-use, but the downstream routing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transfer_weightsA
Destructive

Copy skin weights from a skinned mesh to another mesh by nearest vertex (same rig for clothes, hair, a new character body). Both meshes should stand in the same place. The Armature modifier is set up too.

ParametersJSON Schema
NameRequiredDescriptionDefault
donorYes
targetYes
armatureNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuine context beyond them: the spatial precondition and the side effect that an Armature modifier is created as part of the operation, which is not captured in the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose and method, with no filler. The trailing 'The Armature modifier is set up too' is a little informal and vague about which modifier/handle, but the overall structure is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema and undocumented parameters, the description covers the core behavior and one side effect but omits what happens to existing weights on the target and what the optional armature argument does. Adequate but leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for three parameters (donor, target, armature). The 'from X to Y' phrasing loosely implies donor/target but never names them, and the optional armature parameter is entirely unexplained — the sentence about the Armature modifier does not clarify that a specific armature can be passed in.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (copy skin weights from a skinned mesh to another mesh) plus the method (nearest vertex), so an agent can distinguish it from siblings like bind, parent, or check_weights. The parenthetical use cases (clothes, hair, new character body) sharpen the intent further.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a spatial precondition (both meshes should stand in the same place) and example scenarios, which implies when to reach for this tool. However, it names no alternative and gives no when-not guidance, so an agent must infer the choice against bind or check_weights on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transform_objectsA
Destructive

Move, turn and scale objects together with their children, or put several objects at their own points in one call: place is {"name": [x, y, z], ...} and anchor is the point of each object's own box that lands there ([0.5, 0.5, 0] is the bottom centre). Order: place, then scale, then rotate, then move. rotate_deg [rx, ry, rz] turns around the world X, then Y, then Z axis. scale is a number or [x, y, z] along the world axes. pivot is a world point for the turn and the scale; the default is the centre of the bounding box of all the objects and their children. Several objects turn as one group. Scaling a turned object by different factors on each axis shears it a little: set the size with set_dimensions first. The answer lists every object after the change. Use it when you know the numbers; to place a part against another use attach or move_to_contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
moveNo
namesNo
pivotNo
placeNo
scaleNo
anchorNo
rotate_degNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description goes well beyond that by disclosing operation ordering (place, scale, rotate, move), axis order for rotation, the pivot default (bounding-box centre of all objects and children), children being carried along, the shear caveat, and that the response lists every object after the change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the alternative-tool routing are front-loaded, and virtually every sentence carries operational detail (ordering, defaults, axis conventions). It is dense and jargon-heavy with heavy backticking, but not padded; the shear note in particular earns its place as a real failure mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema and no schema descriptions, this description covers the ordering semantics, axis conventions, pivot default, child inheritance, the shear edge case with its mitigation, and the return shape ('lists every object after the change'). An agent has enough to invoke it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and largely succeeds: it defines the `place` mapping format, anchor semantics and its [0.5, 0.5, 0] default, rotate_deg's [rx, ry, rz] world-axis order, and scale as number-or-triple along world axes. `move` is only implied as translation and `names` is never explained, leaving two of seven parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause names a specific verb set (move, turn, scale) and resource (objects with their children), and the closing sentence explicitly routes agents away from this tool when the goal is contact-based placement, naming attach and move_to_contact as the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states both sides of the routing decision: 'Use it when you know the numbers; to place a part against another use attach or move_to_contact.' It also gives a precondition for a hard case (set_dimensions first before non-uniform scaling of a rotated object). 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.

transform_regionA
Destructive

Move, scale and rotate the vertices of the picked faces (mode faces) or the picked vertices (mode vertices) in world terms. pivot defaults to the region centre. falloff > 0 drags the neighbours too, like proportional editing: weights fall from 1 at the region to 0 at falloff metres away, shaped by falloff_type. Use it to widen a head, taper a leg, raise a ridge. symmetric adds the mirror twins of the picked vertices about the centre of the mesh box on that world axis (the answer gives mirrored_vertices and without_twin); the transform itself is not mirrored. Without it the answer has a warning when the mesh is mirror-symmetric and the selection lies on both sides of the plane but is not symmetric. where picks faces (or vertices, edges) by a condition, all given keys must hold: normal ('+Z', '-X' or [x,y,z]) with angle (degrees, default 25); x, y, z ranges [min, max] (null means open) on the world centre; box [[x0,y0,z0],[x1,y1,z1]]; area [min, max]; index [...]. {} or null picks everything. Look at mesh_info first to see where the faces are.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofaces
moveNo
pivotNo
scaleNo
whereNo
objectYes
falloffNo
symmetricNo
rotate_degNo
falloff_typeNosmooth

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: proportional-editing falloff mechanics with weight curve and falloff_type shaping, the symmetric mirror-twin behavior, the non-mirrored transform caveat, and the returned fields (mirrored_vertices, without_twin, warning). This is exactly the kind of mutation semantics an agent needs on top of destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded: purpose first, then falloff, then symmetric, then where. Given 10 params at 0% schema coverage, most detail earns its place, though the where clause block is dense and could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-param mutation tool with no output schema, the description covers purpose, falloff, symmetry, selection filtering, and even names return fields and warning conditions. Complete enough to invoke correctly, with only the rotate_deg semantics left partially implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description carries the param burden and does well: it defines mode, pivot default, falloff/falloff_type semantics, symmetric axis, and a detailed breakdown of where's keys (normal+angle, x/y/z ranges, box, area, index, empty-match). rotate_deg is only implied by the opening verb, leaving a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb cluster and resource: 'Move, scale and rotate the vertices of the picked faces ... or the picked vertices ... in world terms', scoping the operation to a region/proportional edit rather than whole objects. This clearly separates it from siblings like transform_objects and deform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use context ('widen a head, taper a leg, raise a ridge') and a prerequisite workflow hint ('Look at mesh_info first'). It does not explicitly name alternative sibling tools (e.g. transform_objects vs deform) or exclusions, so it stops short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unwrapA
Destructive

Make a UV map. Method smart is Smart UV Project (a larger angle gives fewer, larger islands); angle is angle-based unwrap; cube, cylinder and sphere are projections. margin is the gap between islands (0..1); pack arranges the islands in the 0..1 square. Returns the UV numbers of each mesh: islands, used area, faces outside 0..1, degenerate faces and texel_density_spread (1 is even, above 4 is stretched). check_mesh gives the same numbers for an existing UV map.

ParametersJSON Schema
NameRequiredDescriptionDefault
packNo
angleNo
namesYes
marginNo
methodNosmart

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a mutating, destructive, non-openWorld operation. The description goes further and discloses the returned metrics (islands, used area, faces outside 0..1, degenerate faces, texel_density_spread with interpretation), which is valuable given there is no output schema. It stops short of warning that existing UV data is overwritten, but the return-value detail is a genuine addition beyond 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first two words, then packs method, parameter and return semantics densely with no filler sentences. Slightly run-on, but each clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param mutation tool with no output schema, the description covers input semantics, method selection, the sibling alternative and the return metrics, which is close to complete. The only meaningful omission is an explicit statement that the operation replaces any existing UV map.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the semantic load and mostly succeeds: it defines angle (larger = fewer, larger islands), margin (gap between islands, 0..1), pack (arranges islands in the 0..1 square) and the method enum meanings. Only the required names parameter is left implicit, which is a minor gap given its self-evident meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Make a UV map") and distinguishes itself from the sibling check_mesh, which reads an existing map rather than creating one. The distinction is clear enough that an agent can route between the two 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the different unwrap methods (smart, angle, cube, cylinder, sphere) and routes the agent to check_mesh when a UV map already exists. It provides clear context for selecting a method, though it stops short of explicit when-not or prerequisite rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

viewshedB
Read-only

What can be seen from a point: for each reachable cell, a ray from the eye to a point target_height above the floor. Returns visible and hidden area, the farthest visible distance and a map. Use it for spawns (what does an enemy see?), sniper spots, hiding places, objective visibility. The area is the one that contains the point.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNo
namesNo
pointYes
max_stepNo
max_rangeNo
eye_heightNo
agent_heightNo
agent_radiusNo
max_slope_degNo
target_heightNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful behavior (returns visible and hidden area, farthest visible distance and a map, scoped to the area containing the point), but says nothing about computational cost, sampling density, or how max_step/max_range affect results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation in the first sentence, then adds return contents and use cases without padding. Every sentence earns its place, though the run-on first sentence could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It compensates for the absence of an output schema by describing what is returned. But with 10 parameters at 0% coverage and no sibling differentiation against line_of_sight/sightline_map, an agent lacks enough to invoke it confidently; the definition is adequate but not complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description must carry the burden. It only explains one parameter (`target_height`) and the scoping of `point` via 'the area that contains the point'; the remaining eight (cell, names, max_step, max_range, eye_height, agent_height, agent_radius, max_slope_deg) are left entirely undocumented, leaving the agent guessing at units, defaults meaning and interactions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation (viewshed computation from a point) and the exact geometry it uses, a ray from the eye to a point `target_height` above the floor. This is far more than a tautology and lets an agent understand the resource, but it never names or contrasts the highly similar siblings line_of_sight, sightline_map or raycast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers concrete use cases (spawn visibility, sniper spots, hiding places, objective visibility), which is genuine implied guidance. However it gives no when-not-to-use and no routing to the obvious alternatives line_of_sight or sightline_map, which an agent will struggle to choose between.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visual_hullA

Make a solid that matches BOTH silhouettes exactly: the front outline extruded and intersected with the side outline extruded. Arms, ears, noses and other outline details come out right in both views. The inside is a straight extrusion, so refine curved surfaces afterwards (sculpt, subdivide). Use it for a precise first form of characters, props and vehicles.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameYes
sideYes
frontYes
height_mYes
simplifyNo
thresholdNo
side_facesNoleft

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-destructive write (readOnlyHint=false, destructiveHint=false), and the description adds genuine behavioral context beyond them: outline detail fidelity and the limitation that the interior is a straight extrusion requiring later refinement. However, it omits key operational facts: whether existing geometry is replaced, whether front/side must be pre-authored outlines, and any failure modes or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-packed sentences that front-load the core mechanism, then the fidelity benefit, then the caveat and use case. Every sentence carries information; nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero schema-description coverage, the description covers what it does, when to use it, and its main limitation, which is solid. But it leaves the eight parameters and the input format (image paths? view names? authored outlines?) undocumented, which an agent needs before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description compensates only slightly, implicitly tying the front/side outlines to the intersection mechanism. It says nothing about the format of 'front' and 'side', what height_m controls, what simplify/threshold do, or what side_faces selects, leaving 8 parameters largely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a precise verb and mechanism: it makes a solid by extruding and intersecting the front and side outlines, so the agent knows exactly what geometry operation this is. It implicitly separates itself from siblings by naming sculpt and subdivide as follow-up tools, though it never distinguishes itself from close siblings like solidify, extrude_profile, or trace_outline. Clear, but not fully self-differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a positive use case ('a precise first form of characters, props and vehicles') and a clear constraint ('refine curved surfaces afterwards with sculpt, subdivide'), routing the agent to the right follow-up tools. What's missing is an explicit when-not: it doesn't say when to prefer trace_outline, extrude_profile, or solid modeling instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

walkable_mapA
Read-only

Check where an agent of this size can walk, then flood from start (default: the largest area). Floors are found by rays, so ramps, stairs and several levels work. Returns the reachable, unreachable and blocked areas in m2 and a top-down image. largest_regions gives each region's area, whether it is reachable, its floor height range and its box: an unreachable region with a high floor_z is a roof or a crate top, not a design error. Use it to prove that every room, spawn and objective connects. probe is a list of world points: for each the answer gives walkable, reachable, floor_z and free_width_m (the widest agent that fits there), so a spawn, a site or a chokepoint can be checked by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNo
namesNo
probeNo
startNo
max_stepNo
max_levelsNo
agent_heightNo
agent_radiusNo
max_slope_degNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/non-destructive annotations, the description discloses how floors are derived (rays, so ramps/stairs/multiple levels work), what the response contains (areas in m2, a top-down image, largest_regions fields), and even interpretation guidance (an unreachable high floor_z region is a roof or crate top, not a design error). This is exactly the extra behavioral context annotations cannot provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and defaults are front-loaded, and the probe behavior follows in a logical second block. It is dense and slightly long, but the length is defensible for a 9-parameter spatial analysis tool with no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a good job explaining return values (m2 areas, image, largest_regions and probe field meanings). However, for a 9-parameter tool at 0% schema coverage, the missing parameter semantics leave a real gap in what an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description must carry the burden. It meaningfully explains `start` (defaults to the largest area) and `probe` (list of world points returning walkable/reachable/floor_z/free_width_m), and "an agent of this size" hints at the agent dimensions. But cell, names, max_step, max_levels, agent_height, agent_radius and max_slope_deg are never addressed, leaving most parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it checks walkability by flooding from a start point and returns reachable/unreachable/blocked areas plus an image. The purpose is unmistakable and conceptually distinct from siblings like viewshed or sightline_map. It stops short of explicitly naming an alternative, so it lands just under a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use it to prove that every room, spawn and objective connects" states a concrete use case, and the probe paragraph explains a second scenario (checking a spawn, site or chokepoint by number). There is no explicit when-not-to-use or named alternative tool, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weldA
Destructive

Merge vertices closer than distance metres (empty: 0.0001 m, less on objects under 0.3 m; optionally only those inside where: x, y, z, box). Fixes doubled vertices and seams after joining parts. For a broken mesh with holes and junk use repair_mesh. A distance wider than the thinnest faces collapses them and opens the mesh: the call then fails, changes nothing, and names the new boundary and non-manifold edges, their world box and a smaller distance that is safe. allow_open=true welds anyway and puts the same report into warning.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNo
objectYes
distanceNo
allow_openNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructiveHint=true; the description goes far beyond by disclosing the failure contract: an over-wide distance collapses thin faces, the call fails, changes nothing, and reports the new boundary and non-manifold edges plus a safe smaller distance. It also explains that allow_open=true welds anyway and redirects the same report into `warning`, which is exactly the kind of consequence detail an agent needs before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and default, then the alternative, then the failure semantics. Dense and largely waste-free, though the single long paragraph packed with edge-case detail is slightly harder to scan than a structured layout would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool this is complete: defaults, scoping, the alternative tool, the failure mode with its report contents, and the override flag are all covered. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry parameter meaning, and it does for three of four: distance defaults (0.0001 m, less under 0.3 m), where's accepted forms (x, y, z, box), and allow_open's behavioral effect. Only `object` is left undescribed, though its meaning is self-evident from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (merge vertices) with the governing parameter (distance in metres) and the exact problem it solves (doubled vertices and seams after joining parts). It also explicitly routes away from the sibling repair_mesh, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the when-to-use case ('fixes doubled vertices and seams after joining parts') and the when-not/alternative case ('for a broken mesh with holes and junk use repair_mesh'). It further distinguishes the allow_open=true variant, covering the escape hatch explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Changedadd_light21 fields changed
      • addedInput schema / properties / blend / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / blend / default
        Previous value: -0.15New value: +null
      • removedInput schema / properties / blend / type
        Removed value: -"number"
      • changedInput schema / properties / color / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / color / default
        Previous value: -"#ffffff"New value: +null
      • addedInput schema / properties / kind / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "spot",
        +      "point",
        +      "area",
        +      "sun"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / kind / default
        Previous value: -"spot"New value: +null
      • removedInput schema / properties / kind / enum
        Removed value: -[
        -  "spot",
        -  "point",
        -  "area",
        -  "sun"
        -]
      • removedInput schema / properties / kind / type
        Removed value: -"string"
      • addedInput schema / properties / power_w / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / power_w / default
        Previous value: -1000New value: +null
      • removedInput schema / properties / power_w / type
        Removed value: -"number"
      • addedInput schema / properties / radius / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / radius / default
        Previous value: -0.05New value: +null
      • removedInput schema / properties / radius / type
        Removed value: -"number"
      • addedInput schema / properties / shadow_soft / anyOf
        Added value: +[
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / shadow_soft / default
        Previous value: -trueNew value: +null
      • removedInput schema / properties / shadow_soft / type
        Removed value: -"boolean"
      • addedInput schema / properties / spot_size_deg / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / spot_size_deg / default
        Previous value: -45New value: +null
      • removedInput schema / properties / spot_size_deg / type
        Removed value: -"number"
    • Changedcheck_passages3 fields changed
      • addedInput schema / properties / cell / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / cell / default
        Previous value: -0.25New value: +null
      • removedInput schema / properties / cell / type
        Removed value: -"number"
    • Changedrender_view1 field changed
      • addedInput schema / properties / eye
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedroute3 fields changed
      • addedInput schema / properties / cell / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / cell / default
        Previous value: -0.5New value: +null
      • removedInput schema / properties / cell / type
        Removed value: -"number"
    • Changedset_material1 field changed
      • addedInput schema / properties / transmission
        Added value: +{
        +  "default": 0,
        +  "type": "number"
        +}
    • Changedsweep6 fields changed
      • addedInput schema / properties / arc
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / path / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / path / default
        Added value: +null
      • removedInput schema / properties / path / items
        Removed value: -{
        -  "items": {
        -    "type": "number"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / path / type
        Removed value: -"array"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "path"
        -]New value: +[
        +  "name"
        +]
    • Changedtransform_objects7 fields changed
      • addedInput schema / properties / anchor
        Added value: +{
        +  "default": [
        +    0.5,
        +    0.5,
        +    0
        +  ],
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / names / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / names / default
        Added value: +null
      • removedInput schema / properties / names / items
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / names / type
        Removed value: -"array"
      • addedInput schema / properties / place
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "type": "array"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedInput schema / required
        Removed value: -[
        -  "names"
        -]
    • Changedviewshed3 fields changed
      • addedInput schema / properties / cell / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / cell / default
        Previous value: -0.5New value: +null
      • removedInput schema / properties / cell / type
        Removed value: -"number"
    • Changedwalkable_map4 fields changed
      • addedInput schema / properties / cell / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / cell / default
        Previous value: -0.5New value: +null
      • removedInput schema / properties / cell / type
        Removed value: -"number"
      • addedInput schema / properties / probe
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "type": "array"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  2. 113 tool updatesv0.4.0
    • First observedadd_light
    • First observedapply_transforms
    • First observedarray
    • First observedassert_spec
    • First observedassign_material_faces
    • First observedattach
    • First observedbake_maps
    • First observedbevel_edges
    • First observedbind
    • First observedbisect
    • First observedblob
    • First observedboolean
    • First observedbuild_from_grid
    • First observedcheck_contacts
    • First observedcheck_game_ready
    • First observedcheck_mesh
    • First observedcheck_passages
    • First observedcheck_symmetry
    • First observedcheck_weights
    • First observedcheckpoint
    • First observedcombine
    • First observedcompare_view
    • First observedcreate_armature
    • First observedcreate_primitive
    • First observeddecimate
    • First observeddedupe_materials
    • First observeddeform
    • First observeddelete
    • First observeddelete_faces
    • First observeddiff_since
    • First observedduplicate
    • First observedexport_glb
    • First observedextrude_faces
    • First observedextrude_profile
    • First observedfind_floating
    • First observedfit_to_reference
    • First observedground
    • First observedimport_glb
    • First observedinset_faces
    • First observedinspect_glb
    • First observedjob_status
    • First observedlathe
    • First observedlimb
    • First observedline_of_sight
    • First observedlist_bones
    • First observedlist_lights
    • First observedlist_materials
    • First observedloft
    • First observedloft_from_masks
    • First observedmatch_camera
    • First observedmeasure
    • First observedmeasure_profile
    • First observedmesh_info
    • First observedmirror
    • First observedmove_to_contact
    • First observednoise_displace
    • First observedoverlay_reference
    • First observedpaint_faces
    • First observedpalette_uv
    • First observedparent
    • First observedpath_carve
    • First observedpixel_to_world
    • First observedplace_at_pixel
    • First observedplace_on
    • First observedpose
    • First observedpose_sheet
    • First observedprepare_reference
    • First observedprocedural_material
    • First observedradial_array
    • First observedraycast
    • First observedrecipe
    • First observedremesh
    • First observedrender_final
    • First observedrender_sheet
    • First observedrender_view
    • First observedrepair_mesh
    • First observedrock
    • First observedrollback
    • First observedroute
    • First observedrun_python
    • First observedrun_spec
    • First observedsave_blend
    • First observedsave_spec
    • First observedscatter
    • First observedscene_tree
    • First observedsculpt
    • First observedselect_faces
    • First observedset_camera
    • First observedset_dimensions
    • First observedset_material
    • First observedset_origin
    • First observedset_post
    • First observedset_world
    • First observedsetup_lighting
    • First observedshade
    • First observedshrinkwrap
    • First observedsightline_map
    • First observedsolidify
    • First observedstatus
    • First observedsubdivide
    • First observedsubdivide_faces
    • First observedsweep
    • First observedterrain
    • First observedtext_mesh
    • First observedtrace_outline
    • First observedtransfer_weights
    • First observedtransform_objects
    • First observedtransform_region
    • First observedunwrap
    • First observedviewshed
    • First observedvisual_hull
    • First observedwalkable_map
    • First observedweld

TDQS

A3.6/5.0

Scored across 113 tools

Disambiguation4/5

Despite 113 tools, descriptions actively disambiguate overlapping operations by explicitly cross-referencing alternatives (subdivide vs subdivide_faces vs remesh; attach vs move_to_contact vs place_on vs ground; combine vs array vs mirror vs duplicate). The many face-editing tools (extrude_faces, inset_faces, delete_faces, sculpt, transform_region, etc.) share one `where` selector and similar framing, which creates some residual cognitive load, but each targets a distinct operation.

Naming Consistency4/5

Names are thoroughly snake_case with predictable verb_noun or noun patterns (create_primitive, add_light, check_mesh, set_material, delete_faces). Minor deviations exist: many tools are noun-only (limb, blob, rock, terrain, loft, sweep, boolean) and some compound oddities (palette_uv, noise_displace), but casing and style stay consistent throughout.

Tool Count2/5

113 tools is far beyond what any single agent can hold in working context, even for a domain as broad as full 3D modeling, and exceeds the rubric's 50+ 'extreme mismatch' band. The breadth of Blender (modeling, materials, rendering, rigging, level design, reference matching) partly justifies the volume, but the surface is heavy and hard to navigate as a set.

Completeness5/5

The surface covers an extraordinary lifecycle: primitives and mesh editing, transforms, materials/UV/baking, rendering and post, rigging and posing, export/import with checks, plus verification tools (assert_spec, check_game_ready, compare_view, diff_since) and safety nets (checkpoint, rollback, job_status). Almost no domain gap is left uncovered for a Blender automation agent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers