Skip to main content
Glama

3D New Era AI

English · Português (Brasil) · Website

CI License: MIT OR Apache-2.0 Latest release

An open-source home design, floor plan and interior design editor written in Rust — a Sweet Home 3D alternative for Windows, macOS and Linux — that is AI-native from day one: the editor ships with a built-in Model Context Protocol server, so an AI agent draws walls, furnishes rooms, builds joinery, checks lighting and ergonomics against standards and renders the photos alongside you, with every change showing up live on screen and one Ctrl+Z away. Everything runs on your own machine: no account, no subscription, no cloud. The interface speaks Portuguese, English, Spanish and French.

Editor with a furnished 105 m² apartment: catalog, rendered floor plan and live 3D view

Download

Windows — open PowerShell and paste:

irm https://raw.githubusercontent.com/leandrodaf/3d-new-era-ai/main/scripts/install-windows.ps1 | iex

macOS (Apple Silicon and Intel) — open Terminal and paste:

curl -fsSL https://raw.githubusercontent.com/leandrodaf/3d-new-era-ai/main/scripts/install-macos.sh | bash

That's it: the app shows up in the Start menu / Launchpad, no administrator password, and the same command updates it. Prefer a plain download?

The builds aren't signed with a paid Apple or Microsoft certificate, so the system asks once:

  • Windows: unzip, open newera-gui.exe; if SmartScreen appears, click More info → Run anyway.

  • macOS: unzip and move 3D New Era AI to Applications. Right-click it → Open → Open. On macOS 15 and later, open it once, then go to System Settings → Privacy & Security → Open Anyway. Or run xattr -dr com.apple.quarantine "/Applications/3D New Era AI.app".

  • Linux: tar xzf newera-linux-x64.tar.gz && ./newera/newera. Run ./newera/install-desktop.sh to add it to the menu with its icon and to give .newera files their own icon and double click (--uninstall undoes it).

The one-line installers above skip these prompts.

Next: connect your AI — Claude, Codex, Gemini, Cursor, VS Code, DeepSeek and others.

Related MCP server: 22B Interior Planning Master MCP

Showcase

A real 105 m² apartment, traced from an openly licensed floor plan and furnished, lit and photographed by an AI agent through MCP alone — walls from the scan, doors that swing the right way, slatted TV wall, L kitchen and wardrobe from cabinet_run, downlights sized by photometry against NBR ISO/CIE 8995-1, path-traced photos. Every image below came out of the editor itself. See how it was built →

Floor plan with real finishes

Aerial cutaway

Rendered floor plan with real finishes

Aerial cutaway of the apartment

Daylight

At dusk, lamps on

Living room with slatted TV wall

Dining table under the pendant at dusk

Dining and living toward the window

L-shaped kitchen at night

L-shaped kitchen with terrazzo floor

Master bedroom at night

Joinery and rooms

Slatted TV wall with the TV embedded

Home office with desk and bookcase

Master bedroom with tall wardrobe run

Bathroom with Nero marble wall

Why

  • Fast and light. Native Rust, GPU rendering through wgpu (Vulkan, Metal, DirectX 12).

  • One command, everything running. The window, the REST API and the MCP server start together and share the same document.

  • AI as a first-class client. People and agents go through the same undoable commands. An agent's edit is one Ctrl+Z away.

  • Cheap for agents. Short ids (w12), [x, y] points, compact reads and one-line write replies keep token usage low.

  • Real-world scale. Everything is in centimeters, like architectural drawings.

  • Try alternatives safely. Duplicate the plan into a new tab, change it, and compare versions side by side.

  • Furniture that is always true to size. The catalog is generated by code, so a 158 × 208 cm bed is exactly that in the plan, in 3D and in collision checks.

What it does

  • Plans from anything. Draw walls, arcs and sloping walls, or drop in a scanned plan at real scale and let trace_background find the walls. Open Sweet Home 3D (.sh3d) projects as they are.

  • Joinery a workshop can build. Parametric cabinets, wardrobes, slatted panels, countertops with exact sink and cooktop cutouts, plaster coves with LED and modular sofas. cabinet_run fills a wall with even modules around doors, windows and corners; cut_list exports the boards as CSV or DXF/SVG sheets.

  • Checked against the people who live there. An ergonomics review (circulation, beds and bathrooms per person, kitchen triangle, wheelchair turning space) and lux per room by photometry, both against Brazilian standards (NBR 9050, NBR 15575-1, NBR ISO/CIE 8995-1), each finding with the fix to apply.

  • Pictures that sell the project. Rendered floor plans with real finishes, elevations and sections, aerial cutaways, path-traced photos with the sun from the compass and the lamps you placed, and videos along a camera path. They render without a graphics card, so a headless server can take them too.

  • Roofs and structure. Pitched roofs with skylights, walls and glass that follow the roof above, beams, storeys, pools and decks.

  • Anywhere. Desktop editor, the full editor in the browser (WebGPU or WebGL), a lightweight WebAssembly viewer, plugins in any language over the HTTP API and several people on the same project with named cursors.

Build from source

The installers from Download work for your user only: they put the app in ~/Applications or %LOCALAPPDATA%\Programs, add newera to your PATH, register the MCP server in Claude Code and Codex if you have them, and delete their temporary files. Uninstall with install-macos.sh --uninstall or from Settings → Apps on Windows. On a Mac with no build for it, or with NEWERA_REF=<branch>, the installer compiles from source instead.

To work on the code you need Rust 1.95+ (rustup). On Linux you also need libxkbcommon-dev libwayland-dev libx11-dev libxcursor-dev libxrandr-dev libxi-dev.

git clone https://github.com/leandrodaf/3d-new-era-ai
cd 3d-new-era-ai
make run          # editor + HTTP + MCP, with a sample house
make release      # optimized binary in target/release/newera

Run make to see every development command. make web-serve builds the browser editor and viewer and serves them at http://127.0.0.1:8790.

Connect your AI

Open the editor (or run newera serve for no window). It serves MCP at http://127.0.0.1:7878/mcp — point your AI there and it edits the plan you see, live.

In a browser, with nothing installed. Open https://3dneweraai.com/app/, switch the MCP on in the AI panel (or Ctrl+Shift+M) and the tab gets an address your AI can reach — paste it where you would paste the local one. A small relay stands between the two because a tab cannot listen on a port; it passes messages and stores nothing, the project never leaves the tab, and the address stops answering the moment you switch it off or close the tab. Treat that address like a password: whoever has it can edit the project that is open. render_photo and video are not offered there — they run for minutes on a CPU and would freeze the window; that is what the app is for.

The relay is in this repository (newera-relay) and is a service like any other: cargo run -p newera-relay puts one on 127.0.0.1:7979, and /app/?relay=http://127.0.0.1:7979 points the editor at it — which is how to run this whole path on your own machine, or on your own server. Whatever it is pointed at, nothing of the project is stored there: the calls pass through and the drawing stays in the tab.

The window does this part for you: the AI menu (or the MCP chip in the status bar) opens a panel with the address, the snippet for whichever client you use, and — when that client has a command line and it is installed — a button that registers it from there, no terminal. The same panel is how you know it worked: it names the client that connected and lists the tools it is calling, as it calls them. The status bar says it too, from across the room.

One click — with the app installed (the installers put newera on your PATH), these add it over stdio: with the editor open the AI edits the plan on screen, without it a project of its own.

Install in Cursor Install in VS Code Install in VS Code Insiders

Plugin with skills — Claude Code: /plugin marketplace add leandrodaf/3d-new-era-ai, then /plugin install 3d-new-era-ai@3d-new-era-ai. Codex: codex plugin marketplace add leandrodaf/3d-new-era-ai. Gemini CLI: gemini extensions install https://github.com/leandrodaf/3d-new-era-ai.

Claude Desktop, one click — download newera-mcp.mcpb from the latest release and open it.

Claude Code

claude mcp add --transport http newera http://127.0.0.1:7878/mcp

Inside a clone of this repository it's already set up by .mcp.json (approve newera once).

Codex CLI

codex mcp add newera --url http://127.0.0.1:7878/mcp

Gemini CLI

gemini mcp add --transport http newera http://127.0.0.1:7878/mcp

VS Code (Copilot agent mode)

code --add-mcp '{"name":"newera","type":"http","url":"http://127.0.0.1:7878/mcp"}'

Cursor — ~/.cursor/mcp.json

{ "mcpServers": { "newera": { "url": "http://127.0.0.1:7878/mcp" } } }

Windsurf — ~/.codeium/windsurf/mcp_config.json

{ "mcpServers": { "newera": { "serverUrl": "http://127.0.0.1:7878/mcp" } } }

Claude Desktop — Settings → Developer → Edit Config (needs Node.js for the mcp-remote bridge)

{ "mcpServers": { "newera": { "command": "npx", "args": ["-y", "mcp-remote", "http://127.0.0.1:7878/mcp"] } } }

DeepSeek, Qwen, Llama and other models — the model doesn't matter, the app you chat in does. Use one that speaks MCP and add the URL above: Cline or Roo Code in VS Code, Cherry Studio, LM Studio or opencode (opencode.json):

{ "mcp": { "newera": { "type": "remote", "url": "http://127.0.0.1:7878/mcp" } } }

Any other client — streamable HTTP at http://127.0.0.1:7878/mcp, or, for clients that only start a process, stdio with newera mcp:

{ "mcpServers": { "newera": { "command": "newera", "args": ["mcp"] } } }

With the editor open, stdio edits the plan in that window, just like the URL; with no window (or newera mcp --standalone) the agent works on its own project in the background. Then just ask, for example: "Draw a 4 × 5 m bedroom with a door and a window, furnish it and render a photo."

Tools

Reads and changes are separate tools: a read never changes the plan, so an AI client can run it without asking, and asks before each change.

Tool

What it does

get_home

Compact state (detail=summary for counts, bounds and room areas)

create

Walls (polylines, arcs, sloping hs), rooms (polygon or detected from walls, dividers), dimensions, labels, roofs with skylights and solids from outlines or profiles — one atomic call

update / move / delete

Edit any element by id

arrange

Copies in a row, rotate, mirror, group/ungroup, drawing order

split_wall / merge_walls

Split a wall in two, or join walls on one line into a single wall

checkpoint / checkpoints

Name where the plan is and come back to it, keeping every id

set_home

Project name, compass (north), the city whose code applies and who lives there

set_background

Scanned plan at real scale: calibrations, X/Y scale, rotation

trace_background / trace_walls

Find walls in the scanned plan, and create them

joinery

Parametric cabinets, slatted panels, countertops with cutouts, plaster coves, shadow gaps and modular sofas; workshop rules come back as notes and never refuse to draw

cabinet_run

Fill a wall with cabinets sized for it: even modules around corners, doors, windows, fridge and stove, drawer unit by the stove, blind corners in L kitchens

fit_roof

Walls, glass and panels take the shape of the roof above (A-frame gables, sheds) and keep following it

embed

Embed a sink bowl or cooktop in a countertop (exact cutout) or an oven/microwave in a cabinet niche; the item moves with its host

lighting

Lux per room by photometry (fixtures in lm/W, color temperature, spots, LED panels and strips) against NBR ISO/CIE 8995-1; fill_lighting places the fixtures a room needs

ergonomics

Review for the people living there: circulation, beds/seats/bathrooms per person, kitchen, doors, ceiling heights, windows, wheelchair use (NBR 9050, NBR 15575-1)

cut_list / export_cut_list

Cut list of the joinery builds (boards merged, edge banding, hardware), written as CSV or DXF/SVG sheets

render_plan

PNG of the plan, exactly as the user sees it (bg overlays the scan)

show_plan

The plan inside the chat, as an interactive viewer (pan, zoom, 3D) in clients that speak MCP Apps

render_3d

Software 3D: aerial, visitor, stored cameras, elevations and sections

render_photo

Path-traced photo with sun and lamps

export_plan

PDF, SVG, PNG plan; GLB/OBJ model

save_home / open_home / new_home

Projects (.newera) and Sweet Home 3D import (.sh3d)

catalog

Search the parametric furniture catalog (rows [id,name,w,d,h])

place

Furniture, doors and windows (snap into walls, swing side), beams, finishes, glass, batch defaults

check_layout

Overlaps, pieces in walls, blocked doors, cabinets turned against their own fronts, doors in no wall, pieces outside rooms, areas vs. reference

accept

Mark findings of any review as looked at, with the reason; prune drops the ones whose problem is gone

variants / edit_variants

Plan versions as tabs: list with stats; duplicate, switch, rename, delete

levels / cameras / video

Storeys, points of view, camera path videos — each changed through its edit_*

electrical / plumbing

NBR 5410 / NBR 5626 / NBR 8160 projects over the plan: checks, circuits and panel, Wi-Fi coverage; edit_electrical / edit_plumbing assign circuits and lay the runs

materials / disciplines / annotations

Finishes, which projects and layers are shown, dimension chains and reference schedules; stale finds notes whose numbers stopped matching the drawing, and edit_annotations anchor ties dimensions to what they mark so they measure themselves again

measure

Tape over the plan: free floor around a piece, the gap between two, what a straight probe runs into — and fit, how big a piece can grow before a clearance breaks

plugins / run_plugin / sessions

External plugins and the people working on the project

undo / redo / checkpoint

Shared history with the user; named points to come back to, ids intact

Modes

newera [FILE]           # desktop editor with embedded HTTP + MCP server
newera --demo           # start with a sample house
newera gui --no-server  # editor only
newera serve [FILE]     # headless HTTP + MCP server
newera mcp              # MCP over stdio (the open window, if there is one)

Options: --addr 127.0.0.1:7878 (or NEWERA_ADDR), --token (or NEWERA_TOKEN, required to listen beyond loopback), log filter via NEWERA_LOG, NEWERA_RENDER_THREADS for photo renders (half the cores by default). The server binds to loopback by default and validates the Host header. On Windows, newera-gui.exe opens the editor without a console window.

In the browser

The same editor compiles to WebAssembly and runs in a page, with no server behind it: the project lives in the tab and is saved to a file with Save.

make web-editor   # builds web/editor/pkg with wasm-bindgen
make web-serve    # viewer on / and editor on /editor/ at 127.0.0.1:8790

The published site is built by scripts/site-build.sh — landing page at the root, editor at /app/, viewer at /viewer/ — and deployed to Cloudflare Pages by .github/workflows/publish.yml on every push to main that touches it.

Browsers. Supported: Chrome and Edge, and Safari 26, which has WebGPU. Where WebGPU is missing — Firefox today — the editor falls back to WebGL 2 and still draws everything, plan and 3D; it works, but it is not a browser we guarantee, and the page says so. A browser with neither gets a message pointing at the download instead of a blank page.

To put it on a host of your own, serve the web/ folder as static files. Two things matter: .wasm must be served as application/wasm, and it must be compressed — the editor is about 15 MB raw and roughly a quarter of that gzipped, so gzip_types application/wasm; (nginx) or the equivalent is the difference between a three-second load and a thirty-second one. Nothing else is needed: no COOP/COEP headers, no backend, no database. The MCP server is part of the desktop program and is not built into the page — a browser tab is for drawing and showing, and the agent works against the app running on someone's machine.

scripts/web-editor-e2e.mjs is the check CI runs on it: headless Chrome, draws a wall with the mouse, opens the viewer, and fails on any error the page logs.

Project layout

crates/
  newera-core        domain model, commands, undo/redo, geometry, lighting — no UI, no I/O
  newera-joinery     parametric joinery and interiors: parts, workshop rules, cut lists, cabinet runs
  newera-ergonomics  habitability review: clearances, occupancy, kitchens, accessibility
  newera-catalog     parametric furniture and fixtures at exact sizes; OBJ/glTF import
  newera-draw        plan scene shared by the editor, PNG renders and SVG/PDF export
  newera-render      3D meshes, software renderer, path-traced photos, videos
  newera-sh3d        Sweet Home 3D (.sh3d) import
  newera-plugins     external programs that edit the home over the HTTP API
  newera-mcp         MCP tools (rmcp), stdio and Streamable HTTP
  newera-server      axum: REST API + MCP endpoint, sessions
  newera-app         desktop editor: egui + wgpu
  newera-editor-web  the editor in the browser (WebGPU or WebGL)
  newera-web         WebAssembly viewer: plan SVG and 3D views
  newera             the binary that wires everything together

See docs/ARCHITECTURE.md for how it fits together, docs/SHOWCASE.md for a full project built by an agent, docs/NORMAS.md for the standards the review leans on — with edition, tier and link, in Portuguese because the sources are Brazilian — and docs/ROADMAP.md for what comes next.

Telemetry

Released builds send crash reports to the developers through Sentry, and the notes agents leave with the MCP feedback tool — what a tool could have done better, with the call, the reply and what must not get worse. It is on by default and off with one click in Help → Send error reports, or newera telemetry off; NEWERA_TELEMETRY=0 turns it off for a single run. Nothing of the project is sent, nor the IP address or the machine's name, and the MCP token is removed from every report. Notes are always kept locally in the config folder (notes.jsonl), sent or not. A build from source reports only when built with NEWERA_SENTRY_DSN.

Released builds also count one thing in Google Analytics: that the app was opened, with its version, the operating system and the mode (gui, serve, mcp). It rides the same switch, carries an id drawn at random for the installation — not a person — and needs NEWERA_GA_API_SECRET at build time, so a build from source counts nothing. The site counts page views in the same property; the project itself never leaves your machine either way.

Support the project

Everything above is free and stays free. If it saves you time, you can buy the project a coffee with the supporter plan (US$ 5/month or US$ 48/year, through Polar): it raises the cloud quotas for your account and pays for the server.

Contributing

Contributions are welcome — see CONTRIBUTING.md. make check runs the same checks as CI.

License

Licensed under either of Apache License 2.0 or MIT license, at your option.

Available Tools

59 tools
acceptAccept findingsA
Destructive
Inspect

Mark findings of check_layout, ergonomics, electrical or plumbing as looked at, by the key the review gives: accept=[[key, reason]] — they stay in their review with the reason and stop counting (score, pendencies, dry runs); an empty reason takes one back. prune=true drops every acceptance whose finding is gone (the reviews list them as orphaned). One undoable step. Reply ok, with accepted and removed counts; read the review again to see it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pruneNoDrop every acceptance whose finding is gone — the `orphaned` the reviews list — from all of them at once
acceptNo`[[key, reason]]`, key as the review names it (`check_layout`, ergonomics, electrical, plumbing): it keeps showing there with the reason and stops counting. An empty reason takes it back

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written
removedNoAcceptances removed
acceptedNoFindings accepted

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses the mutation and destructive nature beyond annotations: it is 'one undoable step', it stops counting, and prune drops orphaned acceptances. It also describes the response format (accepted and removed counts) and advises re-reading the review. This aligns with destructiveHint=true and adds valuable 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?

The description is dense but well-structured: it starts with the main action, explains prune, notes undoability, and specifies the response. Every sentence contributes, though it is slightly longer than strictly necessary. It is not 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 mutation tool with two parameters and an output schema, the description covers all critical aspects: effect on findings, prune behavior, undoability, and how to verify (read the review again). It is complete enough for an agent to invoke correctly without further assumptions.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains both parameters (accept format and prune behavior). The description largely repeats this information without adding new semantic detail. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's purpose: to mark findings from specific review types (check_layout, ergonomics, electrical, plumbing) as looked at. It distinguishes itself from sibling tools by naming the exact review types and the effect (stopping counting).

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

Usage Guidelines4/5

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

The description explains the behavior in detail (stops counting, empty reason takes back, prune for orphaned findings) and notes the undoable step. However, it does not explicitly contrast with alternatives like delete or undo, nor does it state when not to use it. The guidance is implied rather than explicit.

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

annotationsRead dimensions, tags and notesA
Read-only
Inspect

Plan annotations, read. stale=true lists notes whose numbers no longer match the piece they are about, piece names whose sizes (módulo 70 cm, 80 × 60) no longer match the piece, dimensions whose anchor is gone, and unanchored dimensions left with one end in the air a few cm from a face (the drawing moved under them): rows [id, written, measured, against, text]; checked {dims, dims_unanchored, labels, names} counts what was compared — an empty list with nothing checked is not a clean plan — and unverified [[id, text]] lists sizes nothing can confirm: a label about no piece, or a name giving an inner opening, niche, leaf or set (vão, nicho, folha, conjunto) — run it after moving geometry, before handing the plan over. A note says which piece it is about with update(id=t1, about=f5); without that, one standing on a piece or beside a single piece that still shares a number is checked too. q= searches label text on every storey; q=re: by a regex (re:^\[\d+\]$ finds index codes). With neither, returns the schedule {dims,refs,details,legend,rooms:[[room,[[tag,name,w,d,h,brand?,model?,url?]]]]} — the modes on, and the room reference schedule with its tags. edit_annotations turns modes on and off, ties dimensions and bakes chains. Give pieces brand/model/url via update.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch label text, accent- and case-insensitive, e.g. `porta`; or `re:<pattern>` for a regular expression
staleNoDimensions and notes that no longer match the drawing: rows [id, written, measured, against, text]

Output Schema

ParametersJSON Schema
NameRequiredDescription
revNoPlan revision
dimsNoDimensions shown
refsNoReference tags shown
roomsNoThe schedule: [room, [[tag, name, w, d, h, brand?, model?, url?]]]
staleNostale=true: [id, written, measured, against, text]
labelsNoWith q: labels {id, text, at, …}
legendNoLegend shown
checkedNostale=true: what was checked
detailsNoDetails shown
unverifiedNostale=true: [id, text] nobody can check

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context: stale=true lists rows with a specific shape, checked counts what was compared, unverified lists sizes nothing can confirm, and the warning that 'an empty list with nothing checked is not a clean plan.' It also discloses the fallback note-checking behavior (a note standing on a piece or beside a single piece that shares a number is checked). This goes beyond the annotations without contradicting them.

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 every sentence earns its place: it covers the stale mode, checked counts, unverified lists, the note-checking rule, q= search, the no-args schedule, and the sibling edit_annotations. It is front-loaded with the core purpose ('Plan annotations, read') and then details modes. It is long, but the complexity of the tool justifies the length; no filler or repetition.

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

Completeness5/5

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

For a read-only tool with an output schema, the description is remarkably complete. It explains all three invocation modes (stale, q, no-args), the exact row shapes, the meaning of checked and unverified, the note-checking fallback, and the relationship to edit_annotations. The output schema covers the schedule structure, so the description doesn't need to repeat it. An agent has everything needed to call this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description adds meaning beyond the schema: it explains what stale=true returns (rows [id, written, measured, against, text]) and what q= does ('searches label text on every storey'), plus the regex variant. It also clarifies the no-args mode returns the schedule. This is more than the baseline 3 for full schema 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 'Plan annotations, read' and then enumerates exactly what the tool does: lists stale dimensions/notes, checks counts, lists unverified sizes, searches label text, and returns a schedule. This clearly distinguishes it from sibling tools like edit_annotations (which 'turns modes on and off, ties dimensions and bakes chains') and update (which sets piece properties).

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'run it after moving geometry, before handing the plan over.' It also explains the modes (stale, q, no-args) and contrasts with edit_annotations, which is the sibling that modifies annotations. The q= and re: syntax is fully specified, so an agent knows exactly when to invoke this read tool versus a write tool.

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

arrangeCopy, align and groupA
Destructive
Inspect

Arrange elements in one undo step. array {ids,n,dx,dy,dz} adds n copies stepping by dx/dy/dz cm (rafters, columns); align {ids,axis,edge:low|middle|high,value} lines pieces up by an edge — backs on one line, fronts on another — instead of by centers you work out yourself; distribute {ids,axis,gap?} sets them side by side in the order given, from where the first one is (a run of joinery); flip {ids} turns a piece back to front, rebuilding what is inside it (mirror only swaps left and right and leaves the front where it was); rotate {ids,angle clockwise,about?,copy?}; mirror {ids,a,b,copy?} across the line a-b; group {ids,name?} joins pieces into one box that moves/hides together, ungroup {ids:[group]}; front/back {ids} draws rooms or pieces on top/underneath (pool over deck, rug under sofa). Returns new ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
aNomirror: the first point of the mirror line
bNomirror: the second point of the mirror line
nNoarray: number of copies (default 1)
dxNoarray: step per copy along x, cm
dyNoarray: step per copy along y, cm
dzNoarray: step per copy upwards, cm (furniture and labels)
gapNodistribute: centimeters between one piece and the next (default 0)
idsYesThe elements to act on (ungroup: the group)
axisNoalign/distribute: `x` or `y`
copyNorotate/mirror: keep the originals and transform a copy
edgeNoalign: which edge to line up — `low` (left, or top of the plan), `middle`, `high`
nameNogroup: its name
aboutNorotate: pivot `[x,y]` (default the center of the elements)
angleNorotate: clockwise degrees
valueNoalign: the coordinate, cm, to put that edge on
actionYes`array` (copies in a row), `align`, `distribute`, `flip`, `rotate`, `mirror`, `group`, `ungroup`, `front`, `back`

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation risk is known. The description adds valuable behavioral details beyond that: 'flip' turns a piece back to front and 'rebuilds what is inside it', 'mirror only swaps left and right and leaves the front where it was', and each sub-action has specific side effects. It also discloses the return value ('Returns new ids'). This goes well beyond the basic 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 description is long (about 150 words) but packs a lot of information for a tool with 9 sub-actions and 16 parameters. It front-loads the overall purpose ('Arrange elements in one undo step') and then lists each action in a structured, semi-colon-separated format. No sentence is wasted, though the density requires careful reading. It could be slightly more concise by grouping, but it stays efficient.

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 this complex, the description covers each action's parameters and behavior, plus the return value. It does not cover edge cases or prerequisites (e.g., whether ids must be on the same level, coordinate system assumptions), but given the output schema exists and annotations cover safety, an agent can invoke it correctly for the listed scenarios. The main gap is a lack of examples or warnings about interactions between actions, but it is 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 100%, so every parameter is already documented. The description adds meaning by explaining how parameters drive each action, e.g., 'array {ids,n,dx,dy,dz} adds n copies stepping by dx/dy/dz cm' and 'align {ids,axis,edge:low|middle|high,value} lines pieces up by an edge'. It clarifies the purpose of 'edge' values (low=middle=high) and 'value' as the target coordinate, which goes beyond the schema's terse field names.

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 clear, multi-purpose resource: 'Arrange elements in one undo step' and enumerates each sub-action with its verb and resource ('array' copies pieces, 'align' lines up edges, 'distribute' sets them side by side, etc.). It explicitly distinguishes from sibling tools by detailing unique behaviors like 'flip' (turn a piece back to front) and 'front/back' (draw rooms on top/underneath), so 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 Guidelines3/5

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

The description explains what the tool does but not when to prefer it over alternatives. It never mentions sibling tools like 'move', 'place', or 'joinery' or gives conditions for using those instead. The atomic 'one undo step' hint is useful, but the guidance is implicit rather than explicit about alternative selection.

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

cabinet_runFill a wall with cabinetsA
Destructive
Inspect

Fill a wall with cabinets sized for it: measures the free stretches between corners, doors, windows, fridge and stove, splits each into even modules (30-90 cm, no useless leftovers; 15-30 cm pull-outs, fillers under 15; the defaults target=60 max=90 sink_w=80 cooktop_w=60 are the nominal widths of EN 1116, which is what appliances and hardware are made for — bespoke widths in between are fine for a run that receives none), drawer unit beside the stove, countertop on base rows, cabinet over the fridge and hood gap on wall rows, wardrobes (hanging rails, shelves, drawers) on tall rows facing bedrooms; p.sink/p.cooktop place those cabinets and cutouts. Replaces the cabinets already there (keep ids stay). Reply {modules:[[id,role,from,w]],removed,notes}; dry plans only. Change one module afterwards with joinery id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoFlat choices, all optional: row base|wall|tall, h, d, elev, t (mm), front, color [r,g,b], handle bar|profile|knob|cava|none (bar), `handle_color` [r,g,b] or "#hex", drawers (drawer units), max (widest module, 90), target (60), top (base countertop, true), `top_material`, sink / cooktop (center cm along the wall: cabinet under it and the countertop cutout), `sink_w` (80), `cooktop_w` (60), interior shelves|hanging|wardrobe (tall rows; wardrobe by default facing a bedroom)
toNoWhere the run ends, cm from the wall start (default: the wall's end)
dryNoPlan and report only
fromNoStretch to fill, cm from the wall start (default: all of it)
keepNoCabinets on that wall that stay as they are
nearNoOr a piece against the wall (`f12`, the fridge): its nearest wall, on its side
roomNoRoom the fronts face (default: the side toward the middle of the house)
wallNoWall whose face gets the cabinets

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowYesbase, wall or tall
wallYesThe wall the run is on
notesYesWhat the rules say about it
modulesYes[id, role, from cm, w cm]
removedYesCabinets it replaced
adjustedNoNeighbouring runs replanned, same shape

TDQS

A3.7/5.0
Behavior4/5

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

The description openly discloses that the tool 'Replaces the cabinets already there (keep ids stay)', which aligns with the destructiveHint annotation. It also goes beyond annotations by describing the placement algorithm, output shape, and dry-run behavior, giving the agent a realistic picture of side effects.

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?

The core purpose is front-loaded, but the rest is a dense, run-on sentence with a long parenthetical and many clauses. It contains valuable details, but the lack of sentence breaks and the overloaded structure make it harder to parse than it should be.

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, destructive tool with 8 parameters and an output schema, the description covers the key behavioral rules, default dimensions, output format, and the joinery follow-up path. It is not perfectly clear on the dry-run semantics, but overall it gives enough context 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: default module widths (target=60, max=90), sink/cooktop widths, the role of p.sink/p.cooktop in placing cabinets and cutouts, and the meaning of 'keep' for preserving existing cabinets. This goes beyond simply restating parameter names.

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 phrase 'Fill a wall with cabinets sized for it' states a specific verb, resource, and intent, and the description immediately elaborates with measurable behavior (measuring free stretches, splitting modules, adding countertops, etc.). It is distinguishable from generic tools like 'place' or 'arrange', though it does not explicitly name a sibling alternative.

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 its use case clearly, and it does mention 'Change one module afterwards with joinery id' as a follow-up alternative. However, it does not explicitly state when to prefer this tool over siblings like 'arrange', 'place', 'update', or 'joinery', and the 'dry plans only' phrase is ambiguous.

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

camerasList points of viewA
Read-only
Inspect

Stored points of view: {active: visitor|aerial, rows [i,name,x,y,z,yaw,pitch,fov]}, cm and degrees. Change them with edit_cameras.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYesStored views: [i, name, x, y, z, yaw, pitch, fov]
activeYesThe camera in use: visitor or aerial

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the agent knows this is safe. The description adds useful behavioral context beyond the annotation by specifying the return format: active is visitor|aerial, rows contain i,name,x,y,z,yaw,pitch,fov, and units are cm and degrees. No contradictions with annotations.

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

Conciseness5/5

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

The description is one compact sentence that front-loads the core information and provides structure and units immediately. It wastes no words and even includes a pointer to the relevant sibling tool. This is appropriately sized for what is essentially a no-input, list-returning 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?

With no parameters, an output schema already present, and read-only annotations, the description covers the remaining gaps: the data shape, units, and the mutation alternative. There is nothing an agent needs to invoke this tool correctly that 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?

There are no parameters, so the schema carries no burden. The description adds semantic value by explaining the meaning of the output values (cm and degrees) and the active field's allowed values. This is the baseline for zero-parameter tools and slightly better because it pre-explains the response fields.

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 title 'List points of view' supplies the verb, and the description identifies the resource ('Stored points of view') and the exact payload shape. It distinguishes this from its sibling edit_cameras by explicitly naming it as the modification path. However, the description itself is a noun phrase rather than a verb clause, so it relies on the title for the action.

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

Usage Guidelines4/5

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

The description implies the usage context: to view stored points of view, call this tool; to change them, use edit_cameras. This routes the agent to the correct sibling for mutation, but it doesn't state additional conditions like when not to use it or prerequisites. Still, for a simple list tool with zero parameters, the guidance is sufficient.

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

catalogSearch the furniture catalogA
Read-only
Inspect

Find catalog items: rows [id,name,w,d,h,front?] in cm. front, when the item has one, is wall|free <front>/<back>: every model is built with that front on its local +y (at angle 0 it looks down the plan), wall means its back belongs on a wall (bed headboard, wardrobe back, toilet cistern) and free that it stands anywhere (armchair, chair); no front means any angle is right. scope=project lists what this plan already uses instead — catalog id or imported model, with how many there are and one id to copy from, narrowed by q over the entry and its pieces' names — which is how a new piece matches the drawing rather than reintroducing a generic one.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch words (Portuguese or English), e.g. `cama casal`
catNoCategory id, e.g. `kitchen`
limitNoMax rows (default 40)
scopeNo`project` lists what this plan already uses — imported models included — instead of the catalog, so a new piece can match what is there rather than reintroduce a generic one

Output Schema

ParametersJSON Schema
NameRequiredDescription
moreNoHow many more matched than the limit
usedNoscope=project: [kind, name, count, id]
itemsNo[id, name, w, d, h, front?] cm
categoriesNoCategories to search by, when neither q nor cat was given

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, so the description doesn't need to repeat that. It adds valuable behavioral context beyond annotations by explaining the meaning of the 'front' field (wall/free semantics) and the scope=project behavior of listing existing plan items. This enriches the agent's understanding without contradicting 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?

The description is a single dense paragraph that is front-loaded with the core purpose ('Find catalog items') but then packs a lot of detail about row format, front semantics, and scope behavior. All content is relevant and earns its place, but the density makes it less concise than ideal. It could be split into clearer sections.

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 an output schema present and annotations covering the read-only hint, the description provides additional context on data semantics (front field) and the scope mode, making it fully complete for correct invocation. There are no missing details an agent would need to call the tool appropriately.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning for the scope parameter, explaining it lists existing plan items including imported models, which is not fully captured in the schema. It also clarifies the output field semantics (like front), indirectly aiding parameter use. This exceeds the baseline.

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

Purpose5/5

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

The description clearly states 'Find catalog items' with a specific resource and then details the output row format. It distinguishes this from placement or other tools by focusing on search and listing. The verb and resource are explicit, and the scope=project mode further differentiates a special use 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 provides explicit guidance on when to use scope=project: to match a new piece to what the plan already uses, avoiding reintroducing generic items. It also implies the default mode for generic catalog search. While it doesn't name alternative tools, it gives clear context for the two modes, which is sufficient.

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

check_layoutCheck the layoutA
Read-only
Inspect

Layout problems: above_ceiling, overlap, blocked, in_wall, blocks_door, blocks_window, no_door, unrated_light, turned, unclear_front, loose_opening, outgrew_niche, outside_rooms, loose (a fixed point with nothing to be fixed to: loose in a room, on glass, in a door or window span, hanging under the ceiling, with why); {} means none. Each one carries name, bounds and z of both elements. Overlaps are classified kind collision (a real clash, listed first), nesting (built in, resting on, tucked under), served (a project point inside a piece on purpose: the water point in the basin, the outlet behind the fridge or set into a cabinet) or cross_level, with extent [x,y,z] cm of the shared space; overlap_kinds counts them. blocks_window reports nearby tall/elevated solids masking the window, with extent [width,height] cm; compact countertop objects are exempt, so this does not certify sash operation or ventilation. blocks_door includes a 60 cm approach on either face, even for sliding doors and passages. blocked is a cabinet, fridge or wardrobe whose opening face is against a solid — it cannot be used, and angle alone does not show it. backwards is a piece whose back belongs on a wall (sofa, bed, toilet, TV, desk — the catalog tool marks them wall) with its front against a wall instead: it is turned half around; fix.angle turns it the right way, and the piece's back then touches that wall only if it was flush — placing again with wall= seats it. turned is a group whose built fronts (doors, drawer fronts, kick) face one way and whose angle says another: the piece opens where the panels are, so fix the angle, not the clearance it seems to lack. unrated_light is a light fixture with neither lumens nor watts — only the relative power an import carries — so the lighting tool's lux for its room are a guess: set its output with update(light={lm or w}). no_door is a bedroom or bathroom (by name) with no door — only open passages, listed, or no way in at all — said once the storey has doors somewhere; a living room, kitchen or balcony left open is not. unclear_front is a group whose parts name fronts on more than one face with no clear winner (candidates, strongest first; placed is the angle's guess every "in front of" falls back to) — rename the misleading part or set the angle. Handles weigh most. loose_opening is a door or window in no wall — a passage drawn as a panel — which reads as an opening in every schedule and opens nothing. outgrew_niche is an appliance its host stopped holding after the joinery was resized around it, with how far it sticks out: built-in pieces are left out of the overlap check by design, which is why nothing else notices. above_ceiling compares the full luminaire footprint with the same room ceiling surface used in 3D, with ceiling/top/over in cm: declared storey height, sloping wall profiles and lower roof panels. Hidden ceilings and unknown uncovered slopes are not inferred. Every row is an object with the key it is accepted by (in_wall {key, piece, wall}, blocks_door {key, door, by}). The accept tool marks one looked at and right as drawn — an imported model whose box is bigger than the piece it draws: it leaves the sections, the variant count and every dry run, and is listed here under accepted {key, kind, why, extent} with its reason, kept in the project; orphaned [[key, reason]] lists acceptances whose finding is gone on every storey, and accept(prune=true) drops them. level: a storey id or all, default the one shown. areas {name|id: m²} compares room areas with the reference drawing.

ParametersJSON Schema
NameRequiredDescriptionDefault
areasNoExpected room areas in m² by room name or id, e.g. {"Sala": 10.91}; adds rows [room, expected, actual, diff %]
levelNoStorey to check: an id like `lv3`, or `all` for every storey that is not a reference layer. Default: the storey being shown

Output Schema

ParametersJSON Schema
NameRequiredDescription
areasNoWith areas: [name, expected m², actual m², difference %]
looseNoPieces floating or unsupported: {key, piece, why}
turnedNoPieces placed turned from how they were built: {key, piece, built, placed}
blockedNoPieces whose use is blocked: {key, piece, against, cm}
in_wallNoPieces inside a wall: {key, piece, wall}
no_doorNoRooms nobody can walk into: {key, name, room, passages}
overlapNoPieces that overlap: {key, a, b, kind, extent}
acceptedNoIssues accepted as they are: {key, kind, why}
orphanedNoAcceptances whose issue is gone: [key, reason]
warningsNoStoreys stacked at the same elevation
backwardsNoPieces turned to face a wall: {key, piece, wall, cm, fix}
blocks_doorNoDoors blocked: {key, door, by}
above_ceilingNoPieces through the ceiling: {key, piece, room, ceiling, top, over}
blocks_windowNoWindows blocked: {key, window, by, extent}
loose_openingNoDoors or windows in no wall
outgrew_nicheNoPieces bigger than their niche: {key, piece, host, over}
outside_roomsNoPieces in no room
overlap_kindsNoOverlaps by kind: {collision, nesting, served, cross_level}
unclear_frontNoPieces whose front is a guess: {key, piece, candidates, placed}
unrated_lightNoLights without a rating

TDQS

A3.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses classification semantics, exemptions (e.g., compact countertop objects), limitations ('does not certify sash operation or ventilation', 'Hidden ceilings and unknown uncovered slopes are not inferred'), and special cases such as accepted/orphaned findings. It also clarifies behaviors like no_door only being reported once the storey has doors somewhere. This is far richer than the annotation alone.

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

Conciseness2/5

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

The description is a single dense, unstructured paragraph mixing output taxonomy, edge cases, related-tool behavior, and parameter notes. It would be far more usable with bullets, sections, or a clear 'returns' framing. Despite being information-rich, it is not appropriately sized or structured for quick agent consumption.

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

Completeness5/5

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

Given the tool's complexity and the many distinct problem categories, the description is exceptionally complete: it defines every reported kind, explains field semantics, gives examples, states conditions and exemptions, documents parameter behavior, and even covers interactions with the accept tool. The presence of an output schema lowers the burden for return-value details, and the description still covers them thoroughly.

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

Parameters4/5

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

Schema coverage is 100% and both parameters already have descriptions, so the baseline is 3. The description adds marginal meaning by noting that `areas` compares room areas against the reference drawing and that `level` defaults to the displayed storey. That extra context lifts it slightly above baseline.

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 title supplies the verb+resource ('Check the layout') and the description enumerates the specific layout problems the tool reports, so an agent can tell this is a layout diagnostic. However, the description opens with a bare list ('Layout problems: ...') rather than an explicit declarative sentence, and it never contrasts itself with related diagnostics like measure or checkpoints.

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

Usage Guidelines2/5

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

The description provides no explicit guidance about when to call this tool instead of alternatives such as measure, ergonomics, or checkpoints. It implies usage through its exhaustive problem list and boundary conditions, but it never states 'use this when ...' or names a preferred alternative.

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

checkpointRemember or go backA
Destructive
Inspect

Name where the plan is now, and come back to it. {label} (action checkpoint, the default) remembers this point; action=revert {label} undoes back down to it, keeping every id — which duplicating a version cannot do, since a copy renumbers. A checkpoint lives with the project and survives saving; the checkpoints tool lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoThe checkpoint's name; required by both actions
actionNo`checkpoint` (remember here, the default) or `revert` (go back)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag destructiveHint, and the description adds meaningful context: reverting keeps every ID, checkpoints persist with the project and survive saving, and the 'checkpoints' tool can list them. It does not fully specify all side effects of reverting, such as what happens to later checkpoints, but it goes beyond the structured annotation data.

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

Conciseness5/5

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

The description is three dense sentences with no filler. The purpose is front-loaded, the action semantics follow, and the persistence/listing detail is useful rather than redundant. Every sentence earns its place.

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

Completeness4/5

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

For a two-parameter tool with 100% schema coverage and an output schema, the description covers purpose, actions, persistence, and the key ID-preserving benefit. The main gap is that 'undoes back down to it' is somewhat vague about exactly what gets discarded on revert, but the destructiveHint annotation partially covers that.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents both parameters including the default/revert behavior of 'action'. The description confirms that {label} is required by both actions and shows usage syntax, but it adds little semantic value beyond the input schema.

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 identifies the resource (the current plan state) and the two operations: remembering a point via 'checkpoint' and undoing back to it via 'revert'. It is unambiguous about what the tool does, though it does not explicitly differentiate it from sibling undo/redo 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?

The description states that 'checkpoint' is the default action and explains when to use 'revert', and it contrasts checkpointing with duplicating a version to justify why checkpointing preserves IDs. It lacks explicit guidance on when not to use this tool versus undo/redo, but the action-level guidance is clear.

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

checkpointsList checkpointsA
Read-only
Inspect

What checkpoint remembered: rows [label, changes ago]. A checkpoint lives with the project and survives saving.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
checkpointsYes[label, changes ago]

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, so the read-only nature is covered. The description adds genuinely useful behavioral context beyond annotations: checkpoints are project-scoped and survive saving, which tells an agent about state persistence. No contradictions with annotations are present.

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

Conciseness5/5

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

The description is two short sentences with no filler. It front-loads the output format ('rows [label, changes ago]') and then adds a meaningful behavioral fact about persistence. Every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter, read-only listing tool with an output schema, the description covers the essential shape of the result and the persistence behavior. It is slightly cryptic in phrasing and does not mention usage context, but the tool's simplicity and annotations make it adequately 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?

The tool has zero parameters and schema description coverage is 100%, so there is no parameter information for the description to add. With 0 parameters, the baseline of 4 applies, and the description correctly avoids inventing irrelevant parameter details.

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 title and tool name make clear this is a listing operation ('List checkpoints'), and the description confirms the resource by describing what a checkpoint is and what its rows contain. It does not explicitly name or distinguish itself from the sibling tool 'checkpoint', so it stops short of full differentiation.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as 'checkpoint' or 'undo'. The persistence note ('survives saving') lightly implies a use case, but no explicit when/when-not conditions or alternative tool routing are provided.

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

createDraw walls, rooms and moreAInspect

Create walls (polylines; hs = height per point for gables), rooms (pts, or at=[x,y] to detect from walls; ceiling_flat=false follows wall profiles instead of the default flat ceiling), dims (a+b or wall id), labels, roofs (rectangle pts, gable|shed, pitch or ridge_h, eave h, overhang, gables=true closes the ends, skylights [{at,w,d}] cut glazed openings) and solids (pts outline raised by h at elev: slabs/mezzanines of any shape; or profile [[u,z]] swept from a to b: gables, ramps) in one atomic step.

ParametersJSON Schema
NameRequiredDescriptionDefault
vNoPlan version (tab) to write to; switches to it first
pxNoEvery point is given in pixels of the background image (converted with its scale and offset); lengths (t, h, off) stay in cm
dimsNoDimension lines: between two points, along a wall, or across a room
roofsNoPitched roofs over a rectangle, built as one group of sloping panels
roomsNoRooms: an outline of points, or `at` inside closed walls
wallsNoWalls, each a chain of points joined corner to corner
labelsNoText on the plan
solidsNoSolids from polygons: plan outlines raised by `h` (slabs, mezzanines, decks with any shape) or cross-sections swept from `a` to `b` (gables, ramps)
polylinesNoFree lines: annotations, arrows, electrical or plumbing runs

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

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 and destructiveHint=false, so the agent knows this is a write operation. The description adds valuable behavioral context: 'in one atomic step' signals that all elements are committed together, and it explains key behavioral nuances like ceiling_flat=false following wall profiles, gables=true closing ends, and skylights cutting glazed openings. This goes beyond what 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 description is a single dense sentence that front-loads the main verb and resource list, then packs parameter semantics into parentheticals. It's efficient but slightly long and could be easier to parse; the parenthetical-heavy structure makes it dense. Still, every clause earns its place and there's no fluff.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, 8 element types, nested specs), the description covers the key decision points: how to specify walls, rooms, roofs, and solids, and the atomicity guarantee. The output schema exists, so return values don't need explanation. It doesn't mention error cases or prerequisites, but for a create tool with this breadth, the coverage is strong.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the purpose of each element type and key parameter interactions: hs per point for gables, at=[x,y] to detect rooms from walls, ceiling_flat=false following wall profiles, pitch or ridge_h for roofs, and profile [[u,z]] swept from a to b for solids. This is genuinely additive, not just restating the schema.

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

Purpose5/5

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

The description opens with a specific verb ('Create') and enumerates the exact resources: walls, rooms, dims, labels, roofs, and solids. It distinguishes itself from siblings like 'trace_walls' and 'merge_walls' by covering the full creation surface in one atomic step, and the title 'Draw walls, rooms and more' reinforces the scope.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when creating any of the listed element types in one atomic step. It doesn't explicitly name alternatives or exclusions, but the sibling list (trace_walls, merge_walls, split_wall, place) makes the boundary clear enough. A 4 is appropriate because the context is clear but no explicit when-not-to-use guidance is given.

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

cut_listCut listA
Read-only
Inspect

Cut list of joinery builds, and of groups drawn by hand: each part of a drawn group up to 50 mm thick is a board at the size it was drawn (board is its finish and thickness, no edge banding), the groups are named in drawn and the parts that are not boards in skipped [[id,name]]. Rows [part,board,qty,length,width,thickness mm,edge long+short,cutouts [x,y,w,d] mm?] merged by size, hardware, sheets per board. export_cut_list writes it as .csv, or .dxf/.svg (boards laid out on sheets). sources names the panel standards behind the boards: MDF is a dry-process fibreboard (NBR 15316), MDP a particleboard of 551 to 750 kg/m³ that holds screws better (NBR 14810).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoBuild or drawn group ids (default: every build and drawn group on this storey)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes[part, board, qty, length, width, thickness, edge, cutouts?]
drawnNoHand-drawn builds left out
sheetsNo.dxf/.svg: [board, sheets]
skippedNo[id, name] left out
sourcesYesStandards cited, by code: [title, tier, url]
hardwareYesHardware by build: "<id>: <item>"

TDQS

A4.1/5.0
Behavior5/5

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

With readOnlyHint=true already provided, the description carries a low safety burden and instead adds substantial behavioral detail: the 50 mm thickness rule, board finish and thickness semantics, no edge banding, skipped parts handling, merging criteria, and MDF/MDP material definitions. This goes well beyond the annotations and gives the agent a rich model of the tool's behavior.

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?

The description is information-dense and front-loads the core subject, but it is structured as a long run-on sentence with several parenthetical asides. The MDF/MDP material details, while useful, could be separated or moved without losing clarity. It is thorough at the cost of scannability.

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 fairly complex domain, the description is remarkably complete: it covers input scope, board derivation rules, row format, merging behavior, export alternatives, and material standards. The output schema likely covers return values, and the annotations cover read-only safety, so nothing essential for correct invocation appears 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?

The input schema already covers the only parameter, ids, with a clear description of valid values and default behavior, so schema coverage is 100%. The main description adds domain context about what drawn groups and builds are, but it does not add direct parameter-level guidance such as id formats or selection constraints. Baseline 3 is appropriate.

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 identifies the resource clearly: a cut list for joinery builds and hand-drawn groups, and it distinguishes cut_list from export_cut_list by stating that the latter writes the list to file. However, it lacks an explicit verb like 'returns' or 'computes', leaving the exact action somewhat inferred rather than stated.

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

Usage Guidelines4/5

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

The description gives useful usage context: it applies to builds and drawn groups, defaults to all such groups on the storey, and points to export_cut_list for CSV/DXF/SVG output. It does not explicitly enumerate when to prefer this over other siblings, but the relationship to export_cut_list provides a clear distinction.

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

deleteDelete elementsA
Destructive
Inspect

Delete elements by id, atomically. Labels left pointing at a deleted piece — about it, or standing on it — are named in the reply as labels_left [[id, text]], since an index code over what is now another piece is found by nobody; labels=true deletes them in the same step.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesThe elements to delete: walls, rooms, pieces, dimensions, labels, lines
labelsNoAlso delete the labels left pointing at the deleted pieces

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written
labels_leftNoLabels left pointing at deleted pieces: [id, text]
labels_deletedNoLabels deleted with them

TDQS

A3.9/5.0
Behavior4/5

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

The description adds significant behavioral context beyond the annotations: it mentions the atomic nature of the deletion, the side effect of left-over labels being reported (labels_left), and the option to delete those labels in the same step. This is valuable. The annotations already indicate destructiveHint=true, so the description doesn't contradict that, but it provides more detail.

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 concise and front-loaded with the core action (delete elements by id, atomically). It then explains the edge case with labels. The writing is efficient, though the phrasing around 'labels_left' is a bit dense and could be clearer, but it doesn't waste words.

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

Completeness4/5

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

Given the tool's complexity (deletion with side effects) and the rich output schema (which likely includes labels_left), the description covers the key points: atomic deletion, handling of orphaned labels, and the option to delete them. It does not explain return values in detail, but that is covered by the output schema. No major missing information.

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

Parameters3/5

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

The schema coverage is 100%, and the schema already describes both parameters (ids and labels). The description does add a bit of meaning by explaining the behavior around labels (e.g., how labels_left works and the effect of labels=true), but it doesn't add much beyond that. The schema is already clear on parameter types and descriptions, so the description adds only marginal value.

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

Purpose4/5

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

The description clearly states the tool deletes elements by id, atomically, and covers the types of elements (walls, rooms, pieces, dimensions, labels, lines). It distinguishes itself from siblings like 'update' and 'move' by focusing on deletion. However, it could be more explicit about the meaning of 'atomically' and the exact scope of deletion.

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

Usage Guidelines4/5

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

The description clearly states when to use the tool: when elements need to be deleted by id. It also implicitly suggests that labels can be deleted as part of the same operation (via the 'labels' parameter), but it doesn't explicitly contrast with alternatives like 'edit_annotations' or 'update' for modifying elements. The guidance is clear for deletion tasks but doesn't provide exclusions.

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

disciplinesShow what the plan displaysA
Read-only
Inspect

Electrical and plumbing projects and plan layers over the plan. active (default): {active, hidden, layers {key:{pieces, hidden}}} — the discipline new symbols go to, what is hidden, and the layers (lighting, appliances, joinery); get_home gives each piece its plan_layer. quantities: {electrical:[[kind,count,names?]], plumbing:[...], lines_cm:{...}} — grouped by catalog kind (every low outlet together), with the names of the points as the detail. Change what is shown with edit_disciplines.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo`active` (default) or `quantities`

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeNoDiscipline drawn on top: electrical, plumbing, or null
hiddenNoDisciplines hidden
layersNoPlan layers: {lighting, appliances, joinery} → {pieces, hidden}
lines_cmNoaction=quantities: drawn lines by discipline, cm
plumbingNoaction=quantities: [kind, count, names?]
electricalNoaction=quantities: [kind, count, names?]
show_all_3dNoEvery discipline shown in 3D

TDQS

A3.9/5.0
Behavior4/5

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

Annotations mark the tool readOnly, and the description is consistent, adding semantics about the active/hidden/layers structure and how quantities are grouped by catalog kind. It does not go into auth or error behavior, but the read-only safety profile is already covered by 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?

The content is information-dense but the opening sentence is fragmented ('Electrical and plumbing projects and plan layers over the plan') and the return shapes are spelled out even though an output schema exists, making it longer than necessary. The use of labeled inline blocks does aid 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 simple read-only query with one optional parameter and an output schema, the description covers the available actions and points to related tools for mutations and per-piece data. Minor ambiguity in the opening sentence keeps it from a 5.

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 already defines `action` with 100% coverage, so baseline 3; description adds the default `active` behavior and clarifies what each action returns, which helps the agent select a value. Not a 5 because it doesn't specify string casing or validation beyond schema.

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 intended function is inferable: this is a read-only query for discipline display state and quantities. It names two modes and contrasts with edit_disciplines and get_home, though the opening sentence lacks a clear verb and is grammatically incomplete.

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 by documenting the two `action` modes and directs mutation to edit_disciplines and per-piece layer lookup to get_home. It does not explicitly state when not to use this tool, but the exclusions are implied.

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

edit_annotationsChange dimensions and tagsA
Destructive
Inspect

Change the plan annotations. anchor=true ties every straight dimension to what its ends touch now, and from then on they are measured again on every change instead of drifting — run it while the numbers are still right; one with an end already off its face is not tied and comes back in left [[id, written, measured, near]], to be fixed first; one whose anchor died with a deleted piece is tied again to what it touches now, or else released (no anchor) instead of staying stale. Set any of dims (engineering dimension chains; auto_dimensions in the project JSON), refs (room reference schedule with tags; references — a tag, once given, stays with its piece: new pieces take the next free number and removed ones leave a gap, so a print and the plan a week later agree; renumber=true numbers them again in reading order), details (brand/model/link in refs; reference_details), legend (symbol legend with counts): a switch answers with the modes, changed, and what it shows — chains [[from,to,cm]] for dims, symbols {discipline:[[name,count]]} for legend — not the schedule; refs=true returns {dims,refs,details,legend,rooms:[[room,[[tag,name,w,d,h,brand?,model?,url?]]]]}. bake=true turns the automatic chains into editable dimensions (ids returned). The annotations tool reads them (stale, q, the schedule).

ParametersJSON Schema
NameRequiredDescriptionDefault
bakeNoConvert the automatic dimension chains into editable dimensions
dimsNoShow engineering dimension chains (`auto_dimensions` in the project JSON)
refsNoShow the room reference schedule and tags (`references` in the JSON)
anchorNoTie every straight dimension to what its ends touch right now, so from here on they follow the drawing. Run it while the numbers are right
legendNoLegend of electrical/plumbing symbols with counts
detailsNoInclude brand, model and link in references (`reference_details`)
renumberNoNumber the schedule again in reading order, closing the gaps pieces left behind. Numbers are otherwise kept by each piece for good

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
idsNoIds created or touched
revNoPlan revision
dimsNoDimensions shown
leftNoanchor=true: [id, written, measured, near id] left as they were
refsNoReference tags shown
textNoThe reply as written
roomsNoThe schedule: [room, [[tag, name, w, d, h, …]]]
chainsNodims=true: [[x,y], [x,y], cm]
legendNoLegend shown
changedNoSwitches that changed
detailsNoDetails shown
symbolsNolegend=true: {electrical?, plumbing?} → [name, count]
anchoredNoanchor=true: labels now tied to what they measure
releasedNoanchor=true: labels let go

TDQS

A4.3/5.0
Behavior5/5

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

Despite destructiveHint=true being present, the description goes far beyond it: it discloses that anchor ties dimensions to current geometry and re-measures them on every change, that tags persist with a piece and leave gaps when removed, that dead anchors are re-tied or released, and that bake turns automatic chains into editable dimensions. This gives the agent a strong model of side effects and persistence.

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

Conciseness2/5

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

The description is a single dense, run-on block with nested clauses and parentheticals that are very hard to scan (for example, the anchor sentence and the long refs/legend sentence). While the content is relevant, it needs bulleted modes and clearer separation to be efficiently parseable by an agent.

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 multi-mode destructive tool with seven switches, the description covers the essentials: prerequisites for anchor, behavior on stale or deleted anchors, return shapes for modes, renumbering semantics, and the relationship to the annotations read tool. The output schema exists, so the detailed return-value prose is bonus rather than a required gap.

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?

The schema already covers all seven boolean parameters, but the description adds real semantics: what each switch returns (e.g. chains [[from,to,cm]] for dims, symbols {discipline:[[name,count]]} for legend), what refs=true returns, and what renumber/bake do to tagging and dimension state. This is far beyond the baseline for fully covered schemas.

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 'Change the plan annotations' names a specific verb and resource, and the closing sentence 'The annotations tool reads them' explicitly separates this mutating tool from its read-only sibling. The different modes (anchor, dims, refs, legend, bake) all fall under the single purpose of changing plan annotations, so an agent can tell what the tool is for.

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 mode-level conditions, such as 'run it while the numbers are still right' for anchor and 'renumber=true numbers them again in reading order', and points to the annotations tool as the reader. But it never states directly when to choose edit_annotations over the sibling edit_* tools or when not to use it, leaving much of the selection inference to the agent.

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

edit_camerasChange points of viewA
Destructive
Inspect

Change the points of view. view {i} shows stored view i in the 3D window; aerial returns to the orbit view; store {name?,x?,y?,z?,yaw?,pitch?,fov?,look_at?:[x,y,z]} saves one (missing values from the visitor; yaw 0 looks toward +y/plan bottom, 90 toward -x; pitch positive looks down); delete {i}. cm and degrees. The list is the cameras tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
iNoStored view index
xNoEye position on the plan, cm
yNoEye position on the plan, cm (y grows down)
zNoEye height cm
fovNoHorizontal field of view, degrees
yawNoDirection the eye looks, degrees clockwise on the plan
nameNoFor `store`: the view's name (default "Ponto de vista N")
pitchNoDegrees down
actionNo`view`, `aerial`, `store` or `delete`
look_atNoFor `store`: point `[x,y,z]` cm to look at (sets yaw and pitch)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as destructive and not read-only, and the description reinforces this by exposing the 'delete {i}' operation. It adds valuable behavioral context beyond annotations: units (cm and degrees), coordinate conventions (yaw 0 toward +y, pitch positive down), and that missing store values come from the visitor. This is strong supplementary 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 description is dense and information-rich, with every clause contributing operational detail. It is somewhat run-on and mixes commands with coordinate conventions, but it remains compact and front-loads the core purpose before the details.

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 10 optional parameters, an output schema, and annotations, the description covers all necessary operational aspects: the four actions, parameter units, coordinate system, default behavior for missing values, and the sibling tool for listing. An agent has enough context to invoke the tool correctly across its main use cases.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: it explains the action subcommands, unit conventions, yaw/pitch orientation, and that look_at sets yaw and pitch. This helps an agent use the parameters correctly without guessing coordinate meanings.

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 clear verb and resource: 'Change the points of view' and enumerates the four concrete operations (view, aerial, store, delete). It also differentiates itself from the sibling 'cameras' tool by explicitly saying 'The list is the cameras tool.'

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: to show, store, or delete stored views, or return to orbit view. It explicitly points to the 'cameras' tool for listing views, which is a useful alternative. It does not exhaustively discuss exclusions versus other sibling tools, but the main routing is clear.

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

edit_disciplinesShow or hide disciplinesAInspect

Change what the plan shows. select {d: electrical|plumbing|architecture}: new symbols (catalog cat electrical/plumbing) and lines go there and the rest is dimmed; select architecture hides the electrical and plumbing projects (show brings one back); select a project shows it with the architecture dimmed. show/hide {d}, where d can also be a layer of the plan — lighting (lamps, spots, LED), appliances (fridge, stove, oven, hood, washer…) or joinery (cabinets, wardrobes, countertops): hidden from the plan, its exports and the 3D. The 3D follows the plan unless show_all_3d=true, which makes it show everything. Pieces are in a layer by what they are; update(layer=lighting|appliances|joinery|none) overrides it. What is shown now is the disciplines tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
dNo`electrical`, `plumbing` or `architecture`; for show/hide also a plan layer: `lighting`, `appliances` or `joinery`
actionNo`select`, `show` or `hide`
show_all_3dNoWhether the 3D shows everything (true) or hides what the plan hides (false). Applies with any action

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeNoDiscipline drawn on top: electrical, plumbing, or null
hiddenNoDisciplines hidden
layersNoPlan layers: {lighting, appliances, joinery} → {pieces, hidden}
lines_cmNoaction=quantities: drawn lines by discipline, cm
plumbingNoaction=quantities: [kind, count, names?]
electricalNoaction=quantities: [kind, count, names?]
show_all_3dNoEvery discipline shown in 3D

TDQS

A3.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses what gets dimmed or hidden, how exports and 3D are affected, and how show_all_3d modifies behavior. This is substantive context that goes beyond the structured annotation data.

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

Conciseness2/5

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

The description is a single dense, run-on paragraph mixing multiple actions and referencing 'update' in a confusing way. It lacks bullet points or clear separation of concepts, making it longer and harder to parse than necessary.

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 description covers behavioral effects well, but it introduces confusion with 'update' and does not address prerequisites or failure conditions. Since an output schema exists, return values need not be explained, but the applicability of the tool could be clearer.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds real value by explaining the practical effects of each d and action value, listing example items per layer, and detailing show_all_3d interactions—going beyond the schema's short parameter descriptions.

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

Purpose4/5

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

The opening 'Change what the plan shows' states a clear verb+resource, and the description elaborates on select/show/hide behaviors. It doesn't explicitly contrast with sibling tools like show_plan, but the core purpose is clear.

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

Usage Guidelines3/5

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

The description implies usage through examples (select architecture hides electrical/plumbing, show/hide layers) but gives no explicit guidance on when to prefer this tool over alternatives. The mention of 'update' as a layer override is not framed as a when-to-use comparison.

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

edit_electricalChange the electrical projectA
Destructive
Inspect

Change the electrical and telecom project (the electrical tool reads it: check, circuits, wifi). assign {ids, circuit, va?} — or the whole division at once, circuits {"C1": [ids], "C2": [ids]} — writes the circuits (and power, and volts 127|220 per point — a 220 V outlet makes its circuit 220 V) on points in one undoable step. voltage {volts?, short_ka?, earthing?: TN-S|TN-C-S|TT}. cable {kind: power|data|tv, pts} (with ids or circuit instead of pts, it is a route): draws a run of the electrical project, told apart on the plan (power solid, network dashed, TV dash-dot); check then reports cables_m, the length by kind with a tenth for the drops, and network or TV points no run reaches, or a telecom panel none reaches. route {kind: power|data|tv, ids? | circuit?, via?: ceiling|floor|wall|tape, cat?: cat5e|cat6|cat6a, from?}: lays the run the way it is built, along the walls and inside them (or in the slab), from the nearest panel of its kind to the points (all of the kind when none given), sharing the trunk, and draws it replacing the earlier run of the same circuit and the cables drawn by hand to its points (listed in replaced_drawn); replies {via, suggested, length_m {horizontal, vertical, total}, by_premise_m, bends, materials: [[item, qty, unit]]} — conduit, boxes, wire by conductor, cable, connectors. via=tape lays adhesive flat wiring tape (Eletrofitas) on the surface of walls and ceiling for power only: the model by the load and whether any point is a socket (sockets take the earthed EF18.9.18), refused over its rating or in a bathroom or outdoors, bought as Leroy Merlin kits by piece (codes, prices, splices) with tape {model, tracks, rated_a, load_a, earthed, pieces_m, splices, total_brl, notes}. Without via it takes the cheapest premise that can be built; a via that cannot reach a point (wall with a point out of every wall; ceiling with a low point out of every wall, nowhere to drop) is refused naming the points. wifi {ids, standard?, poe?, uplink?, bands?} writes those on the access points (wifi-point), in one undoable step. assign on automation points takes standby_w, on a dimmer max_w, on a panel modules.

ParametersJSON Schema
NameRequiredDescriptionDefault
vaNoPower per point, VA, instead of the norm's default
catNoFor `route` of data: `cat5e`, `cat6` (default) or `cat6a`
idsNoPoint ids for `assign`
poeNoFor `wifi`: whether `ids` are fed by their data cable (`PoE`)
ptsNoFor `cable`: the run's points `[[x,y], …]`, cm
viaNoFor `route`: where the run passes, `ceiling` (slab, dropping in the walls), `floor` or `wall`. Omitted: the cheapest that can be built
bandNoFor `wifi`: the band the suggestion aims at, `2.4`, `5` (default) or `6`
fromNoFor `route`: the panel it starts from; default the nearest of its kind
kindNoFor `cable`: what the run carries, `power`, `data` or `tv`
bandsNoFor `wifi`: the bands they radiate when fewer than their generation's, e.g. `2.4,5` for a dual-band Wi-Fi 7
max_wNoFor `assign` on a dimmer: the most lighting it takes, W
voltsNoSupply voltage, V; with `assign`, the points' own, 127 or 220
actionNo`assign`: put `ids` on `circuit` (empty takes them off), with `va` to set their power; `voltage`: the supply, 127 or 220 V; `cable`, `route` or `wifi`
uplinkNoFor `wifi`: the access points' wired uplink, Gbps (1, 2.5, 5, 10)
circuitNoCircuit name, e.g. `C3`
modulesNoFor `assign` on a distribution panel: the DIN modules it holds
circuitsNoFor `assign`: the whole division at once, `{"C1": [ids], "C2": [ids]}`, in one undoable step
earthingNoFor `voltage`: the earthing scheme, `TN-S`, `TN-C-S` or `TT`
short_kaNoFor `voltage`: the presumed short-circuit current at the delivery point, kA, as the utility informs it
standardNoFor `wifi`: the access points' standard, `wifi5`, `wifi6`, `wifi6e` or `wifi7`, written on `ids`
standby_wNoFor `assign` on automation points: standby consumption, W

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
idsNoIds created or touched
revNoPlan revision
runNoThe run: <system>:<circuit|all|ids>
viaNoWhere it runs: ceiling, floor, wall (or tape)
goneNoIds removed, or their count
tapeNovia=tape: the tape light system
textNoThe reply as written
addedNoIds added, or their count
bendsNoBends along the run
changedNo{id, from, to} per element changed; a count past 20
coverageNoaction=wifi: [room, band, median, worst, good, grade]
length_mNoMetres: {horizontal, vertical, total}
warningsNoData points past 90 m
materialsNoBill of materials: [item, quantity, unit]
suggestedNoRoute: the one the rules suggest; action=wifi: where access points would go
propertiesNoProject properties changed
annotationsNoAnnotation switches {from, to}
by_premise_mNoTotal metres by route: {ceiling, floor, wall}; a reason instead where one is impossible
access_pointsNoaction=wifi: [id, standard, bands, uplink]
replaced_drawnNoHand-drawn lines this run replaced

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses extensive behavioral details: writes circuits, draws cables, replaces earlier runs, refuses routes that cannot reach points, and lists refusal conditions (e.g., via=tape refused over rating, in bathrooms). It also describes side effects like replacing drawn cables and provides output details for route actions. These go far beyond the annotation and give the agent a precise model of what the tool will do.

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?

The description is a single dense wall of text covering six sub-actions with semicolon-separated clauses. It is not concise, and the lack of bullet points or clear sections makes it harder for an agent to scan. However, every sentence carries substantive information, so it is not redundant. Given the tool's complexity, a score of 3 reflects the poor structure relative to the potential for clearer organization.

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?

The description is remarkably complete for a tool of this complexity. It covers all sub-actions, their parameters, behavioral side effects, refusal conditions, and output descriptions for route. An output schema exists, so return values are already specified. Nothing essential for correct invocation appears missing, making this a complete reference for an agent.

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?

While the schema has 100% coverage with per-parameter descriptions, the description adds rich inter-parameter semantics: it explains how `circuit` and `circuits` relate, how `via` affects routing, how `pts` vs `ids`/`circuit` changes cable vs route behavior, and how `volts` interacts with `assign`. It also documents defaults (e.g., cat6 default, cheapest via when omitted) and conditions (e.g., sockets require earthed tape). This is far more than the schema provides, earning 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 opens with 'Change the electrical and telecom project', which is a specific verb + resource. It then details multiple sub-actions (assign, voltage, cable, route, wifi) that clearly distinguish this tool from siblings like edit_plumbing and edit_cameras. It also explicitly contrasts itself with the 'electrical' read tool, making its purpose and 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 Guidelines4/5

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

The description implies the tool is for writing while 'electrical' is for reading ('the electrical tool reads it'), providing a clear usage context. It does not, however, explicitly enumerate alternatives or state when not to use this tool (e.g., for plumbing or camera edits), which would earn a 5. The guidance is implicit rather than explicit, so a 4 is appropriate.

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

edit_levelsChange storeysA
Destructive
Inspect

Change the storeys. add {name?,h?,elev?} adds one on top (or at elev cm) and selects it; select {id}; delete {id} removes it and its content. update {id, elev?|h?|name?|reference?}: elev raises a storey with its walls, floors and openings (houses on stilts); reference=true marks it a tracing layer (imported plan, older version) that checks and ergonomics skip, which is what you want when two storeys share an elevation. Other tools act on the selected storey. The list is the levels tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoStorey height cm for `add` and `update`
idNoLevel id, e.g. `lv3`
elevNoFloor elevation cm for `add` and `update` (e.g. a house on stilts)
nameNoStorey name for `add` and `update`
actionNo`add`, `select`, `update` or `delete`
referenceNoMark the storey as a reference layer: a traced plan, a scan, an earlier version. Its content is drawing, not building, so layout checks and ergonomics leave it alone even when it sits at the same elevation as the storey being designed

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.3/5.0
Behavior4/5

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

Discloses side effects beyond the destructiveHint annotation: delete removes content, add selects the new storey, update with elev raises walls/floors/openings, and reference layers are skipped by checks and ergonomics. This adds meaningful behavioral context beyond the simple mutation flag.

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?

Compact and dense, front-loading the purpose and then covering each operation in a single line. The reference explanation is slightly verbose but directly useful. No filler or redundant phrasing.

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?

Covers all four actions and all six parameters, explains the selection side effect, and points to the levels tool for listing. With an output schema present, it provides sufficient context for correct invocation without needing to describe return values.

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?

Though the schema documents all parameters at 100%, the description adds action-dependent semantics: add takes name?/h?/elev? and selects; update takes id plus optional elev/h/name/reference with specific behaviors for each. This clarifies parameter combination per action, which the schema alone 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 the verb 'Change' and resource 'storeys', then enumerates four distinct operations (add, select, delete, update) with their parameter patterns. It explicitly differentiates from the sibling 'levels' tool by saying 'The list is the levels tool,' making the purpose unambiguous.

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 on selection: 'Other tools act on the selected storey.' Also explains when to use the reference flag: 'which is what you want when two storeys share an elevation.' Points to levels for listing. Does not explicitly exclude alternatives but gives situational guidance for the key decisions.

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

edit_plumbingLay a pipe runA
Destructive
Inspect

Lay a pipe run of the plumbing project (the plumbing tool reads it). route {kind: cold|hot|sewer|vent, ids?, via?: ceiling|floor|wall, from?, depth?}: lays the run from its source to the points along the walls and inside them, or through the ceiling or under the floor, sharing the trunk, draws it (replacing the earlier run of the same points and the lines drawn by hand to them, listed in replaced_drawn) and replies {via, suggested, length_m, by_premise_m, bends, branches, materials: [[item, qty, unit]]} — water: pipe and bars, 90° elbows, tees, threaded elbows at the points, a gate valve per room, adhesive; sewer: the branch at the largest diameter it takes, the drops at each point's own, a 45° Y junction at each branch (never a 90° tee), two 45° elbows per turn, sealing rings, trap boxes. Sewer runs only under the floor, by gravity, with 2 % fall up to 75 mm and 1 % above: the reply says needs_depth_cm, and with depth a run that does not fit is refused saying how much it needs. Without via the cheapest premise that can be built is taken; one that cannot (a point in no wall; from the ceiling a low point in no wall, nowhere to drop; sewer up to the ceiling or lying in a wall) is refused with why.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoFor `route`: the points; default every point of the kind
viaNoFor `route`: `ceiling`, `floor` or `wall`; omitted, the cheapest that can be built
fromNoFor `route`: the piece it starts from (a water meter, a valve, the heater, the inspection box or stack); default the nearest of its kind
kindNoFor `route`: what the run carries, `cold`, `hot` or `sewer`
depthNoFor `route` of sewer: the height free under the finished floor, cm (slab recess, or the ceiling void of the storey below)
actionNo`route`

Output Schema

ParametersJSON Schema
NameRequiredDescription
revYesPlan revision
runYesThe run: <system>:<circuit|all|ids>
viaYesWhere it runs: ceiling, floor, wall (or tape)
bendsYesBends along the run
notesNoWhat the rules say about the run
branchesNoBranches off the trunk
length_mYesMetres: {horizontal, vertical, total}
trunk_mmNoSewer: trunk diameter mm
materialsYesBill of materials: [item, quantity, unit]
slope_pctNoSewer: slope %
suggestedNoThe route the rules suggest
merged_intoNoThe run this one joined, or null
by_premise_mNoTotal metres by route: {ceiling, floor, wall}; a reason instead where one is impossible
needs_depth_cmNoSewer: depth it needs under the floor, cm
replaced_drawnNoHand-drawn lines this run replaced

TDQS

A4.6/5.0
Behavior5/5

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

The description fully discloses the destructive nature of the operation: it replaces the earlier run and lines drawn by hand, and it can refuse a run with a reason. It also details sewer behavior (gravity, fall percentages, depth requirements, refusal conditions) and the exact reply object, which goes well beyond the destructiveHint=true 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 and information-rich, with the core operation front-loaded and the sewer-specific rules appended after a clear transition. It is long, but nearly every clause adds a necessary constraint or output detail; only minor redundancy with the schema keeps it from 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 complex domain-specific tool, the description covers the route syntax, defaults, material lists, failure modes, and sewer constraints. The output schema exists, so the described reply format supplements it without needing to duplicate it. An agent has enough information to invoke route correctly and anticipate the consequences.

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 input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds meaningful interaction semantics: how 'via' selects the premise, how 'depth' affects sewer feasibility, how 'from' defaults to the nearest source, and how 'ids' default to every point of the kind. This is valuable but partly overlaps with the 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?

The description opens with 'Lay a pipe run of the plumbing project' and explains that this is the tool that creates the run, while the 'plumbing tool reads it'. The noun 'pipe run' and the verb 'lay' name a concrete resource and action, clearly distinguishing this from the sibling 'plumbing' and other edit 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 clear context on how route behaves, including when 'via' is omitted, what defaults apply, and when a run is refused. It explicitly contrasts with the 'plumbing' sibling by stating that the plumbing tool reads the result, implying edit_plumbing is used to modify or create it. It does not enumerate all alternative tools, but the guidance is sufficient for the main decision.

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

edit_variantsChange plan versionsA
Destructive
Inspect

Change the plan versions (tabs): duplicate {name?} copies the active one, new {name?} starts an empty one — both switch to it; switch {i}; rename {i,name}; delete {i}. Edits apply to the active version. The list is the variants tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
iNoVariant index for switch/rename/delete
nameNoName for duplicate/new/rename
actionNo`duplicate` (copy active), `new` (empty), `switch`, `rename` or `delete`

Output Schema

ParametersJSON Schema
NameRequiredDescription
iNoIndex of the new version
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already flag mutating/destructive behavior, and the description adds useful context: duplicate copies the active version, new starts an empty one, both switch to the new version, and edits apply to the active version. It doesn't mention irreversibility or authorization, but it discloses key side effects 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?

The description is a single dense, front-loaded sentence with no filler. Every clause conveys a distinct operation or behavioral note, and the action-parameter syntax is compact and scannable.

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

Completeness4/5

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

With an output schema, annotations, and full schema coverage, the description covers the critical remaining gaps: action semantics and routing to the variant list tool. The only minor ambiguity is conditional parameter requirements for each action, but the action patterns make these reasonably inferable.

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?

The schema has 100% coverage, but the description adds substantial semantic value by mapping each action to its parameter pattern: duplicate/new take optional names, switch/rename/delete target an index, and rename requires both i and name. It also clarifies the meaning of actions (copy vs. empty vs. switch) beyond the schema's terse parameter descriptions.

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

Purpose5/5

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

The description states a specific verb and resource ('Change the plan versions (tabs)') and enumerates the exact operations: duplicate, new, switch, rename, delete. It also distinguishes itself from the sibling 'variants' tool by explicitly naming it as the list tool.

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 routing guidance with 'The list is the variants tool', telling the agent to use the sibling for listing and this tool for changing versions. It doesn't spell out every alternative, but the operation list and resource scope make the intended context clear.

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

edit_videoChange or render the videoA
Destructive
Inspect

Change the video camera path, or render it. add {cam? | x?,y?,z?,yaw?,pitch?,fov?, i?} appends a keyframe (missing values from the visitor); delete {i}; clear; orbit {z?,n?} replaces the path with an aerial tour; set {fps?,speed?}; render {path .avi, w?,h?} writes a Motion-JPEG video. cm, degrees, m/s. The path itself is the video tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoVideo height, px
iNoKeyframe index (`delete`, or insert position for `add`)
nNoKeyframes for `orbit`
wNoVideo width, px
xNoKeyframe eye position on the plan, cm
yNoKeyframe eye position on the plan, cm (y grows down)
zNoKeyframe eye height, cm
camNoStored view index to add as keyframe
fovNoKeyframe horizontal field of view, degrees
fpsNoFrames per second of the rendered video
yawNoKeyframe direction, degrees clockwise on the plan
pathNoOutput `.avi` for `render`
pitchNoKeyframe tilt, degrees down
speedNoCamera speed m/s
actionNo`add`, `delete`, `clear`, `orbit`, `set` or `render`

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
idsNoIds created or touched
revNoPlan revision
secsNoaction=render: length in seconds
textNoThe reply as written
bytesNoaction=render: file size
framesNoaction=render: frames written

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as destructive and not read-only, and the description adds concrete behavioral details: delete removes a keyframe, clear removes the path, orbit replaces the path, and render writes a Motion-JPEG .avi file. It also documents units and visitor fallback behavior, adding value beyond the raw 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 description is densely packed and front-loaded with the tool's purpose, followed by a compact syntax summary. The final sentence 'The path itself is the video tool' is cryptic and could confuse rather than clarify, but overall there is little wasted text.

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

Completeness4/5

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

For a 15-parameter tool with no required parameters, the description covers all actions, parameter groupings, units, and the render output format. An output schema exists, so return-value explanation is unnecessary. Examples or a note on default behavior when no action is provided would strengthen it, but no critical semantic gap remains.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds a compact action-to-parameter language that the schema alone does not convey: add accepts cam or coordinate groups, delete takes i, orbit takes z/n, set takes fps/speed, and render takes path/w/h. It also supplies physical units (cm, degrees, m/s), which is essential semantic context.

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

Purpose5/5

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

The description states a specific verb and resource: 'Change the video camera path, or render it.' It then enumerates the exact operations (add, delete, clear, orbit, set, render), so an agent can clearly tell this is the video-path manipulation/rendering tool among camera and rendering 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?

The opening line gives clear context for when to use the tool: modifying the video camera path or rendering it. It does not explicitly name alternatives or exclusions (e.g., use edit_cameras for static camera edits), but the purpose is clear enough to route an agent correctly.

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

electricalCheck the electrical projectB
Read-only
Inspect

Electrical and telecom project, NBR 5410 and NBR 16264 (residential cabling). Points are the electrical pieces (catalog electrical: outlets, switches, lighting points, panel, network-outlet RJ45, tv-outlet, wifi-point, telecom-panel) plus every fixture that lights. check (default): {points:{kind:count}, findings:[[sev, place, msg, src, key, accepted?]], pending, orphaned, sources} — orphaned lists acceptances whose finding is gone (the accept tool marks findings looked at, and its prune drops those) — a ceiling lighting point per room, general-use outlets per room (kitchens and laundries one per 3.5 m of perimeter, bathrooms one by the basin, living rooms and bedrooms one per 5 m), RJ45 and TV outlets per room as NBR 16264 table 1 recommends (2 RJ45 and 1 TV in bedrooms, living rooms, offices, kitchens and laundries; 3 and 2 in a home theater; 1 and 1 elsewhere; a Wi-Fi point is not an RJ45 outlet), a power outlet by the telecom panel, a distribution and a telecom panel, points without a circuit, lighting and outlets sharing a circuit, a dedicated load not alone. circuits: rows [name, kinds, points, VA, V, A, wire mm², breaker A, DR] and main_breaker {a, phases, load_a_per_phase}: the supply to ask for, by Enel SP's categories on 127/220 V (single-phase up to 12 kW with no 220 V circuit, two-phase up to 20 kW, three-phase up to 75 kW) and the smallest of its fixed entry breakers (50, 63, 80, 100… A) — power by NBR 5410 (lighting per room by area: 100 VA up to 6 m² and 60 VA per whole 4 m² beyond, shared by its points; 600 VA for each of the first three outlets of a kitchen, laundry or bathroom, 100 VA after and elsewhere; dedicated points at their rated power, a shower 7500 W and air conditioning 1500 until written) unless set; the section is the smallest from 1.5 mm² (lighting) or 2.5 (with outlets) whose capacity, corrected for the circuits sharing its conduit on the laid-out runs (table 42, or grouping written on the project), admits a breaker between the current and it; DR on every point of a room with a bath or shower, on kitchen, laundry, service and garage points (lighting at 2.50 m or higher excepted) and on outdoor and balcony outlets; a shower over 4.4 kVA runs on 220 V. check also says lighting and outlets sharing a circuit only when NBR 5410 9.5.3.3 forbids it (over 16 A, or all lighting or all outlets on shared circuits), kitchen and laundry outlets sharing with anything else, equipment over 10 A not alone, and a voltage drop over 4 % to the farthest point of a laid-out run. circuits also gives panel {devices: [[device, count, DIN modules]], modules {used, capacity, capacity_written, spare}, dps, earthing, icn_ka, selective}: one-pole breakers for 127 V circuits and two-pole for 220 V between phases, a two-pole DR per circuit that needs one, the main breaker, the surge protector (DPS class II, a module per phase and neutral) and NBR 5410's spare ways (2 up to 6 circuits, 3 up to 12, 4 up to 30, 15 % above); capacity is the panel's modules (assign modules on it) or a guess from its size, and check says when it does not fit, when the main breaker is under twice the largest partial (selectivity) and when the short-circuit level was assumed. Automation (catalog smart-relay, smart-switch, dimmer, presence-sensor, smart-lock): each draws its standby on its circuit (assign standby_w; relay, dimmer and sensor 1 W, smart switch 1.2 by default, from manufacturers' sheets), circuits reports standby_w, and check asks a relay or smart switch for a neutral in its box, a dimmer for the room's lighting to fit its max_w (default 1.1 A at the supply voltage, some 140 W at 127 V) and pass 10 W, a ceiling sensor to be between 2.2 and 3 m (manufacturers install at about 2.4) and to see the room's far corner (about 1.45 × its height), a lock to sit on a door. wifi {ids?, standard?: wifi5|wifi6|wifi6e|wifi7, poe?, band?: 2.4|5|6}: writes the standard and PoE on access points (wifi-point) when given, and replies {access_points: [[id, standard, bands, uplink]], coverage: [[room, band, median dBm, worst dBm (9 places in 10), share at -67 dBm or better, grade]], suggested: {standard, band, points: [[x, y, z, room]], short: [rooms still under -67 dBm]}} — signal estimated from free-space loss, distance and each wall crossed by its material and thickness (a door or window where the path goes through one), per band; the suggestion is the fewest ceiling points (up to four) at room centres covering the rooms people use. check also asks each access point for its data cable, power (an outlet within 1.5 m or poe) and a cable category that carries its uplink (uplink up to 2.5 GbE: Cat 5e; 5 GbE: Cat 6; 10 GbE: Cat 6A). Circuit numbers are drawn next to the points on the plan, and with edit_annotations(legend=true) the load schedule under the legend. Changes — assign, voltage, cable, route, and the standard, PoE, uplink or bands of access points — are edit_electrical.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNoFor `wifi`: the band the suggestion aims at, `2.4`, `5` (default) or `6`
actionNo`check` (default): points by kind and what the norm finds; `circuits`: the load schedule and the panel; `wifi`: coverage and a suggestion

Output Schema

ParametersJSON Schema
NameRequiredDescription
revNoaction=wifi: plan revision
panelNoaction=circuits: the distribution panel
pointsNoPoints by kind
pendingNoFindings not accepted
sourcesNoStandards cited, by code: [title, tier, url]
cables_mNoCable metres: {power, data, tv}
circuitsNoaction=circuits: [name, kinds, points, VA, V, A, wire mm², breaker A, DR]
coverageNoaction=wifi: [room, band, median, worst, good, grade]
findingsNoRows [severity erro|alerta|dica, place, message, source, key, accepted reason?]
orphanedNoAcceptances whose finding is gone: [key, reason, successor key?]
total_vaNoaction=circuits: total load VA
standby_wNoaction=circuits: standby watts
suggestedNoaction=wifi: where access points would go
main_breakerNoaction=circuits: {a, phases, load_a_per_phase}
access_pointsNoaction=wifi: [id, standard, bands, uplink]

TDQS

B3.2/5.0
Behavior1/5

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

The description is unusually transparent about calculations, defaults, assumptions, and exceptions, but it also says 'wifi ... writes the standard and PoE on access points' while annotations declare `readOnlyHint: true`. Even though the final sentence routes changes to `edit_electrical`, the explicit 'writes' claim contradicts the read-only annotation.

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

Conciseness2/5

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

The content is dense and valuable, but it is one enormous unstructured paragraph of hundreds of words. It is front-loaded with scope, but an agent would struggle to scan the relevant action-specific details quickly.

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?

Covers outputs, defaults, norm references, exceptions, assumptions, and routing to `edit_electrical`, making it mostly complete for invoking the tool. The write/read-only contradiction and the undocumented wifi input fields keep it from being fully trustworthy.

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

Parameters2/5

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

The schema documents `action` and `band` at 100%, and the description adds useful defaults such as `check` for action and `5` for band. However, it introduces `wifi {ids?, standard?, poe?}` inputs that are absent from the schema, which has `additionalProperties: false`, so an agent cannot tell which values are actually accepted.

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?

Clearly states it checks the electrical/telecom project against NBR 5410 and NBR 16264, with three distinct actions (`check`, `circuits`, `wifi`). It differentiates itself by explicitly routing changes to `edit_electrical`.

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?

States that `check` is the default action and explicitly routes modifications to `edit_electrical`. It does not enumerate exclusions against every sibling check tool, but the scope and the edit-tool alternative are clear enough.

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

embedEmbed an appliance or sinkA
Destructive
Inspect

Embed an item into joinery with an exact fit: a sink bowl or cooktop into a countertop (cutout from the item's size, generic fixture not drawn), an oven, microwave or other appliance into a cabinet niche (doors above and below, boards around it), a TV onto a slatted panel at seated eye level (z = screen center). The item becomes part of the host and moves with it. item: id in the plan, or cat (+w/d/h) for a new one. Errors say what to change (e.g. use w = 61 no armário). Reply {host, item, kind, cutout|niche, x|bottom, notes}.

ParametersJSON Schema
NameRequiredDescriptionDefault
dNoDepth of a new item, cm
hNoHeight of a new item, cm
wNoWidth of a new item, cm (a real product's measurements)
zNoNiche floor above the room floor, cm (default: oven 80 and microwave 145 in towers)
atNoCenter along the host's width from its left end, cm (default: where the item is, or the middle)
catNo…or a new one from the catalog: `cooktop`, `sink-bowl`, `oven`, `microwave`
dryNoCheck and report only
hostYesJoinery countertop (sink, cooktop) or cabinet (oven, microwave: a niche)
itemNoPiece already in the plan to embed (id)…

Output Schema

ParametersJSON Schema
NameRequiredDescription
xNoCountertop or panel: center along it, cm
hostYesThe countertop or cabinet it went into
itemYesThe embedded piece (empty when dry)
kindYessink, cooktop, oven, microwave, …
nicheNoCabinet: the niche [w, h] cm
notesYesWhat the rules say about it
bottomNoBottom above the floor, cm
cutoutNoCountertop: the hole [w, d] cm

TDQS

A4.3/5.0
Behavior5/5

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

The description goes well beyond the destructiveHint annotation by explaining the actual behavior: the item becomes part of the host and moves with it, the sink/cooktop fixture is not drawn generically, and errors explain required corrections. This gives an agent a concrete model of side effects and failure-mode communication.

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

Conciseness4/5

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

The description is dense and front-loaded, covering purpose, variants, behavior, error handling, and expected reply structure in a compact paragraph. It contains a small amount of output-format redundancy since an output schema exists, but no sentence is wasted or 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 9-parameter tool with a rich output schema and full schema descriptions, the prose is nearly complete: it identifies hosts, item types, dimensional behavior, default z placement, and error style. Minor gaps remain only around explicit exclusions or further catalog item categories such as TV.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters in detail. The description adds a useful restatement of the item-vs-cat model and notes z defaults, but it does not substantively explain parameter meanings beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Embed') and resource ('an item into joinery'), then enumerates exact application scenarios: sink/cooktop into countertop, appliance into cabinet niche, TV onto slatted panel. This level of specificity distinguishes it clearly from sibling tools like place or move, which would not imply host integration.

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

Usage Guidelines4/5

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

The description gives clear contextual guidance: which tool scenario applies to countertops, cabinet niches, and slatted panels, and how to supply an existing item vs a new catalog item. It does not explicitly name alternatives or say when not to use the tool, but the intended usage is strongly implied and hard to confuse.

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

ergonomicsReview ergonomicsA
Read-only
Inspect

Ergonomics and habitability review for the people living there. It never blocks anything: it reads the drawing and says what it finds, and the drawing stays the user's — somebody sketching to learn or to see an idea is not stopped by a standard. People (occupants, children, elderly, wheelchair, stature cm, city, scope) given here weigh this review only; set_home(people=…) keeps them with the project, and every review and dry run then scores for them. It covers room to walk beside beds and in front of kitchen equipment, beds/seats/bathrooms/wardrobes per person, kitchen (work triangle, counter heights, Alexander's counter lengths, five work zones, sockets, gas ventilation, extraction), doors, ceiling heights, windows, minimum furniture, wheelchair turning. Reply {score, score_basis, scope, scores:{architecture,electrical,plumbing}, layout, coverage, capacity, findings:[{sev, place, msg, key, weight, discipline, in_scope, src?, fix?, accepted?}], sources:{src:[title, tier, url]}}. scope={electrical:false,plumbing:false} scores architecture only; all findings remain visible, excluded ones weigh zero. layout includes geometric checks on the active storey; coverage declares limits. Scores are heuristic, not project completion or certification. weight is what the score would gain if that one went away, so a score that moved can be read. src is the source the finding stands on, empty when it is common practice; resolve it in sources instead of asking. tier is the reliability ladder A obliges (Brazilian standard, municipal code) · B references (foreign standard) · C doctrine · D measured · E survey — and it is why a finding is an error or only a tip. fix, when present, is a checked change as tool arguments (move or update): apply one, then review again (fixes of one review may overlap). city, e.g. sao-paulo, lets the municipal code judge instead of only advising; against a standard the more restrictive one wins — set it once with set_home(city=…) so dry runs and check_layout weigh the same rules. key names the finding for the accept tool: a finding accepted there stays in the report with its reason and stops costing score, which is what lets a correct plan reach zero pendencies honestly. orphaned [[key, reason]] lists acceptances no current finding answers to — the problem was fixed, and would come back already silenced; accept(prune=true) drops them.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity whose building code applies for this call only, e.g. `sao-paulo`; `set_home(city=…)` keeps it with the project
scopeNoDisciplines included in the score. Architecture always counts; excluded findings remain visible
elderlyNoOf them, elderly people
statureNoHeight of the main cook, cm, to size the countertop (default 165)
childrenNoOf them, children (sleep in single beds or cribs)
occupantsNoPeople living in the home (default 2)
wheelchairNoSomeone uses a wheelchair: NBR 9050 turning space, doors and reach

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeNoDisciplines counted: {electrical, plumbing}
scoreYesHabitability score 0-100
layoutNoLayout issues of the storey, as check_layout gives them
scoresNoScore by discipline: {architecture, electrical, plumbing}
sourcesNoStandards cited, by code: [title, tier, url]
capacityNoWhat the home holds: beds, bedrooms, bathrooms, seats, wardrobe cm
coverageNoWhat was checked and what was not
findingsYes{sev, place, msg, key, weight, discipline, in_scope, src?, fix?, accepted?}
orphanedNoAcceptances whose finding is gone: [key, reason, successor key?]
score_basisNoWhat the score is: habitability_heuristic

TDQS

A4.3/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint: it explicitly says the tool never blocks anything, leaves the drawing with the user, only reports findings, and is heuristic rather than certification. It also discloses scoring mechanics, visibility of excluded findings, fix behavior, source tiers, and how accepted findings affect scores—outstanding 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 description is dense and long, but nearly every sentence carries unique operational information essential to correct use. It is front-loaded with purpose and non-blocking behavior, though the prose could be better structured with separators or bullets given the amount of content.

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 review tool with seven optional parameters and heavy integration with set_home, check_layout, and accept, the description covers the full workflow: what is reviewed, what the response contains, how scores are weighted, what findings mean, how fixes prunes and acceptances work, and limits of the review. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real value by explaining that people parameters are call-local unless persisted via set_home, how scope excludes disciplines while keeping findings visible, and how city selection affects which standard applies. This supplements the schema without overexplaining parameters already well documented.

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

Purpose4/5

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

The description clearly states the tool reviews ergonomics and habitability for occupants, with a specific, well-scoped resource. It is not merely a restatement of the title, but it does not explicitly name or differentiate itself from sibling tools like check_layout, so it falls short of full distinction.

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

Usage Guidelines4/5

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

The description gives rich context on when parameters should be set once via set_home, how scope narrows scoring, and how fixes and acceptances interact with future reviews. It does not explicitly state 'use this instead of X', but it conveys clear usage context and references sibling workflows like set_home and check_layout.

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

export_cut_listWrite the cut listA
Destructive
Inspect

Write the cut list of joinery builds (and of groups drawn by hand) to a file: path .csv (spreadsheet), .dxf (boards laid out on sheets, for CNC) or .svg (sheets to view). ids: builds or drawn groups (default every one on this storey). The cut_list tool reads it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoBuild or drawn group ids (default: every build and drawn group on this storey)
pathYes`.csv` (spreadsheet), `.dxf` (sheets for CNC) or `.svg` (sheets to view)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes[part, board, qty, length, width, thickness, edge, cutouts?]
drawnNoHand-drawn builds left out
sheetsNo.dxf/.svg: [board, sheets]
skippedNo[id, name] left out
sourcesYesStandards cited, by code: [title, tier, url]
hardwareYesHardware by build: "<id>: <item>"

TDQS

A4.1/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 safety profile is externally provided. The description adds useful behavioral detail about the default scope ('default every one on this storey') and output formats, but it does not disclose whether writing overwrites an existing file or other side effects. There is no contradiction with 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?

The description is compact and well-structured: it front-loads the primary action and resource, lists supported formats, then clarifies the ids parameter and the relationship to cut_list. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a tool with only two parameters, full schema documentation, an output schema, and annotations covering destructive/read-only hints, the description provides sufficient context: file formats, default ids scope, and the companion reader tool. No critical information needed to invoke the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description largely mirrors the schema for path and ids, adding only the context that ids refer to joinery builds and hand-drawn groups and that .dxf means 'boards laid out on sheets'. This is marginal added value beyond the schema.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Write the cut list of joinery builds (and of groups drawn by hand) to a file'. It enumerates the exact output formats (.csv, .dxf, .svg) and differentiates from the sibling reader tool by noting 'The cut_list tool reads it.' An agent can clearly tell this tool writes cut lists rather than reading or displaying them.

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

Usage Guidelines4/5

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

The description gives clear context: use this tool to write cut lists to fileshare, and mentions that cut_list reads the generated output. This distinguishes the tool from its most closely related sibling, but it does not explicitly state when not to use it or how it relates to other export tools like export_plan.

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

export_planExport the planA
Destructive
Inspect

Export to a file by extension: plan .pdf (A3; scale=50/100 or fit), .svg (true scale) or .png; 3D model .glb or .obj.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNo`.png` only: height px (default 1200)
wNo`.png` only: width px (default 1600)
pathYesOutput file: `.pdf`, `.svg`, `.png`, `.glb` or `.obj`
scaleNoPDF scale denominator (50 → 1:50); omitted fits the sheet

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true, so the description must disclose the destructive nature. It does, by stating 'Export to a file' – implying file creation/overwrite without explicit confirmation. It adds context about format-specific behaviors: `.pdf` has scale options, `.png` supports width/height, others are true scale. This goes beyond the annotations, giving the agent safety-critical details about side effects. No contradiction with annotations; the description reinforces the destructive hint by implying file system changes.

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

Conciseness5/5

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

The description is a single, compact sentence that packs all essential information: formats, key options, and scale behavior. It is front-loaded with the primary action and quickly covers format-specific details, with no wasted words. Every clause earns its place, providing high information density.

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

Completeness4/5

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

Given the tool's complexity (multiple formats, scale options) and the output schema, the description covers the main usage patterns. It does not explain return values, but the output schema exists, so that is not required. It lacks details on how the export path is used, but the schema covers that. Slight gap: it doesn't mention error conditions (e.g., missing extensions) but the format guidance mitigates that. Overall, it is complete enough for typical use.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are fully documented in the schema, giving a baseline of 3. The description adds value by explaining format-dependent behavior: for `.pdf`, it specifies scale options and fitting; for `.png`, it mentions dimensions; and it clarifies that `.svg` is true scale. This enhances understanding beyond the schema, justifying a 4.

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 ('Export') and clearly states the resource and key behavior: exporting to various file formats determined by the file extension. It lists the formats (`.pdf`, `.svg`, `.png`, `.glb`, `.obj`), making the purpose unmistakable. It also differentiates from siblings like 'export_cut_list' and 'render_plan' by specifying what it exports (the plan) and the output formats.

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

Usage Guidelines4/5

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

The description implies usage: 'Export to a file by extension' indicates the decision is based on the file extension, which is a clear contextual rule. It does not explicitly mention when not to use it or name alternatives like 'render_plan' for image rendering, but it provides enough context for an agent to infer when this tool is appropriate. The omission of explicit exclusions keeps the score below 5, but the guidance is clear.

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

feedbackReport to the developersAInspect

Report to the developers what a tool could do better, as it happens: a reply that answered less than was asked, a detour, a wrong conclusion reached before the right one, a fix that would distort the plan, something missing. It is a report the fix will be made from, so give the whole case — a vague note gets fixed in a way that breaks what already works. Every part is required: goal (the task and the situation: pieces, rooms, numbers), tried (the exact call with arguments), got (the literal reply), expected (what was true and how you found out), cost (the workaround, extra calls, wrong conclusion), would_help (the concrete change), must_keep (what works today and must not get worse with that change; "none known" is an answer). kind friction|bug|idea, tool. Kept on this machine and, while the user's telemetry is on, sent to the project. Reply {kept, sent}; then carry on with the task.

ParametersJSON Schema
NameRequiredDescriptionDefault
gotNoWhat came back, literally — the part of the reply that is the proof
costNoWhat it cost: the workaround, the extra calls, the wrong conclusion reached before the right one, the distortion made to the plan
goalNoWhat you were trying to do, and the situation in the plan: the pieces, rooms and numbers involved
kindNo`friction` (it worked, at a cost), `bug` (it answered wrong) or `idea` (something missing)
toolNoThe tool it is about, e.g. `measure`
triedNoThe exact call, with its arguments
expectedNoWhat was true instead, and how you found out (another tool, a render, a probe) — the reference the fix will be checked against
must_keepNoWhat works today and must keep working with that change — the cases where the current behaviour is right. "none known" is an answer
would_helpNoThe change that would have shortened the way, as concretely as you can: a field, a parameter, a rule

Output Schema

ParametersJSON Schema
NameRequiredDescription
keptYesWhere the report was written
sentYesWhether it reached the developers

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the open/read-only/destructive hints, it discloses non-obvious behavior: the report 'is kept on this machine and, while the user's telemetry is on, sent to the project', the reply is '{kept, sent}', and the agent should 'then carry on with the task'. It also warns that vague notes may get fixed in harmful ways.

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 prose is dense and uses labels rather than headings, which makes it harder to scan, but nearly every clause carries load-bearing guidance. It is appropriately sized for a 9-parameter feedback report and leads with the tool's purpose before diving into field obligations.

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 output schema and full parameter coverage, the description covers the goal, trigger, all seven required content sections, kind values, target tool, persistence/telemetry, response shape, and post-call behavior. 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 100%, giving a baseline of 3, but the description adds substantial meaning by defining each required section ('tried' = 'the exact call with arguments', 'expected' = what was true and how you found out) and even supplies valid values and the 'none known' escape for must_keep. This goes well beyond the schema.

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

Purpose5/5

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

The description states a specific action and object: 'Report to the developers what a tool could do better'. The list of triggers and the required sections make the tool's role unmistakable, and none of the sibling tools claim this reporting function.

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 says when to file feedback ('as it happens: a reply that answered less than was asked, a detour, a wrong conclusion...'), so an agent can recognize the right moment. It does not explicitly name sibling alternatives or say when not to use it, but no sibling offers a similar reporting channel, so that omission is minor.

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

fill_lightingFill a room with lightAInspect

Fill a room with a grid of one fixture (downlight, led-panel, light-ceiling, pendant) until the work plane reaches the room's ABNT NBR ISO/CIE 8995-1 reference, or lux; the grid is checked by the same photometry as the lighting tool. Reply placed ids, and the room's rating before and after.

ParametersJSON Schema
NameRequiredDescriptionDefault
luxNoLux wanted instead of the room's reference
roomYesRoom id
planeNoWork plane height cm (default 75)
fixtureYesThe fixture to place in a grid: `downlight`, `led-panel`, `light-ceiling`, `pendant`

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoWhy nothing was placed
afterNo[id, name, m², average lx, minimum lx, uniformity, reference lx, fixtures, W/m², verdict]
beforeYes[id, name, m², average lx, minimum lx, uniformity, reference lx, fixtures, W/m², verdict]
placedYesFixtures placed

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses important behavior beyond the annotations: it places a grid of fixtures, evaluates the result using the same photometry as the lighting tool, and returns placed ids plus before/after ratings. It does not mention whether existing fixtures are removed or replaced, but the additive nature of 'fill' combined with destructiveHint=false gives adequate clarity.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the action, target, fixture types, validation method, and output in two sentences. Every sentence adds meaningful information, and there is no redundant repetition of the title or schema.

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

Completeness5/5

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

Given the tool's moderate complexity, full schema coverage, and existing output schema, the description provides enough information to call the tool correctly. It explains the operation's scope, the photometry consistency, and the return content, leaving no critical ambiguity for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds useful context about the 'lux' parameter overriding the room's reference and the work plane concept, but it does not substantially enrich parameter semantics beyond what the schema provides.

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

Purpose5/5

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

The description clearly states a specific action ('fill a room with a grid of one fixture'), the exact fixture types allowed, and the goal (reaching the room's lighting reference or a specified lux value). It also distinguishes itself from the sibling 'lighting' tool by mentioning the same photometry check, making its purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when a room needs to be automatically filled with a grid of fixtures to meet a lighting target. However, it does not explicitly state when not to use it or which alternative (e.g., 'lighting' or 'place') should be chosen for manual or partial lighting setups.

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

fit_roofFit walls to the roofA
Destructive
Inspect

Fit walls, glass and panels to the roof above them: under an A-frame or shed roof a wall gets a sloping top and is split at the ridge, a panel becomes a triangle or trapezoid (a glass gable with no math); a joinery slatted panel gets its slats cut to the roof line. They keep following the roof when it changes, in the same undo step; off stops that. Reply ok with the count.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesWalls and pieces (glass, panels) to fit
offNoStop following the roof (heights stay as they are)
aboveNoLowest sloping surface that counts, cm above the floor (default 5)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written
fittedNoPanels fitted under the roof

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, but the description adds critical behavior beyond that: shapes are modified in specific ways, elements continue to follow roof changes in the same undo step, and 'off' stops that behavior. This explains the persistence and undo semantics that raw annotations don't convey. 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 description is front-loaded with the core purpose and then gives examples and behavior. It is somewhat dense, with parentheticals and semicolons, but each clause adds a distinct fact. It could be trimmed slightly without losing meaning, so a 4.

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

Completeness4/5

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

For a mutation tool with an output schema present, the description covers the main effects, dynamic roof-following, undo, and off behavior. It omits prerequisites such as requiring a roof above or a note on unsupported roof types, but these are not critical given the schema and annotations. Overall adequate.

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

Parameters3/5

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

Input schema has 100% field descriptions, so the baseline is 3. The description echoes 'walls, glass and panels' and adds 'joinery slatted panel' as a specific id type, but it does not add meaningful detail about 'ids', 'off', or 'above' beyond the schema. It neither elevates nor degrades parameter understanding.

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 an explicit verb and resource: 'Fit walls, glass and panels to the roof above them'. It then details concrete transformations (sloping top, split at ridge, triangle/trapezoid, slats cut), making the primary purpose unmistakable. It does not explicitly contrast with siblings like split_wall or merge_walls, but the purpose is clear without that.

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

Usage Guidelines3/5

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

The description implies when to use the tool – when walls/panels should conform to a roof – but does not state exclusions or direct the agent to alternative tools for non-roof modifications. It contains no explicit 'when not' or sibling references, leaving usage guidance less explicit than it could be.

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

get_homeRead the homeA
Read-only
Inspect

Home state. detail=summary is cheapest. Ask for less instead of reading everything: ids=[…] resolves ids (group parts included), room=<id|name> and rect=[[x0,y0],[x1,y1]] read one place, kinds=[walls|rooms|dims|labels|furniture|polylines] and fields=[…] trim each row, parts=true opens groups, ndjson=true prints one element per line so a long answer can be read a slice at a time. Every piece carries bounds (plan box with angle applied) and faces (the side it opens toward). Ids share one counter per version (w1, r2, f3…) and are never reused, so a new version may start at any number.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly these ids, group parts included, e.g. `["f833","w24"]`
rectNoOnly what meets this rectangle, `[[x0,y0],[x1,y1]]` cm
roomNoOnly what stands inside this room, by id or name
kindsNoOnly these kinds: `walls`, `rooms`, `dims`, `labels`, `furniture`, `polylines`
levelNoStorey to read: an id like `lv3`, or `all`. Default: the one shown
partsNoList what is inside groups instead of only counting the parts
detailNo`summary` (counts, bounds, room areas) or `full` (default)
fieldsNoKeep only these fields of each element; `id` is always kept
ndjsonNoOne element per line (NDJSON) instead of one JSON object, each line tagged with its kind. Long answers stay readable a slice at a time

Output Schema

ParametersJSON Schema
NameRequiredDescription
revNoPlan revision
dimsNoDimensions: {id, a, b, len, off?}
nameNoProject name
linesNondjson=true: the head, then one element per line
northNoDegrees from plan up to north, when set
partsNoNote when parts=true found no groups
roomsNoRooms: {id, name, pts, m2, …}; with detail=summary, rows [id, name, m²]
wallsNoWalls: {id, a, b, t?, h?, arc?, type?, sides?|left?, right?}
boundsNodetail=summary: [[minx,miny],[maxx,maxy]] cm
countsNodetail=summary: how many of each kind
labelsNoLabels: {id, text, at, …}
levelsNoStoreys: [id, name, elevation, height, selected, index, viewable, reference]
warningsNoWhat the read could not do as asked
furnitureNoPieces: {id, cat, at, bounds, faces, wdh?, angle?, elev?, name?, …}
polylinesNoFree lines: {id, pts, t, color, …}
backgroundNoThe scanned plan under the drawing

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses rich behavioral details: detail=summary is cheapest, ids resolve group parts, room/rect read one place, kinds/fields trim rows, parts opens groups, ndjson prints line-delimited output, and every element carries bounds and faces. It also explains id counter semantics across versions. 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 description is dense but efficient; every clause adds practical guidance. It's a single run-on paragraph rather than structured bullets, which slightly hurts scannability, but it front-loads the most important tip ('detail=summary is cheapest') and wastes no words.

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

Completeness5/5

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

With a read-only annotation, an output schema, and 100% schema coverage, the description adds the missing semantic context: id reuse rules, bounds/faces on every piece, and how to request smaller responses. Nothing needed to call the tool correctly is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds significant meaning on top of the schema: it explains the cost model (summary is cheapest), the effect of combining filters (room/rect read one place), and how parts and ndjson alter the result shape. This goes beyond the field descriptions.

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

Purpose4/5

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

The description opens with 'Home state' and uses the verb 'read' throughout, making it clear this is a read operation for home data. It is distinguishable from siblings like show_plan or open_home by the emphasis on fetching state rather than rendering or loading, but it never names an alternative 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?

The description implies usage: call it when you need home state, and the parameter tips ('Ask for less instead of reading everything') provide operational guidance. However, it doesn't state when to prefer this over sibling tools like show_plan or get variants, nor does it give exclusions.

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

joineryBuild joineryA
Destructive
Inspect

Parametric joinery and interiors; the server computes every board, clearance and rule and replies {id,name,size,parts,hardware,notes}. What a workshop would say — a board nobody stocks, a shelf that will sag, a drawer front too short to grip, a niche shallower than the cooktop standard wants — comes back in notes and is built anyway: the rules advise, they never refuse. Only what has no geometry at all fails, and says why. kind + p: cabinet {w,h,d cm; t 15|18|25 mm; back mm; door hinged|sliding|drawers|none; doors; shelves; drawers; dividers; plinth; cooktop; top_cutout [x,y,w,d] cm from cabinet left-back; color; front finish} · slats {w,h cm; slat, thickness, gap mm; orientation vertical|horizontal; backing; finish} · countertop {length,depth,height,thickness cm; material; support none|legs|brackets; cutouts [{kind sink|cooktop|grommet, x, w?, d?}]} · cove {room or pts; type open|closed|inverted; ceiling, width, drop, slot cm; led} · shadow_gap {room or pts; ceiling, gap, depth cm; led} · sofa {length,depth,seat,back cm; arms straight|rounded|none; modules; color}. Place with at|wall(+along), angle, elev. Change a build: id + p with only new values (e.g. {"shelves":3}); a new size keeps its back where it was (anchor back|front|left|right|bottom|top|+x|-x|+y|-y|center). dry=true validates only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoParameters (flat; everything has a default), see the tool description
atNoCenter on the plan (default: 0,0), or `wall` (+`along` cm) to back it onto a wall
idNoOr an existing build's group id: `p` holds only what changes
dryNoOnly check and report, create nothing
elevNoBottom above the floor, cm (wall cabinets)
kindNoNew build: `cabinet`, `slats`, `countertop`, `cove`, `shadow_gap` or `sofa`
roomNo`cove`/`shadow_gap`: room id whose outline to follow
wallNoWall to back it onto, instead of `at`
alongNoWith `wall`: center along it, cm from its start (default: the middle)
angleNoClockwise degrees
anchorNoChanging a build's size: the face that stays where it is — `back` (default: joinery stands against a wall), `front`, `left`, `right`, `bottom`, `top` or a plan side `+x` `-x` `+y` `-y`; `center` grows around the middle

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe build's group id (empty when dry)
nameYesIts name
sizeYes[w, d, h] cm
notesYesWhat a workshop would say about it
partsYesParts it is made of
hardwareYesHardware it needs

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses important behavioral traits: rules 'advise, they never refuse,' only geometry-less builds fail and say why, updates keep the back anchored by default, and dry=true validates only. This adds real context beyond the annotations and contains no contradiction.

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

Conciseness5/5

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

The description is dense but extremely efficient: the syntax section packs six build kinds with units and options into a compact notation, and the workshop-advice prose is a useful behavioral note, not padding. Output shape and behavior are front-loaded before the parameter grammar.

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?

All 11 top-level parameters are covered by schema or description, the p object is fully specified per kind, placement and update anchors are documented, dry mode is explained, and the return shape is explicitly stated. With an output schema present, nothing essential is missing for correct invocation.

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

Parameters5/5

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

Although schema description coverage is 100%, the description carries the entire meaning of the nested p object, enumerating per-kind fields, units (cm, mm), defaults, enums like t 15|18|25 and door hinged|sliding|drawers|none, plus update/anchor semantics. This goes far beyond the structural schema.

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

Purpose5/5

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

The description states a specific verb ('build') and resource ('joinery'), then enumerates six concrete build kinds: cabinet, slats, countertop, cove, shadow_gap, and sofa. It also specifies the returned shape ({id,name,size,parts,hardware,notes}), making it easy to distinguish from generic siblings like create or place.

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

Usage Guidelines4/5

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

The description gives explicit usage patterns: new builds with kind + p, placement with at or wall(+along), angle, elev, updates with id + p, and validation with dry=true. It does not explicitly name alternatives or state when not to use it, so it does not reach a 5, but the context is clear.

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

levelsList storeysA
Read-only
Inspect

Storeys: rows [id,name,elev,h,selected,layout_index,viewable,reference]. Other tools act on the selected storey; change them with edit_levels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYesStoreys: [id, name, elevation, height, selected, index, viewable, reference]

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 openWorldHint=falsearke; the description adds useful behavioral context by exposing the exact row schema and the concept of a selected storey that other tools depend on. There is no contradiction.

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

Conciseness5/5

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

The description is a single dense sentence that leads with the core output format and then provides the one essential behavioral note about selection and editing. No wasted words.

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

Completeness5/5

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

For a zero-parameter listing tool with an output schema and read-only annotations, the description is fully sufficient: it names the fields, explains selection relevance, and points to the editing sibling.

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

Parameters4/5

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

The tool has zero parameters)Skip, so there is little to explain. The description adds value by enumerating the returned columns, which is more meaningful than the empty input schema alone.

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

Purpose5/5

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

The description clearly defines the tool's output as storey rows with specific fields, and the title 'List storeys' reinforces the listing purpose. It also distinguishes this from edit_levels by noting that other tools act on the selected storey.

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 that this tool returns storey rows and that edits should go through edit_levels, naming the appropriate sibling alternative. However, it does not explicitly state conditions like 'when you need to see available storeys' or exclude non-list use cases.

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

lightingRate the lightingA
Read-only
Inspect

Lighting design by photometry: every fixture's flux (lm, or W × lamp efficacy), color temperature and distribution (bulb, spot beam, LED panel/strip) lights the work plane by the inverse-square cosine law, walls casting shadows, plus interreflection (split flux). Reply rooms [[id,name,m²,avg lx,min lx,uniformity,reference lx,fixtures,W/m²,verdict]] against ABNT NBR ISO/CIE 8995-1 residential references. fill_lighting places the fixtures a room needs. Set a piece's light with place/update light {lm|w,lamp,k,beam,area}.

ParametersJSON Schema
NameRequiredDescriptionDefault
roomNoRoom id (default: every room of the current storey)
planeNoWork plane height cm (default 75)

Output Schema

ParametersJSON Schema
NameRequiredDescription
WYesTotal watts
lmYesTotal lumens
roomsYes[id, name, m², average lx, minimum lx, uniformity, reference lx, fixtures, W/m², verdict]
sourcesYesStandards cited, by code: [title, tier, url]
fixturesYesLight fixtures in the plan

TDQS

A4.4/5.0
Behavior5/5

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

ReadOnlyHint is true and the description is consistent with that, adding no contradiction. It goes beyond the annotation by disclosing the computation model (inverse-square cosine law, wall shadows, interreflection/split flux) and the standard compared against (ABNT NBR ISO/CIE 8995-1), which tells an agent exactly what to expect from the result.

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 every clause carries relevant information: the physical model, the output format, the reference standard, and the sibling-tool routing. Some jargon (inverse-square cosine, split flux) may be opaque, but it is purposefully concise and not padded.

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

Completeness5/5

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

For a read-only analysis tool with optional parameters, full schema coverage, and an output schema, the description supplies the remaining context an agent needs: what physics is simulated, what metrics are reported, what standard is referenced, and which sibling tools to use instead. Nothing essential 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 100%: both parameters (room id and work plane height) are already described in the input schema. The description mentions work plane and rooms but adds no new semantic meaning or usage details beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies this as a lighting evaluation/rating tool: it computes photometric metrics per room and replies with a structured verdict against a reference standard. It distinguishes itself from siblings by describing what fill_lighting does (places fixtures) and where to set a piece's light (place/update light), so an agent can tell them apart.

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

Usage Guidelines4/5

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

The description routes the agent away from this tool when the goal is placing fixtures ('fill_lighting places the fixtures a room needs') or setting a single piece's light ('Set a piece's light with place/update light'). It does not explicitly say 'use this when you need to rate lighting,' but the title and output description make that context clear.

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

materialsList wall types and finishesA
Read-only
Inspect

Wall types [id,name,t] (drywall, masonry, concrete…) and finish patterns [key,label,color,tile].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
patternsYes[key, label, #rrggbb, tile WxH cm]
wall_typesYes[id, name, thickness cm]

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety and world-model aspects. The description adds the structure of the returned data (wall types vs finish patterns), providing some value beyond annotations. It does not describe pagination, filtering, or any side effects, but for a simple list tool this is minor.

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 concise, a single sentence with no filler. The bracket notation is compact, but the unexplained 't' in '[id,name,t]' and the ambiguous 'tile' in finish patterns reduce clarity slightly. Still, every word earns its place.

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

Completeness4/5

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

For a parameterless, read-only list tool with an output schema present, the description is sufficient. It identifies the two main categories an agent would receive. The cryptic tuple field names are not ideal but are recoverable from the output schema, so the completeness gap is small.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics to explain. The baseline for 0-param tools is 4, and the description correctly avoids inventing parameter guidance. The schema coverage is trivially 100% because the schema is empty.

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 the resource (wall types and finish patterns) and the content of the listing. The title reinforces the list action. It does not explicitly differentiate from siblings like 'catalog', but the material-specific context makes it clear enough.

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 tool's purpose implies when to use it (when wall types or finish patterns are needed), but there is no explicit guidance about alternatives or when not to use it. Given the parameterless, query-like nature of the tool, the lack of exclusions is acceptable but still leaves the agent inferring usage from context.

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

measureMeasure the planA
Read-only
Inspect

Tape measure over the plan, in cm. from= alone: free floor on all four sides, {clear:{"+y":[cm,id,name]}} — dirs picks sides (+x -x +y -y, or front/back/left/right of the piece). from+to (ids or [x,y]): the distance between them, {cm}, or the gap along axis. axis+at: what a straight probe runs into, {spans:[[from,to,id,name]]} with id null for free floor — the answer to "how wide is the corridor here, and between what". Add gap= and grow= and it also answers how big that piece can be along the axis before the gap is broken, and what stops it there: {fit:{free,max,blocked_by}} — the question a layout decision actually ends in, without trying a size and undoing it. z limits the height band that counts (default 0-200).

ParametersJSON Schema
NameRequiredDescriptionDefault
zNoHeight band that counts, `[z0, z1]` cm above this storey's floor. Default `[0, 200]`: what a person walking through meets
atNoProbe line: with `axis`, the other axis' coordinate. Reports every stretch a straight line crosses, free floor and solids alike
toNoWhat to measure to: an id or `[x,y]`
gapNoWith a probe: how much free floor has to be left along it, cm
axisNoRestrict to one axis, `x` or `y`. Between two boxes this is the gap along that axis (negative when they overlap)
dirsNoSides to measure free floor on: `+x`, `-x`, `+y`, `-y`, or, relative to the piece, `front`, `back`, `left`, `right`
fromNoWhat to measure from: an id or `[x,y]`. Alone, reports the free floor on all four sides of that piece. Openings instead report wall-axis spans, distances to wall ends and neighboring openings; no floor clearances
growNoWith a probe and `gap`: the piece that would grow. The answer says how big it can be along the axis and what stops it there
rangeNoLimits of the probe along `axis`, `[from, to]` cm. Default: the plan

Output Schema

ParametersJSON Schema
NameRequiredDescription
xNoGap along x, cm
yNoGap along y, cm
cmNoDistance, cm
idNoThe element measured
fitNoProbe with gap: {free, max, blocked_by}
axisNoAxis measured along
clearNoFree floor by side: [cm, against id, name]
facesNoSide its front looks to
spansNoProbe: [from, to, id, name] along the axis
boundsNoThe piece's [[minx,miny],[maxx,maxy]] cm
openingNoA door or window: {basis, hosts}

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark the tool read-only; the description adds useful behavioral detail about result shapes ({clear}, {spans}, {fit}), what counts as free floor, and the default z height band. It does not contradict the annotations and goes beyond what they 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 description is dense and telegraphic, yet every clause carries information about a mode or result. The single-paragraph structure and compact pseudo-JSON examples reduce scannability, but there is no filler and the core purpose is front-loaded.

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 9-parameter, multi-mode measurement tool with an output schema, the description covers the main invocation intents and their result semantics well enough for correct use. It is slightly less complete on error/edge cases like combining mutually exclusive modes, but the schema and optional parameters mitigate that.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real combination semantics: dirs picks sides, gap+grow produces a fit answer, axis+at returns spans, and z bounds the analyzed height band. It does not mention the range parameter, but the schema fully documents that parameter.

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 'Tape measure over the plan, in cm' plus the enumerated modes (from-alone free floor, from+to distance, axis+at probe spans, gap+grow fit) makes the tool's purpose concrete and distinguishable from sibling design/editing tools. It does not explicitly name a sibling it is not, 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 Guidelines4/5

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

The description gives explicit mode-selection conditions: 'from=<id> alone', 'from+to', 'axis+at', and 'Add gap and grow', which tells an agent which parameter combination is appropriate for which measurement intent. It does not name alternatives or state when not to use the tool, so it misses the top of the scale.

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

merge_wallsMerge wallsA
Destructive
Inspect

Join walls that run along the same line into a single wall: the wall a partition interrupted, a stretch imported as many segments, the same wall drawn twice. The longest one keeps its id and its build (thickness, height, type, finishes) and spans them all; the others are deleted, doors and windows stay where they are, and a gap between them is closed. Straight walls on one storey whose centerlines run inside one another; the reply names the id that remains.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesThe walls to join, in order along the line they make

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.3/5.0
Behavior5/5

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

With destructiveHint=true already indicating destructive behavior, the description goes further: the longest wall keeps its id and build, the others are deleted, doors and windows stay, gaps close, and the reply names the remaining id. This adds substantial behavioral context beyond the annotation and accurately aligns with the destructive hint.

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 main purpose and then covers side effects efficiently. The last sentence ('Straight walls on one storey whose centerlines run inside one another; the reply names the id that remains.') is slightly clunky and could be integrated into the main clause, but every sentence contributes meaningful 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?

For a destructive, single-parameter tool, the description covers the operation, side effects on walls and openings, gap behavior, and output essence. Since an output schema exists (per context), the description need not detail the return structure. It is complete enough for correct invocation, though it could briefly mention error cases (e.g., non-collinear walls).

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

Parameters3/5

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

The schema description for 'ids' already states 'in order along the line they make,' giving 100% coverage. The tool description reiterates the order implicitly but adds no new parameter-specific semantics beyond the schema. Baseline 3 is appropriate here.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Join walls that run along the same line into a single wall') and immediately gives concrete scenarios (partition interruption, imported segments, drawn twice) that distinguish it from related tools like split_wall and delete. This is not a tautology; it tells an agent exactly what the tool accomplishes.

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

Usage Guidelines4/5

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

The description provides clear contexts for use ('the wall a partition interrupted, a stretch imported as many segments...') and imposes a condition ('Straight walls on one storey whose centerlines run inside one another'). However, it does not explicitly mention the alternative split_wall or state when merging should not be used, so it falls short of fully explicit when/when-not guidance.

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

moveMove elementsA
Destructive
Inspect

Move elements by dx,dy cm, or to=[x,y]: the first id (a piece or a label) goes there and the rest keep their offsets. dry=true answers what it would do without writing anything, dry="summary" answers it short; see update.

ParametersJSON Schema
NameRequiredDescriptionDefault
dxNoShift in x, cm (with `dy`)
dyNoShift in y, cm (with `dx`)
toNoInstead of dx/dy: where the first id goes, [x,y] as reads give it (a piece's or a label's center); the others keep their offsets
dryNoTry it without applying; see `update`
idsYesThe elements to move together
joinedNoDrag endpoints of walls joined to moved walls (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
dryNoNothing was written
idsNoIds created or touched
revNoPlan revision
goneNoIds removed, or their count
textNoThe reply as written
addedNoIds added, or their count
scoreNoScore [before, after]
changedNo{id, from, to} per element changed; a count past 20
resolvedNoFindings settled
clearancesNoFree floor around touched pieces, by id
issues_newNoLayout issues created
propertiesNoProject properties changed
added_countNoRoots added
annotationsNoAnnotation switches {from, to}
score_scopeNoDisciplines scored
new_findingsNoFindings created
changed_countNoRoots changed
issues_changedNoLayout issues resized
issues_resolvedNoLayout issues settled
findings_changedNoFindings changed
acceptance_cleanupNoAcceptances orphaned, and the calls that clear them

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, so mutation is known. The description adds value by explaining the dry run mechanism (true vs 'summary') and that it writes only when not dry, which is beyond what annotations provide. 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 description is concise, a single sentence that front-loads the core action and parameter modes, then mentions dry run and a reference to 'update'. No unnecessary fluff; it earns its length. Could slightly improve by separating dry run into a clearer clause, but overall efficient.

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 an output schema present, the return format is covered elsewhere. The description covers the main behavior, dry run semantics, and parameter relationships, which is sufficient for an agent to call the tool correctly. It does not cover edge cases like 'joined' but that is in the schema.

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

Parameters4/5

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

Schema description coverage is 100%, so all parameters are documented. The description adds semantics by clarifying the relationship between dx/dy and 'to' (alternatives), the behavior of 'ids' (first moves, rest keep offsets), and the meaning of dry run values, enhancing understanding beyond the raw schema.

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

Purpose5/5

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

The description clearly states the tool moves elements, specifying two modes (dx/dy and to), and clarifies that the first id goes to the destination while others keep offsets. This distinguishes it from siblings like 'place' and 'arrange' by explicitly naming the operation and its key behavior.

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

Usage Guidelines3/5

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

The description explains how the tool works (e.g., dry run modes, first id behavior) but does not explicitly state when to use it versus alternatives or when not to use it. It references 'update' for dry run details but lacks clear usage boundaries, leaving the agent to infer typical use cases.

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

new_homeNew projectA
Destructive
Inspect

Start a new empty project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, but the description does not elaborate on what side effects occur (e.g., discarding current project state). It adds no context beyond the annotation, but it does not contradict it. The description is adequate but minimal.

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

Conciseness5/5

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

One short, direct sentence. Perfectly concise and front-loaded, with no wasted words.

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

Completeness4/5

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

For a simple tool with no parameters and an output schema, the description is sufficient for basic invocation. However, it could mention the destructive nature (that it replaces the current project) to be fully complete, but the annotation covers that. Given the simplicity, it's fairly 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 the description doesn't need to explain any. The baseline for 0 parameters is 4, and the description correctly avoids redundancy.

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 'Start' and a clear resource 'new empty project', which unambiguously distinguishes it from siblings like open_home or get_home. It clearly states the tool creates a new, blank project.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention that this is for creating a new project as opposed to opening an existing one, nor does it discuss any prerequisites or context. Given the large sibling list, this is a significant gap.

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

open_homeOpen a projectA
Destructive
Inspect

Open a project (.newera) or import a Sweet Home 3D file (.sh3d), replacing the current one.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoProject file (`.newera`). Optional for save when already saved once

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.2/5.0
Behavior3/5

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

The annotation destructiveHint=true already signals that this tool modifies state, and the description reinforces this by stating 'replacing the current one'. The description adds the import capability for .sh3d files, which goes beyond the annotation. However, it does not disclose additional behavioral details such as unsaved changes handling or the output format. Since annotations already cover the destructive nature, a 3 is appropriate—the description provides some added context but not rich behavioral insight.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the primary action and format support, and clearly states the replacement side effect. Every word earns its place with no fluff or repetition. It is maximally concise while remaining informative.

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 open/import operation, the description covers the file types, the replacement behavior, and the essential purpose. The output schema exists (though not shown), so return-value details are not required. The description does not mention prerequisites (e.g., whether the current project must be saved) or error handling, but these are minor gaps given the simple parameter set and the existing annotations. Overall it is sufficiently complete for an agent 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?

The schema provides a description for the 'path' parameter (covering .newera and optionality), but the description adds the .sh3d import format, which is not present in the schema. This gives agents crucial extra information about accepted input types. With 100% schema coverage, the description still adds value by clarifying the import capability, so a 4 is warranted.

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 clear verb-resource pair ('Open a project' / 'import a file') and specifies the file types (.newera, .sh3d). It also states the key side effect ('replacing the current one'), which distinguishes it from related tools like new_home or save_home. The purpose is unambiguous and differentiated from 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?

The description clearly indicates when to use this tool (opening or importing an existing project) and implicitly contrasts with new_home (creating a new one) and save_home (saving the current one). It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.

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

placePlace furniture, doors and windowsAInspect

Place catalog items, or copy= of a piece already in the project (its model — even one embedded from an old import —, finish and parts, the id catalog(scope=project) gives): at=[x,y] center (doors/windows near a wall snap into it; into=[x,y] picks the swing side), or wall=id (+along cm) to put doors/windows in a wall or furniture against it, back to the wall and front to the room. Sizes w/d/h override defaults; pitch/roll tilt. Ceiling pieces (spots, LED panels, pendants, ceiling points) always hang from the ceiling the 3D draws — flat, sloping or under a roof — and follow it when they move or it changes: never compute their elev; for a pendant give elev = height of the shade's bottom (over a table ~150-160) or h = its drop, and the cord takes the rest. Which way it looks: facing=+x|-x|+y|-y, [x,y] or an element id to turn its front toward (armchair facing the TV) — prefer it to angle, clockwise degrees on a plan whose y grows down: 0 front to +y, 90 to -x, 180 to -y, 270 to +x (the catalog tool names each front: seat, doors, foot of the bed). A piece whose back belongs on a wall, put at=[x,y] within 30 cm of one with neither angle nor facing, is turned back to that wall on its own. The reply says where each front ended up: faces=f3:+y(seat), turned=f3:back to w2 — read it before building on the piece; mat finish (wood, marble, img:…; 'img:facade.png fit' stretches one image: a reference board to compare with render_3d view=front) and opacity (glass 0.3); defaults {…} fills every item; px=true reads coordinates as background pixels. cat=beam with a,b=[x,y,z] (z above the floor) and w×h section makes rafters, posts and braces; a beam reaching into a roof stops under it. Pools: pool or pool-oval. dry=true answers what it would do — what it would add, the clearances around it, the findings it would settle or create — without writing; dry="summary" answers short.

ParametersJSON Schema
NameRequiredDescriptionDefault
vNoPlan version (tab) to write to; switches to it first
pxNoCoordinates (`at`, `into`, `a`, `b`, `along`) are pixels of the background image
dryNoTry it without applying; see `update`. `"summary"` answers short
itemsYesThe pieces to place, one object each: `id` from the catalog (or `copy`), and where (`at`, or `wall` + `along`)
defaultsNoFields every item takes unless it sets them (cat, w, d, h, color, mat…)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
dryNoNothing was written
idsNoIds created or touched
revNoPlan revision
goneNoIds removed, or their count
textNoThe reply as written
addedNoIds added, or their count
facesNoWhere each front looks: <id>:<side>(<front>)
scoreNoScore [before, after]
turnedNoPieces turned back to a wall: <id>:back to <wall>
changedNo{id, from, to} per element changed; a count past 20
resolvedNoFindings settled
clearancesNoFree floor around touched pieces, by id
issues_newNoLayout issues created
propertiesNoProject properties changed
added_countNoRoots added
annotationsNoAnnotation switches {from, to}
score_scopeNoDisciplines scored
new_findingsNoFindings created
changed_countNoRoots changed
issues_changedNoLayout issues resized
issues_resolvedNoLayout issues settled
findings_changedNoFindings changed
acceptance_cleanupNoAcceptances orphaned, and the calls that clear them

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only provide basic read/write hints, so the description carries the behavioral burden. It richly discloses side effects and behaviors: doors/windows snap into walls, ceiling pieces hang and follow ceiling changes, pieces auto-turn toward walls, beams stop under roofs, and `dry=true` avoids writing. This goes well 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?

The description is long and dense, but the tool is genuinely complex with many placement modes and edge cases. It is front-loaded with the primary use and every sentence carries substantive guidance. The main weakness is the single-paragraph stream-of-consciousness structure, which could be better organized.

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 tool this complex, the description covers the placement modes, orientation conventions, wall/celing behaviors, materials, beams, pools, and dry-run behavior. The schema covers the remaining parameter details, and an output schema exists, so the agent has enough context to call and interpret the tool 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?

Even with 100% schema coverage, the description adds substantial meaning beyond the schema: `at` vs `wall`, `into` swing side, facing/angle coordinate conventions, ceiling pendant elevation guidance, beam endpoint semantics, pixel mode, and dry-run behavior. This significantly helps an agent invoke parameters correctly.

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 'Place catalog items' and covers placement, copying existing pieces, importing models, and placing beams/pools. It clearly distinguishes this tool from siblings like move or arrange by focusing on the act of placing new items into the plan.

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

Usage Guidelines4/5

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

The description gives clear context for when to use `place`: adding catalog items, copying an existing piece, importing models, or placing beams/pools. It does not explicitly contrast with siblings like `move` or `update`, but the placement-specific guidance is clear enough to route an agent correctly.

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

pluginsList pluginsA
Read-only
Inspect

Plugins (external programs editing through the HTTP API): rows [name,title,description]. Run one with run_plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes[name, title, description]

TDQS

A4.3/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the safety profile, and the description adds context by characterizing plugins as external programs that edit through the HTTP API. It doesn't disclose additional operational behavior such as auth needs or list completeness, but with annotations covering the main trait this is acceptable.

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 compact sentence that front-loads the resource and output shape and ends with the cross-reference to run_plugin. 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?

For a parameterless read-only list tool with an output schema and sibling guidance, the description covers everything an agent needs: what will be returned, that the operation is safe, and how to act on a 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 has zero parameters and schema coverage is 100%, so there is nothing for the description to add about parameters. Per the baseline for parameterless tools, this is a 4.

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 the resource (plugins) and the action (list) explicitly, identifies the output rows, and distinguishes itself from run_plugin by mentioning how to execute one. This is a specific, differentiated definition.

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 direct routing guidance: 'Run one with run_plugin.' It does not spell out when not to use the tool or compare with other list-like siblings, but for a list operation with an obvious run counterpart this is sufficient context.

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

plumbingCheck the plumbing projectA
Read-only
Inspect

Plumbing project, NBR 5626 (cold and hot water) and NBR 8160 (sewer). Points are the plumbing pieces (catalog plumbing: cold-water, hot-water, sewer, valve, grease-trap, inspection-box, water-meter, gas-point, vent-pipe, and the drains as the models they are: floor-drain caixa sifonada 150x150x50, floor-drain-100, floor-drain-75 (150x185x75, up to 15 UHC), trap-drain-small (seal under 50 mm, no trap), dry-drain, linear-drain (w 50/70/90, no trap), linear-drain-trap, rain-drain for open areas; drains are set flush in the floor of a room, never in a wall, a door span or under a cabinet) and what a point is comes from its catalog, never its name; fixtures are the pieces that use water (toilet, basin, kitchen sink, shower, bathtub, washer, laundry sink, dishwasher). check (default): {points:{kind:count}, pipes_m, findings:[[sev, place, msg, src, key, accepted?]], pending, orphaned, sources} — a cold-water point by every fixture and a sewer point (or a floor drain for basin, shower, tub and machines) within reach, the discharge diameter it needs (toilet 100 mm, kitchen sink and machines 50, others 40); hot water where the project has any; a floor drain in every bathroom, kitchen and laundry, inside the shower area where there is one, at least one real trap (50 mm seal) per room, the UHC its outlet takes (50 mm: 6, 75 mm: 15), rain drains for open terraces; a grease trap for a kitchen sink; the premises — where the water comes from (water-meter or valve) and where the sewer goes (inspection-box or stack); points no drawn pipe of their kind reaches. orphaned lists acceptances whose finding is gone (the accept tool marks findings looked at, and its prune drops those). Pipe runs are laid with edit_plumbing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsYesPoints by kind
pendingYesFindings not accepted
pipes_mYesPipe metres: {cold, hot, sewer, vent}
sourcesYesStandards cited, by code: [title, tier, url]
findingsYesRows [severity erro|alerta|dica, place, message, source, key, accepted reason?]
orphanedYesAcceptances whose finding is gone: [key, reason, successor key?]

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, and the description adds substantial behavioral detail: the exact default output structure, the validation rules, the meaning of orphaned findings, and the relationship to the accept tool and its prune behavior. There is no contradiction and the description goes well 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.

Conciseness3/5

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

The description is information-dense and mostly earns its content, but it is a single long unstructured paragraph with many enumerations and sub-rules. It would be easier to parse with bullets or section breaks, and its front-loading is weak because it starts with NBR standards and piece classifications before stating the output 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?

For a complex, domain-specific checker with no parameters, the description is remarkably complete: it specifies the output shape, the checks performed, the relationship to orphaned acceptances, and the sibling editing tool. Combined with the presence of an output schema, the agent has enough context to invoke and interpret the tool 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?

The tool has zero parameters and an empty input schema, so there are no parameter semantics to document. The description references a default check ('check (default):') and defines its output, which is sufficient given the 0-parameter baseline.

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 title and description explicitly state a check action on the plumbing project, and the description details what the check returns (points, pipes_m, findings, pending, orphaned, sources). It also distinguishes itself from edit_plumbing by noting that pipe runs are laid with edit_plumbing, so an agent can tell this is a validation/audit tool rather than an editing tool.

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

Usage Guidelines4/5

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

The description clearly implies this tool is for validating plumbing rules and explicitly says 'Pipe runs are laid with edit_plumbing', which is a useful when-not-to-use signal. However, it does not compare itself to other checking siblings like check_layout or explain when to prefer this over alternative checkers, so it falls short of fully explicit routing.

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

redoRedoA
Destructive
Inspect

Redo the last undone change.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
goneNoIds removed, or their count
textYesThe reply as written
addedNoIds added, or their count
changedNo{id, from, to} per element changed; a count past 20
propertiesNoProject properties changed
annotationsNoAnnotation switches {from, to}

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds a small behavioral detail by specifying that the operation applies to the 'last undone change,' but it does not elaborate on side effects or failure conditions beyond that.

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

Conciseness5/5

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

The description is a single sentence with no filler or redundant explanation. It is front-loaded and communicates the essential operation in minimal words.

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

Completeness5/5

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

For a parameterless command with an output schema and annotations covering the destructive/write behavior, the description is sufficient. An agent can correctly invoke 'redo' after an undo without additional context.

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 zero parameters, there is no parameter semantics burden for the description to carry. The schema is fully covered, so the description does not need to explain any parameter details; the baseline for a no-parameter tool is appropriate.

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 action ('Redo') and a specific target ('the last undone change'), which is clear and distinct from the sibling 'undo' in meaning. However, it does not explicitly name or contrast any sibling tool, so it falls just short of top-tier 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?

Use of this tool is implied: it should be called after an undo when the user wants to reapply that change. There is no explicit statement about when not to use it or how it relates to the sibling 'undo' tool, leaving the guidance implicit rather than direct.

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

render_3dRender a 3D viewA
Read-only
Inspect

PNG of the home in 3D (software render with outlines, no GPU needed). view: front|back|left|right|top orthographic elevations — front looks from the plan's bottom edge (large y) toward y=0, back from y=0 toward large y, left from x=0, right from large x; cut=cm makes a section keeping only what is beyond that plane from the viewer (front cut=200 keeps y<200, so the wall at y=0 stays as the backdrop; to remove it look from back), aerial (default; frames the whole building; yaw degrees: 0 from east/+x, 90 from south/plan bottom (default 60); pitch down; zoom >1 farther), visitor (current visitor camera) or cam=i (stored point of view). walls=cutaway drops the walls between the eye and a room to 40 cm, walls=down drops them all; either hides ceilings, roofs and the doors, windows and wall pieces of lowered walls, to see the furniture from the side. Keep w/h small.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoHeight px (default 360, 64..1200)
wNoWidth px (default 480, 64..1600)
camNoStored point of view index (see cameras)
cutNoElevations: section plane in plan cm (y for front/back, x for left/right, height for top); what lies between the viewer and it is cut away — walls and pieces alike. front views from large y, back from y=0
yawNoAerial turn, degrees
viewNo`aerial` (default) or `visitor`
zoomNoAerial distance factor: 1 frames the building, 2 twice as far
pitchNoAerial height angle, degrees
wallsNo`up` (default), `cutaway` or `down`

Output Schema

ParametersJSON Schema
NameRequiredDescription
mimeTypeYesType of the image in the content (image/png)

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses concrete render behavior: software-only rendering with outlines, no GPU requirement, the effects of walls=cutaway/down on visibility, and a performance caution in 'Keep w/h small'. These are non-obvious behaviors an agent could not infer from annotations or schema alone.

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

Conciseness5/5

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

The description is dense but every clause carries necessary information; there is no filler. It front-loads the core purpose and render type, then systematically covers each view mode. The semicolon-heavy style is hard to skim, but it is concise relative to the amount of behavioral semantics conveyed.

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 9 optional parameters, complex coordinate rules, and wall-cutaway behavior, the description covers all modes and their interactions, including defaults and how to remove a backdrop wall. The output schema covers the return format, and the readOnlyHint covers safety, so nothing necessary for 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?

Although schema coverage is 100%, the description substantially enriches parameter meaning with coordinate orientation, defaults, and edge cases: 'front looks from the plan's bottom edge (large y) toward y=0', 'front cut=200 keeps y<200', 'yaw degrees: 0 from east/+x', and zoom semantics. This goes far beyond the schema's terse property descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'PNG of the home in 3D (software render with outlines, no GPU needed)'. It clearly distinguishes a 3D render from 2D plan/photo siblings and enumerates exact view modes, so an agent knows precisely what the tool produces.

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

Usage Guidelines3/5

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

The description gives extensive context for choosing view modes, cut planes, and wall treatments, including defaults like 'aerial (default)' and 'visitor'. However, it never names alternatives such as render_photo or render_plan, nor does it state when to prefer this tool over those siblings, leaving the tool-vs-alternative decision implied rather than explicit.

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

render_photoRender a photoA
Read-only
Inspect

Realistic photo (path traced: sun from compass location and time, lamps, glass). cam=i stored view, or view=visitor/aerial (yaw,pitch). quality draft (~10 s) | good | best; hour = local solar time (e.g. 9, 15.5, 20); w/h small. Returns PNG.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoHeight px (default 360, 64..1200)
wNoWidth px (default 480, 64..1600)
camNoStored point of view index
yawNoAerial turn, degrees (default 60)
hourNoLocal solar hour, 0–24
viewNo`aerial` (default) or `visitor`
pitchNoAerial height angle, degrees (default 40)
qualityNo`draft` (default), `good`, `best`

Output Schema

ParametersJSON Schema
NameRequiredDescription
mimeTypeYesType of the image in the content (image/png)

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, and the description adds useful behavioral context: path tracing, sun position from compass/time, lamps/glass, quality draft taking ~10s, and PNG output. 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 description is dense and front-loaded, with each clause contributing useful information. Minor cryptic phrasing like 'w/h small' and the telegraphic parameter list keep it from a perfect score.

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 full schema coverage and an output schema, the description covers core behavior, parameter relationships, and output format. It does not address sibling routing, but that is already handled under usage guidelines.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds meaning beyond the schema by clarifying cam vs view/yaw/pitch relationships, hour as local solar time with examples, quality time estimates, and small w/h. This goes beyond simple parameter listing.

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 'Realistic photo' and specifies path tracing with sun, lamps, and glass, plus PNG output. This clearly identifies a photorealistic rendering tool and distinguishes it from siblings like render_plan and render_3d.

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 use for realistic photo rendering through 'Realistic photo' and view options, but it never explicitly states when to prefer this tool over render_plan or render_3d, nor gives exclusion criteria. The context is inferable but not stated.

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

render_planRender the floor planA
Read-only
Inspect

PNG of the floor plan, exactly as the user sees it. region=[[minx,miny],[maxx,maxy]] frames a place — it is fitted to the image's aspect by growing the short side, never by cropping, so everything asked for is in the picture — or room=<id|name> with pad cm (default 30) frames a room without working the rectangle out. bg=0..1 overlays the background image to compare with the reference. Keep w/h small to save tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoHeight px (default 480, max 2048)
wNoWidth px (default 640, max 2048)
bgNoBackground image opacity for this render (e.g. 0.5 to compare the drawing with the scanned reference; 0 hides it)
padNoWith `room`: margin around it, cm (default 30)
gridNoDraw the grid (default true)
roomNoInstead of `region`: a room id or name to frame
regionNoPlan region `[[minx,miny],[maxx,maxy]]`; default fits the drawing. The region is fitted to the image's aspect and grown on the short side — never cropped — so everything asked for is in the picture

Output Schema

ParametersJSON Schema
NameRequiredDescription
mimeTypeYesType of the image in the content (image/png)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool read-only, so additional safety disclosure is less critical. The description adds meaningful behavioral details beyond annotations: the region is never cropped and grows on the short side, the background image is overlaid for comparison, and large w/h values increase token cost.

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

Conciseness5/5

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

The description is a single dense paragraph with the core purpose front-loaded. Every phrase earns its place, covering output format, framing behavior, background overlay, and token efficiency without fluff or redundancy.

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

Completeness4/5

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

Given the rich input schema (100% parameter coverage), the output schema, and the readOnlyHint annotation, the description is nearly complete. It covers the most important behavioral constraints and rendering modes; minor details like the default grid setting and fully automatic region fitting are already present in the schema, so their absence here is acceptable.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the relationship between room and region, the pad default in centimeters, the purpose of bg for comparing with the reference, and the token-cost implication of large w/h values. Some duplication with the schema exists, but the added guidance is genuinely useful.

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 'PNG of the floor plan, exactly as the user sees it,' which names a specific output format and scope. It clearly distinguishes this from 3D/photo renderers and explains the two framing modes (region and room), leaving no ambiguity about what the tool produces.

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

Usage Guidelines4/5

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

The description gives clear context for use: it produces a PNG of the current floor plan, includes framing modes, background overlay for reference comparison, and token-saving guidance. It does not explicitly contrast this with sibling tools like show_plan or export_plan, but the usage context is strong enough for an agent to decide when to use it.

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

run_pluginRun a pluginA
Destructive
Inspect

Run a plugin (an external program editing through the HTTP API) by name, with args as JSON: {ok,code,stdout,stderr,edits,revision}. The plugins tool lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments passed to the plugin as JSON
nameYesPlugin to run, by name (the plugins tool lists them)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesThe plugin exited cleanly
codeNoExit code; null when it was stopped
editsYesChanges it made
stderrYesWhat it complained
stdoutYesWhat it printed
revisionYesPlan revision after it
timed_outNoIt ran out of time

TDQS

A3.8/5.0
Behavior4/5

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

It discloses that this runs an external program that edits through the HTTP API and that the result includes fields like edits and revision, which signals side effects beyond the annotation's destructiveHint. This adds behavioral context beyond the annotations and does not contradict them.

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?

The description is short and front-loaded, but the phrase 'with args as JSON: {ok,code,stdout,stderr,edits,revision}' is structurally confusing because the object appears to be the return value, not the args format. It is concise but slightly ambiguous.

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 tool with full schema coverage and an output schema present, the description provides enough to select and invoke it correctly: name, args, result-ish fields, and plugin discovery. Missing warnings about arbitrary code execution are mostly covered by destructiveHint.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents name and args. The description mostly repeats 'by name' and 'args as JSON' without adding JSON structure, examples, or further parameter semantics. Baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Run a plugin', and expands the title by explaining that a plugin is an external program editing through the HTTP API and that it is invoked by name. It also distinguishes the tool from the sibling 'plugins' tool, which lists plugins rather than running them.

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 provides useful context by saying 'The plugins tool lists them', but it does not explicitly state when to use run_plugin versus sibling editing tools or give any exclusion criteria. Usage is implied rather than clearly routed.

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

save_homeSave the projectA
Destructive
Inspect

Save the project (.newera). path optional after the first save.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoProject file (`.newera`). Optional for save when already saved once

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the operation as destructive (destructiveHint=true), and the description complements them by disclosing the stateful behavior that path becomes optional only after an initial save. It does not fully spell out overwrite semantics, but the destructive hint covers that risk.

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 clauses front-load the core action and add only the one operational caveat. There is no filler, redundant framing, or unnecessary 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?

Given one optional parameter, an output schema, and annotations covering destructiveness, this short description supplies everything needed to call the tool correctly. The only nuance, path optionality, is present and consistent.

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

Parameters3/5

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

Schema description coverage is 100%, and the description largely restates the path parameter's optionality rather than adding new meaning. The phrasing 'after the first save' adds marginal context, but the schema already documents the same 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 ('save'), resource ('the project'), and file format (.newera), making it unambiguous among siblings like open_home/new_home/get_home. The optional-path clarification adds precision without diluting the main action.

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 on when a path is needed (first save vs. subsequent saves), which directly guides invocation. It does not explicitly contrast with siblings, but 'save' is sufficiently distinct that an exclusion is not necessary.

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

sessionsList who is editingA
Read-only
Inspect

People and agents on this project now: rows [id,name,cursor,selection,edits].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
revYesPlan revision
rowsYes[id, name, cursor [x,y]|null, selection, edits]

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the behavioral detail that it returns rows with cursor, selection, and edits, which conveys live collaboration state. It doesn't disclose whether the list is sorted, whether it includes all agents or only some, or whether it requires an active project context, but the annotation covers the safety profile.

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

Conciseness5/5

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

The description is a single compact sentence that front-loads the core purpose ('People and agents on this project now') and then specifies the row structure. Every word earns its place, and it's appropriately sized for a zero-parameter tool.

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

Completeness4/5

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

Given the tool has zero parameters, an output schema exists, and annotations declare read-only safety, the description is nearly complete. It could add a note about whether the list is live/refreshing or a snapshot, but for a simple listing tool the current description is sufficient for an agent to call it correctly.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially complete. The description adds meaning by explaining what the returned rows contain (id, name, cursor, selection, edits), which is more about output than parameters. With no parameters to document, the description doesn't need to compensate for any schema gaps, so a baseline of 4 is appropriate.

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 'People and agents on this project now: rows [id,name,cursor,selection,edits]' clearly identifies the tool as listing current editors and their activity, with a specific verb ('list') implied by the title and the row structure. It distinguishes itself from sibling tools like 'annotations' or 'checkpoints' by focusing on live editing presence rather than project content. However, it doesn't explicitly name a sibling alternative, so it's clear but not fully differentiated.

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 this is a real-time status tool for seeing who is currently editing, which is a clear context for use. It doesn't explicitly state when to use it versus alternatives like 'checkpoints' or 'undo', but the live-activity framing makes the usage context reasonably clear. No exclusions or alternative routing are provided.

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

set_backgroundSet a scanned planA
Destructive
Inspect

Set a scanned plan as background at real scale: path, then cm_per_px (+cm_per_px_y), calibrate {a,b px, cm} or calibrations [{a,b,cm}…] (fits X/Y scales), angle (clockwise °); offset/opacity/visible; clear=true removes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoImage file (png/jpg/webp/bmp). Required when there is no background yet
angleNoClockwise turn of the image, degrees
clearNoRemove the background
offsetNoPlan position cm of the image's top-left corner
opacityNoHow opaque the image is drawn, 0..1
visibleNoShow or hide the image without removing it
calibrateNoOr scale by marking two pixels with a known real distance
cm_per_pxNoScale directly, cm per image pixel
cm_per_px_yNoVertical scale cm/px when it differs from the horizontal one
calibrationsNoSeveral known distances (e.g. one across, one down): fits separate horizontal and vertical scales when they differ, uniform otherwise

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true, so the description does not need to repeat that. It adds value by specifying the exact destructive behavior: 'clear=true removes'. This is more specific than the annotation alone. It also mentions calibration and scaling behavior, which are not obvious from annotations. The description is consistent with the destructiveHint and readOnlyHint=false.

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

Conciseness4/5

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

The description is a single, dense sentence that is front-loaded with the core purpose and then lists parameters in a compact shorthand. It is efficient and avoids fluff, but the shorthand notation (e.g., '+cm_per_px_y', 'calibrate {a,b px, cm}') may be slightly cryptic for an agent without additional context. Still, it earns its place and is 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?

With 10 parameters, 0 required, and an output schema, the description covers the main actions but leaves some interactions implicit. It does not clarify that clear=true is mutually exclusive with setting a new background, nor does it mention the prerequisite that path is required when there is no background yet (though that is in the schema). It also does not state the return value, but the output schema exists. For a tool of this complexity, the description is adequate but not fully comprehensive.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by providing a compressed usage pattern: 'path, then cm_per_px (+cm_per_px_y), calibrate {a,b px, cm} or calibrations [{a,b,cm}…] (fits X/Y scales)'. This clarifies that calibrate and calibrations are alternatives to cm_per_px, and that calibrations handle separate X/Y scales. It also explains the angle unit (clockwise °). This adds semantic value beyond the schema.

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

Purpose5/5

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

The description opens with 'Set a scanned plan as background at real scale' – a specific verb, resource, and the key scaling constraint. It clearly distinguishes from siblings like trace_background (which implies tracing) and show_plan (which implies viewing) by focusing on the set/background action. The list of parameters reinforces what the tool accomplishes.

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

Usage Guidelines2/5

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

No explicit guidance is given on when to use this tool versus alternatives like trace_background or show_plan. The description implies a use case but does not state exclusions, prerequisites, or conditions that would select this tool over a sibling. For an agent choosing among 60+ sibling tools, this is a gap.

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

set_homeProject settingsA
Destructive
Inspect

Rename the project, set or remove project properties (properties {key: value|null}, or a storey's with level), set the compass (north), set the city whose building code applies (city=sao-paulo), and say who lives there (people {occupants, children, elderly, wheelchair, stature cm, scope}). City and people belong to the project: ergonomics, check_layout and every dry run then weigh the same rules for the same people, so a change can be tested against the score it moves.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity whose building code applies, e.g. `sao-paulo`; `""` clears it. Kept with the project, so `ergonomics`, `check_layout` and every dry run weigh the same municipal rules
nameNoThe project's name
levelNoStorey whose properties `properties` changes, e.g. `lv2`
northNoClockwise degrees from plan up to north
peopleNoWho lives there — occupants, children, elderly, wheelchair, stature cm, scope — kept with the project: ergonomics and every dry run then score for them. What is left out stays as it was
compass_dNoCompass diameter cm
compass_atNoWhere the compass sits on the plan, `[x,y]` cm
propertiesNoProject properties to set, `{key: "value"}`, or remove, `{key: null}` — what an import leaves behind (window sizes, panel dividers, ids of the program it came from). With `level`, that storey's instead
compass_visibleNoShow or hide the compass

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating tool. The description adds meaningful behavioral context by stating that city and people persist with the project and that changes can be tested against the score they move. This goes beyond the annotations without contradicting them.

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 one long but well-organized sentence that front-loads primary actions and then devotes a clause to the most important behavioral nuance: the persistence and scoring impact. Every clause earns its place, and there is no filler or repetition of schema content.

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

Completeness4/5

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

For a 9-parameter settings tool with nested objects and an output schema, the description covers all major operations and the key cross-tool effect on scoring. It omits details like compass_d, compass_at, and compass_visible, but those are fully documented in the schema, and the output schema covers return behavior. Overall it is sufficient for an agent to select and invoke the 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 100% and each parameter already has a detailed description, so the baseline is 3. The description's parameter mentions—properties key/value/null, level, north, city, and people fields—merely summarize what the schema already states. It adds no new semantic information beyond the structured field descriptions.

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

Purpose5/5

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

The description opens with a concrete enumeration of actions: 'Rename the project, set or remove project properties ..., set the compass (north), set the city ..., and say who lives there.' This makes the tool's purpose unmistakable and distinguishes it from read-side siblings like get_home and view-oriented tools. The breadth is inherent to a settings tool, but the explicit verb list removes ambiguity.

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

Usage Guidelines4/5

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

The description gives clear usage context: city and people 'belong to the project,' so ergonomics, check_layout, and every dry run use the same rules, meaning this is the persistent project-level configuration path. It does not explicitly name alternatives or state when not to use it, so it falls just short of perfect routing guidance.

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

show_planShow the planA
Read-only
Inspect

Show the plan to the user as an interactive viewer (pan, zoom, 3D view, open in the editor) where the chat client can display one. Reply: a one-line summary for you; the drawing goes to the viewer. To look at the plan yourself use render_plan.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
svgYesThe plan as SVG
nameYesProject name
editorYesLink that opens the project in the editor
summaryYes{rooms, area, walls, pieces}

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safety profile is covered. The description adds the behavioral detail that the agent receives a one-line summary while the drawing goes to a viewer, and describes the viewer's interactive features. This goes beyond the annotation without contradicting it.

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

Conciseness5/5

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

Two sentences with no filler. The primary purpose is front-loaded, and the reply format and alternative tool are stated in the second sentence. Every word 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?

A zero-parameter tool with an output schema and read-only annotation. The description covers the purpose, the viewer behavior, and the distinction from render_plan. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters, so the baseline for parameter semantics is 4. The description correctly notes there are no inputs, and no parameter meaning is needed beyond what the empty schema implies.

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 (show) and resource (the plan) plus the exact presentation format (interactive viewer with pan, zoom, 3D view, open in editor). It explicitly contrasts with render_plan, so the agent can tell them 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 Guidelines5/5

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

Explicitly names the alternative render_plan and the condition that selects it ('To look at the plan yourself use render_plan'). This clearly communicates when this tool is for the user and when the other is for the agent's own inspection.

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

split_wallSplit a wallA
Destructive
Inspect

Split a wall into two joined walls at t (0..1).

ParametersJSON Schema
NameRequiredDescriptionDefault
tNoSplit position along the wall, 0..1 (default 0.5)
idYesThe wall to split

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

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 is a mutating operation. The description adds the behavioral detail that the result is 'two joined walls', which clarifies the outcome. However, it doesn't disclose whether the original wall is deleted, how the join is represented, or any side effects. With annotations covering the destructive nature, a 3 is appropriate.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the verb and resource, and includes the key parameter constraint. Every word earns its place. It's concise and structured well.

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

Completeness3/5

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

The tool has an output schema, so return values are presumably documented there. The description covers the core operation and parameter. However, for a destructive operation, it could mention what happens to the original wall or any prerequisites (e.g., wall must be selected). Given the output schema exists and the description is clear, it's adequate but 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 100%, so the schema already documents both parameters. The description adds the meaning of t as a normalized position (0..1) and the default 0.5, which is already in the schema. It doesn't add much beyond the schema, but the baseline 3 applies because the schema is 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?

The description states a specific verb and resource: 'Split a wall into two joined walls at t (0..1).' This clearly identifies the operation and its key parameter. It doesn't explicitly distinguish from sibling tools like merge_walls, but the verb 'split' and the mention of 'two joined walls' makes the purpose clear enough.

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

Usage Guidelines3/5

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

The description implies usage: splitting a wall at a normalized position t. It doesn't explicitly state when to use this vs alternatives like merge_walls, but the context is clear. No exclusions or alternative tool mentions are provided, so it's adequate but not explicit.

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

trace_backgroundFind walls in a scanA
Read-only
Inspect

Trace walls from the background image (set_background first): thick dark or gray bands across or down the image become walls (colored areas — lawn, plants, furniture — are ignored; collinear pieces split by doors/windows up to max_gap join; region limits the search). Returns rows [[x1,y1],[x2,y2],t] in plan cm; trace_walls adds them as walls. Check with render_plan bg=0.5.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoWall height cm when creating (default 250)
t_maxNoThickest wall kept, cm (default 45)
t_minNoThinnest wall kept, cm (default 5)
regionNoOnly this part of the plan `[x0, y0, x1, y1]` cm
max_gapNoDoors and windows up to this wide don't split a wall, cm (default 130)
min_lenNoShortest wall kept, cm (default 60)
thresholdNoLuminance 0..255 below which a gray pixel is ink (default 128; raise it for light gray walls)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYesWalls found: [[x1,y1], [x2,y2], thickness]

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark this readOnlyHint=true, and the description is consistent: it returns rows rather than mutating the plan. It also adds valuable behavioral detail beyond annotations, such as ignoring colored areas, joining collinear pieces split by doors/windows, honoring a region limit, and returning coordinates in plan cm. This gives the agent a clear model of what the tool does internally.

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

Conciseness5/5

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

The description is three dense sentences with no filler. It front-loads the main purpose and precondition, then covers output format and a verification step. 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 read-only tool with a detailed schema and output schema, the description is complete: it explains the prerequisite, the algorithm, what is ignored, how walls are joined, how region limits the search, the return format, and how to verify the result. An agent has everything needed to select and 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?

The input schema already documents all 7 parameters with 100% coverage, so the description does not need to repeat parameter details. The description mentions max_gap and region in prose, but the schema already explains these concepts, so little new parameter-level meaning is added over the structured schema.

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

Purpose5/5

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

The description states a specific verb and resource ('Trace walls from the background image') and explains the operational scope: dark/gray bands become walls while colored areas are ignored. It also distinguishes itself from trace_walls by noting that trace_walls is what adds the results as walls. This clearly separates it from sibling 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?

The description explicitly gives the precondition 'set_background first' and explains how results feed into trace_walls, plus suggests verifying with render_plan bg=0.5. However, it does not explicitly list situations where another tool should be used instead, so it falls just 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.

trace_wallsTrace walls from a scanAInspect

Trace walls from the background image, as trace_background does, and create them in one undo step (h: wall height cm, default 250). Check with render_plan bg=0.5.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoWall height cm when creating (default 250)
t_maxNoThickest wall kept, cm (default 45)
t_minNoThinnest wall kept, cm (default 5)
regionNoOnly this part of the plan `[x0, y0, x1, y1]` cm
max_gapNoDoors and windows up to this wide don't split a wall, cm (default 130)
min_lenNoShortest wall kept, cm (default 60)
thresholdNoLuminance 0..255 below which a gray pixel is ink (default 128; raise it for light gray walls)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
textYesThe reply as written

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish that the tool is not read-only and not destructive, and the description adds meaningful behavioral context: walls are 'create[d] in one undo step' and tracing is based on the background image. This goes beyond the structured annotations and helps the agent anticipate undo granularity and side effects.

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 compact: two sentences, with the core purpose front-loaded and no filler. The verification tip is terse, but every clause contributes either purpose, behavior, or workflow context.

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

Completeness4/5

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

Given the 7-parameter schema is fully documented, annotations cover safety traits, and an output schema exists, the description supplies the essential behavioral frame: trace from background, create in one undo step, and verify with render_plan. It could clarify what trace_background is and whether trace_walls depends on an existing background, but it is not critically incomplete.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter already has a type, default, and explanation. The description mentions h (wall height) and its default, but it only repeats information already present in the schema rather than adding new semantic detail. This matches the baseline of 3 for fully documented schemas.

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 specific action ('Trace walls'), the resource ('the background image'), and the output ('create them'), which is clear enough for an agent to understand what the tool does. It references trace_background for analogy, but the boundary between trace_walls and trace_background is not fully explicit, 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 explicit guidance on when to use trace_walls versus alternatives, despite trace_background being a very similar sibling. The only practical hint, 'Check with render_plan bg=0.5', tells the agent how to verify afterward but does not explain selection conditions or exclusion criteria.

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

undoUndoA
Destructive
Inspect

Undo the last change, whoever made it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okYesAlways true
idsNoIds created or touched
revNoPlan revision
goneNoIds removed, or their count
textYesThe reply as written
addedNoIds added, or their count
changedNo{id, from, to} per element changed; a count past 20
propertiesNoProject properties changed
annotationsNoAnnotation switches {from, to}

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description's mention of 'undo' aligns with expectations. The phrase 'whoever made it' adds context about the operation's scope, but does not disclose potential side effects (e.g., irreversibility of undone action). With annotations covering the destructive nature, this is adequate.

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

Conciseness5/5

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

The description is a single, tightly written sentence that conveys the essential information without fluff. The key constraint ('whoever made it') is placed in the same sentence, making it efficient and front-loaded.

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

Completeness4/5

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

For a simple operation with zero parameters and an output schema, the description adequately explains the action. It could mention edge cases (e.g., no change to undo), but given the tool's simplicity and existing structure, it is reasonably 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?

The tool has zero parameters, so the description carries no parameter burden. The baseline of 4 for no-parameter tools is appropriate; the description adds no parameter information but none is needed.

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

Purpose5/5

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

The description states a specific verb and resource ('Undo the last change') and clarifies the scope ('whoever made it'), distinguishing it from the sibling 'redo' tool. It is unambiguous about what the tool does.

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

Usage Guidelines3/5

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

The description implies when to use it (to reverse the last change) but does not explicitly state alternatives or when not to use it. It adds a usage nuance ('whoever made it') but lacks explicit routing to redo or other tools.

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

updateChange elementsA
Destructive
Inspect

Change fields of elements by id; fields must match the element kind (e.g. furniture mat/opacity/pitch, wall h_end, room auto/ceiling_flat, polyline divider); a part of a group takes name, brand, model_name and url on its own — its size and place belong to the group. anchor on a resize holds one face still (back/front/left/right of the piece, bottom/top, or a plan side) instead of growing around the center, so a run of joinery keeps its back on the wall. stretch=[part ids] on a group resize says what takes the change: the listed parts grow or shrink, every other part keeps its size and moves along (uprights stay 5.8 cm while the opening between them grows); without it all parts scale together. dry=true answers what it would do — changed fields, clearances around each piece it touches (negative: cm it would sit inside what it faces), findings resolved and created as issues_resolved/issues_new [{ids, kind, extent|cm|over}] with the same kind check_layout gives (only real defects: a piece resting or built in is never listed), and issues_changed for a clash that stays but grows or shrinks (extent_was) — without writing anything, so a size can be tried before it is applied; dry="summary" answers the same decision without listing the parts a group rebuilds. Otherwise the reply names what changed. rename {pattern, to, what: names|labels} renames in bulk by a regex (Rust syntax, (?i) for any case, $1 in to): every piece name — parts of groups included — or label text that matches, in one step; with dry it lists them first.

ParametersJSON Schema
NameRequiredDescriptionDefault
vNoPlan version (tab) to write to; switches to it first
dryNoTry it without applying: reports what would change, the clearances around every piece it touches, and which layout and ergonomics findings it would resolve or create. Nothing is written and the user's window does not move
itemsNoThe elements to change, one object each: `id` and the fields to set
renameNoRename in bulk by a rule instead of listing items: every name (pieces and the parts of groups) or label text matching `pattern` has it replaced by `to`, in one undoable step

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoPlan version written to, when there are several
okNoAlways true
dryNoNothing was written
idsNoIds created or touched
revNoPlan revision
goneNoIds removed, or their count
textNoThe reply as written
addedNoIds added, or their count
scoreNoScore [before, after]
changedNo{id, from, to} per element changed; a count past 20
resolvedNoFindings settled
unchangedNoAsked ids that came out as they were: {id, now}
clearancesNoFree floor around touched pieces, by id
issues_newNoLayout issues created
propertiesNoProject properties changed
added_countNoRoots added
annotationsNoAnnotation switches {from, to}
score_scopeNoDisciplines scored
new_findingsNoFindings created
changed_countNoRoots changed
issues_changedNoLayout issues resized
unchanged_noteNoWhy they did not change
issues_resolvedNoLayout issues settled
findings_changedNoFindings changed
acceptance_cleanupNoAcceptances orphaned, and the calls that clear them

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description explains real behavioral nuances: group part size/place belongs to the group, anchor holds a face still, stretch controls which parts absorb a resize, dry=true reports clearances and issues without writing, and rename rewrites every matching name in one step. This is substantial added transparency and does not contradict any 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 front-loaded with the core operation and every clause covers a distinct, necessary behavior: group parts, anchor, stretch, dry, and rename. It is dense and somewhat run-on as one large paragraph, but there is no filler or redundancy; better formatting would improve scanability without adding content.

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 mutating tool with many element kinds, the description covers the field-selection rules, group semantics, resize behavior, dry-run decision support, and bulk rename. The schema carries the remaining parameter details, and the response behavior is described well enough that an agent can call update 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?

Even with 100% schema coverage, the description adds significant parameter meaning: it defines valid field/element-kind combinations, explains the effect of anchor and stretch with concrete examples, and spells out what dry=true returns in terms of clearances and issue findings. The description enriches the schema rather than merely repeating it.

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: 'Change fields of elements by id', and immediately distinguishes this from sibling tools like create, delete, or move. It also adds useful constraints with element-kind examples, so an agent can tell exactly what operation this tool performs.

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

Usage Guidelines4/5

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

The description gives clear context for the main cases: field updates by id, group part behavior, anchor/stretch for resizes, dry runs for previewing changes, and bulk rename by regex. It does not explicitly name sibling tools as exclusions, but it frames the important decision points well enough for an agent to choose correctly.

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

variantsList plan versionsA
Read-only
Inspect

Plan versions (tabs): rows [i,name,active,walls,rooms,m2,furniture,issues]. Edits apply to the active version; change them with edit_variants.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYesPlan versions: [i, name, active, walls, rooms, m², pieces, issues]

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint already signals safe read behavior; the description adds useful behavioral context by explaining that edits apply to the active version and by listing the exact output row columns. This goes beyond the annotation without contradicting it.

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 concise sentences, front-loading the resource and output structure, then adding the key edit-version caveat. No wasted words and the most useful information appears first.

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, an output schema present, and readOnlyHint true, the description is complete for effective use. It covers what rows will contain and points to the sibling tool for modifications, leaving no critical gap.

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

Parameters4/5

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

This tool has zero parameters, so parameter semantics are naturally satisfied. The description provides no parameter information, but none is needed; the baseline of 4 applies.

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 title clearly identifies the operation as listing plan versions, and the description identifies the resource and output format via 'rows [i,name,active,walls,rooms,m2,furniture,issues]'. It distinguishes itself from edit_variants by noting that edits are handled there, though the description itself lacks an explicit verb like 'List' or '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?

The description gives context that this is for viewing plan versions and explicitly routes editing behavior to edit_variants with 'change them with edit_variants'. It does not explicitly state 'use this when you need to list/read versions', but the title and context make that reasonably clear.

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

videoRead the video pathB
Read-only
Inspect

The video camera path: {fps,speed,secs,rows [i,x,y,z,yaw,pitch,fov]}, cm, degrees, m/s. Change it and render it with edit_video.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
fpsYesFrames per second
rowsYesKeyframes: [i, x, y, z, yaw, pitch, fov]
secsYesLength in seconds
speedYesCamera speed m/s

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds value by disclosing the unit conventions (cm, degrees, m/s) and the structure of what's returned. No contradiction with annotations, but the behavioral detail is thin — it doesn't say whether the path is current or default, or how rows are ordered.

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?

The description is compact at two short clauses, but the dense format notation '{fps,speed,secs,rows [i,x,y,z,yaw,pitch,fov]}' is telegraphic and hard to parse at a glance. It's efficient but at the cost of clarity — a tradeoff that lands mid-range.

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?

An output schema exists, which covers return-value structure. The description covers units and fields but is cryptic about semantics like whether fps is a range or a fixed value, what 'secs' bounds are, or how many rows are typical. For a simple read tool it's adequate but not complete — an agent would need to consult the output schema and guess at the format meaning.

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

Parameters4/5

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

The tool has 0 parameters, so the baseline is 4 per the rubric. The description's format explanation (fps, speed, secs, rows with per-row i,x,y,z,yaw,pitch,fov) meaningfully describes what the output will contain, which compensates for the absence of a parameter list.

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 title 'Read the video path' states a clear read verb and resource, but the description itself is cryptic — it describes the data format ({fps,speed,secs,rows...}) rather than the tool's action. It implies reading the video camera path but never explicitly says 'reads' or 'returns the current path'. The format detail helps but the primary purpose is only implied.

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 points to edit_video as the sibling for modification and rendering ('Change it and render it with edit_video'), which provides useful routing. However, it doesn't differentiate from cameras or edit_cameras, which are also siblings that could overlap in domain. Guidance is partial.

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. 59 tool updatesv0.1.0
    • First observedaccept
    • First observedannotations
    • First observedarrange
    • First observedcabinet_run
    • First observedcameras
    • First observedcatalog
    • First observedcheck_layout
    • First observedcheckpoint
    • First observedcheckpoints
    • First observedcreate
    • First observedcut_list
    • First observeddelete
    • First observeddisciplines
    • First observededit_annotations
    • First observededit_cameras
    • First observededit_disciplines
    • First observededit_electrical
    • First observededit_levels
    • First observededit_plumbing
    • First observededit_variants
    • First observededit_video
    • First observedelectrical
    • First observedembed
    • First observedergonomics
    • First observedexport_cut_list
    • First observedexport_plan
    • First observedfeedback
    • First observedfill_lighting
    • First observedfit_roof
    • First observedget_home
    • First observedjoinery
    • First observedlevels
    • First observedlighting
    • First observedmaterials
    • First observedmeasure
    • First observedmerge_walls
    • First observedmove
    • First observednew_home
    • First observedopen_home
    • First observedplace
    • First observedplugins
    • First observedplumbing
    • First observedredo
    • First observedrender_3d
    • First observedrender_photo
    • First observedrender_plan
    • First observedrun_plugin
    • First observedsave_home
    • First observedsessions
    • First observedset_background
    • First observedset_home
    • First observedshow_plan
    • First observedsplit_wall
    • First observedtrace_background
    • First observedtrace_walls
    • First observedundo
    • First observedupdate
    • First observedvariants
    • First observedvideo

TDQS

A3.7/5.0

Scored across 59 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with a consistent read/edit pairing (e.g., cameras vs edit_cameras). A few overlapping areas exist (joinery, cabinet_run, embed) but detailed descriptions mitigate confusion. The high count introduces some selection risk, but overall boundaries are clear.

Naming Consistency5/5

Tool names follow a strong verb_noun pattern, with a systematic edit_* prefix for mutators and noun-only names for readers. All names are snake_case, consistent, and predictable.

Tool Count1/5

With 59 tools, the surface is extreme for any domain. Even for a comprehensive design application, this exceeds the calibration threshold of 50+ tools, making the set unwieldy and likely to overwhelm agents.

Completeness5/5

The tool surface is remarkably comprehensive, covering creation, editing, validation (layout, ergonomics, electrical, plumbing), lighting, rendering, export, collaboration, and versioning. No significant gaps are evident for the stated purpose of architectural and interior design.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Converts spoken descriptions into standards-compliant floor plans and furnished 3D models, enabling real-time collaborative editing through a live browser editor with Claude AI.
    6 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to create and edit 3D floor plans conversationally, describing rooms and layouts or uploading DWG/PDF drawings, then view them in 2D/3D via a live link.
    3
    MIT