Skip to main content
Glama

3D New Era AI

English · Português (Brasil) · Website · Try it in the browser

CI Latest release License: MIT OR Apache-2.0

An open-source home design, floor plan and interior design editor written in Rust, built so that your AI can design with you. It ships with a Model Context Protocol server: Claude, ChatGPT, Codex, Gemini, Cursor or any other MCP client draws the walls, furnishes the rooms, builds the joinery, checks lighting and ergonomics against real standards and renders the photos, while every change shows up live on screen and is one Ctrl+Z away.

A Sweet Home 3D alternative for Windows, macOS, Linux and the browser, in English, Portuguese, Spanish and French.

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

Three ways to use it

What you get

Account

Desktop app

The full editor on your machine, with a local MCP server at 127.0.0.1:7878. Nothing leaves your computer.

none

Browser editor

The same editor in a tab (WebGPU or WebGL). Switch on its MCP and your AI edits the tab's project.

none

Hosted connector

Add https://mcp.3dneweraai.com/mcp to Claude or ChatGPT and design from the chat, with projects kept in your account.

email sign-in

The desktop app and the browser editor are free, open source and need no account. The hosted connector is free within a quota; see pricing.

Related MCP server: 22B Interior Planning Master MCP

Install

Windows — in PowerShell:

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

macOS (Apple Silicon and Intel) — in Terminal:

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

or with Homebrew: brew install --cask leandrodaf/tap/3d-new-era-ai.

The installers work for your user only, with no administrator password: the app appears in the Start menu or Launchpad, newera goes on your PATH, the MCP server is registered in Claude Code and Codex if you have them, and running the same command again updates it. Uninstall with install-macos.sh --uninstall, or from Settings → Apps on Windows.

Prefer a plain download?

The builds are not signed with a paid Apple or Microsoft certificate, so the system asks once:

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

  • macOS: unzip and move 3D New Era AI to Applications, then 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 the menu entry, the icon and the .newera file type (--uninstall undoes it).

The one-line installers skip these prompts.

Connect your AI

Hosted, nothing to install. In Claude or ChatGPT, add a custom connector with the address https://mcp.3dneweraai.com/mcp and sign in with your email. Step by step: https://3dneweraai.com/connector/.

With the desktop app. The editor serves MCP at http://127.0.0.1:7878/mcp while it is open (or run newera serve for no window). The AI menu, or the MCP chip in the status bar, shows the snippet for your client, can register it for you, and lists the tools the agent calls as it calls them.

From a browser tab. Open https://3dneweraai.com/app/ and switch the MCP on in the AI panel (Ctrl+Shift+M). The tab gets an address your AI can reach through a small relay, because a tab cannot listen on a port. The relay passes messages and stores nothing; the project stays in the tab, and the address stops answering when you switch it off or close the tab. Treat that address like a password. Video rendering is not offered there, since it would hold the tab for minutes.

Then just ask, for example: "Draw a 4 × 5 m bedroom with a door and a window, furnish it and render a photo."

Client setup

One click, with the app installed:

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

Claude Desktop: download newera-mcp.mcpb from the latest release and open it.

Plugins with skills:

Client

Command

Claude Code

/plugin marketplace add leandrodaf/3d-new-era-ai, then /plugin install 3d-new-era-ai-desktop@3d-new-era-ai (the app on your screen) or /plugin install 3d-new-era-ai@3d-new-era-ai (hosted)

Codex

codex plugin marketplace add leandrodaf/3d-new-era-ai

Gemini CLI

gemini extensions install https://github.com/leandrodaf/3d-new-era-ai

Claude Code (already set up inside a clone of this repository by .mcp.json)

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

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 without the bundle — 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 does not matter, the app you chat in does. Use one that speaks MCP: 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 stdio for clients that start a process:

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

Over stdio, with the editor open the agent edits the plan in that window; with no window (or newera mcp --standalone) it works on a project of its own.

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, a slatted TV wall, an L kitchen and wardrobes from cabinet_run, downlights sized by photometry against NBR ISO/CIE 8995-1, and path-traced photos. Every image below came out of the editor. 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

Features

  • Plans from anything. Draw walls, arcs and sloping walls, or drop in a scanned plan at real scale and let background find the walls. Opens 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, the kitchen triangle, wheelchair turning space) and lux per room by photometry, each finding tied to its source and with the fix ready to apply.

  • Electrical and plumbing plans over the same floor plan: circuits and panel, Wi-Fi coverage, runs and checks against NBR 5410, NBR 5626 and NBR 8160.

  • 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 on the CPU, 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.

  • Furniture 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.

  • Try alternatives safely. Duplicate the plan into a new tab, change it and compare versions side by side; name checkpoints and come back to them.

  • Built for agents. People and agents go through the same undoable commands. Short ids (w12), [x, y] points in centimeters, compact reads and one-line write replies keep token use low.

  • Open and extensible. Plugins in any language over the HTTP API, several people on the same project with named cursors, and exports to PDF, SVG, PNG, GLB and OBJ.

MCP 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

home

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

create

Walls (polylines, arcs, sloping), rooms (polygon or detected from walls), dimensions, labels, roofs with skylights and solids, in one atomic call

update / move / delete

Edit any element by id

arrange

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

edit_walls

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

edit_home

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

background / edit_background

Scanned plan at real scale (calibration, X/Y scale, rotation); find the walls in it, and create them

catalog / place

Search the parametric catalog; place furniture, doors and windows (snapped into walls), beams, finishes and glass

joinery

Parametric cabinets, slatted panels, countertops with cutouts, plaster coves, shadow gaps and modular sofas

cabinet_run

Fill a wall with cabinets sized for it: even modules around corners, doors, windows, fridge and stove

embed

Set a sink or cooktop into a countertop (exact cutout) or an oven into a cabinet niche

fit_roof

Walls, glass and panels take the shape of the roof above and keep following it

cut_list

Boards, edge banding and hardware of the joinery, as CSV or DXF/SVG sheets

layout

Overlaps, pieces in walls, blocked doors, pieces outside rooms, areas against references

ergonomics

Review for the people living there: circulation, occupancy, kitchen, doors, ceiling heights, windows, wheelchair use

lighting / edit_lighting

Lux per room by photometry against NBR ISO/CIE 8995-1; place the fixtures a room needs

electrical / plumbing

Electrical and plumbing projects over the plan, changed through edit_electrical / edit_plumbing

measure

Free floor around a piece, the gap between two, what a straight probe runs into, how far a piece can grow

model

What an imported OBJ/glTF/GLB became: unit taken, size, triangles, materials, named parts, and what is not drawn; check=clashes finds parts passing through one another

edit_model

Swap the file of placed pieces in one undo step (keeping ids, size, finishes and links), change a material or a part by name, or give a lighter file for distant views

library / edit_library

A library of approved model versions, with their photos, measurements and source, placed in any project as library:<name>@<v>

accept

Mark findings of any review as seen, with the reason

rules

What a review checks against: the standards' tables, what each layout problem means, how ergonomics scores

materials / disciplines / annotations

Finishes, visible projects and layers, dimension chains and schedules; stale finds notes that no longer match the drawing

levels / cameras / variants / video

Storeys, points of view, plan versions and camera-path videos, each changed through its edit_* tool

render_plan / show_plan

PNG of the plan as the user sees it; the plan inside the chat as an interactive viewer (MCP Apps)

render_3d / render_photo

Software 3D views (aerial, visitor, cameras, elevations, sections); path-traced photos with sun and lamps

export

PDF, SVG or PNG plan; GLB or OBJ model; the cut list as CSV or DXF/SVG sheets

file

New, open and save: projects (.newera) and Sweet Home 3D import (.sh3d)

edit_history / history

Undo and redo, shared with the user, and named checkpoints to come back to

plugins / run_plugin / sessions

External plugins and the people working on the project

feedback

A note to the developers about what a tool could do better (desktop only)

The hosted connector adds projects, to list and switch between the projects in your account, and leaves out feedback, the plugin tools and library / edit_library (the library is a folder on your machine), which only make sense on your own machine; the browser tab leaves out the library tools too.

Command line

newera [FILE]           # desktop editor with the 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 (attaches to the open window, if any)

Options: --addr 127.0.0.1:7878 (or NEWERA_ADDR); --token (or NEWERA_TOKEN), required to listen beyond loopback; NEWERA_LOG for the log filter; 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.

Build from source

You need Rust 1.95 or newer (rustup). On Linux, also 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
make web-serve    # browser editor and viewer at http://127.0.0.1:8790

Run make to list every command. To host the browser editor yourself, serve web/ as static files, with .wasm sent as application/wasm and compressed (about 15 MB raw, a quarter of that gzipped). No backend or special headers are needed. The public site is built by scripts/site-build.sh and deployed on every push to main.

Browsers: Chrome, Edge and Safari 26 use WebGPU. Where it is missing (Firefox today) the editor falls back to WebGL 2 and still draws everything; a browser with neither gets a message pointing at the download.

Project layout

crates/
  newera-core        domain model, commands, undo/redo, geometry, standards — no UI, no I/O
  newera-catalog     parametric furniture and fixtures at exact sizes; OBJ/glTF import
  newera-joinery     parametric joinery and interiors, workshop rules, cut lists
  newera-ergonomics  habitability review: clearances, occupancy, kitchens, accessibility
  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-mcp         the MCP tools, over stdio and Streamable HTTP
  newera-server      REST API + MCP endpoint, sessions (axum)
  newera-plugins     external programs that edit the home over the HTTP API
  newera-app         desktop editor (egui + wgpu)
  newera-editor-web  the editor in the browser (WebGPU or WebGL)
  newera-web         lightweight WebAssembly viewer
  newera-relay       lets an AI reach the editor in a browser tab
  newera-cloud       the hosted service: accounts, OAuth, cloud projects, billing
  newera-telemetry   crash reports and usage notes
  newera             the binary that wires everything together

Documentation

Privacy and telemetry

The app sends crash reports through Sentry, along with the notes agents leave with the MCP feedback tool. 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).

Under the same switch, opening the app counts one app_open — a random installation id, the version, the operating system, the architecture and the mode — and the installers count one install and one uninstall, saying which system and whether the app came from a release or was compiled on the machine. Both go to 3dneweraai.com/ping, an endpoint of the site that holds the Google Analytics secret and forwards the count without passing the IP address on: the country Cloudflare already knows goes instead. A build made without the project's keys reports through the same endpoint, so installing from source counts like any other install; cargo build on a clone and CI count nothing. The hosted service keeps only what it needs: your email, your projects and usage, never the conversation. See the privacy policy.

Support the project

Everything above is free and stays free. If it saves you time, the Supporter plan (US$ 5/month or US$ 48/year) 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

57 tools
acceptAccept findingsA
Destructive
Inspect

Mark findings of 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 (`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
vNo
okYes
idsNo
revNo
textYes
removedNo
acceptedNo

TDQS

A4/5.0
Behavior5/5

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

Annotations only flag readOnlyHint=false and destructiveHint=true. The description goes well beyond: it discloses that accepted findings stop counting toward score/pendencies/dry runs while remaining visible, that an empty reason reverses the action, that prune drops orphaned acceptances, and that the step is undoable. This is rich behavioral context beyond structured data.

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 main action is front-loaded, but the sentence is dense with nested parentheses, semicolons, and parenthetical asides that make it harder to parse than necessary. The information earns its place, but the structure is cluttered.

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-optional-param mutation with an output schema, the description covers triggers, reversibility, orphan handling, and confirms the ok/accepted/removed reply. It stops short of directing the agent to re-read the review as part of a workflow, but is otherwise 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 coverage is 100%, so both parameters are already documented with near-identical text to the description. The description reinforces the [[key, reason]] shape and the orphaned semantics of prune but adds little that the schema doesn't already convey, so the baseline 3 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 description states a specific verb and effect: marking findings (layout, ergonomics, electrical, plumbing) as looked at via the key the review provides. It is clearly distinguishable from adjacent edit_* tools, though it doesn't explicitly name a sibling it competes with.

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

Usage Guidelines4/5

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

It explains the core usage path (accept=[[key, reason]] to mark looked-at, empty reason to reverse) and the conditional prune=true path for orphaned acceptances. What's missing is any explicit statement of when NOT to use it versus sibling tools like feedback or edit_history.

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 notesB
Read-only
Inspect

Plan annotations, read. stale=true lists what no longer matches: notes whose numbers differ from their piece, piece names whose sizes (módulo 70 cm, 80 × 60) differ, dimensions whose anchor is gone, and unanchored ones left with an end in the air near a face — rows [id, written, measured, against, text]; checked {dims, dims_unanchored, labels, names} counts what was compared (nothing checked is not a clean plan), and unverified [[id, text]] lists sizes nothing can confirm. It is the check after moving geometry. A note is tied to its piece with update(id=t1, about=f5). q= searches label text on every storey, q=re: by regex. With neither, answers the schedule {dims,refs,details,legend,rooms:[[room,[[tag,name,w,d,h,brand?,model?,url?]]]]}. edit_annotations switches modes, ties dimensions and bakes chains; brand, model and url go on pieces with 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
revNo
dimsNo
refsNo
roomsNo
staleNo
labelsNo
legendNo
checkedNo
detailsNo
unverifiedNo

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows it's a safe read. The description adds some behavioral detail like the structure of `stale` output, but it contradicts the annotation by calling it 'Plan annotations, read' which is fine, but the annotation says readOnlyHint true; description says 'edit_annotations switches modes' which is a different tool, not a contradiction. However, the behavioral transparency is low because it doesn't disclose important traits like whether it requires authentication, rate limits, or side effects. It does add context about what 'stale' means, which is good, but with annotations covering safety, the bar is lower, yet this description still misses key behavioral aspects.

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 run-on sentence with multiple clauses and parentheticals, making it hard to parse. It is not front-loaded well; the key purpose is buried in jargon. It lacks clear structure and could be broken into bullet points or shorter sentences.

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?

Given the complexity (read tool with two optional parameters, output schema exists), the description covers some aspects but misses important context like prerequisites, side effects (none expected), and how it relates to other annotation tools. It provides details on `stale` and `q` but not enough to fully understand the tool's behavior in typical workflows.

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 (`q` and `stale`). The description adds some semantic meaning: for `stale`, it elaborates on the return format and what counts as stale; for `q`, it mentions case/accent insensitivity and regex. However, it doesn't go beyond the schema significantly, and with full coverage, 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 opens with 'Plan annotations, read,' which states the verb and resource, and elaborates on what it reads (dimensions, tags, notes). However, it doesn't explicitly differentiate from the sibling `edit_annotations` beyond a brief mention that `edit_annotations` switches modes – it doesn't state that this tool is read-only and the other is write, leaving some 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?

It provides clear context by mentioning when to use `stale=true` and when to use `q`, and even points to `edit_annotations` for edits. Yet it doesn't explicitly say when not to use this tool or compare it to other read tools like `show_plan` or `measure`.

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
actionYesWhat to do; `array` makes copies in a row

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so mutation is covered. The description adds genuinely useful behavioral detail beyond that: the whole operation is "one undo step", group "moves/hides together", and flip "rebuilds what is inside it", which tells the agent about 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?

Front-loaded with the core purpose, then a dense but waste-free clause per action. It is a long block, but every clause carries action-specific meaning; readability suffers slightly from being one unbroken paragraph.

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

Completeness4/5

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

For a 10-action tool with 16 parameters, the description covers every action and notes the return ("Returns new ids"), and an output schema exists so return shape need not be explained. It is nearly complete, lacking only positioning relative to sibling tools.

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 100% schema coverage the baseline is 3, but the description adds real value by mapping parameters to actions (array {ids,n,dx,dy,dz}, align {ids,axis,edge,value}, distribute {ids,axis,gap?}), which the flat schema does not make explicit. This disambiguates the 16 shared parameters per action.

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 operation type ("Arrange elements in one undo step") and then enumerates all ten actions with concrete domains (rafters, columns, joinery, pool over deck). An agent can tell this apart from siblings like move/place/joinery because the description makes clear it is the multi-action transform/grouping toolbox.

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?

Supplies per-action usage context, e.g. align instead of "centers you work out yourself", flip vs mirror ("mirror only swaps left and right"), and distribute for "a run of joinery". It does not, however, state when to reach for this tool over sibling tools such as move or place.

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

backgroundFind walls in a scanA
Read-only
Inspect

Walls detected in the scanned plan under the drawing (edit_background action=set puts it there): thick dark or gray bands across or down the image become walls, colored areas (lawn, plants, furniture) are ignored, and pieces split by doors or windows up to max_gap join; region limits the search. Returns rows [[x1,y1],[x2,y2],t] in plan cm without drawing; edit_background action=trace creates them. 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
rowsYes

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 and openWorldHint=false; the description reinforces this by stating results are returned 'without drawing'. It goes further than annotations by disclosing the detection heuristics (thick dark/gray bands, colored areas ignored, door/window gaps joined) and the luminance-based threshold behavior.

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?

One dense paragraph that is front-loaded with the detection rules and ends with the return shape and cross-references. Nearly every clause carries information, though the long em-dash construction is somewhat run-on and could be split for faster 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?

Output schema exists, so describing return values is not strictly required, yet the description still names the row format and units, which helps interpretation. Detection rules, preconditions, and verification tooling are all covered; only edge-case behavior (e.g., no walls found, very large scans) is left unstated.

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 still adds meaning beyond the schema for the two subtlest params: max_gap ('pieces split by doors or windows up to max_gap join') and region ('limits the search'), which make their effect on output concrete.

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

Purpose5/5

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

States a specific verb and resource (detect walls in a scanned plan) and pins down the exact source of the image ('under the drawing, put there by edit_background action=set'). It is clearly distinguishable from siblings like edit_walls and edit_background, which create or modify rather than detect.

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

Usage Guidelines4/5

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

Explains the precondition (a scan must already be placed via edit_background action=set) and routes the agent to related siblings for adjacent tasks (edit_background action=trace to create, render_plan bg=0.5 to verify). No explicit 'do not use this when…' exclusion among siblings, so it stops short of a 5.

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

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
rowYes
wallYes
notesYes
modulesYes
removedYes
adjustedNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations mark destructiveHint=true and readOnlyHint=false, and the description corroborates by disclosing 'Replaces the cabinets already there (keep ids stay)' — the exact destructive scope — plus the dry-run escape hatch. It further sketches the return shape ({modules, removed, notes}), which is real behavioral context, though some of it overlaps the output schema.

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

Conciseness3/5

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

The purpose is front-loaded, but the bulk is a single sprawling sentence with nested parentheticals and semicolons that is hard to parse rather than efficiently scannable. Information density is high and most clauses earn their place, but the structure underserves it.

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

Completeness4/5

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

For a high-complexity 8-parameter tool with a nested `p` object and an output schema, the description covers the destructive lifecycle, defaults, appliance/wardrobe placement, and the keep-vs-replace contract. Return values need not be re-explained since an output schema exists; remaining gaps are minor edge-case semantics.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), but the description genuinely adds meaning: the EN 1116 rationale for target=60/max=90/sink_w=80/cooktop_w=60, the 15–30 cm pull-out and sub-15 filler fallbacks, and the placement rules for p.sink/p.cooktop (cabinet under it plus countertop cutout). These are semantic rules the schema cannot express, though they only partially disambiguate the addProperties-true `p` bag.

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 states a specific verb + resource + scope: 'Fill a wall with cabinets sized for it,' and the body expands into exactly what it generates (modules, drawer unit, countertop, wardrobe rows, appliance cutouts). It also names the sibling it is not for the post-edit step ('Change one module afterwards with joinery id'), so an agent can distinguish it from joinery/place/arrange without opening schemas.

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

Usage Guidelines4/5

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

It gives context for when to reach for it (fill a whole wall/row, including appliances and wardrobes) and explicitly routes follow-up edits to the joinery sibling, plus the dry-run mode ('dry plans only'). It stops short of stating when NOT to use it versus place/arrange/layout, so it is clear but not exclusion-complete.

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
rowsYes
activeYes

TDQS

A3.9/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, so safety is covered. The description adds useful unit context (cm and degrees) that annotations don't carry, but the structural field list largely duplicates the existing output schema.

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

Conciseness4/5

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

Two compact sentences, with the data-shape summary front-loaded and the alternative tool noted last. The field notation is dense but 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?

An output schema exists and annotations cover the safety profile, so the description only needs to orient the agent, which it does. Units and the edit_cameras pointer round out everything needed to call this no-arg reader.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to document and the baseline is 4. The description does not need to compensate for any parameter gaps.

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 (stored points of view) and effectively the read behavior, reinforced by the title 'List points of view'. It explicitly contrasts with the mutation sibling edit_cameras, so an agent can distinguish it without opening the schema.

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

Usage Guidelines4/5

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

It routes the agent clearly: view stored cameras here, but 'Change them with edit_cameras' for modification. There is no explicit when-not clause, but the read-vs-edit split is unambiguous.

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

catalogSearch the furniture catalogC
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
moreNo
usedNo
itemsNo
categoriesNo

TDQS

C2.7/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, so safety profile is covered. The description adds useful behavioral context: the row schema, front/wall/free semantics, and that scope=project lists what the plan already uses. It stops short of return format (though an output schema exists) or pagination behavior.

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 one massive run-on sentence with dense domain jargon (front semantics, +y local axis, plan angles) that could be separated. It is not front-loaded—the actual search purpose is buried at the start but the rest rambles into row formatting. Structure is poor despite conveying information.

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

Completeness3/5

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

With an output schema present, the description needn't explain return values, and it does provide meaningful domain context about the front field. However, it omits guidance on how to search effectively (e.g., combining q and cat) and does not clarify the relationship to the project scope alternative. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented. The description adds interpretation of row structure and the semantics of the 'front' field, which is not in the schema, but does not add per-parameter detail beyond what the schema provides. Baseline 3 is correct.

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

Purpose3/5

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

The description's opening 'Find catalog items' does state the verb and resource, and the schema covers search parameters. However, the bulk of the text describes row format, front semantics, and the project scope mode rather than distinguishing this catalog search from siblings like 'library', 'place', or 'edit_library'. Compared to a 5 that names the specific sibling it is not, this is adequate but not distinguishing.

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 mentions scope=project behavior but never states when to use catalog search versus library/edit_library or place. No explicit when-to-use or when-not-to-use guidance relative to the many sibling search/placement tools. Usage context is implied by the 'scope=project' mention but not framed as guidance.

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
pxNoPoints are background-image pixels; lengths stay in cm
dimsNoDimension lines: between two points, along a wall, or across a room
exactNoKeep wall ends as given; no snap onto nearby walls
roofsNoPitched roofs over a rectangle, as one group of 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: outlines raised by `h` (slabs) or sections swept `a`→`b` (gables, ramps)
polylinesNoFree lines: annotations, arrows, electrical or plumbing runs

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the atomicity trait (all primitives created in one step), which is genuinely useful, but says nothing about permissions, partial-failure behavior, or reversibility.

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

Conciseness4/5

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

Front-loaded with 'Create' and packs all resource types into one dense sentence with no filler. It is long, but for a 10-parameter multi-primitive tool every clause carries information, so the length is defensible.

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 breadth, the description enumerates all creatable primitives, and since an output schema exists it need not explain return values. The only gap is the absence of guidance on when to prefer it over sibling creation/edit tools.

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 every parameter and nested field is already documented in the schema. The inline hints (hs = height per point, at=[x,y], ceiling_flat=false follows wall profiles) largely restate schema content, so the description adds only marginal semantic value. Baseline 3 is correct.

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 specific verb (Create) and enumerates every resource it produces: walls, rooms, dims, labels, roofs, solids. An agent can distinguish it from siblings like edit_walls or place without opening any schema.

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

Usage Guidelines3/5

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

The closing phrase 'in one atomic step' implies this is a batch-creation tool, which is useful context, but the description never names alternatives or states when-not-to-use it versus edit_walls, place, or move. Usage is only implied.

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

cut_listCut listB
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 what=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
drawnNo
sheetsNo
skippedNo
sourcesYes
hardwareYes

TDQS

B3.3/5.0
Behavior4/5

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

With readOnlyHint and openWorldHint already declared, the description still adds substantial behavioral content the annotations do not: the 50 mm board threshold, the 'board is its finish and thickness, no edge banding' rule, skipping of non-board parts as [[id,name]], and row merging by size/hardware/sheets. These tell the agent how output is derived and transformed. It does not cover auth or pagination, so it falls short of a 5.

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

Conciseness3/5

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

It is front-loaded with the core purpose, but the body is a jargon-heavy run-on stitched together with colons and semicolons, and the trailing panel-standard trivia (NBR 15316 / NBR 14810) is marginal for tool selection. The content is mostly substantive, yet the structure makes it hard to parse quickly.

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, so the description ideally need not restate the return shape, yet it spends most of its length on row layout. Behavioral coverage of the core transformation is decent, but the absence of any usage or routing guidance leaves a real gap for an agent choosing among dozens of siblings. Adequate, 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% for the single optional 'ids' parameter, which already documents the default ('every build and drawn group on this storey'). The description adds no additional meaning about how ids are supplied or whether they can mix build and drawn-group ids, so the baseline 3 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 description names a specific resource and scope: a cut list covering joinery builds and hand-drawn groups, with detail on what qualifies as a board (<=50 mm thick) and what gets skipped. It is clear what the tool produces, though the operative verb is implicit ('Cut list of...') and it never explicitly distinguishes itself from siblings like 'joinery', 'layout', or 'export'.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus alternatives, nor any prerequisites. The only pointer toward another tool is the aside that 'export what=cut_list writes it as .csv, or .dxf/.svg', which names a mechanism rather than a decision condition. The dense output-format detail substitutes for usage guidance rather than supplying it.

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 (remove) walls, rooms, pieces or any element 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
vNo
okYes
idsNo
revNo
textYes
labels_leftNo
labels_deletedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so safety is covered. The description goes beyond that by disclosing the atomic deletion semantics, the side effect of orphaning labels, the labels_left reply structure, and the rationale for index-code invalidation — real behavioral context not present in 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 main purpose is front-loaded, but the sentence is a long, em-dash-heavy run-on; the clause about an index code pointing at another piece being 'found by nobody' is confusing and could be trimmed. Structure is functional but not clean.

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, return values need not be re-explained, yet the description still characterizes the labels_left payload and the labels flag. It covers scope, atomicity and side effects; what remains thin is guidance on failure modes or partial-deletion behavior.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description earns above baseline by explaining the consequence of labels=true (labels deleted in the same step) and clarifying that ids accept any element type, adding intent beyond the schema's field-level text.

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

Purpose4/5

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

The description names a specific verb (delete/remove) and concrete resources (walls, rooms, pieces, any element by id), plus the atomicity trait. It is unambiguous versus swap-style siblings like move or update, but it never explicitly differentiates itself from the edit_* family, which also mutate model elements.

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

Usage Guidelines3/5

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

Usage is only implied: the agent can infer when to set labels=true (to also purge dangling labels) from the explanation. There is no explicit when-to-use/when-not guidance or routing to an alternative tool, so this is minimum-viable rather than instructive.

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); 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
actionNoDefault `active`

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeNo
hiddenNo
layersNo
lines_cmNo
plumbingNo
electricalNo
show_all_3dNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and closed-world behavior. The description adds meaningful context by explaining what each action reveals (the active discipline, hidden elements, layers, grouped quantities) and reinforces that changes belong to edit_disciplines. No auth or rate-limit details, but the added return semantics are useful.

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 dense and informative but not optimally front-loaded; the first sentence is a fragment and the return shapes are embedded mid-description. It is reasonably efficient but could be structured more clearly for an agent scanning for the tool's purpose.

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 a single optional parameter, full schema coverage, annotations, and an output schema, the description provides enough context to call the tool correctly. It explains both actions and the alternative for mutation, though it does not elaborate on sibling differentiation beyond edit_disciplines.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes further by detailing the two enum values: what 'active' returns (discipline, hidden state, layers) and what 'quantities' returns (grouped counts with names). This adds genuine meaning beyond the schema's brief 'Default active'.

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 (disciplines, plan layers) and explains what each action returns, distinguishing it from the mutating sibling edit_disciplines. The opening sentence is a noun phrase rather than a clear verb+resource, but the title and action breakdown make the read-only purpose evident.

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 explicitly points to edit_disciplines for changing what is shown, giving one clear alternative for mutation. However, it does not say when to choose this tool over other read siblings like show_plan, electrical, or plumbing, leaving usage largely 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, so it is measured again on every change instead of drifting (tie them while the numbers are right); one already off its face is not tied and comes back in left [[id, written, measured, near]], and one whose anchor died with a deleted piece is tied again or released. Switch dims (dimension chains), refs (the room reference schedule, whose tags stay with their pieces; renumber=true numbers them again in reading order), details (brand/model/link in refs) and legend (symbols 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; refs=true returns the schedule {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). annotations reads them.

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
vNo
okNo
idsNo
revNo
dimsNo
leftNo
refsNo
textNo
roomsNo
chainsNo
legendNo
changedNo
detailsNo
symbolsNo
anchoredNo
releasedNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations flag a destructive, non-read-only edit, and the description goes well beyond that: it explains that anchor makes dimensions re-measure on every change, what happens to already-off dimensions ('comes back in left [[id, written, measured, near]]'), what happens when an anchor's piece is deleted, and that bake permanently converts automatic chains into editable dimensions. These are meaningful behavioral consequences the annotations do not carry.

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 body is one dense run-on block of poorly punctuated prose with embedded return-shape literals ('{dims,refs,details,legend,rooms:[[room,[[tag,...]]]]}') that is hard to parse and not front-loaded. Several clauses duplicate the per-parameter schema descriptions verbatim, so the text is not earning its length.

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?

The tool is complex (7 modes, mutation, output schema), and the description covers the destructive switches, the anchor lifecycle, and what the mode responses contain. With an output schema and annotations already present, the remaining gaps (no explicit when-to-use routing) are minor; completeness is largely satisfied.

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 seven flags and the description largely restates them. It does add some nuance (renumber's reading-order behavior, the shape refs=true returns, legend/chains output formats), but much of this overlaps with the per-parameter schema text rather than extending it, 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.

Purpose4/5

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

The verb+resource is clear ('Change the plan annotations') and the description enumerates the concrete facets it operates on: dims, refs, details, legend, bake, anchor. It also implicitly distinguishes itself from the read-only sibling with '`annotations` reads them.' It stops short of a crisp one-line scope statement, but an agent can tell what it 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?

There is real conditional guidance for one mode ('tie them while the numbers are right' / 'Run it while the numbers are right'), and the pointer that `annotations` reads rather than edits. But for the other six switches (dims, refs, legend, details, renumber, bake) there is no when-to-use, sequencing, or alternative-selection guidance — usage is implied by the mode descriptions rather than stated.

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

edit_backgroundSet or trace a scanned planA
Destructive
Inspect

Put a scanned plan under the drawing at real scale, or turn it into walls. set {path, then cm_per_px (+cm_per_px_y), calibrate {a,b px, cm} or calibrations [{a,b,cm}…] to fit X/Y scales; angle (clockwise °); offset, opacity, visible; clear=true removes it}. trace {threshold?, min_len?, t_min?, t_max?, max_gap?, region?, h?} creates, in one undo step, the walls background detects with the same options, on the image set puts there. Check with render_plan bg=0.5.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoFor `trace`: wall height cm (default 250)
pathNoFor `set`: image file (png/jpg/webp/bmp); required when there is no background yet
angleNoFor `set`: clockwise turn of the image, degrees
clearNoFor `set`: remove the background
t_maxNoFor `trace`: thickest wall kept, cm (default 45)
t_minNoFor `trace`: thinnest wall kept, cm (default 5)
actionYesWhat to do with the scanned plan
offsetNoFor `set`: plan position cm of the image's top-left corner
regionNoFor `trace`: only this part of the plan `[x0, y0, x1, y1]` cm
max_gapNoFor `trace`: doors and windows up to this wide don't split a wall, cm (default 130)
min_lenNoFor `trace`: shortest wall kept, cm (default 60)
opacityNoFor `set`: how opaque the image is drawn, 0..1
visibleNoFor `set`: show or hide the image without removing it
calibrateNoFor `set`: two pixels with a known real distance, `{a, b, cm}`
cm_per_pxNoFor `set`: the scale, cm per image pixel
thresholdNoFor `trace`: luminance 0..255 below which a gray pixel is ink (default 128)
cm_per_px_yNoFor `set`: the vertical scale, when it differs
calibrationsNoFor `set`: several known distances, fitting X and Y scales apart

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations mark it as destructive (destructiveHint: true) and not read-only, and the description reinforces that `trace` creates walls 'in one undo step' and `set` modifies the drawing. It also notes that `clear=true` removes the background. This adds useful behavioral context beyond annotations.

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

Conciseness3/5

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

The description is dense but front-loads the two actions. However, it crams many parameter details into a single run-on sentence, making it harder to parse. Some redundancy with schema descriptions.

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 18 parameters and a destructive operation, the description covers the key behaviors: scale calibration, undo step, and removal. It also refers to `render_plan` for checking. An output schema exists, so return values needn't be explained. The only gap is not explaining when to use this tool versus `background` or `edit_walls`.

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 description enumerates all parameters and their purposes, but the schema already has 100% description coverage for each parameter. The description adds value by grouping parameters by action and explaining defaults, but doesn't go beyond the schema substantially. Baseline 3, bumped to 4 for practical grouping.

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 two specific operations: placing a scanned plan under the drawing at real scale, and turning it into walls. It distinguishes itself from siblings by naming the `action` values and what each does. However, it doesn't differentiate from `edit_walls` or `background`, which may overlap.

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 each action but doesn't explicitly state when to choose `set` vs `trace` vs alternatives like `background` or `edit_walls`. It only gives a hint to check with `render_plan`.

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
actionNoWhat to do with the points of view
look_atNoFor `store`: point `[x,y,z]` cm to look at (sets yaw and pitch)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.8/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, covering the safety profile. The description adds convention context (yaw/pitch orientation, cm/degrees, 'missing values from the visitor' defaults) but never states that 'delete' permanently destroys a stored view or what happens to indices after deletion. Adequate but thin 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?

Highly front-loaded and dense, with no filler sentences; action semantics are packed into a compact block. The telegraphic style ('delete {i}. cm and degrees.') risks ambiguity, but every clause carries information.

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

Completeness4/5

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

With 10 parameters, a multi-value enum, and an output schema already present, the description covers all four action branches and the coordinate conventions well. Gaps are minor: no note on post-delete indexing or error behavior for invalid indices.

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 genuinely exceeds it: it maps which parameters belong to 'store', defines yaw 0 as +y/plan bottom and 90 toward -x, states pitch positive looks down, and specifies cm/degrees units and the default view name.

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

Purpose4/5

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

States a specific verb+resource ('Change the points of view') and enumerates the four modes of operation (view, aerial, store, delete). It implicitly distinguishes itself from the read-only 'cameras' sibling by pointing to it for the list, though it never names the contrast in the purpose line itself.

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?

Enumerates each action and its effect, and explicitly routes the agent to the 'cameras' tool for listing. However, it gives no guidance on prerequisites (e.g., whether a view index must exist before delete) or when aerial is preferable to a stored view.

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`
actionNoWhat to do with discipline `d`
show_all_3dNoWhether the 3D shows everything (true) or hides what the plan hides (false). Applies with any action

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeNo
hiddenNo
layersNo
lines_cmNo
plumbingNo
electricalNo
show_all_3dNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false; the description adds substantial behavioral context beyond that—new symbols go to the selected discipline while the rest is dimmed, hiding removes items from the plan, its exports and the 3D, and the 3D follows the plan unless show_all_3d=true. This is exactly the operational disclosure a mutating toggle needs.

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 lead sentence is well front-loaded, but the body is a dense semicolon-heavy wall of text mixing actions, layers, 3D behavior and override mechanics, making it hard to parse. Information density is high, but structure and scannability suffer.

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, return values need not be explained, and the description covers the complex discipline/layer/3D interplay, including the update(layer=) override. It is nearly complete for this complexity, though the tangled presentation leaves some edge relationships (e.g., show vs. select on architecture) to inference.

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 meaning beyond the schema: it clarifies that d means a discipline for select but may also be a plan layer (lighting/appliances/joinery) for show/hide, and it enumerates what each layer contains. This disambiguates the overloaded parameter in a way the schema does not.

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

Purpose4/5

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

The opening 'Change what the plan shows' gives a specific verb+resource, and the text names what each action (select/show/hide) operates on, distinguishing disciplines from layers. However, the run-on phrasing and the mixed treatment of disciplines vs. layers make the core purpose harder to extract than a clean statement would, so it falls short of the top score.

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

Usage Guidelines4/5

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

It explains the effect of each action (select vs. show/hide) and routes the agent to alternatives: update(layer=...) for overriding a piece's layer, and the 'disciplines' tool to see current state. What's missing is an explicit statement of when NOT to use this tool, so it stays at a clear-context, no-exclusions level.

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 (electrical reads it); each action is one undoable step. assign {ids, circuit, va?}, or circuits {"C1": [ids], …} for the whole division, writes circuits, power and volts (127|220; a 220 V outlet makes its circuit 220 V) on points; on automation points it takes standby_w, on a dimmer max_w, on a panel modules. voltage {volts?, short_ka?, earthing?}. cable {kind, pts} draws a run by hand (with ids or circuit instead of pts it is a route). route {kind, ids? | circuit?, via?: ceiling|floor|wall|tape, cat?, from?} lays the run as it is built, from the nearest panel along and inside the walls, replacing the earlier run of the circuit, and answers {via, suggested, length_m, by_premise_m, bends, materials: [[item, qty, unit]]}; without via it takes the cheapest premise that can be built. via=tape is surface flat wiring, power only (rules topic=electrical). wifi {ids, standard?, poe?, uplink?, bands?} writes those on access points.

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` and `route`: what the run carries
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` puts `ids` on `circuit` (empty takes them off), `va` sets their power; `voltage` is the supply, 127 or 220 V
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
vNo
okNo
idsNo
revNo
runNo
viaNo
goneNo
tapeNo
textNo
addedNo
bendsNo
changedNo
coverageNo
length_mNo
warningsNo
materialsNo
suggestedNo
propertiesNo
annotationsNo
by_premise_mNo
access_pointsNo
replaced_drawnNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false. The description adds real value beyond that: 'each action is one undoable step' (mitigating the destructive hint) and 'replacing the earlier run of the circuit' (spelling out what is destroyed). It also discloses the `route` return shape, which is unusual given destruction semantics.

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

Conciseness4/5

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

Front-loaded with purpose and every clause carries signal — no filler. However it is delivered as one dense semicolon-heavy paragraph covering five actions, which is harder to parse than the same content segmented by action; brevity is achieved at some cost to scannability.

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

Completeness4/5

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

For a 21-parameter, five-action mutation tool with an output schema, the description covers every action, the conditional parameter mappings, and the destruction/undo model. Remaining gaps (permissions, failure modes, whether undo is guaranteed for every action) are minor against a rich schema and existing annotations.

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 would be 3, but the description adds cross-parameter logic the schema can't express: 'a 220 V outlet makes its circuit 220 V', 'on automation points it takes standby_w, on a dimmer max_w, on a panel modules', and the ids/circuit vs pts distinction. These conditional applicability rules are genuine added meaning.

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

Purpose5/5

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

States a specific verb and resource ('Change the electrical and telecom project') and then enumerates the five concrete mutations (assign, voltage, cable, route, wifi). The resource is distinct from siblings like edit_lighting, edit_plumbing, edit_walls, so an agent can route here without opening a schema.

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

Usage Guidelines4/5

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

Gives strong internal routing: 'assign {ids, circuit}' vs. 'circuits {...} for the whole division', and 'with ids or circuit instead of pts it is a route', plus the fallback 'without via it takes the cheapest premise'. It even points to the `rules` topic=electrical for surface wiring constraints. It stops short of explicit when-not-to-use or sibling alternatives, so it earns a 4 rather than 5.

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

edit_historyUndo, redo, checkpointsA
Destructive
Inspect

Undo, redo, or name where the plan is now and come back to it. undo and redo step through changes, whoever made them, and the reply names what changed. checkpoint {label} remembers this point; 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; history lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoFor `checkpoint` and `revert`: the checkpoint's name
actionYesWhat to do

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
goneNo
textYes
addedNo
changedNo
propertiesNo
annotationsNo

TDQS

A4.5/5.0
Behavior5/5

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

The annotations declare only the destructive/read-write profile. The description adds valuable behavior beyond that: undo/redo step through changes made by anyone, the reply names what changed, checkpoints persist with the project and survive saving, and revert preserves every id unlike duplication. This meaningfully improves the agent's understanding of side effects and results.

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

Conciseness4/5

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

The description is front-loaded with the action list and then explains the less obvious actions (checkpoint, revert). It is appropriately sized for a four-action tool, though the revert/duplication clause is somewhat dense and could be tightened.

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

Completeness4/5

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

Given the tool has four actions, a 100%-covered schema, and an output schema, the description is nearly complete. It covers persistence, id preservation, and reply behavior, but does not explicitly warn that revert discards later changes or state whether checkpoints can be removed, leaving minor gaps for a destructive tool.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema documents both parameters. The description still adds meaning by tying each action enum value to its effect (e.g., checkpoint remembers this point, revert undoes back to it while keeping ids) and clarifying how label is used. It does not add syntax or edge-case detail for the parameters.

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

Purpose5/5

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

The description names four specific actions (undo, redo, checkpoint, revert) and explains what each does, including the alternate framing 'name where the plan is now and come back to it.' It also distinguishes this tool from the sibling history tool and from duplicating a version. This gives an agent a clear, distinct purpose.

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 explicitly points to `history` for listing checkpoints and contrasts revert with duplicating a version ('a copy renumbers'), which helps choose the right tool in those cases. However, it does not state general when-to-use or when-not-to-use guidance for undo/redo versus other edit tools, leaving some 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_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, 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`, `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
regionNoState or province whose code applies: `sp`, `fl`; `""` clears it. In the United States it is the state that adopts a building code, so it matters as much as the country there
countryNoCountry whose standards apply, ISO 3166-1 alpha-2: `br`, `us`, `de`; `""` clears it. It decides which sources oblige and which only inform — a Brazilian standard is a reference in Florida, and the IRC is a reference here. A city we hold implies its country, so this is for saying where a project is when no code was picked
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
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds genuinely non-structured behavior: omitted fields 'stay as it was' (patch semantics), `{key: null}` removes a property, and city/people are persisted with the project and inherited by ergonomics/layout/dry runs. That persistence vs per-call distinction is real added value.

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

Conciseness4/5

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

Two sentences, front-loaded with the enumeration of editable settings so the agent sees scope immediately. The second sentence is slightly meandering but earns its place by explaining why city/people matter. No filler sentences.

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, return values need not be described, and the safety profile is carried by annotations. The description covers the semantically rich parameters (properties, people, city) adequately. It under-describes the compass geometry and the region/country code-selection parameters, though the 100%-covered schema compensates.

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 11 parameters in depth, including the People and ReviewScope sub-objects. The description mostly restates what the schema carries (properties as {key: value|null}, the people fields, city=sao-paulo) and omits region, country, compass_d, compass_at and compass_visible entirely. 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 names specific operations on a specific resource: rename the project, set/remove properties, set the compass, set the city code, and set occupants. An agent knows this is the project-level settings editor. It does not, however, distinguish itself from overlapping siblings such as edit_levels (storey properties are set here too via `level`) or the `home` tool.

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

Usage Guidelines3/5

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

Usage is only implied: the trailing sentence about `ergonomics`, `layout` and dry runs hints that this is where project-wide context is established before scoring. There is no explicit when-to-use statement, no when-not to use it, and no named alternative among the many `edit_*` siblings.

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`
actionNoWhat to do with the storeys
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
vNo
okYes
idsNo
revNo
textYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: delete removes a storey *and its content*, elev raises a storey *with its walls, floors and openings*, reference=true marks a tracing layer that *checks and ergonomics skip*. These are meaningful mutation consequences and side effects an agent needs, consistent with destructiveHint=true.

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

Conciseness4/5

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

Front-loads the purpose ('Change the storeys') then walks through actions compactly with shorthand notation. Every clause carries information; the brace notation is terse but not padded, though slightly cryptic to parse.

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 6-parameter mutation tool with an output schema, the description covers all actions, their parameters, destructive side effects, the reference-layer behavior, and the sibling listing tool. Nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value by mapping which parameters apply to which action (name/h/elev for add; id+elev/h/name/reference for update) and explaining the semantic effect of elev and reference. Adds meaning beyond the field descriptions 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?

States a specific verb+resource (changing storeys) and then enumerates the four operations (add, select, delete, update) with their effects. It also clearly differentiates from the sibling `levels` tool by naming it as the list operation. An agent can distinguish this from other edit_* tools without opening the schema.

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

Usage Guidelines4/5

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

Explains when each action applies (e.g. use `reference=true` when two storeys share an elevation) and routes listing to the `levels` tool. It notes 'Other tools act on the selected storey,' implying selection is a prerequisite. No explicit when-not guidance against other edit tools, but context is clear.

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

edit_libraryPublish to the model libraryAInspect

Publish to the asset library: action=publish keeps a piece's model file — with its companion files, reference pictures, measured sizes, unit, box, brand and source link — as the next version of name, with notes on what changed and fidelity (what was estimated). A version never changes after; library lists them.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYespublish: the piece whose model, photos, measurements and unit are kept, e.g. `f12`
nameYespublish: the entry, lowercase letters, digits, - and _ (e.g. `oak-armchair`)
notesNopublish: what changed in this version
actionYes`publish`: the piece's model as the next version of `name`
fidelityNopublish: how far it can be trusted (what was estimated, what was measured)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.7/5.0
Behavior5/5

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

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds real behavioral context beyond that: a version is immutable ('never changes after'), what payload is carried over (model file, companion files, reference pictures, measurements, unit, box, brand, source link), and what notes and fidelity record. This is exactly the disclosure a mutation tool needs.

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 operation and its scoping are front-loaded, and the em-dash-aside efficiently enumerates the preserved payload. It is a single dense sentence, slightly overloaded, but nearly every clause earns its place.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description covers what gets published, immutability, and the notes/fidelity semantics. It stops short of stating prerequisites or how this relates to the sibling library/update tools.

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 all five parameters are already documented, including notes ('what changed') and fidelity ('what was estimated'). The description restates those meanings in prose without adding format, constraints, or defaults the schema lacks, so the 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 opens with a specific verb and resource — 'Publish to the asset library' — and the action=publish phrasing pins down the exact operation, so an agent knows this creates a new library version. It does not, however, distinguish itself from siblings like library, update, or create, which publish-related work could plausibly route to.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance: nothing says to prefer this over update/create, nor what prerequisites (e.g. an existing piece id, a name collision policy) must hold. The trailing 'library lists them' is a behavioral note rather than routing guidance.

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

edit_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 lighting. 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
noteNo
afterNo
beforeYes
placedYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-destructive, non-open-world mutation. The description goes further by explaining the placement mechanism, the termination condition, and what is returned (placed ids plus the room's rating before and after) — meaningful behavior beyond the annotations. It does not discuss reversibility or idempotency, but destructiveHint=false plus the reported ids cover the main risk surface.

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

Conciseness4/5

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

It is a single dense sentence (plus a short follow-up on the reply), front-loaded with the action and the fixture enumeration. Every clause earns its place, though the semicolon-linked structure is slightly run-on.

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 a full output schema and annotations covering the safety profile, the definition only needs to convey the mechanism and the target-setting behavior. It does that, plus notes the rating before/after. Adequate and complete for a four-parameter mutation tool.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all four parameters, and an output schema exists. The description clarifies that `lux` overrides the room reference and enumerates the valid `fixture` values, but this largely restates the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description gives a specific verb (fill), resource (a room with a grid of one fixture), the fixture options, and the termination condition (work plane reaching the ABNT/CIE reference or a given lux). That is far more concrete than the tautological title. It references the sibling `lighting` only as the photometry engine it shares, not as an alternative to choose between, so it stops short of a clean sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied: this is the tool that auto-places a grid of fixtures to hit a target illuminance. There is no explicit statement of when to use it versus `lighting` (inspection) or `edit_electrical`, and no prerequisites or exclusions are given. The relationship to `lighting` is noted but not framed as a routing decision.

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

edit_modelReplace a model fileA
Destructive
Inspect

Change the imported model of placed pieces (ids), one undo step each; rev refuses a change if the plan moved on. replace swaps the file (library:@ too; every=true: on every piece using it), keeping id, place, size (size=natural takes the file's), finish, overrides and links; the new file is read first, and the reply gives the version loaded, overrides left matching nothing and what the file leaves out. material changes one material by the name model lists: color, mat (an image), repeat (texture scale: 2 halves it), clear. part hides, moves (offset cm: x across, y to the front, z up) or resizes one part by name — the back cushion alone. lod adds a lighter file drawn beyond a camera distance (beyond cm, default 400); detail=always holds the full one. reference keeps a product photo (file, view, part, source) that render_3d ref= shows beside the model; measure keeps a product size (dimension: width|depth|height|.height, cm, source, confirmed) that model compares with the drawing. model inspects; place imports.

ParametersJSON Schema
NameRequiredDescriptionDefault
cmNomeasure: the product's value, cm
idsYesPieces whose model changes, e.g. `["f12"]`
matNomaterial: an image over it, `img:trama.png`, or `none` for the file's own
revNoRevision the change was prepared on; refused if the plan has moved on since
fileNoreplace/lod/reference: the new .obj/.gltf/.glb file (lod: the lighter one; reference: the photo)
hideNopart: hide it (true) or show it again (false)
noteNoreference: what it shows
partNopart: which one, by the name `model` lists (`almofada_encosto`)
sizeNoreplace: `keep` each piece's w/d/h (default) or take the new file's `natural` size
unitNoreplace: unit of the new file's numbers, `m`, `cm`, `mm` or `in` (default: guessed)
viewNoreference: the side the photo shows
clearNomaterial/part: back to the file's own
colorNomaterial: its color `[r,g,b]`
everyNoreplace: also every other piece using the same file as `ids` (default: only `ids`)
scaleNopart: resize it about its center, `[x, y, z]` factors
actionYes`replace` puts another file in the pieces, keeping each one's id and all the rest; `material` changes one of their materials, `part` one of their parts, by name; `lod` gives them a lighter file drawn from afar; `reference` keeps a photo of the product with them, `measure` a measurement of it
beyondNolod: farther than this from the camera, cm, the lighter file is drawn (default 400)
detailNolod: `always` draws the detailed file however far (a close review); `auto` switches again
offsetNopart: move it by `[x across, y to the front, z up]` cm from where the file has it
removeNoreference: take out the one at this index (`model id=` lists them)
repeatNomaterial: times its image repeats against the file's mapping (2 draws it at half size)
sourceNoreference/measure: where it came from (a product page)
materialNomaterial: which one, by the name `model` lists (`tecido`)
confirmedNomeasure: measured or stated by the maker, not estimated
dimensionNomeasure: `width`, `depth`, `height` or `<part>.height` (its top above the floor)

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A4.3/5.0
Behavior5/5

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

With annotations marking this as destructive and non-read-only, the description adds strong behavioral details: 'one undo step each,' revision refusal ('rev refuses a change if the plan moved on'), replacement preservation semantics ('keeping id, place, size..., finish, overrides and links'), and reply contents. These go well beyond the structured 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 but written as a long run-on sequence of clauses with semicolons, making it difficult to scan. It front-loads the core purpose, but the remaining action details are not structured for quick reference. It is adequate for a complex multi-action tool but not concise or well formatted.

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 25 parameters, six actions, destructive annotations, and an output schema, the description is complete enough for an agent to understand the tool's scope and side effects. It covers every action, preservation behavior, and revision handling, while the output schema can carry return-value details.

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 all 25 parameters are already documented in the input schema. The description restates much of that same information in prose and groups parameters by action, but it adds little semantic meaning beyond the schema itself. 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 opens with a specific verb and resource: 'Change the imported model of placed pieces (ids).' It distinguishes this tool from siblings by naming alternatives: 'model inspects; place imports.' An agent can tell this is the edit/mutation counterpart to inspection and import.

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 for each action: replace swaps a file, material changes a material, part changes a part, lod adds a lighter file, reference keeps a photo, and measure keeps a measurement. It also names sibling alternatives at the end, though it does not state explicit when-not conditions. Clear usage context is present without formal exclusions.

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 (plumbing 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 and inside the walls, through the ceiling or under the floor, sharing the trunk; it replaces the earlier run of the same points and the lines drawn by hand to them (replaced_drawn) and answers {via, suggested, length_m, by_premise_m, bends, branches, materials: [[item, qty, unit]]}. Sewer runs only under the floor, by gravity (2 % fall up to 75 mm, 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 is refused with why. Fittings and what is refused: rules topic=plumbing.

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
depthNoFor `route` of sewer: the height free under the finished floor, cm (slab recess, or the ceiling void of the storey below)
actionNoThe change to make

Output Schema

ParametersJSON Schema
NameRequiredDescription
revYes
runYes
viaYes
bendsYes
notesNo
branchesNo
length_mYes
trunk_mmNo
materialsYes
slope_pctNo
suggestedNo
merged_intoNo
by_premise_mNo
needs_depth_cmNo
replaced_drawnNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, and the description substantiates it: the new run 'replaces the earlier run of the same points and the lines drawn by hand to them (replaced_drawn)'. It further discloses refusal behavior (needs_depth_cm, why a premise can't be built), gravity/fall limits, and the reply payload — rich context 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?

Purpose is front-loaded, but the body is a run-on wall of nested parentheticals and conditionals that is hard to parse on first read. Most sentences carry real information, yet the structure could be broken into clearer condition/behavior lines.

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 description needn't spell out returns, yet it still sketches the reply shape. Combined with annotations covering the destructive profile, it is essentially complete — only the absence of usage exclusions/alternatives keeps it short of full marks.

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 baseline carries most semantics; the description still adds value on defaults and constraints, notably the sewer `depth` meaning (free height under the finished floor, slab recess or storey-below void) and the 2%/1% fall rule tied to 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 description opens with a specific verb+resource: laying (routing) a pipe run of a kind (cold/hot/sewer/vent) in the plumbing project, and notes that `plumbing` reads it and `rules` topic=plumbing governs fittings. It distinguishes the routing action clearly from read-only siblings, though the core purpose is somewhat buried under dense conditional detail.

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

Usage Guidelines4/5

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

It gives concrete applicability conditions: sewer runs only under the floor, by gravity, with specific falls; without `via` the cheapest buildable premise is chosen; an unbuildable one is refused with the reason. It also routes the agent to `rules` for fittings/refusals, but never states explicit when-not-to-use or a direct alternative tool for routing.

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` copies the active version, `new` starts an empty one

Output Schema

ParametersJSON Schema
NameRequiredDescription
iNo
vNo
okYes
idsNo
revNo
textYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description still adds real context beyond them, notably that duplicate/new both auto-switch to the new version and that subsequent edits apply to the active version. It does not say whether delete is recoverable or what happens to the remaining versions.

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

Conciseness4/5

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

Front-loads the purpose, then enumerates actions in a compact per-action notation with no wasted sentences. The brace shorthand ({name?}, {i}) is terse to the point of being slightly cryptic, but it keeps the definition short 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?

Covers all five enum actions, the active-version behavior, and points to the list tool, and an output schema exists so return values need no explanation. A mutation with destructiveHint=true could still note permission requirements or irreversibility of delete, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds value the schema lacks: it binds each parameter to specific actions (i only for switch/rename/delete, name for duplicate/new/rename). Since all three params are optional, this action-to-argument mapping is the main thing preventing mis-invocation.

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

Purpose5/5

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

States a specific verb and resource ('Change the plan versions (tabs)') and immediately disambiguates against the sibling 'variants' tool ('The list is the variants tool'). An agent can tell this is the mutation counterpart to variants without opening either schema.

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

Usage Guidelines4/5

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

Maps each action to its effect and required argument (duplicate {name?}, new {name?}, switch {i}, rename {i,name}, delete {i}), which tells the agent which call shape to pick. It also routes listing to the 'variants' sibling. It stops short of explicit when-not-to-use or precondition guidance (e.g. whether delete requires confirmation).

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
actionNoWhat to do with the camera path

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okNo
idsNo
revNo
secsNo
textNo
bytesNo
framesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds useful action-specific effects: delete removes a keyframe, clear wipes the path, orbit replaces the path with an aerial tour, and render writes a Motion-JPEG file. It does not cover permissions or rate limits, but the destructive semantics are well surfaced.

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

Conciseness4/5

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

The description is compact and front-loads the core purpose before detailing actions. The semicolon-separated action list is dense but efficient; each clause carries operational meaning with little waste.

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

Completeness4/5

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

For a 15-parameter tool with annotations and an output schema, the description covers all six actions, associated parameters, units, and key side effects. It stops short of explaining when to use this tool versus related render/video siblings, but it is otherwise complete enough 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 coverage is 100%, the description adds substantial meaning by grouping parameters by action, showing optional combinations like add {cam? | x?,y?,z?,yaw?,pitch?,fov?, i?}, render {path .avi, w?,h?}, and set {fps?,speed?}. It also states units (cm, degrees, m/s), which helps an agent invoke the action correctly beyond the schema descriptions.

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

Purpose4/5

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

The description clearly states that the tool changes or renders the video camera path, and it enumerates the specific path-editing actions (add, delete, clear, orbit, set, render). It does not explicitly differentiate itself from siblings such as video or render_3d, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

It explains what each action does and which parameters belong to each action, effectively serving as invocation guidance. However, it does not state when to choose this tool over sibling tools like video or render_3d, leaving that comparison implicit.

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

edit_wallsSplit or merge wallsA
Destructive
Inspect

Split a wall in two, or join walls into one. split {id, t?} cuts a wall into two joined walls at t (0..1, default 0.5). merge {ids} joins walls running along one line — the wall a partition interrupted, a stretch imported as many segments, the same wall drawn twice: the longest 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. The reply names the ids that result.

ParametersJSON Schema
NameRequiredDescriptionDefault
tNoFor `split`: where along the wall, 0..1 (default 0.5)
idNoFor `split`: the wall to split
idsNoFor `merge`: the walls to join, in order along the line they make
actionYesWhat to do with the walls

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true and readOnlyHint=false; the description goes far beyond by disclosing exactly what survives (longest wall keeps id, thickness, height, type, finishes), what is destroyed (other walls deleted), what is preserved (doors and windows), that gaps are closed, and what the reply returns. This is unusually rich behavioral disclosure for a destructive edit.

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

Conciseness4/5

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

Front-loaded with the two operations, then dense mode-specific detail. The middle sentence is long but each clause carries operative information (id retention, build preservation, deletion, openings, gap closing), so little is wasted.

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

Completeness5/5

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

With an output schema present, the description needn't detail return structure, yet it still notes the reply names resulting ids. Combined with full parameter coverage and the destructive-behavior explanation, nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: t's 0..1 range and default 0.5 within the split action, and that ids for merge are ordered along the line they make. It does not restate id/action, but the added mode-specific semantics lift it above 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?

States a specific verb pair and resource: 'Split a wall in two, or join walls into one.' No sibling tool competes for wall geometry, so an agent can route here unambiguously from the name plus first sentence.

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

Usage Guidelines4/5

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

Explains the two modes and gives concrete merge scenarios (a wall a partition interrupted, a stretch imported as many segments, the same wall drawn twice), which tells the agent when merge is appropriate. It stops short of stating when NOT to use the tool or naming an alternative, so it does not reach 5.

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

electricalCheck the electrical projectA
Read-only
Inspect

Electrical and telecom review, NBR 5410 and NBR 16264: points are the catalog's electrical pieces (outlets, switches, lighting points, panels, RJ45, TV, Wi-Fi, automation) plus every fixture that lights. action check (default) answers {points:{kind:count}, findings:[[sev, place, msg, src, key, accepted?]], pending, orphaned, sources}: outlets and lighting per room, circuits, DR, the panel, voltage drop, access points' cables. circuits answers the load schedule, rows [name, kinds, points, VA, V, A, wire mm², breaker A, DR], with main_breaker {a, phases, load_a_per_phase} and panel {devices, modules, dps, earthing, icn_ka, selective}. wifi {band?} answers access_points, coverage per room and band [[room, band, median dBm, worst dBm, share at -67 dBm or better, grade]] and suggested ceiling points. What each check demands: rules topic=electrical. Changes are edit_electrical; accept marks a finding right as drawn.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNoFor `wifi`: the band the suggestion aims at, `2.4`, `5` (default) or `6`
levelNoStorey to review, an id like `lv3` (default: the one shown)
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
revNo
panelNo
pointsNo
pendingNo
sourcesNo
cables_mNo
circuitsNo
coverageNo
findingsNo
orphanedNo
total_vaNo
standby_wNo
suggestedNo
main_breakerNo
access_pointsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavior beyond that: it spells out the return shapes for each action ({points, findings, pending, orphaned, sources}, the circuits row layout, wifi per-room dBm grades) and points to `rules` topic=electrical for check requirements. Return behavior is somewhat covered by the output schema, so not a full 5.

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

Conciseness3/5

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

Dense, comma-spliced sentences with heavy domain jargon and parenthetical return-shape dumps run together. The action semantics are front-loaded reasonably, but several clauses would be clearer as a list, and some output detail duplicates the schema.

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

Completeness4/5

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

For a read-only review tool with an output schema and full annotation coverage, the description supplies enough: what each action evaluates, what the other paths are, and where requirements live (`rules` topic=electrical). Only the verbose, uneven structure keeps it from being fully complete.

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

Parameters4/5

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

Schema description coverage is 100%, so all three params are already documented; baseline would be 3. The description compensates by explaining what each action actually returns and how `level`/`band` feed the wifi and per-storey views, adding meaning the schema does not carry.

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

Purpose4/5

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

States a specific verb+resource: an electrical and telecom review against NBR 5410/NBR 16264, with the `check`/`circuits`/`wifi` actions named. It also explicitly routes mutations to the `edit_electrical` sibling, so the agent can separate it from neighbors. It stops short of a crisp one-line purpose, burying the intent in dense enumeration.

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

Usage Guidelines4/5

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

Gives explicit when-to-use for each action (`check` default, `circuits` for load schedule/panel, `wifi` for coverage) and names alternatives for the other paths: changes go to `edit_electrical`, marking a finding goes to `accept`. It does not state any when-not-to-use exclusions, keeping it below a 5.

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; the wooden top of a joinery cabinet under it is cut too), 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, cut_below, 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
xNo
hostYes
itemYes
kindYes
nicheNo
notesYes
bottomNo
cutoutNo
cut_belowNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description reinforces this with real substance: the host gets cut (including the wooden top of the cabinet beneath a sink), the item becomes part of the host and moves with it, and errors are actionable. It stops short of noting reversibility or permission requirements.

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

Conciseness3/5

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

The purpose is front-loaded and each clause is informative, but the middle sentence is a dense run-on of parentheticals and the error example ('use w = 61 no armário') is cryptic. It is not padded, yet it is harder to scan than it needs to be.

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

Completeness4/5

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

For a destructive, host-modifying operation the description covers the important effects (cutout/niche, cut_below, item joining the host) and even summarizes the reply shape despite an output schema existing. Nothing critical is missing, though auth/permission context 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, but the description adds genuine semantics the schema does not: the mutual-exclusivity/alternative between item (existing id) and cat (+w/d/h) for a new one, and how z positions the item. Only the at/dry nuances are left to the schema.

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

Purpose5/5

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

The description names a precise verb+resource (embed an item into joinery with an exact fit) and enumerates the concrete cases: sink bowl/cooktop into a countertop, oven/microwave into a cabinet niche, TV onto a slatted panel. This is clearly distinguishable from generic siblings like place, move, or create.

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 spells out the scenarios in which embedding applies and how the item is supplied (existing id vs. new cat with w/d/h), which is strong contextual guidance. It does not, however, explicitly name alternatives (e.g. place/move) or state when not to use it, so it falls short of a 5.

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

ergonomicsReview ergonomicsA
Read-only
Inspect

Ergonomics and habitability review for the people living there: room to walk beside beds and in front of kitchen equipment, beds, seats, bathrooms and wardrobes per person, the kitchen (work triangle, counter heights and lengths, work zones, sockets, gas ventilation, extraction), doors, ceiling heights, windows, minimum furniture, wheelchair turning. It advises and never blocks. Answers {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]}}. weight is what the score gains if that finding goes; fix is a checked change as move or update arguments, to apply and review again; tier A–E is how much the source obliges where the project is. People and city given here weigh this call only; edit_home keeps them for every review. accept marks a finding right as drawn. How the score and the tiers work: rules topic=ergonomics.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity whose building code applies for this call only, e.g. `sao-paulo`; `edit_home(city=…)` keeps it with the project
levelNoStorey to review, an id like `lv3` (default: the one shown)
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
scopeNo
scoreYes
layoutNo
scoresNo
sourcesNo
capacityNo
coverageNo
findingsYes
orphanedNo
score_basisNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint=false, and the description adds genuine context beyond them: 'It advises and never blocks', the meaning of `weight` (score gain if a finding is removed), how `fix` produces `move`/`update` arguments to apply and re-review, and that `accept` marks a finding as-drawn. It does not discuss rate limits or auth, but for a read-only advisory tool the behavioral picture is substantially complete.

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

Conciseness3/5

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

Purpose is front-loaded effectively, but the second half becomes a dense inline dump of the return object's shape and field semantics that largely duplicates the existing output schema. Fully packed with information, yet the run-on clauses make it harder to parse than it needs to 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?

With an output schema present the description need not explain return values, yet the tool is complex (8 params, scoring model, tiers, fixes) and the description supplies the domain context an agent needs: what is scored, what 'advises and never blocks' means, and where to learn the scoring rules. Minor over-explanation of outputs is the only shortfall.

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 further by explaining that people and city supplied here weigh this call only (unlike `edit_home`), and by interpreting output fields such as `weight`, `fix`, `tier`, and `accept` — meaning that is not carried by the input schema's 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?

Names a specific verb and resource — an ergonomics/habitability review of a home — and enumerates the concrete check areas (bed clearance, kitchen work triangle, wheelchair turning, etc.), so an agent knows exactly what it produces. It does not explicitly differentiate itself from siblings like `layout`, `electrical`, or `plumbing`, though the mention of `rules` topic=ergonomics partially routes the reader.

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?

Guidance is implied rather than stated: the contrast with `edit_home` clarifies parameter persistence ('People and city given here weigh this call only'), which helps an agent choose between a one-off review and a project-level update. There is no explicit when-not-to-use or a named alternative for the review itself among the many sibling review/edit tools.

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

exportExport to a fileA
Destructive
Inspect

Export to a file, by its extension. what=plan (default): the plan as .pdf (A3; scale=50/100 or fit), .svg (true scale) or .png, or the 3D model as .glb or .obj. what=cut_list: the joinery's cut list (and that of groups drawn by hand) as .csv (spreadsheet), .dxf (boards laid out on sheets, for CNC) or .svg (sheets to view); cut_list reads it.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoFor `plan`, `.png` only: height px (default 1200)
wNoFor `plan`, `.png` only: width px (default 1600)
idsNoFor `cut_list`: builds or drawn groups (default every one on this storey)
pathYesThe file to write; its extension picks the format
whatNoDefault `plan`: the drawing or the 3D model. `cut_list`: the boards of the joinery
scaleNoFor `plan`, `.pdf`: scale denominator (50 → 1:50); omitted fits the sheet

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okNo
idsNo
revNo
rowsNo
textNo
drawnNo
sheetsNo
skippedNo
sourcesNo
hardwareNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds substantial behavior beyond that: the six format targets, A3 sheet sizing, scale semantics, and defaults. It never states that an existing file at `path` is overwritten, which is the one behavioral fact an agent would want for a destructive write.

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 operative clause ('Export to a file, by its extension') is front-loaded and the remainder is dense but purposeful, one sentence per `what` branch. The semicolon-chained extension lists are readable but slightly cluttered.

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, return values need no explanation, and the description fully covers both enum branches, all format options and their parameter dependencies. The only meaningful omission is overwrite/error behavior for the written file.

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% (baseline 3), and the description goes further by binding parameters together, e.g. `path`'s extension determines the format, scale only applies to plan/.pdf with ''omitted fits the sheet'', and h/w are png-only. This adds cross-parameter meaning the per-field schema text does not convey.

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 (export) plus the exact resource set (plan drawing/3D model, joinery cut list) and the mechanism (extension picks format). It is clearly distinguishable from siblings like render_plan, show_plan and cut_list, which produce views or data rather than files.

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

Usage Guidelines4/5

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

Explicitly maps each `what` value to its valid extensions and what each format is for (pdf A3 with scale, svg true scale, glb/obj model, csv/dxf/svg sheets), which is real usage guidance. It does not, however, say when to prefer export over sibling tools such as render_plan or show_plan.

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
keptYes
sentYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing data handling ('Kept on this machine and, while the user's telemetry is on, sent to the project') and the response shape ('Reply {kept, sent}'). It also reveals a schema-invisible behavioral rule: although required parameters is 0, 'Every part is required,' and it warns that a vague note gets fixed in a way that breaks working behavior.

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

Conciseness4/5

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

Front-loaded with the core action, and the dense paragraph largely earns its length by listing triggers, the completeness rationale, the required-field enumeration, kind/tool, and data handling. Some flourishes ('the whole case', 'shortened the way') add rhetorical weight without much information, so it is not maximally tight.

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

Completeness5/5

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

For a 9-parameter reporting tool with an output schema, the description covers everything an agent needs: purpose, triggers, required fields, the kind enum's meaning, the destination of the data, and the return values. Nothing material is left undocumented.

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 genuine meaning beyond the schema: it asserts all nine fields are required despite required=0, and clarifies intent for ambiguous fields ('must_keep ... "none known" is an answer', 'expected ... the reference the fix will be checked against'). It mostly restates field intent rather than adding new syntax or format rules.

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 ('Report to the developers what a tool could do better') and is unmistakable against every sibling, which are all domain tools (measure, render_3d, edit_walls). An agent can tell instantly this is the meta-channel for filing a structured complaint about another 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 names concrete triggers for use — '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' — and ties it to the moment it happens ('as it happens'). There is no explicit when-not-to-use, but no sibling offers overlapping function, so alternatives are not a real gap.

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

fileNew, open or saveA
Destructive
Inspect

Start, open or save the project. new: an empty project in place of this one. open {path}: a project (.newera), or a Sweet Home 3D file (.sh3d) imported, in place of this one. save {path?}: writes the project (.newera); path is optional once it was saved.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFor `open` and `save`: the file, `.newera` (or `.sh3d` to import)
actionYesWhat to do with the project

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okYes
idsNo
revNo
textYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real value by disclosing that both new and open replace the current project 'in place of this one', clarifying exactly what is destroyed. It does not mention undo or save side effects, but goes meaningfully beyond the annotation.

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

Conciseness4/5

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

Front-loaded with the general purpose, then scoped per-mode with terse 'new:'/'open:'/'save:' prefixes. Info-dense with no wasted sentences, though the run-on style compresses several rules into one sentence.

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?

An output schema exists so return values need no explanation, and all three modes plus path rules are covered. Nothing essential to correct invocation is missing, though permissions/undo context would have been a bonus.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds semantics beyond the schema: path accepts .newera or .sh3d-to-import for open, and is optional for save once previously saved. This is genuine added meaning.

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

Purpose4/5

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

States clear verbs (start/open/save) and resource (the project), and enumerates each of the three action modes with specifics like '.newera' and '.sh3d' import. It does not explicitly contrast against siblings such as create or export, so it falls short of a 5.

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

Usage Guidelines3/5

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

Implicitly guides usage per mode ('path is optional once it was saved' tells the agent when path can be omitted), but gives no when-to-use-vs-alternatives or exclusions relative to sibling tools. Adequate embedded guidance, no explicit routing.

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
vNo
okYes
idsNo
revNo
textYes
fittedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-read-only, so the modification profile is covered. The description adds genuine context beyond annotations: the pieces keep following the roof when it changes, and the change lands in the same undo step, with 'off' reversing the persistence. It stops short of spelling out permission or auth requirements, but the behavioral traits it does add are valuable.

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

Conciseness4/5

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

Front-loaded with the core action and its outcomes, then the persistence and undo behavior. It is dense but every clause earns its place by describing a distinct effect; the parentheticals make it slightly run-on but not wasteful.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description still notes 'Reply ok with the count'. It covers the geometry outcomes, the persistent-following behavior, the undo grouping, and the disable flag, leaving only minor gaps like explicit auth/permission needs.

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 all three parameters (ids, off, above) are already documented in the schema, giving a baseline of 3. The prose clarifies the 'off' flag in behavioral terms ('stops that', heights stay), but adds nothing about 'ids' or the 'above' threshold beyond what the schema states.

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 (Fit) and resource (walls, glass, panels) plus the concrete outcomes: a wall gets a sloping top and is split at the ridge, a panel becomes a triangle or trapezoid, slats get cut to the roof line. This is far more than a restatement of the name and lets an agent predict the geometric result without opening a schema.

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

Usage Guidelines4/5

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

It clearly signals when to use it (walls/pieces sitting under an A-frame or shed roof) and the inverse condition via 'off stops that'. It does not name an alternative sibling tool, but no obvious competing fit operation exists among the siblings, so the guidance is adequate though not exhaustive.

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

historyList checkpointsA
Read-only
Inspect

The checkpoints edit_history 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

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 and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral context — that a checkpoint is project-scoped and survives saving — which is useful persistence information, but nothing about ordering, limits, or whether checkpoints expire.

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

Conciseness4/5

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

Two tight sentences with no filler, and the resource identity is front-loaded. The '[label, changes ago]' shorthand is compact but slightly cryptic in isolation.

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

Completeness5/5

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

For a zero-parameter, read-only list tool with an output schema present and annotations covering the safety profile, the description supplies everything needed: what it returns and how checkpoints relate to `edit_history`.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description's mention of the returned row shape adds a little framing but there is no parameter surface to document.

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

Purpose4/5

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

The description names the resource (checkpoints) and its origin (`edit_history`), and the title supplies the verb 'List'. An agent can tell this is a read of previously remembered checkpoints rather than a creation tool, though the sibling relationship is only implied rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied: the mention of `edit_history` hints that this is the read-side counterpart, but there is no explicit 'use this when...' or 'use X instead when...' guidance. No prerequisites or exclusions are given.

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

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
revNo
dimsNo
nameNo
linesNo
northNo
partsNo
roomsNo
wallsNo
boundsNo
countsNo
labelsNo
levelsNo
warningsNo
furnitureNo
polylinesNo
backgroundNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. Beyond that the description discloses real behavior: every element carries bounds and faces, ids share one never-reused counter per version, and ndjson streams one element per line. It adds no auth or rate-limit notes, but the domain semantics are genuinely informative.

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

Conciseness4/5

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

Front-loaded with the cheapest option and then walks the parameter effects in one dense but scannable sentence. It is efficient with no filler, though the fragment-opening and run-on list demand careful reading.

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, return values need no explanation, yet the description still adds bounds/faces and ID-counter semantics that matter for interpreting results. Filtering, detail level, and streaming are all covered, so an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the intent behind the knobs (ids resolves group parts, detail=summary is cheapest, ndjson makes long answers readable). It adds rationale the schema does not, without contradicting any parameter definition.

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 "Read the home" plus "Home state." make it clear this reads the plan/home model, and the body elaborates on filtering behavior. However, the description itself opens with a noun fragment rather than a verb+resource, and it never distinguishes this read tool from sibling reads like `model` or `show_plan`, so the agent must infer 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?

"Ask for less instead of reading everything" and "detail=summary is cheapest" give explicit guidance on how to call this tool cheaply and when to narrow. It stops short of naming a specific alternative tool to prefer in a given situation, so it is strong context rather than full when/when-not routing.

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 answers {id,name,size,parts,hardware,notes}. Workshop advice (a board nobody stocks, a sagging shelf, a short drawer front) comes back in notes and the piece is built anyway; only what has no geometry fails, saying 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 the 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 with id + p holding only the new values; a new size keeps its back (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)
kindNoWhat a new build is
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
idYes
nameYes
sizeYes
notesYes
partsYes
hardwareYes

TDQS

A4.5/5.0
Behavior4/5

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

With destructiveHint=true and readOnlyHint=false already declared, the description adds real behavior the annotations can't convey: non-fatal workshop advice arrives in notes and the piece is still built, and only geometry-less requests actually fail. It stops short of saying whether an id-based edit replaces or deletes an existing build, which is the destructive behavior the annotation warns about.

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

Conciseness4/5

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

Front-loaded with purpose and failure semantics before the dense spec dump, and nearly every clause carries load given the free-form `p` object. The middle section is a wall of semicolon-separated key lists that would scan better as per-kind structure, but little text is genuinely wasteful.

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

Completeness5/5

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

For a no-required-parameter, nested-object tool with an output schema already present (so return values need no explanation), it covers all six kinds, placement, size-change anchoring including the default, and dry-run validation. The only unaddressed question is its relationship to sibling edit tools, which is minor given how well the creation path is specified.

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 top-level schema is well documented, but the critical `p` object is additionalProperties:true with no declared keys, so the description is the only source of its contents. It exhaustively enumerates per-kind parameters with units and allowed values (t 15|18|25 mm, door hinged|sliding|drawers|none, slat/gap mm, cutouts, finish), which is exactly the compensation this opaque parameter requires.

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

Purpose5/5

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

Opens with a specific verb+resource ('Parametric joinery and interiors') and immediately names the six build kinds (cabinet, slats, countertop, cove, shadow_gap, sofa), so an agent can tell this generator apart from sibling placement tools like place, move, cabinet_run or update. The stated return payload {id,name,size,parts,hardware,notes} further pins down 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?

It clearly states the three operating modes and their triggers: create via kind+p, modify via id + partial p, and validate-only via dry=true, plus where to place the piece (at / wall+along / angle / elev). It does not, however, route the agent against siblings (e.g., when to reuse move/update/place instead), so the alternatives clause is absent.

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

layoutCheck the layoutA
Read-only
Inspect

Layout problems on a storey — pieces colliding or clashing, blocked doors and windows: overlap, blocked, in_wall, blocks_door, blocks_window, no_door, backwards, turned, unrated_light, unclear_front, loose_opening, outgrew_niche, outside_rooms, loose and above_ceiling, as {kind: [rows]}; {} means none. Every row is an object with the key it is accepted by and the elements involved (name, bounds, z). Overlaps are classified collision (a real clash, first), nesting, served or cross_level, with extent [x,y,z] cm, counted in overlap_kinds. accepted {key, kind, why, extent} lists findings accept marked right as drawn; orphaned [[key, reason]] acceptances whose finding is gone. What each problem means and how to fix it: rules topic=layout. level: a storey id or all (default the one shown); areas {name|id: m²} compares room areas with a 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
areasNo
looseNo
turnedNo
blockedNo
in_wallNo
no_doorNo
overlapNo
acceptedNo
orphanedNo
warningsNo
backwardsNo
blocks_doorNo
above_ceilingNo
blocks_windowNo
loose_openingNo
outgrew_nicheNo
outside_roomsNo
overlap_kindsNo
unclear_frontNo
unrated_lightNo

TDQS

A3.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description carries the substantive burden and delivers: it explains the return shape ({kind: [rows]}, {} for none), the fields per row (key, elements, name/bounds/z), the overlap classification scheme (collision/nesting/served/cross_level with extent and overlap_kinds), and how `accepted` and orphaned acceptances behave. That is rich behavioral disclosure well beyond the structured fields.

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

Conciseness3/5

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

The three long sentences are packed with necessary detail but read as a dense wall of jargon, with the first sentence dominated by a 16-item enumeration. It is adequately sized for a complex tool but not cleanly front-loaded or scannable.

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 inspection tool with an output schema and nested return structures, the description is unusually complete: it covers the returned categories, per-row fields, overlap classification, and acceptance bookkeeping. An agent has what it needs to interpret and act on results.

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 both `level` and `areas` are already fully documented in the schema. The description reinforces them (level defaults to the shown storey, areas compares against a reference drawing) but adds no format or syntax detail beyond what the schema provides. Baseline 3 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 opening clause 'Layout problems on a storey' states a specific check verb and scope, and the enumeration of problem kinds (overlap, blocked, in_wall, blocks_door, etc.) makes it unmistakable what the tool reports. It differentiates itself from siblings like `rules` by routing the agent there for explanations rather than duplicating 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?

Usage is implied by the purpose (audit a storey for layout issues) and the description points to `rules` topic=layout for fixes and to `accept` for accepted findings. However, it never states explicitly when to run this versus alternatives, nor any exclusions or prerequisites.

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

levelsList storeysA
Read-only
Inspect

Storeys (floors, levels) of the project: 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
rowsYes

TDQS

A3.8/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, so safety is covered. The description adds real cross-tool context — that other tools act on the 'selected' storey and that edit_levels is the mutation path — but says nothing about ordering, caching, or freshness of the list.

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

Conciseness4/5

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

Two compact sentences, front-loaded with the resource and its row schema, then the cross-tool note. Slight waste in enumerating the output columns, which the output schema already carries.

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 and annotations covering the read-only profile, the description only needs to establish purpose and routing, which it does. The 'selected storey' convention is the one piece of non-obvious behavior it surfaces; nothing essential is missing for such a small surface.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The field enumeration in the description concerns the response, not inputs.

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

Purpose4/5

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

The description names the resource (storeys/floors/levels) and reveals the return shape (rows with id, name, elev, h, selected, etc.), which makes the read/list intent unambiguous. It also distinguishes itself from edit_levels, the mutation sibling, though it never uses an explicit verb like 'list'.

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

Usage Guidelines4/5

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

It gives a clear routing rule: use edit_levels to change storeys, and notes that other tools operate on the currently selected storey. It does not spell out when to call this tool (e.g., to discover ids before editing), so it stops short of a full when/when-not statement.

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

libraryList the model libraryB
Read-only
Inspect

Versions kept in the asset library: approved revisions of model files, reusable in any project with place model=library: or library:@; edit_model replace file=library:@ goes back to an older one. Rows [name, latest, title, brand, versions]; name= lists its versions [v, title, size, unit, source, fidelity, notes, pictures, sizes]. edit_library publishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOne entry's versions instead of the list, e.g. `win`

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
rowsNo
versionsNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful cross-tool semantics (version pinning syntax, that edit_library publishes and edit_model can revert), but with an output schema present the return-shape detail is redundant rather than value-adding.

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 purpose is front-loaded, but the body is a dense semicolon-chained run-on mixing output columns, cross-tool syntax, and semantics. Every clause is relevant, but the structure makes it hard to parse on first read.

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 annotations covering read-only behavior and an output schema documenting the return shape, the description's job is largely done; it adds cross-tool integration context that an agent genuinely needs. It is complete enough to call correctly, though the terse style leaves some room for ambiguity.

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% and the single `name` param is fully documented in the schema itself. The description repeats and slightly extends that (name=<entry> lists its versions with the column set), but adds little beyond what the schema already provides, so 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 states a specific resource and scope: approved model-file revisions kept in the asset library, distinguishing the top-level entry list from an entry's version list. It also names related siblings (place, edit_model, edit_library), though the telegraphic phrasing makes the core purpose slightly harder to extract than a clean verb+resource sentence.

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 explains how library entries are consumed elsewhere (place model=library:<name>, edit_model replace file=library:<name>@<v>, edit_library publishes), which implies this is the browse/inspect step. However, it never explicitly states when to call this tool versus alternatives like model or file, so the when-to-use guidance is only inferred.

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 review: lux (illuminance) per room 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. edit_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)
levelNoStorey to review, an id like `lv3` (default: the one shown)
planeNoWork plane height cm (default 75)

Output Schema

ParametersJSON Schema
NameRequiredDescription
WYes
lmYes
roomsYes
sourcesYes
fixturesYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description still adds substantial behavioral context: computed metrics, the photometric method (inverse-square cosine law, interreflection split flux), and the ABNT NBR ISO/CIE 8995-1 reference against which verdicts are issued. It omits any performance/cost caveats for a whole-storey sweep.

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 purpose and alternatives are front-loaded, but the middle sentence explaining photometry ('inverse-square cosine law', 'split flux') is physics flavor that does not help the agent decide or invoke correctly, and the reply-column enumeration is largely redundant with the output schema.

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

Completeness4/5

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

With an output schema, full parameter coverage, and read-only annotations, the definition is complete: an agent knows the scope (storey/room), the metrics returned, the compliance standard, and the sibling tools that perform edits. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so room/level/plane defaults are already documented. The description reinforces the storey/room scoping but adds no syntax, allowed values, or format details beyond the schema, so baseline 3 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?

States a specific verb (review/rate) on a specific resource (illuminance per room) and explicitly distinguishes itself from edit_lighting (places fixtures) and place/update light (sets a piece's light). An agent can tell it apart from the ~50 siblings without opening a schema.

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

Usage Guidelines4/5

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

Routes clearly to alternatives: use edit_lighting to place the fixtures a room needs and place/update light to set a piece's light, which implies this tool is the read-only reviewer. It does not state an explicit when-to-use trigger (e.g. 'call before/after editing to check compliance'), so it stops short of 5.

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

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
wall_typesYes

TDQS

A3.5/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, so the safety profile is covered. The description adds useful substance by enumerating the actual wall-type values (drywall, masonry, concrete) that will be returned, but it says nothing about pagination, ordering, or scope limits.

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 terse sentence with zero filler, front-loaded with the resource being listed and followed by the concrete value domains. Nothing could be removed without losing meaning.

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 description need not explain return values, and for a zero-parameter read-only reference tool it is nearly sufficient. The only shortfall is the absence of any routing guidance against sibling list tools, which is minor given the tool's simplicity.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The bracketed field lists [id,name,t] and [key,label,color,tile] are field names rather than parameters, and the schema is fully described anyway.

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 two concrete resources it exposes — wall types (with field list and example values) and finish patterns (with field list) — so an agent knows exactly what dataset this returns. It is clear on its own, but it does not differentiate itself from sibling listing tools such as library, catalog, or rules.

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 call this versus alternatives (library, catalog, edit_walls). There are no prerequisites, no exclusions, and no stated context — the agent must infer that this is a reference-data lookup.

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
xNo
yNo
cmNo
idNo
fitNo
axisNo
clearNo
facesNo
spansNo
boundsNo
openingNo

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 and openWorldHint=false, so the safe read-only nature is covered. The description adds useful defaults (z band 0-200) and hints at output shapes, but does not elaborate on behavioral traits like performance or interpretation of edge cases beyond what annotations and the output schema supply.

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?

It is tightly packed but presented as one undifferentiated paragraph covering four distinct modes, which hurts front-loading and scannability. Most sentences earn their place, but structural separation of modes would materially improve it.

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

Completeness4/5

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

With an output schema present and 100% schema coverage, the description only needs to convey mode selection and defaults, which it does. The main gap is the absence of explicit guidance on when NOT to use this tool versus siblings such as layout.

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 goes beyond the schema by explaining how parameters combine (from alone vs from+to vs axis+at vs gap+grow) and what each combination returns. It adds real combinatorial meaning over the per-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 description states a specific verb+resource ('Tape measure over the plan, in cm') and enumerates the distinct measurement modes (from alone, from+to, axis+at, gap+grow). It is clearly distinguishable from siblings like layout or move, though the dense prose requires careful reading to extract the core purpose.

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 effectively tells the agent when each parameter combination applies, describing the question each mode answers (e.g. 'the answer to how wide is the corridor here' and 'the question a layout decision actually ends in'). It does not name an alternative sibling or state explicit exclusions, keeping it short of a 5.

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

modelInspect an imported modelA
Read-only
Inspect

Inspect an imported 3D model, a piece's (id) or a file before placing it: the unit taken (guessed from its size unless unit= or the piece says), natural size, triangles and where they go, materials with their images, named parts (OBJ objects and groups, glTF nodes: arms, seat, frame) with bounds and materials, and warnings for what is not drawn as the file says (a texture or material library not found, normal and roughness maps, extensions). For a piece that looks wrong after place model=…, instead of reading the file. part= keeps the parts named so; check=clashes finds parts passing through one another (a cushion through a rail), not those that touch. Reply {file, format, unit, raw, size cm, tris, materials [[name, color, image, tris]], parts [[name, tris, min, max, materials, "hidden" when hidden]] in cm of the piece (x across, y to the front, z up), cost {tris, heaviest [[part, tris, %]], copies, in_project}, warnings}; with id also piece {size, scale, far}; check adds clashes [[part, part, pairs, at, depth cm]], degenerate and checked (what was looked at). place model=… imports one.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoA piece that uses an imported model, e.g. `f12`
tolNocheck: how far a surface must pass the other to count, cm (default 0.05); touching is not a clash
fileNoInstead of `id`: an .obj/.gltf/.glb file, before placing it
partNoOnly the parts whose name has these words (`braco`), all of them
unitNoUnit of the file's numbers, `m`, `cm`, `mm` or `in` (default: the piece's, or guessed)
checkNo`clashes`: which parts pass through one another, and faces with no area

Output Schema

ParametersJSON Schema
NameRequiredDescription
uvNo
rawNo
costNo
fileYes
sizeYes
trisYes
unitYes
partsNo
pieceNo
formatYes
imagesNo
meshesNo
checkedNo
clashesNo
guessedNo
measuresNo
warningsYes
materialsYes
degenerateNo
referencesNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false. The description goes further, disclosing that units are guessed unless unit= is given, that warnings are emitted for missing textures/material libraries, and that check=clashes finds interpenetration but not touching — real behavioral context beyond the annotations.

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

Conciseness3/5

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

Content is largely front-loaded and every clause concerns calling the tool, but it is delivered as enormous run-on sentences that cram the return shape, parameters, and warnings together, hurting readability. Not padded, but poorly structured.

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

Completeness4/5

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

Given six optional params and a rich annotation set, the description covers inputs, units, warnings, and clash-vs-touch semantics adequately. It also describes the return shape even though an output schema exists, which is redundant but not harmful.

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 six parameters, including the check/tol semantics ('touching is not a clash'). The description mostly restates these; it adds only slight nuance (e.g. part keeps 'the parts named so'), so the baseline 3 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 description names a specific verb and resource ('Inspect an imported 3D model') and clarifies the two inputs — a placed piece (id) or a pre-placement file — which separates it from placement/editing siblings. It is dense but the core operation is unambiguous.

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

Usage Guidelines4/5

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

It states when to use it: 'before placing it' for a file, and for a piece that 'looks wrong after place model=…' instead of reading the file, with 'place model=… imports one' as the contrasting sibling. Explicit exclusions or a full alternatives list are absent, so it stops short of 5.

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

moveMove elementsB
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
vNo
okNo
dryNo
idsNo
revNo
goneNo
textNo
addedNo
scoreNo
changedNo
resolvedNo
clearancesNo
issues_newNo
propertiesNo
added_countNo
annotationsNo
score_scopeNo
new_findingsNo
changed_countNo
issues_changedNo
issues_resolvedNo
findings_changedNo
acceptance_cleanupNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the dry-run behavior ('answers what it would do without writing anything'), which is genuinely useful, but it largely restates what the schema already documents for the `dry` param and omits any undo/reversibility or permission context for a destructive mutation.

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

Conciseness4/5

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

The purpose and both move modes are front-loaded, and there is no filler. It is slightly dense/run-on with the tail-end cross-reference, but every clause carries information.

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

Completeness4/5

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

With an output schema present, return format need not be explained, and the description covers the two movement modes and dry-run options. For a destructive operation it stops short of stating reversibility or permission requirements, leaving a minor gap.

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 repeats the dx/dy cm units, the to=[x,y] semantics, and the dry modes — helpful phrasing, but no syntax, units, or edge-case meaning beyond what the schema already supplies.

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

Purpose4/5

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

States a specific verb (Move) and resource (elements) and details two modes: dx/dy offsets in cm, or to=[x,y] with the first id going there. It is clearly distinguishable in concept, but never names the overlapping siblings (arrange, place, update) it should be chosen over.

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 only usage signal is the trailing 'see `update`' cross-reference and the dry-run explanation, both tied to a parameter rather than to tool selection. There is no statement of when to use move vs arrange/place, nor any prerequisite or when-not guidance.

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 (model, finish and parts; catalog scope=project lists them). at=[x,y] is the center (doors and windows near a wall snap into it; into=[x,y] picks the swing side); wall= (+along cm) puts doors and windows in a wall, or furniture with its back to it. facing=+x|-x|+y|-y|[x,y]| turns the front toward a side, point or element, preferred to angle (clockwise degrees, y down: 0 front to +y, 90 to -x, 180 to -y, 270 to +x); a piece whose back belongs on a wall, put within 30 cm of one with neither, turns its back to it. The reply says where fronts ended: faces=f3:+y(seat), turned=f3:back to w2. Ceiling pieces hang from the ceiling the 3D draws and follow it: a pendant takes elev (shade bottom, ~150-160 over a table) or h (drop). w/d/h, pitch/roll, mat, opacity; defaults {…} fills every item; px=true reads background pixels. cat=beam with a,b=[x,y,z] makes rafters and posts. dry=true answers what it would add, the clearances and the findings, without writing.

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
vNo
okNo
dryNo
idsNo
revNo
goneNo
textNo
addedNo
facesNo
scoreNo
turnedNo
changedNo
resolvedNo
clearancesNo
issues_newNo
propertiesNo
added_countNo
annotationsNo
score_scopeNo
new_findingsNo
changed_countNo
issues_changedNo
issues_resolvedNo
findings_changedNo
acceptance_cleanupNo

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows it writes without destroying. The description adds valuable behavioral context: `dry=true` performs a preview without writing, ceiling pieces follow the 3D ceiling, and the reply reports final facing. It does not cover undo, permissions, or rate limits.

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?

Packed into a single run-on paragraph with no line breaks or bullets. It front-loads the core purpose, but the dense stream of parameter clauses is hard to scan. Every clause adds information, but structure is poor.

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 tool with 5 top-level parameters and a rich schema, the description covers major modes (furniture, doors/windows, beams, ceiling fixtures, dry run) and notes the reply shape. An output schema exists, so return values needn't be fully explained. Minor edge cases like error handling are not described.

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 already documented. The description still adds non-schema rules: doors/windows snap into a nearby wall, `into` picks swing side, a piece within 30 cm of a wall turns its back to it, and `facing` is preferred over `angle`. These relationships go 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?

States a specific verb ('Place') and resources (catalog items, copies of existing pieces) and names the `catalog` tool for listing them. Clearly separates placement from catalog browsing. An agent can identify the tool's core action without reading 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?

Gives implied usage for placing items and special cases (doors, windows, beams, ceiling pieces), but never states when to use this versus siblings like `move`, `arrange`, or `update`. It mentions `catalog` only as a reference for listing, not as an alternative action.

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

TDQS

A4.2/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, so the safety profile is covered. The description adds useful context about plugins being external programs editing via HTTP API, but says nothing about failures, unavailable plugins, or whether the list is static or dynamic.

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 compact line that front-loads what plugins are, then the row shape, then the routing hint. No filler.

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

Completeness4/5

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

For a zero-parameter list tool with an output schema and readOnly annotations, this covers purpose, return shape, and the execution alternative. Nothing essential is missing, though it is minimal.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description's [name,title,description] notation describes the row shape rather than parameters, adding no parameter burden but also no confusion.

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

Purpose5/5

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

States a specific resource (plugins) and clarifies what they are — external programs editing through the HTTP API — plus the shape of each returned row. An agent can distinguish this from the sibling run_plugin, which executes rather than lists.

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

Usage Guidelines4/5

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

'Run one with run_plugin' explicitly routes execution to the sibling tool, which is a clear alternative. It does not, however, state when this listing tool itself is appropriate (e.g., discovery before running, or checking availability).

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 review, NBR 5626 (cold and hot water) and NBR 8160 (sewer): points are the catalog's plumbing pieces (water and sewer points, valves, drains, traps, grease trap, inspection box, meter, gas, vent) and fixtures are the pieces that use water. Answers {points:{kind:count}, pipes_m, findings:[[sev, place, msg, src, key, accepted?]], pending, orphaned, sources}: water and sewer points by every fixture, discharge diameters, floor drains and traps in wet rooms, grease trap, where the water comes from and the sewer goes, points no pipe reaches. The drain models and what each check demands: rules topic=plumbing. Pipe runs are laid with edit_plumbing; accept marks a finding right as drawn.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoStorey to review, an id like `lv3` (default: the one shown)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsYes
pendingYes
pipes_mYes
sourcesYes
findingsYes
orphanedYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already give readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: it declares the exact response shape, the checks it runs (fixture-level water/sewer points, discharge diameters, traps, grease trap, orphaned points), and its relationship to the write counterpart `edit_plumbing`. It still doesn't mention scope limits or performance/failure behavior, so not a 5.

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

Conciseness4/5

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

Purpose and vocabulary are front-loaded in the first clause, then output shape, then checks, then routing hints. It is dense but nearly every clause carries distinct information. It is longer than typical, though the complexity of the review arguably justifies the length.

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 multi-standard review tool it covers intent, output structure, the specific diagnostics produced, and the adjacent tools needed to act on results. With an output schema present it need not restate return values, yet it usefully sketches them anyway. Minor gaps remain around scope boundaries versus the `electrical` sibling.

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?

Only one parameter (`level`) with a fully documented schema (`Storey to review, an id like lv3 (default: the one shown)`), so the schema does the heavy lifting and 100% coverage sets the baseline at 3. The description adds nothing about the level semantics or the default-storey behavior beyond what the schema states.

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

Purpose4/5

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

States a specific verb+resource (plumbing review) scoped to two named standards (NBR 5626, NBR 8160), and defines its own vocabulary ('points', 'fixtures'). It also enumerates the concrete checks performed, so an agent knows this is a project-wide compliance review rather than a mutation. It never explicitly contrasts itself with the analogous `electrical` tool, so sibling differentiation is only partial.

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

Usage Guidelines4/5

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

Routes the agent usefully: pipe runs belong to `edit_plumbing`, drain models/rules live under `rules` topic=plumbing, and `accept` is how findings get marked. That establishes when this tool is the read/review step versus the write/detail steps. There is no explicit 'use this when / do not use when' statement or comparison to `electrical`.

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. piece= draws it alone, seen from its own side (view; aerial is three-quarter), framed the same wherever it stands; part= frames one part of its model; ref=i puts its reference photo beside it, from the photo's 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
refNoWith piece: its reference photo at this index, beside the render, from the photo's side and part
yawNoAerial turn, degrees
partNoWith piece: frame this part of its model (`model` lists them)
viewNoDefault `aerial`; `front` to `top` are elevations
zoomNoAerial distance factor: 1 frames the building, 2 twice as far
levelNoStoreys drawn: an id like `lv3` draws it and those below, `all` every one (default: as the editor shows them)
pieceNoOnly this piece, framed from its own side
pitchNoAerial height angle, degrees
wallsNo`up` (default), `cutaway` or `down`

Output Schema

ParametersJSON Schema
NameRequiredDescription
mimeTypeYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, yet the description discloses the visual consequences of the options: cut removes everything between viewer and plane, walls=cutaway/down hides ceilings, roofs, doors, windows and lowered wall pieces, and 'keep w/h small' hints at resource cost. That is meaningful behavioral context far 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?

It is dense and largely information-bearing, but it is delivered as one unparagraphed block governed by semicolons, mixing output description, view geometry, wall behavior and piece/part/ref interactions. An agent has to parse a wall of text to find the clause relevant to a given parameter.

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?

An output schema exists so return values need no explanation, and the description covers the 13-parameter space including mode interactions (piece + view + part + ref, level, walls vs ceilings). Nothing an agent needs to invoke this correctly appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is already 3, but the description adds real semantics on top: it defines direction conventions (front views from large y toward y=0, left from x=0), yaw origin and default (0=east, default 60), zoom scaling, and cross-parameter behavior like ref requiring piece. It does not explain defaults for every optional parameter, so it is not exhaustive.

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 states the concrete deliverable — a PNG of the home rendered in 3D — plus the rendering approach ('software render with outlines, no GPU needed'), which distinguishes it from the sibling render_photo and render_plan tools. The verb, resource and output format are all 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?

Gives selection guidance across view modes (front/back/left/right/top/aerial/visitor/cam), walls modes and piece/part options, including intent statements like 'to see the furniture from the side' and 'to remove it look from back'. It does not, however, explicitly name and exclude sibling tools (render_photo, render_plan), so it stops short of full when-not guidance.

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

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. One runs at a time, on at most half the cores (4): threads lowers that, max_s stops it past a deadline, estimate=true answers the budget and the work (pixels, rays, triangles, memory) without rendering, cancel=true stops the one running (sessions shows it).

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
viewNoDefault `aerial`
max_sNoSeconds it may take; past them it stops, and nothing is returned
pitchNoAerial height angle, degrees (default 40)
cancelNoStop the photo being rendered now (`sessions` shows it)
qualityNoDefault `draft`
threadsNoThreads it may use, under the budget (half the cores, at most 4)
estimateNoAnswer the budget and what the photo would take, without rendering

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNo
workNo
budgetNo
measuredNo
mimeTypeNo
memory_mbNo

TDQS

A4/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint/openWorldHint) to disclose real behavioral traits: one render at a time, capped at half the cores (4), threads lowers that, max_s cancels past a deadline returning nothing, cancel=true stops the running job and sessions shows it. This is unusually rich operational 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?

Dense but front-loaded on the core purpose, with each clause carrying information about parameters, quality, hour semantics, and concurrency. The heavy parenthetical/punctuation packing makes it slightly harder to parse but nothing is filler.

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

Completeness4/5

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

For a 12-parameter tool with an output schema (so return format need not be re-explained beyond the 'Returns PNG' note) and full schema coverage, the description covers rendering semantics, budget control, and cancellation adequately. Only explicit alternative-routing to sibling render tools is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so baseline is 3; the description adds meaning beyond it by defining cam as 'i stored view' and hour as local solar time with concrete examples (9, 15.5, 20), plus the view=visitor/aerial yaw/pitch relationship. Small omissions like w/h remain, but it adds genuine 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?

States a specific verb+resource and scope: a path-traced realistic photo with sun position from compass/time, lamps, glass. It is clearly distinguishable from render_plan and render_3d by the word 'Realistic photo' and the path-tracing detail, though it never names those siblings.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: quality tiers, hour as local solar time, and estimate=true to check the budget before rendering all hint at when to use it. But there is no explicit 'use this instead of render_3d/render_plan when...' routing, and no stated prerequisites.

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
mimeTypeYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: the region is fitted to aspect by growing the short side and never cropped, and it advises keeping w/h small to save tokens. It does not discuss resolution-dependent rendering cost or failure modes, but the added framing behavior is genuinely informative.

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

Conciseness4/5

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

Front-loaded with the output type and resource in the first clause, then walks through each optional parameter efficiently. It is dense with em-dashes and slightly run-on, but every sentence carries actionable information and nothing is wasted.

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, return values need no explanation, and annotations cover the safety profile. The description covers the framing, padding, background overlay, and size trade-off for all seven parameters. The only real gap is the absence of sibling-level differentiation, which the definition otherwise handles well.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description goes further by explaining how region fitting behaves (grown on the short side, never cropped) and why bg is useful (overlay the scanned reference to compare), giving intent behind parameters that the schema states only mechanically.

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

Purpose4/5

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

States a specific resource and output clearly: a PNG of the floor plan exactly as the user sees it. This distinguishes it from render_3d and render_photo by implying a flat 2D plan view, but it never names or contrasts with those siblings or show_plan, so an agent must infer the boundary.

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 useful intra-tool routing (region vs room with pad, bg to compare against the reference) but offers no when-to-use guidance at the tool level against siblings like show_plan, render_3d, or render_photo. Usage is implied through parameter alternatives rather than explicit conditions.

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

rulesRead the rules behind a reviewA
Read-only
Inspect

The rules behind a review, as Markdown: what electrical and plumbing check against NBR 5410, 16264, 5626 and 8160 (outlets per room, loads, wire sections, DR, the panel, Wi-Fi, drains, diameters, traps, pipe runs), what each layout problem means and how to fix it, and how ergonomics scores (weights, source tiers, scope, city). For designing to a standard, or explaining a finding.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesWhich review's rules

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds that output is Markdown documentation, but discloses nothing further about behavior (no auth, rate limits, or caveats), so it only marginally exceeds the annotation baseline.

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

Conciseness4/5

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

Front-loads the core statement ('The rules behind a review, as Markdown') and sizes itself appropriately for a content-heavy lookup tool. The long nested parenthetical for item lists is dense but every clause carries information, so little is wasted.

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, return-value explanation is not required, and the single required enum param is fully documented. Annotations cover the safety profile; the description rounds out content scope and usage, leaving only sibling-routing guidance as a 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?

Schema coverage is 100% with a single enum parameter, giving a baseline of 3. The description goes beyond the terse schema by detailing what each enum value ('electrical', 'plumbing', 'layout', 'ergonomics') actually returns, adding genuine semantic 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?

States a specific resource (the rules behind a review) and format (Markdown), and enumerates exactly what content each topic domain yields (NBR standards, layout problems, ergonomics weights), so the agent knows what it gets. It does not explicitly differentiate itself from the sibling check tools (electrical, plumbing, layout, ergonomics), which caps it below 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?

"For designing to a standard, or explaining a finding" gives clear when-to-use context across two scenarios. There are no explicit exclusions or named alternatives (e.g., 'use `electrical` to run the check instead'), so it falls short of the 5 bar.

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,usage {peak_mb,cpu_s,measured},limits,not_applied}. A plugin as heavy as a modeler gets the limits its plugin.json declares (cores, memory, priority, time) that this system can apply, not_applied naming the rest, and runs alone, never beside a photo render. 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
okYes
codeNo
editsYes
usageNo
limitsNo
stderrYes
stdoutYes
revisionYes
timed_outNo
not_appliedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructive/openWorld/not-readOnly, and the description adds real substance: resource limits declared in plugin.json, which limits are impossible to apply (not_applied), and the serialization rule against photo renders. It also restates the return shape, which is partly redundant given an output schema exists.

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

Conciseness4/5

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

Front-loads the verb and resource, then layers behavior; every sentence carries information. The dense parentheticals and the inline return-shape blob make it slightly heavy for its purpose.

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 the mutation's side effects, naming convention, and concurrency rule, which is what an agent needs for a destructive open-world tool. An output schema already exists, so the inline return-field list is redundant rather than necessary.

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% and both parameters are documented there, so baseline 3 applies. The description says 'by name' and 'args as JSON' but adds no argument syntax or format detail 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?

States a specific verb (run), resource (plugin), and distinguishes it from the sibling that lists plugins ('The plugins tool lists them'). The parenthetical defines what a plugin is, so an agent can pick this over 'plugins' without opening a schema.

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

Usage Guidelines4/5

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

Names the sibling to use for discovery ('the plugins tool lists them') and gives a concurrency constraint ('runs alone, never beside a photo render'), which is clear usage context. It stops short of explicit when-not-to-use guidance beyond that one exclusion.

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

sessionsList who is editingB
Read-only
Inspect

People and agents on this project now: rows [id,name,cursor,selection,edits]; render, while one runs: {tool, seconds, phase, done, total, threads} (render_photo cancel=true stops it).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
revYes
rowsYes
renderNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds valuable behavioral context: it specifies the shape of returned rows (id,name,cursor,selection,edits) and the render-progress object (tool, seconds, phase, done, total, threads), and it points to render_photo cancel=true as the way to stop a run. 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 a single, dense sentence that front-loads the subject ('People and agents on this project now') and wastes no words. However, the bracket/semicolon notation makes the structure somewhat hard to parse, keeping it from a 5.

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 an output schema present, the description need not explain return values in full, and it does provide some structure. However, it does not help the agent place the tool among many siblings (history, annotations, feedback), so the context is not fully complete for selection.

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 baseline is 4. The description appropriately does not discuss parameters, as there are none to document.

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

Purpose3/5

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

The description names the resource ('People and agents on this project now') and enumerates returned fields, but does not use a clear verb and the tool name 'sessions' is vague. The title 'List who is editing' helps, but the description alone is not a crisp verb+resource statement and does not clearly differentiate from siblings like 'history' or 'annotations'.

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

Usage Guidelines2/5

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

No when-to-use guidance or alternatives are provided. It mentions 'render_photo cancel=true stops it' but this is about a sibling tool's parameter, not about when to call sessions instead of other tools.

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
svgYes
nameYes
editorYes
summaryYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered by structured data. The description adds genuinely non-obvious behavior: the drawing is routed to the viewer and the agent only receives a one-line summary, which is important to know before calling. It does not describe what happens if the client cannot display a viewer, but that is a minor gap.

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

Conciseness5/5

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

Three short, front-loaded sentences with zero waste. The primary purpose leads, followed by output behavior, then the sibling route.

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, return values need no further explanation, yet the description still clarifies that the reply is a one-line summary while the drawing goes to the viewer. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. No parameter semantics are needed or missing.

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

Purpose5/5

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

States a specific verb and resource (show the plan) plus the mechanism (interactive viewer with pan/zoom/3D/editor), and explicitly names the sibling it is not (render_plan). An agent can distinguish it from render_plan without opening either schema.

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

Usage Guidelines5/5

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

Gives both the condition ('where the chat client can display one') and the explicit alternative ('To look at the plan yourself use render_plan'). Routing between this tool and its sibling is unambiguous.

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; each field applies only to the kinds that have it (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 instead of growing around the center; stretch=[part ids] on a group resize grows only those parts and moves the rest along (uprights keep 5.8 cm while the opening grows). dry=true answers what it would do without writing: changed fields, clearances around each piece it touches (negative: cm it would sit inside what it faces), issues_resolved/issues_new [{ids, kind, extent|cm|over}] with the kinds layout gives, and issues_changed (extent_was); dry="summary" leaves out the parts a group rebuilds. Otherwise the reply names what changed. rename {pattern, to, what} renames in bulk by a regex (Rust syntax, (?i) for any case, $1 in to) in one step; with dry it lists them first.

ParametersJSON Schema
NameRequiredDescriptionDefault
vNoPlan version (tab) to write to; switches to it first
dryNoAnswer what it would change, without writing
itemsNoThe elements to change, one object each: `id` and the fields to set
renameNoRename in bulk by a regex, in one step

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNo
okNo
dryNo
idsNo
revNo
goneNo
textNo
addedNo
scoreNo
changedNo
resolvedNo
unchangedNo
clearancesNo
issues_newNo
propertiesNo
added_countNo
annotationsNo
score_scopeNo
new_findingsNo
changed_countNo
issues_changedNo
unchanged_noteNo
issues_resolvedNo
findings_changedNo
acceptance_cleanupNo

TDQS

A3.8/5.0
Behavior5/5

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

The description goes far beyond annotations: it details dry-run behavior (what is returned, clearances, issues), group vs part mutation rules, anchor and stretch semantics, and bulk rename via regex. It clearly discloses destructive effects and the non-writing dry option, matching the destructiveHint annotation without contradiction.

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

Conciseness4/5

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

The description is front-loaded with the core action and remains dense with relevant detail for a complex tool. It is a single long paragraph without formatting breaks, but nearly every clause carries useful constraint or behavior information and none is obviously 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?

Given the rich input schema, destructive annotation, and existing output schema, the description covers most behavioral needs: dry runs, group/part rules, anchor/stretch, and rename. It omits explanation of the 'v' version parameter and the optional 'items' container (including what happens if items is empty), which are minor but noticeable gaps for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds substantial cross-parameter meaning: group parts take name/brand/model_name/url individually while size and place belong to the group, anchor holds a face on resize, stretch selects group parts, and dry values control response detail. It does not document every field, but adds semantics that the schema alone does not convey.

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: 'Change fields of elements by id'. It clarifies that fields apply only to certain kinds, but does not explicitly differentiate from sibling tools like edit_walls, edit_model, or move, leaving some ambiguity about when this general updater is preferred over specialized editors.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as edit_walls, move, or create. The description explains internal parameter behavior (dry run, rename, group semantics) but never states context or routing conditions for selecting this tool over siblings.

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
rowsYes

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 and openWorldHint=false, so the safe-read profile is covered. The description adds useful behavioral context: edits apply to the active version, and version changes belong to edit_variants rather than this tool.

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

Conciseness5/5

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

It is front-loaded, extremely short, and every fragment carries information: the resource, returned row fields, and the routing note for edits. No sentence is wasted.

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

Completeness5/5

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

For a zero-parameter, read-only listing tool with an output schema and clear annotations, this is complete enough. The description need not explain return values further, and it adds the key edit-routing caveat.

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 parameter semantics are not applicable and the baseline is 4. The description does not need to compensate for undocumented inputs.

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 definition identifies the resource as plan versions (tabs) and sketches the row shape, so an agent knows it returns version records. It also distinguishes itself from edit_variants, though the listing verb is supplied mainly by the title rather than the description itself.

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 explicitly says edits apply to the active version and directs edits to edit_variants, which is a clear alternative for mutation. It does not spell out broader when-to-use conditions, but for a parameterless list tool the context is sufficient.

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

videoRead the video pathA
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
fpsYes
rowsYes
secsYes
speedYes

TDQS

A4/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 profile. The description adds the shape and units of the returned data (cm, degrees, m/s), which is useful context, but it does not disclose any behavioral traits beyond the output format already likely captured by the output schema.

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

Conciseness5/5

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

The description is a single, front-loaded fragment naming the resource and its data structure, followed by one short sentence directing mutations elsewhere. Every phrase earns its place with no filler.

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

Completeness5/5

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

For a zero-parameter read tool with annotations covering safety and an output schema managing return values, the description supplies the key data shape, units, and the alternative for mutation. Nothing needed to call the tool 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 is 4. The description provides no parameter details, which is appropriate since there are none.

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 states the verb 'Read' and the resource 'video path,' while the description names the specific data returned (camera path with fps, speed, secs, rows, units). It distinguishes from the sibling edit_video by stating that changing and rendering use edit_video. The description alone lacks an explicit verb, but the combined definition 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 Guidelines4/5

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

The phrase 'Change it and render it with edit_video' explicitly routes mutation and rendering to the sibling tool, implying this tool is for reading the current path. It provides a clear alternative and context, though it doesn't spell out when to read (e.g., before or after edits).

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. 1 tool updatev3.1.0
    • Changedcreate6 fields changed
      • changedInput schema / $defs / RoofSpec / properties / ridge_h / description
        Previous value: -"Height of the ridge (gable) or high side (shed) above the storey floor, cm"New value: +"Ridge (gable) or high side (shed) height above the floor, cm"
      • changedInput schema / $defs / RoomSpec / properties / ceiling_flat / description
        Previous value: -"Ceiling flat at storey height (true, default) or following the wall profiles (false)"New value: +"Flat ceiling at storey height (default) or following wall profiles (false)"
      • changedInput schema / $defs / RoomSpec / properties / pts / description
        Previous value: -"Floor polygon. Omit and give `at` to detect the room enclosed by walls"New value: +"Floor polygon; or omit and give `at`"
      • addedInput schema / properties / exact
        Added value: +{
        +  "description": "Keep wall ends as given; no snap onto nearby walls",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / roofs / description
        Previous value: -"Pitched roofs over a rectangle, built as one group of sloping panels"New value: +"Pitched roofs over a rectangle, as one group of panels"
      • changedInput schema / properties / solids / description
        Previous value: -"Solids: plan outlines raised by `h` (slabs, decks) or cross-sections swept from `a` to `b` (gables, ramps)"New value: +"Solids: outlines raised by `h` (slabs) or sections swept `a`→`b` (gables, ramps)"
  2. 75 tool updatesv3.0.0
    • Changedaccept10 fields changed
      • removedInput schema / properties / accept / default
        Removed value: -[]
      • changedInput schema / properties / accept / description
        Previous value: -"`[[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"New value: +"`[[key, reason]]`, key as the review names it (`layout`, ergonomics, electrical, plumbing): it keeps showing there with the reason and stops counting. An empty reason takes it back"
      • removedInput schema / properties / prune / default
        Removed value: -false
      • removedOutput schema / properties / accepted / description
        Removed value: -"Findings accepted"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / removed / description
        Removed value: -"Acceptances removed"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changedannotations10 fields changed
      • removedOutput schema / properties / checked / description
        Removed value: -"stale=true: what was checked"
      • removedOutput schema / properties / details / description
        Removed value: -"Details shown"
      • removedOutput schema / properties / dims / description
        Removed value: -"Dimensions shown"
      • removedOutput schema / properties / labels / description
        Removed value: -"With q: labels {id, text, at, …}"
      • removedOutput schema / properties / legend / description
        Removed value: -"Legend shown"
      • removedOutput schema / properties / refs / description
        Removed value: -"Reference tags shown"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / rooms / description
        Removed value: -"The schedule: [room, [[tag, name, w, d, h, brand?, model?, url?]]]"
      • removedOutput schema / properties / stale / description
        Removed value: -"stale=true: [id, written, measured, against, text]"
      • removedOutput schema / properties / unverified / description
        Removed value: -"stale=true: [id, text] nobody can check"
    • Changedarrange9 fields changed
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • changedInput schema / properties / action / description
        Previous value: -"`array` (copies in a row), `align`, `distribute`, `flip`, `rotate`, `mirror`, `group`, `ungroup`, `front`, `back`"New value: +"What to do; `array` makes copies in a row"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "array",
        +  "align",
        +  "distribute",
        +  "flip",
        +  "rotate",
        +  "mirror",
        +  "group",
        +  "ungroup",
        +  "front",
        +  "back"
        +]
      • removedInput schema / properties / copy / default
        Removed value: -false
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Addedbackground
    • Changedcabinet_run7 fields changed
      • removedInput schema / properties / dry / default
        Removed value: -false
      • removedOutput schema / properties / adjusted / description
        Removed value: -"Neighbouring runs replanned, same shape"
      • removedOutput schema / properties / modules / description
        Removed value: -"[id, role, from cm, w cm]"
      • removedOutput schema / properties / notes / description
        Removed value: -"What the rules say about it"
      • removedOutput schema / properties / removed / description
        Removed value: -"Cabinets it replaced"
      • removedOutput schema / properties / row / description
        Removed value: -"base, wall or tall"
      • removedOutput schema / properties / wall / description
        Removed value: -"The wall the run is on"
    • Changedcameras2 fields changed
      • removedOutput schema / properties / active / description
        Removed value: -"The camera in use: visitor or aerial"
      • removedOutput schema / properties / rows / description
        Removed value: -"Stored views: [i, name, x, y, z, yaw, pitch, fov]"
    • Changedcatalog4 fields changed
      • removedOutput schema / properties / categories / description
        Removed value: -"Categories to search by, when neither q nor cat was given"
      • removedOutput schema / properties / items / description
        Removed value: -"[id, name, w, d, h, front?] cm"
      • removedOutput schema / properties / more / description
        Removed value: -"How many more matched than the limit"
      • removedOutput schema / properties / used / description
        Removed value: -"scope=project: [kind, name, count, id]"
    • Removedcheck_layout
    • Removedcheckpoint
    • Removedcheckpoints
    • Changedcreate22 fields changed
      • removedInput schema / $defs / DimSpec / properties / chain / default
        Removed value: -false
      • removedInput schema / $defs / DimSpec / properties / in3d / default
        Removed value: -false
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedInput schema / $defs / PolylineSpec / properties / closed / default
        Removed value: -false
      • removedInput schema / $defs / PolylineSpec / properties / curved / default
        Removed value: -false
      • removedInput schema / $defs / PolylineSpec / properties / divider / default
        Removed value: -false
      • removedInput schema / $defs / RoofSpec / properties / gables / default
        Removed value: -false
      • changedInput schema / $defs / RoofSpec / properties / kind / description
        Previous value: -"`gable` (two slopes, default; steep = A-frame) or `shed` (one slope rising from the pts[0]→pts[1] side)"New value: +"Default `gable` (steep = A-frame); `shed` rises from the pts[0]→pts[1] side"
      • addedInput schema / $defs / RoofSpec / properties / kind / enum
        Added value: +[
        +  "gable",
        +  "shed"
        +]
      • changedInput schema / $defs / RoofSpec / properties / skylights / description
        Previous value: -"Glazed openings cut through the roof: center `at:[x,y]` on the plan, `w` along the ridge and `d` across it (plan size), cm"New value: +"Glazed roof openings: center `at`, `w` along the ridge, `d` across, cm"
      • changedInput schema / $defs / RoomSpec / properties / ceiling_flat / description
        Previous value: -"Ceiling mode: true (default) is flat at storey height; false follows wall profiles. Lower roof panels clip either mode"New value: +"Ceiling flat at storey height (true, default) or following the wall profiles (false)"
      • changedInput schema / $defs / RoomUse / description
        Previous value: -"Declared room program, independent of its display name. Auto preserves legacy name/equipment inference; other values are explicit intent"New value: +"Declared room program; `auto` infers it from the name and equipment"
      • changedInput schema / $defs / SolidSpec / properties / profile / description
        Previous value: -"Instead of `pts`: cross-section `[[u,z],…]` cm swept from `a` to `b`; u runs across the path (for a→b going down the plan, +u is +x), z is the height above the storey floor"New value: +"Instead of `pts`: cross-section `[[u,z],…]` cm swept from `a` to `b` (+u is +x when a→b goes down the plan; z above the floor)"
      • removedInput schema / $defs / WallPath / properties / closed / default
        Removed value: -false
      • removedInput schema / properties / px / default
        Removed value: -false
      • changedInput schema / properties / px / description
        Previous value: -"Every point is given in pixels of the background image (converted with its scale and offset); lengths (t, h, off) stay in cm"New value: +"Points are background-image pixels; lengths stay in cm"
      • changedInput schema / properties / solids / description
        Previous value: -"Solids from polygons: plan outlines raised by `h` (slabs, mezzanines, decks with any shape) or cross-sections swept from `a` to `b` (gables, ramps)"New value: +"Solids: plan outlines raised by `h` (slabs, decks) or cross-sections swept from `a` to `b` (gables, ramps)"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changedcut_list6 fields changed
      • removedOutput schema / properties / drawn / description
        Removed value: -"Hand-drawn builds left out"
      • removedOutput schema / properties / hardware / description
        Removed value: -"Hardware by build: \"<id>: <item>\""
      • removedOutput schema / properties / rows / description
        Removed value: -"[part, board, qty, length, width, thickness, edge, cutouts?]"
      • removedOutput schema / properties / sheets / description
        Removed value: -".dxf/.svg: [board, sheets]"
      • removedOutput schema / properties / skipped / description
        Removed value: -"[id, name] left out"
      • removedOutput schema / properties / sources / description
        Removed value: -"Standards cited, by code: [title, tier, url]"
    • Changeddelete7 fields changed
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / labels_deleted / description
        Removed value: -"Labels deleted with them"
      • removedOutput schema / properties / labels_left / description
        Removed value: -"Labels left pointing at deleted pieces: [id, text]"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changeddisciplines9 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`active` (default) or `quantities`"New value: +"Default `active`"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "active",
        +  "quantities"
        +]
      • removedOutput schema / properties / active / description
        Removed value: -"Discipline drawn on top: electrical, plumbing, or null"
      • removedOutput schema / properties / electrical / description
        Removed value: -"action=quantities: [kind, count, names?]"
      • removedOutput schema / properties / hidden / description
        Removed value: -"Disciplines hidden"
      • removedOutput schema / properties / layers / description
        Removed value: -"Plan layers: {lighting, appliances, joinery} → {pieces, hidden}"
      • removedOutput schema / properties / lines_cm / description
        Removed value: -"action=quantities: drawn lines by discipline, cm"
      • removedOutput schema / properties / plumbing / description
        Removed value: -"action=quantities: [kind, count, names?]"
      • removedOutput schema / properties / show_all_3d / description
        Removed value: -"Every discipline shown in 3D"
    • Changededit_annotations16 fields changed
      • removedOutput schema / properties / anchored / description
        Removed value: -"anchor=true: labels now tied to what they measure"
      • removedOutput schema / properties / chains / description
        Removed value: -"dims=true: [[x,y], [x,y], cm]"
      • removedOutput schema / properties / changed / description
        Removed value: -"Switches that changed"
      • removedOutput schema / properties / details / description
        Removed value: -"Details shown"
      • removedOutput schema / properties / dims / description
        Removed value: -"Dimensions shown"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / left / description
        Removed value: -"anchor=true: [id, written, measured, near id] left as they were"
      • removedOutput schema / properties / legend / description
        Removed value: -"Legend shown"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / refs / description
        Removed value: -"Reference tags shown"
      • removedOutput schema / properties / released / description
        Removed value: -"anchor=true: labels let go"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / rooms / description
        Removed value: -"The schedule: [room, [[tag, name, w, d, h, …]]]"
      • removedOutput schema / properties / symbols / description
        Removed value: -"legend=true: {electrical?, plumbing?} → [name, count]"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Addededit_background
    • Changededit_cameras7 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`view`, `aerial`, `store` or `delete`"New value: +"What to do with the points of view"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "view",
        +  "aerial",
        +  "store",
        +  "delete"
        +]
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changededit_disciplines9 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`select`, `show` or `hide`"New value: +"What to do with discipline `d`"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "select",
        +  "show",
        +  "hide"
        +]
      • removedOutput schema / properties / active / description
        Removed value: -"Discipline drawn on top: electrical, plumbing, or null"
      • removedOutput schema / properties / electrical / description
        Removed value: -"action=quantities: [kind, count, names?]"
      • removedOutput schema / properties / hidden / description
        Removed value: -"Disciplines hidden"
      • removedOutput schema / properties / layers / description
        Removed value: -"Plan layers: {lighting, appliances, joinery} → {pieces, hidden}"
      • removedOutput schema / properties / lines_cm / description
        Removed value: -"action=quantities: drawn lines by discipline, cm"
      • removedOutput schema / properties / plumbing / description
        Removed value: -"action=quantities: [kind, count, names?]"
      • removedOutput schema / properties / show_all_3d / description
        Removed value: -"Every discipline shown in 3D"
    • Changededit_electrical29 fields changed
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • changedInput schema / properties / action / description
        Previous value: -"`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`"New value: +"`assign` puts `ids` on `circuit` (empty takes them off), `va` sets their power; `voltage` is the supply, 127 or 220 V"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "assign",
        +  "voltage",
        +  "cable",
        +  "route",
        +  "wifi"
        +]
      • removedInput schema / properties / ids / default
        Removed value: -[]
      • changedInput schema / properties / kind / description
        Previous value: -"For `cable`: what the run carries, `power`, `data` or `tv`"New value: +"For `cable` and `route`: what the run carries"
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "power",
        +  "data",
        +  "tv"
        +]
      • removedInput schema / properties / pts / default
        Removed value: -[]
      • removedOutput schema / properties / access_points / description
        Removed value: -"action=wifi: [id, standard, bands, uplink]"
      • removedOutput schema / properties / added / description
        Removed value: -"Ids added, or their count"
      • removedOutput schema / properties / annotations / description
        Removed value: -"Annotation switches {from, to}"
      • removedOutput schema / properties / bends / description
        Removed value: -"Bends along the run"
      • removedOutput schema / properties / by_premise_m / description
        Removed value: -"Total metres by route: {ceiling, floor, wall}; a reason instead where one is impossible"
      • removedOutput schema / properties / changed / description
        Removed value: -"{id, from, to} per element changed; a count past 20"
      • removedOutput schema / properties / coverage / description
        Removed value: -"action=wifi: [room, band, median, worst, good, grade]"
      • removedOutput schema / properties / gone / description
        Removed value: -"Ids removed, or their count"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / length_m / description
        Removed value: -"Metres: {horizontal, vertical, total}"
      • removedOutput schema / properties / materials / description
        Removed value: -"Bill of materials: [item, quantity, unit]"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / properties / description
        Removed value: -"Project properties changed"
      • removedOutput schema / properties / replaced_drawn / description
        Removed value: -"Hand-drawn lines this run replaced"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / run / description
        Removed value: -"The run: <system>:<circuit|all|ids>"
      • removedOutput schema / properties / suggested / description
        Removed value: -"Route: the one the rules suggest; action=wifi: where access points would go"
      • removedOutput schema / properties / tape / description
        Removed value: -"via=tape: the tape light system"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
      • removedOutput schema / properties / via / description
        Removed value: -"Where it runs: ceiling, floor, wall (or tape)"
      • removedOutput schema / properties / warnings / description
        Removed value: -"Data points past 90 m"
    • Addededit_history
    • Addededit_home
    • Changededit_levels7 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`add`, `select`, `update` or `delete`"New value: +"What to do with the storeys"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "add",
        +  "select",
        +  "update",
        +  "delete"
        +]
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Addededit_library
    • Addededit_lighting
    • Addededit_model
    • Changededit_plumbing20 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`route`"New value: +"The change to make"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "route"
        +]
      • removedInput schema / properties / ids / default
        Removed value: -[]
      • changedInput schema / properties / kind / description
        Previous value: -"For `route`: what the run carries, `cold`, `hot` or `sewer`"New value: +"For `route`: what the run carries"
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "cold",
        +  "hot",
        +  "sewer",
        +  "vent"
        +]
      • removedOutput schema / properties / bends / description
        Removed value: -"Bends along the run"
      • removedOutput schema / properties / branches / description
        Removed value: -"Branches off the trunk"
      • removedOutput schema / properties / by_premise_m / description
        Removed value: -"Total metres by route: {ceiling, floor, wall}; a reason instead where one is impossible"
      • removedOutput schema / properties / length_m / description
        Removed value: -"Metres: {horizontal, vertical, total}"
      • removedOutput schema / properties / materials / description
        Removed value: -"Bill of materials: [item, quantity, unit]"
      • removedOutput schema / properties / merged_into / description
        Removed value: -"The run this one joined, or null"
      • removedOutput schema / properties / needs_depth_cm / description
        Removed value: -"Sewer: depth it needs under the floor, cm"
      • removedOutput schema / properties / notes / description
        Removed value: -"What the rules say about the run"
      • removedOutput schema / properties / replaced_drawn / description
        Removed value: -"Hand-drawn lines this run replaced"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / run / description
        Removed value: -"The run: <system>:<circuit|all|ids>"
      • removedOutput schema / properties / slope_pct / description
        Removed value: -"Sewer: slope %"
      • removedOutput schema / properties / suggested / description
        Removed value: -"The route the rules suggest"
      • removedOutput schema / properties / trunk_mm / description
        Removed value: -"Sewer: trunk diameter mm"
      • removedOutput schema / properties / via / description
        Removed value: -"Where it runs: ceiling, floor, wall (or tape)"
    • Changededit_variants8 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`duplicate` (copy active), `new` (empty), `switch`, `rename` or `delete`"New value: +"`duplicate` copies the active version, `new` starts an empty one"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "duplicate",
        +  "new",
        +  "switch",
        +  "rename",
        +  "delete"
        +]
      • removedOutput schema / properties / i / description
        Removed value: -"Index of the new version"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changededit_video10 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"`add`, `delete`, `clear`, `orbit`, `set` or `render`"New value: +"What to do with the camera path"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "add",
        +  "delete",
        +  "clear",
        +  "orbit",
        +  "set",
        +  "render"
        +]
      • removedOutput schema / properties / bytes / description
        Removed value: -"action=render: file size"
      • removedOutput schema / properties / frames / description
        Removed value: -"action=render: frames written"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / secs / description
        Removed value: -"action=render: length in seconds"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Addededit_walls
    • Changedelectrical17 fields changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "check",
        +  "circuits",
        +  "wifi"
        +]
      • addedInput schema / properties / level
        Added value: +{
        +  "description": "Storey to review, an id like `lv3` (default: the one shown)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / access_points / description
        Removed value: -"action=wifi: [id, standard, bands, uplink]"
      • removedOutput schema / properties / cables_m / description
        Removed value: -"Cable metres: {power, data, tv}"
      • removedOutput schema / properties / circuits / description
        Removed value: -"action=circuits: [name, kinds, points, VA, V, A, wire mm², breaker A, DR]"
      • removedOutput schema / properties / coverage / description
        Removed value: -"action=wifi: [room, band, median, worst, good, grade]"
      • removedOutput schema / properties / findings / description
        Removed value: -"Rows [severity erro|alerta|dica, place, message, source, key, accepted reason?]"
      • removedOutput schema / properties / main_breaker / description
        Removed value: -"action=circuits: {a, phases, load_a_per_phase}"
      • removedOutput schema / properties / orphaned / description
        Removed value: -"Acceptances whose finding is gone: [key, reason, successor key?]"
      • removedOutput schema / properties / panel / description
        Removed value: -"action=circuits: the distribution panel"
      • removedOutput schema / properties / pending / description
        Removed value: -"Findings not accepted"
      • removedOutput schema / properties / points / description
        Removed value: -"Points by kind"
      • removedOutput schema / properties / rev / description
        Removed value: -"action=wifi: plan revision"
      • removedOutput schema / properties / sources / description
        Removed value: -"Standards cited, by code: [title, tier, url]"
      • removedOutput schema / properties / standby_w / description
        Removed value: -"action=circuits: standby watts"
      • removedOutput schema / properties / suggested / description
        Removed value: -"action=wifi: where access points would go"
      • removedOutput schema / properties / total_va / description
        Removed value: -"action=circuits: total load VA"
    • Changedembed10 fields changed
      • removedInput schema / properties / dry / default
        Removed value: -false
      • removedOutput schema / properties / bottom / description
        Removed value: -"Bottom above the floor, cm"
      • addedOutput schema / properties / cut_below
        Added value: +{
        +  "type": "array"
        +}
      • removedOutput schema / properties / cutout / description
        Removed value: -"Countertop: the hole [w, d] cm"
      • removedOutput schema / properties / host / description
        Removed value: -"The countertop or cabinet it went into"
      • removedOutput schema / properties / item / description
        Removed value: -"The embedded piece (empty when dry)"
      • removedOutput schema / properties / kind / description
        Removed value: -"sink, cooktop, oven, microwave, …"
      • removedOutput schema / properties / niche / description
        Removed value: -"Cabinet: the niche [w, h] cm"
      • removedOutput schema / properties / notes / description
        Removed value: -"What the rules say about it"
      • removedOutput schema / properties / x / description
        Removed value: -"Countertop or panel: center along it, cm"
    • Changedergonomics13 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / city / description
        Previous value: -"City whose building code applies for this call only, e.g. `sao-paulo`; `set_home(city=…)` keeps it with the project"New value: +"City whose building code applies for this call only, e.g. `sao-paulo`; `edit_home(city=…)` keeps it with the project"
      • addedInput schema / properties / level
        Added value: +{
        +  "description": "Storey to review, an id like `lv3` (default: the one shown)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / capacity / description
        Removed value: -"What the home holds: beds, bedrooms, bathrooms, seats, wardrobe cm"
      • removedOutput schema / properties / coverage / description
        Removed value: -"What was checked and what was not"
      • removedOutput schema / properties / findings / description
        Removed value: -"{sev, place, msg, key, weight, discipline, in_scope, src?, fix?, accepted?}"
      • removedOutput schema / properties / layout / description
        Removed value: -"Layout issues of the storey, as check_layout gives them"
      • removedOutput schema / properties / orphaned / description
        Removed value: -"Acceptances whose finding is gone: [key, reason, successor key?]"
      • removedOutput schema / properties / scope / description
        Removed value: -"Disciplines counted: {electrical, plumbing}"
      • removedOutput schema / properties / score / description
        Removed value: -"Habitability score 0-100"
      • removedOutput schema / properties / score_basis / description
        Removed value: -"What the score is: habitability_heuristic"
      • removedOutput schema / properties / scores / description
        Removed value: -"Score by discipline: {architecture, electrical, plumbing}"
      • removedOutput schema / properties / sources / description
        Removed value: -"Standards cited, by code: [title, tier, url]"
    • Addedexport
    • Removedexport_cut_list
    • Removedexport_plan
    • Changedfeedback10 fields changed
      • removedInput schema / properties / cost / default
        Removed value: -""
      • removedInput schema / properties / expected / default
        Removed value: -""
      • removedInput schema / properties / goal / default
        Removed value: -""
      • removedInput schema / properties / got / default
        Removed value: -""
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "friction",
        +  "bug",
        +  "idea"
        +]
      • removedInput schema / properties / must_keep / default
        Removed value: -""
      • removedInput schema / properties / tried / default
        Removed value: -""
      • removedInput schema / properties / would_help / default
        Removed value: -""
      • removedOutput schema / properties / kept / description
        Removed value: -"Where the report was written"
      • removedOutput schema / properties / sent / description
        Removed value: -"Whether it reached the developers"
    • Addedfile
    • Removedfill_lighting
    • Changedfit_roof7 fields changed
      • removedInput schema / properties / off / default
        Removed value: -false
      • removedOutput schema / properties / fitted / description
        Removed value: -"Panels fitted under the roof"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Removedget_home
    • Addedhistory
    • Addedhome
    • Changedjoinery10 fields changed
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedInput schema / properties / dry / default
        Removed value: -false
      • changedInput schema / properties / kind / description
        Previous value: -"New build: `cabinet`, `slats`, `countertop`, `cove`, `shadow_gap` or `sofa`"New value: +"What a new build is"
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "cabinet",
        +  "slats",
        +  "countertop",
        +  "cove",
        +  "shadow_gap",
        +  "sofa"
        +]
      • removedOutput schema / properties / hardware / description
        Removed value: -"Hardware it needs"
      • removedOutput schema / properties / id / description
        Removed value: -"The build's group id (empty when dry)"
      • removedOutput schema / properties / name / description
        Removed value: -"Its name"
      • removedOutput schema / properties / notes / description
        Removed value: -"What a workshop would say about it"
      • removedOutput schema / properties / parts / description
        Removed value: -"Parts it is made of"
      • removedOutput schema / properties / size / description
        Removed value: -"[w, d, h] cm"
    • Addedlayout
    • Changedlevels1 field changed
      • removedOutput schema / properties / rows / description
        Removed value: -"Storeys: [id, name, elevation, height, selected, index, viewable, reference]"
    • Addedlibrary
    • Changedlighting6 fields changed
      • addedInput schema / properties / level
        Added value: +{
        +  "description": "Storey to review, an id like `lv3` (default: the one shown)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / W / description
        Removed value: -"Total watts"
      • removedOutput schema / properties / fixtures / description
        Removed value: -"Light fixtures in the plan"
      • removedOutput schema / properties / lm / description
        Removed value: -"Total lumens"
      • removedOutput schema / properties / rooms / description
        Removed value: -"[id, name, m², average lx, minimum lx, uniformity, reference lx, fixtures, W/m², verdict]"
      • removedOutput schema / properties / sources / description
        Removed value: -"Standards cited, by code: [title, tier, url]"
    • Changedmaterials2 fields changed
      • removedOutput schema / properties / patterns / description
        Removed value: -"[key, label, #rrggbb, tile WxH cm]"
      • removedOutput schema / properties / wall_types / description
        Removed value: -"[id, name, thickness cm]"
    • Changedmeasure11 fields changed
      • removedOutput schema / properties / axis / description
        Removed value: -"Axis measured along"
      • removedOutput schema / properties / bounds / description
        Removed value: -"The piece's [[minx,miny],[maxx,maxy]] cm"
      • removedOutput schema / properties / clear / description
        Removed value: -"Free floor by side: [cm, against id, name]"
      • removedOutput schema / properties / cm / description
        Removed value: -"Distance, cm"
      • removedOutput schema / properties / faces / description
        Removed value: -"Side its front looks to"
      • removedOutput schema / properties / fit / description
        Removed value: -"Probe with gap: {free, max, blocked_by}"
      • removedOutput schema / properties / id / description
        Removed value: -"The element measured"
      • removedOutput schema / properties / opening / description
        Removed value: -"A door or window: {basis, hosts}"
      • removedOutput schema / properties / spans / description
        Removed value: -"Probe: [from, to, id, name] along the axis"
      • removedOutput schema / properties / x / description
        Removed value: -"Gap along x, cm"
      • removedOutput schema / properties / y / description
        Removed value: -"Gap along y, cm"
    • Removedmerge_walls
    • Addedmodel
    • Changedmove25 fields changed
      • changedInput schema / $defs / Dry / description
        Previous value: -"Runs an edit against a copy of the plan and reports what it would do. Trying a size used to mean applying it, reviewing, and undoing — a round trip that showed in the user's window and burned a revision each time. The copy has no history and is thrown away, so nothing of that happens. How much of a dry run to answer with. `true` answers with everything it would change; `\"summary\"` answers with the decision — how many pieces move, which roots, the clearances, the findings and the score — because a group that rebuilds lists ninety-seven parts for a choice that fits in five lines"New value: +"How much of a dry run to answer with: `true` everything it would change, `\"summary\"` the decision — pieces moved, roots, clearances, findings, score"
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedOutput schema / properties / acceptance_cleanup / description
        Removed value: -"Acceptances orphaned, and the calls that clear them"
      • removedOutput schema / properties / added / description
        Removed value: -"Ids added, or their count"
      • removedOutput schema / properties / added_count / description
        Removed value: -"Roots added"
      • removedOutput schema / properties / annotations / description
        Removed value: -"Annotation switches {from, to}"
      • removedOutput schema / properties / changed / description
        Removed value: -"{id, from, to} per element changed; a count past 20"
      • removedOutput schema / properties / changed_count / description
        Removed value: -"Roots changed"
      • removedOutput schema / properties / clearances / description
        Removed value: -"Free floor around touched pieces, by id"
      • removedOutput schema / properties / dry / description
        Removed value: -"Nothing was written"
      • removedOutput schema / properties / findings_changed / description
        Removed value: -"Findings changed"
      • removedOutput schema / properties / gone / description
        Removed value: -"Ids removed, or their count"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / issues_changed / description
        Removed value: -"Layout issues resized"
      • removedOutput schema / properties / issues_new / description
        Removed value: -"Layout issues created"
      • removedOutput schema / properties / issues_resolved / description
        Removed value: -"Layout issues settled"
      • removedOutput schema / properties / new_findings / description
        Removed value: -"Findings created"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / properties / description
        Removed value: -"Project properties changed"
      • removedOutput schema / properties / resolved / description
        Removed value: -"Findings settled"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / score / description
        Removed value: -"Score [before, after]"
      • removedOutput schema / properties / score_scope / description
        Removed value: -"Disciplines scored"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Removednew_home
    • Removedopen_home
    • Changedplace32 fields changed
      • changedInput schema / $defs / Dry / description
        Previous value: -"Runs an edit against a copy of the plan and reports what it would do. Trying a size used to mean applying it, reviewing, and undoing — a round trip that showed in the user's window and burned a revision each time. The copy has no history and is thrown away, so nothing of that happens. How much of a dry run to answer with. `true` answers with everything it would change; `\"summary\"` answers with the decision — how many pieces move, which roots, the clearances, the findings and the score — because a group that rebuilds lists ninety-seven parts for a choice that fits in five lines"New value: +"How much of a dry run to answer with: `true` everything it would change, `\"summary\"` the decision — pieces moved, roots, clearances, findings, score"
      • changedInput schema / $defs / LightSpec / properties / z / description
        Previous value: -"Source height as a fraction of the piece's height (default: its base for spots and panels, the middle otherwise)"New value: +"Source height, fraction of the piece's (default: base for spots and panels, else middle)"
      • removedInput schema / $defs / PlaceSpec / properties / cat / default
        Removed value: -""
      • addedInput schema / $defs / PlaceSpec / properties / stretch
        Added value: +{
        +  "description": "With `model`: w/d/h may stretch it unevenly; otherwise one or two of them scale it evenly",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / PlaceSpec / properties / unit
        Added value: +{
        +  "description": "With `model`: unit of its numbers, `m`, `cm`, `mm` or `in` (default: guessed from its size)",
        +  "type": "string"
        +}
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedInput schema / properties / px / default
        Removed value: -false
      • removedOutput schema / properties / acceptance_cleanup / description
        Removed value: -"Acceptances orphaned, and the calls that clear them"
      • removedOutput schema / properties / added / description
        Removed value: -"Ids added, or their count"
      • removedOutput schema / properties / added_count / description
        Removed value: -"Roots added"
      • removedOutput schema / properties / annotations / description
        Removed value: -"Annotation switches {from, to}"
      • removedOutput schema / properties / changed / description
        Removed value: -"{id, from, to} per element changed; a count past 20"
      • removedOutput schema / properties / changed_count / description
        Removed value: -"Roots changed"
      • removedOutput schema / properties / clearances / description
        Removed value: -"Free floor around touched pieces, by id"
      • removedOutput schema / properties / dry / description
        Removed value: -"Nothing was written"
      • removedOutput schema / properties / faces / description
        Removed value: -"Where each front looks: <id>:<side>(<front>)"
      • removedOutput schema / properties / findings_changed / description
        Removed value: -"Findings changed"
      • removedOutput schema / properties / gone / description
        Removed value: -"Ids removed, or their count"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / issues_changed / description
        Removed value: -"Layout issues resized"
      • removedOutput schema / properties / issues_new / description
        Removed value: -"Layout issues created"
      • removedOutput schema / properties / issues_resolved / description
        Removed value: -"Layout issues settled"
      • removedOutput schema / properties / new_findings / description
        Removed value: -"Findings created"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / properties / description
        Removed value: -"Project properties changed"
      • removedOutput schema / properties / resolved / description
        Removed value: -"Findings settled"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / score / description
        Removed value: -"Score [before, after]"
      • removedOutput schema / properties / score_scope / description
        Removed value: -"Disciplines scored"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / turned / description
        Removed value: -"Pieces turned back to a wall: <id>:back to <wall>"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changedplugins1 field changed
      • removedOutput schema / properties / rows / description
        Removed value: -"[name, title, description]"
    • Changedplumbing7 fields changed
      • addedInput schema / properties
        Added value: +{
        +  "level": {
        +    "description": "Storey to review, an id like `lv3` (default: the one shown)",
        +    "type": "string"
        +  }
        +}
      • removedOutput schema / properties / findings / description
        Removed value: -"Rows [severity erro|alerta|dica, place, message, source, key, accepted reason?]"
      • removedOutput schema / properties / orphaned / description
        Removed value: -"Acceptances whose finding is gone: [key, reason, successor key?]"
      • removedOutput schema / properties / pending / description
        Removed value: -"Findings not accepted"
      • removedOutput schema / properties / pipes_m / description
        Removed value: -"Pipe metres: {cold, hot, sewer, vent}"
      • removedOutput schema / properties / points / description
        Removed value: -"Points by kind"
      • removedOutput schema / properties / sources / description
        Removed value: -"Standards cited, by code: [title, tier, url]"
    • Removedredo
    • Changedrender_3d7 fields changed
      • addedInput schema / properties / level
        Added value: +{
        +  "description": "Storeys drawn: an id like `lv3` draws it and those below, `all` every one (default: as the editor shows them)",
        +  "type": "string"
        +}
      • addedInput schema / properties / part
        Added value: +{
        +  "description": "With piece: frame this part of its model (`model` lists them)",
        +  "type": "string"
        +}
      • addedInput schema / properties / piece
        Added value: +{
        +  "description": "Only this piece, framed from its own side",
        +  "type": "string"
        +}
      • addedInput schema / properties / ref
        Added value: +{
        +  "description": "With piece: its reference photo at this index, beside the render, from the photo's side and part",
        +  "type": "integer"
        +}
      • changedInput schema / properties / view / description
        Previous value: -"`aerial` (default) or `visitor`"New value: +"Default `aerial`; `front` to `top` are elevations"
      • addedInput schema / properties / view / enum
        Added value: +[
        +  "aerial",
        +  "visitor",
        +  "front",
        +  "back",
        +  "left",
        +  "right",
        +  "top"
        +]
      • removedOutput schema / properties / mimeType / description
        Removed value: -"Type of the image in the content (image/png)"
    • Changedrender_photo15 fields changed
      • addedInput schema / properties / cancel
        Added value: +{
        +  "description": "Stop the photo being rendered now (`sessions` shows it)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / estimate
        Added value: +{
        +  "description": "Answer the budget and what the photo would take, without rendering",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_s
        Added value: +{
        +  "description": "Seconds it may take; past them it stops, and nothing is returned",
        +  "type": "number"
        +}
      • changedInput schema / properties / quality / description
        Previous value: -"`draft` (default), `good`, `best`"New value: +"Default `draft`"
      • addedInput schema / properties / quality / enum
        Added value: +[
        +  "draft",
        +  "good",
        +  "best"
        +]
      • addedInput schema / properties / threads
        Added value: +{
        +  "description": "Threads it may use, under the budget (half the cores, at most 4)",
        +  "type": "integer"
        +}
      • changedInput schema / properties / view / description
        Previous value: -"`aerial` (default) or `visitor`"New value: +"Default `aerial`"
      • addedInput schema / properties / view / enum
        Added value: +[
        +  "aerial",
        +  "visitor"
        +]
      • addedOutput schema / properties / budget
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / measured
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / memory_mb
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / mimeType / description
        Removed value: -"Type of the image in the content (image/png)"
      • addedOutput schema / properties / text
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / work
        Added value: +{
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mimeType"
        -]
    • Changedrender_plan2 fields changed
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedOutput schema / properties / mimeType / description
        Removed value: -"Type of the image in the content (image/png)"
    • Addedrules
    • Changedrun_plugin10 fields changed
      • removedOutput schema / properties / code / description
        Removed value: -"Exit code; null when it was stopped"
      • removedOutput schema / properties / edits / description
        Removed value: -"Changes it made"
      • addedOutput schema / properties / limits
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / not_applied
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / ok / description
        Removed value: -"The plugin exited cleanly"
      • removedOutput schema / properties / revision / description
        Removed value: -"Plan revision after it"
      • removedOutput schema / properties / stderr / description
        Removed value: -"What it complained"
      • removedOutput schema / properties / stdout / description
        Removed value: -"What it printed"
      • removedOutput schema / properties / timed_out / description
        Removed value: -"It ran out of time"
      • addedOutput schema / properties / usage
        Added value: +{
        +  "type": "object"
        +}
    • Removedsave_home
    • Changedsessions3 fields changed
      • addedOutput schema / properties / render
        Added value: +{
        +  "type": "object"
        +}
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / rows / description
        Removed value: -"[id, name, cursor [x,y]|null, selection, edits]"
    • Removedset_background
    • Removedset_home
    • Changedshow_plan4 fields changed
      • removedOutput schema / properties / editor / description
        Removed value: -"Link that opens the project in the editor"
      • removedOutput schema / properties / name / description
        Removed value: -"Project name"
      • removedOutput schema / properties / summary / description
        Removed value: -"{rooms, area, walls, pieces}"
      • removedOutput schema / properties / svg / description
        Removed value: -"The plan as SVG"
    • Removedsplit_wall
    • Removedtrace_background
    • Removedtrace_walls
    • Removedundo
    • Changedupdate43 fields changed
      • changedInput schema / $defs / Dry / description
        Previous value: -"Runs an edit against a copy of the plan and reports what it would do. Trying a size used to mean applying it, reviewing, and undoing — a round trip that showed in the user's window and burned a revision each time. The copy has no history and is thrown away, so nothing of that happens. How much of a dry run to answer with. `true` answers with everything it would change; `\"summary\"` answers with the decision — how many pieces move, which roots, the clearances, the findings and the score — because a group that rebuilds lists ninety-seven parts for a choice that fits in five lines"New value: +"How much of a dry run to answer with: `true` everything it would change, `\"summary\"` the decision — pieces moved, roots, clearances, findings, score"
      • changedInput schema / $defs / LightSpec / properties / z / description
        Previous value: -"Source height as a fraction of the piece's height (default: its base for spots and panels, the middle otherwise)"New value: +"Source height, fraction of the piece's (default: base for spots and panels, else middle)"
      • changedInput schema / $defs / Point2 / description
        Previous value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm"
      • removedInput schema / $defs / RenameSpec / properties / to / default
        Removed value: -""
      • changedInput schema / $defs / RenameSpec / properties / what / description
        Previous value: -"`names` (default: pieces and the parts of groups) or `labels`"New value: +"Default `names`, parts of groups included"
      • addedInput schema / $defs / RenameSpec / properties / what / enum
        Added value: +[
        +  "names",
        +  "labels"
        +]
      • changedInput schema / $defs / RoomUse / description
        Previous value: -"Declared room program, independent of its display name. Auto preserves legacy name/equipment inference; other values are explicit intent"New value: +"Declared room program; `auto` infers it from the name and equipment"
      • changedInput schema / $defs / UpdateSpec / description
        Previous value: -"Fields that can be changed on an element. Each applies only to the kinds that have it; anything else — a field that does not exist included — is rejected so mistakes are loud"New value: +"Fields to change; each applies only to the kinds that have it, and any other is refused"
      • changedInput schema / $defs / UpdateSpec / properties / about / description
        Previous value: -"The piece a note is about, e.g. `f1185`; its numbers are then checked against that piece by `annotations(stale=true)`. `\"\"` unties it"New value: +"The piece a note is about (e.g. `f1185`), checked by `annotations` stale; `\"\"` unties it"
      • changedInput schema / $defs / UpdateSpec / properties / anchor / description
        Previous value: -"Which face of the piece stays put when `w`, `d` or `h` change: `back`, `front`, `left`, `right` (relative to the way it faces), `bottom`, `top`, or a plan side `+x`, `-x`, `+y`, `-y`. Without it a resize grows around the center and both faces move, which is almost never what a run of joinery wants"New value: +"Face that stays put on a resize: `back`, `front`, `left`, `right` (as the piece faces), `bottom`, `top`, or `+x`, `-x`, `+y`, `-y`; default the center"
      • changedInput schema / $defs / UpdateSpec / properties / ceiling_flat / description
        Previous value: -"Room ceiling mode: true is flat at storey height; false follows wall profiles. Lower roof panels clip either mode; ceiling controls visibility separately"New value: +"Room ceiling flat at storey height (true) or following the wall profiles (false)"
      • changedInput schema / $defs / UpdateSpec / properties / fixed / description
        Previous value: -"Furniture: `true` fixed joinery (a top that can host a built-in outlet), `false` free-standing, when its name does not say; `\"\"` takes the declaration back and lets the name decide again"New value: +"Furniture: `true` fixed joinery, `false` free-standing; `\"\"` lets the name decide"
      • changedInput schema / $defs / UpdateSpec / properties / layer / description
        Previous value: -"Plan layer of a piece: `lighting`, `appliances`, `joinery`, `none` (in no layer), or empty to go back to the layer it is in by itself"New value: +"Plan layer: `lighting`, `appliances`, `joinery` or `none`; empty restores its own"
      • changedInput schema / $defs / UpdateSpec / properties / role / description
        Previous value: -"Functional role independent of name: `trim`, `backsplash`, `counter`; empty restores automatic classification. Does not disable collisions"New value: +"Role independent of the name: `trim`, `backsplash`, `counter`, `stair`; empty: automatic"
      • changedInput schema / $defs / UpdateSpec / properties / stretch / description
        Previous value: -"On a group resize, the parts that take the change (ids); every other part keeps its size and moves along. Without it the group scales all its parts by the same factor"New value: +"On a group resize, the parts that take the change; the others keep their size"
      • changedInput schema / properties / dry / description
        Previous value: -"Try 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"New value: +"Answer what it would change, without writing"
      • removedInput schema / properties / items / default
        Removed value: -[]
      • changedInput schema / properties / rename / description
        Previous value: -"Rename 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"New value: +"Rename in bulk by a regex, in one step"
      • removedOutput schema / properties / acceptance_cleanup / description
        Removed value: -"Acceptances orphaned, and the calls that clear them"
      • removedOutput schema / properties / added / description
        Removed value: -"Ids added, or their count"
      • removedOutput schema / properties / added_count / description
        Removed value: -"Roots added"
      • removedOutput schema / properties / annotations / description
        Removed value: -"Annotation switches {from, to}"
      • removedOutput schema / properties / changed / description
        Removed value: -"{id, from, to} per element changed; a count past 20"
      • removedOutput schema / properties / changed_count / description
        Removed value: -"Roots changed"
      • removedOutput schema / properties / clearances / description
        Removed value: -"Free floor around touched pieces, by id"
      • removedOutput schema / properties / dry / description
        Removed value: -"Nothing was written"
      • removedOutput schema / properties / findings_changed / description
        Removed value: -"Findings changed"
      • removedOutput schema / properties / gone / description
        Removed value: -"Ids removed, or their count"
      • removedOutput schema / properties / ids / description
        Removed value: -"Ids created or touched"
      • removedOutput schema / properties / issues_changed / description
        Removed value: -"Layout issues resized"
      • removedOutput schema / properties / issues_new / description
        Removed value: -"Layout issues created"
      • removedOutput schema / properties / issues_resolved / description
        Removed value: -"Layout issues settled"
      • removedOutput schema / properties / new_findings / description
        Removed value: -"Findings created"
      • removedOutput schema / properties / ok / description
        Removed value: -"Always true"
      • removedOutput schema / properties / properties / description
        Removed value: -"Project properties changed"
      • removedOutput schema / properties / resolved / description
        Removed value: -"Findings settled"
      • removedOutput schema / properties / rev / description
        Removed value: -"Plan revision"
      • removedOutput schema / properties / score / description
        Removed value: -"Score [before, after]"
      • removedOutput schema / properties / score_scope / description
        Removed value: -"Disciplines scored"
      • removedOutput schema / properties / text / description
        Removed value: -"The reply as written"
      • removedOutput schema / properties / unchanged / description
        Removed value: -"Asked ids that came out as they were: {id, now}"
      • removedOutput schema / properties / unchanged_note / description
        Removed value: -"Why they did not change"
      • removedOutput schema / properties / v / description
        Removed value: -"Plan version written to, when there are several"
    • Changedvariants1 field changed
      • removedOutput schema / properties / rows / description
        Removed value: -"Plan versions: [i, name, active, walls, rooms, m², pieces, issues]"
    • Changedvideo4 fields changed
      • removedOutput schema / properties / fps / description
        Removed value: -"Frames per second"
      • removedOutput schema / properties / rows / description
        Removed value: -"Keyframes: [i, x, y, z, yaw, pitch, fov]"
      • removedOutput schema / properties / secs / description
        Removed value: -"Length in seconds"
      • removedOutput schema / properties / speed / description
        Removed value: -"Camera speed m/s"
  3. 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.5/5.0

Scored across 57 tools

Disambiguation4/5

The read/edit pairs (e.g., cameras/edit_cameras, electrical/edit_electrical) follow a clear pattern, and domain tools like joinery vs cabinet_run are distinguishable. However, the large set of generic element manipulators (create, place, update, move, arrange, delete) sits alongside specialized builders, creating some boundary risk for an agent.

Naming Consistency4/5

Names are consistently snake_case and use a predictable read=noun / write=edit_noun convention for most resources. Deviations include bare verbs (create, place, delete, move, arrange) and compound verb_noun names (render_plan, show_plan), so it is not a single uniform pattern.

Tool Count2/5

57 tools far exceeds the typical 3–15 range and the 16–25 'heavy' threshold, placing a large selection burden on an agent. While each tool covers a real capability in a broad CAD/architecture domain, the count is still excessive for practical coherence.

Completeness5/5

The surface spans CRUD for geometry, reviews (electrical, plumbing, lighting, ergonomics, layout), rendering, export/import, versions, history, plugins, and collaboration. Only minor gaps exist, such as no direct edit_materials for wall types/finish patterns, but overall lifecycle coverage is very strong.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    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.
    4
    MIT