3D New Era AI
You can design, edit, analyze, and render homes and interiors through AI via the MCP tools.
Draw and edit architecture: walls (polylines, arcs, sloping), rooms, roofs with skylights, solids, dimensions, labels, polylines; split/merge walls.
Furnish and build joinery: search and place catalog furniture, doors, windows, beams, pools; create parametric cabinets, wardrobes, countertops, slatted panels, sofas; embed appliances/sinks; fill walls with cabinets; generate cut lists.
Analyze and validate: layout checks (overlaps, blocked doors, in-wall pieces, outside rooms, etc.), ergonomics/habitability review, lighting photometry, electrical and plumbing checks against standards.
Design systems: electrical circuits, cables, Wi-Fi coverage; plumbing runs (cold, hot, sewer, vent); annotations, schedules, dimensions, tags.
Render and export: floor plans, 3D views, path-traced photos, videos; export PDF, SVG, PNG, GLB, OBJ, cut lists as CSV/DXF/SVG.
Manage project: undo/redo, checkpoints, plan variants/tabs, storeys/levels, cameras, sessions, plugins, open/save/import Sweet Home 3D, trace scanned plans.
AI-friendly workflow: compact IDs, dry runs, atomic undoable commands, MCP tools for agents, accept findings, feedback to developers.
Allows Windsurf (Codeium's IDE) to connect to the MCP server and drive the home design editor, placing objects, editing layouts, running checks, and generating renders.
3D New Era AI
English · Português (Brasil) · Website · Try it in the browser
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.

Three ways to use it
What you get | Account | |
The full editor on your machine, with a local MCP server at | none | |
The same editor in a tab (WebGPU or WebGL). Switch on its MCP and your AI edits the tab's project. | none | |
Add | 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 | iexmacOS (Apple Silicon and Intel) — in Terminal:
curl -fsSL https://raw.githubusercontent.com/leandrodaf/3d-new-era-ai/main/scripts/install-macos.sh | bashor 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.shto add the menu entry, the icon and the.newerafile type (--uninstallundoes 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:
Claude Desktop: download newera-mcp.mcpb from the
latest release and open it.
Plugins with skills:
Client | Command |
Claude Code |
|
Codex |
|
Gemini CLI |
|
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/mcpCodex CLI
codex mcp add newera --url http://127.0.0.1:7878/mcpGemini CLI
gemini mcp add --transport http newera http://127.0.0.1:7878/mcpVS 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 |
|
|
Daylight | At dusk, lamps on |
|
|
|
|
|
|
Joinery and rooms | |
|
|
|
|
Features
Plans from anything. Draw walls, arcs and sloping walls, or drop in a scanned plan at real scale and let
backgroundfind 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_runfills a wall with even modules around doors, windows and corners;cut_listexports 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 |
| Compact state ( |
| Walls (polylines, arcs, sloping), rooms (polygon or detected from walls), dimensions, labels, roofs with skylights and solids, in one atomic call |
| Edit any element by id |
| Copies in a row, rotate, mirror, group/ungroup, drawing order |
| Split a wall in two, or join walls on one line |
| Project name, compass (north), the city whose building code applies and who lives there |
| Scanned plan at real scale (calibration, X/Y scale, rotation); find the walls in it, and create them |
| Search the parametric catalog; place furniture, doors and windows (snapped into walls), beams, finishes and glass |
| Parametric cabinets, slatted panels, countertops with cutouts, plaster coves, shadow gaps and modular sofas |
| Fill a wall with cabinets sized for it: even modules around corners, doors, windows, fridge and stove |
| Set a sink or cooktop into a countertop (exact cutout) or an oven into a cabinet niche |
| Walls, glass and panels take the shape of the roof above and keep following it |
| Boards, edge banding and hardware of the joinery, as CSV or DXF/SVG sheets |
| Overlaps, pieces in walls, blocked doors, pieces outside rooms, areas against references |
| Review for the people living there: circulation, occupancy, kitchen, doors, ceiling heights, windows, wheelchair use |
| Lux per room by photometry against NBR ISO/CIE 8995-1; place the fixtures a room needs |
| Electrical and plumbing projects over the plan, changed through |
| Free floor around a piece, the gap between two, what a straight probe runs into, how far a piece can grow |
| What an imported OBJ/glTF/GLB became: unit taken, size, triangles, materials, named parts, and what is not drawn; |
| 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 |
| A library of approved model versions, with their photos, measurements and source, placed in any project as |
| Mark findings of any review as seen, with the reason |
| What a review checks against: the standards' tables, what each layout problem means, how ergonomics scores |
| Finishes, visible projects and layers, dimension chains and schedules; |
| Storeys, points of view, plan versions and camera-path videos, each changed through its |
| PNG of the plan as the user sees it; the plan inside the chat as an interactive viewer (MCP Apps) |
| Software 3D views (aerial, visitor, cameras, elevations, sections); path-traced photos with sun and lamps |
| PDF, SVG or PNG plan; GLB or OBJ model; the cut list as CSV or DXF/SVG sheets |
| New, open and save: projects ( |
| Undo and redo, shared with the user, and named checkpoints to come back to |
| External plugins and the people working on the project |
| 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:8790Run 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 togetherDocumentation
Architecture: crates, the command model, MCP design and security
Standards and sources: where every rule in the reviews comes from
Showcase: a full apartment built by an agent
Distribution: channels, releases and the hosted service
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 toolsacceptAccept findingsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prune | No | Drop every acceptance whose finding is gone — the `orphaned` the reviews list — from all of them at once | |
| accept | No | `[[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
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes | |
| removed | No | |
| accepted | No |
TDQS
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.
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.
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.
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.
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.
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 notesBRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search label text, accent- and case-insensitive, e.g. `porta`; or `re:<pattern>` for a regular expression | |
| stale | No | Dimensions and notes that no longer match the drawing: rows [id, written, measured, against, text] |
Output Schema
| Name | Required | Description |
|---|---|---|
| rev | No | |
| dims | No | |
| refs | No | |
| rooms | No | |
| stale | No | |
| labels | No | |
| legend | No | |
| checked | No | |
| details | No | |
| unverified | No |
TDQS
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.
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.
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.
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.
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.
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 groupADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | mirror: the first point of the mirror line | |
| b | No | mirror: the second point of the mirror line | |
| n | No | array: number of copies (default 1) | |
| dx | No | array: step per copy along x, cm | |
| dy | No | array: step per copy along y, cm | |
| dz | No | array: step per copy upwards, cm (furniture and labels) | |
| gap | No | distribute: centimeters between one piece and the next (default 0) | |
| ids | Yes | The elements to act on (ungroup: the group) | |
| axis | No | align/distribute: `x` or `y` | |
| copy | No | rotate/mirror: keep the originals and transform a copy | |
| edge | No | align: which edge to line up — `low` (left, or top of the plan), `middle`, `high` | |
| name | No | group: its name | |
| about | No | rotate: pivot `[x,y]` (default the center of the elements) | |
| angle | No | rotate: clockwise degrees | |
| value | No | align: the coordinate, cm, to put that edge on | |
| action | Yes | What to do; `array` makes copies in a row |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 scanARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Wall height cm when creating (default 250) | |
| t_max | No | Thickest wall kept, cm (default 45) | |
| t_min | No | Thinnest wall kept, cm (default 5) | |
| region | No | Only this part of the plan `[x0, y0, x1, y1]` cm | |
| max_gap | No | Doors and windows up to this wide don't split a wall, cm (default 130) | |
| min_len | No | Shortest wall kept, cm (default 60) | |
| threshold | No | Luminance 0..255 below which a gray pixel is ink (default 128; raise it for light gray walls) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes |
TDQS
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.
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.
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.
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.
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.
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 cabinetsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Flat 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) | |
| to | No | Where the run ends, cm from the wall start (default: the wall's end) | |
| dry | No | Plan and report only | |
| from | No | Stretch to fill, cm from the wall start (default: all of it) | |
| keep | No | Cabinets on that wall that stay as they are | |
| near | No | Or a piece against the wall (`f12`, the fridge): its nearest wall, on its side | |
| room | No | Room the fronts face (default: the side toward the middle of the house) | |
| wall | No | Wall whose face gets the cabinets |
Output Schema
| Name | Required | Description |
|---|---|---|
| row | Yes | |
| wall | Yes | |
| notes | Yes | |
| modules | Yes | |
| removed | Yes | |
| adjusted | No |
TDQS
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.
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.
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.
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.
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.
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 viewARead-onlyInspect
Stored points of view: {active: visitor|aerial, rows [i,name,x,y,z,yaw,pitch,fov]}, cm and degrees. Change them with edit_cameras.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| active | Yes |
TDQS
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.
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.
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.
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.
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.
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 catalogCRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search words (Portuguese or English), e.g. `cama casal` | |
| cat | No | Category id, e.g. `kitchen` | |
| limit | No | Max rows (default 40) | |
| scope | No | `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
| Name | Required | Description |
|---|---|---|
| more | No | |
| used | No | |
| items | No | |
| categories | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| v | No | Plan version (tab) to write to; switches to it first | |
| px | No | Points are background-image pixels; lengths stay in cm | |
| dims | No | Dimension lines: between two points, along a wall, or across a room | |
| exact | No | Keep wall ends as given; no snap onto nearby walls | |
| roofs | No | Pitched roofs over a rectangle, as one group of panels | |
| rooms | No | Rooms: an outline of points, or `at` inside closed walls | |
| walls | No | Walls, each a chain of points joined corner to corner | |
| labels | No | Text on the plan | |
| solids | No | Solids: outlines raised by `h` (slabs) or sections swept `a`→`b` (gables, ramps) | |
| polylines | No | Free lines: annotations, arrows, electrical or plumbing runs |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 listBRead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Build or drawn group ids (default: every build and drawn group on this storey) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| drawn | No | |
| sheets | No | |
| skipped | No | |
| sources | Yes | |
| hardware | Yes |
TDQS
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.
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.
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.
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.
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.
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 elementsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | The elements to delete: walls, rooms, pieces, dimensions, labels, lines | |
| labels | No | Also delete the labels left pointing at the deleted pieces |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes | |
| labels_left | No | |
| labels_deleted | No |
TDQS
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.
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.
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.
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.
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.
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 displaysARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Default `active` |
Output Schema
| Name | Required | Description |
|---|---|---|
| active | No | |
| hidden | No | |
| layers | No | |
| lines_cm | No | |
| plumbing | No | |
| electrical | No | |
| show_all_3d | No |
TDQS
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.
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.
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.
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.
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.
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 tagsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bake | No | Convert the automatic dimension chains into editable dimensions | |
| dims | No | Show engineering dimension chains (`auto_dimensions` in the project JSON) | |
| refs | No | Show the room reference schedule and tags (`references` in the JSON) | |
| anchor | No | Tie 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 | |
| legend | No | Legend of electrical/plumbing symbols with counts | |
| details | No | Include brand, model and link in references (`reference_details`) | |
| renumber | No | Number the schedule again in reading order, closing the gaps pieces left behind. Numbers are otherwise kept by each piece for good |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| ids | No | |
| rev | No | |
| dims | No | |
| left | No | |
| refs | No | |
| text | No | |
| rooms | No | |
| chains | No | |
| legend | No | |
| changed | No | |
| details | No | |
| symbols | No | |
| anchored | No | |
| released | No |
TDQS
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.
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.
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.
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.
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.
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 planADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | For `trace`: wall height cm (default 250) | |
| path | No | For `set`: image file (png/jpg/webp/bmp); required when there is no background yet | |
| angle | No | For `set`: clockwise turn of the image, degrees | |
| clear | No | For `set`: remove the background | |
| t_max | No | For `trace`: thickest wall kept, cm (default 45) | |
| t_min | No | For `trace`: thinnest wall kept, cm (default 5) | |
| action | Yes | What to do with the scanned plan | |
| offset | No | For `set`: plan position cm of the image's top-left corner | |
| region | No | For `trace`: only this part of the plan `[x0, y0, x1, y1]` cm | |
| max_gap | No | For `trace`: doors and windows up to this wide don't split a wall, cm (default 130) | |
| min_len | No | For `trace`: shortest wall kept, cm (default 60) | |
| opacity | No | For `set`: how opaque the image is drawn, 0..1 | |
| visible | No | For `set`: show or hide the image without removing it | |
| calibrate | No | For `set`: two pixels with a known real distance, `{a, b, cm}` | |
| cm_per_px | No | For `set`: the scale, cm per image pixel | |
| threshold | No | For `trace`: luminance 0..255 below which a gray pixel is ink (default 128) | |
| cm_per_px_y | No | For `set`: the vertical scale, when it differs | |
| calibrations | No | For `set`: several known distances, fitting X and Y scales apart |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 viewADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| i | No | Stored view index | |
| x | No | Eye position on the plan, cm | |
| y | No | Eye position on the plan, cm (y grows down) | |
| z | No | Eye height cm | |
| fov | No | Horizontal field of view, degrees | |
| yaw | No | Direction the eye looks, degrees clockwise on the plan | |
| name | No | For `store`: the view's name (default "Ponto de vista N") | |
| pitch | No | Degrees down | |
| action | No | What to do with the points of view | |
| look_at | No | For `store`: point `[x,y,z]` cm to look at (sets yaw and pitch) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| d | No | `electrical`, `plumbing` or `architecture`; for show/hide also a plan layer: `lighting`, `appliances` or `joinery` | |
| action | No | What to do with discipline `d` | |
| show_all_3d | No | Whether the 3D shows everything (true) or hides what the plan hides (false). Applies with any action |
Output Schema
| Name | Required | Description |
|---|---|---|
| active | No | |
| hidden | No | |
| layers | No | |
| lines_cm | No | |
| plumbing | No | |
| electrical | No | |
| show_all_3d | No |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| va | No | Power per point, VA, instead of the norm's default | |
| cat | No | For `route` of data: `cat5e`, `cat6` (default) or `cat6a` | |
| ids | No | Point ids for `assign` | |
| poe | No | For `wifi`: whether `ids` are fed by their data cable (`PoE`) | |
| pts | No | For `cable`: the run's points `[[x,y], …]`, cm | |
| via | No | For `route`: where the run passes, `ceiling` (slab, dropping in the walls), `floor` or `wall`. Omitted: the cheapest that can be built | |
| band | No | For `wifi`: the band the suggestion aims at, `2.4`, `5` (default) or `6` | |
| from | No | For `route`: the panel it starts from; default the nearest of its kind | |
| kind | No | For `cable` and `route`: what the run carries | |
| bands | No | For `wifi`: the bands they radiate when fewer than their generation's, e.g. `2.4,5` for a dual-band Wi-Fi 7 | |
| max_w | No | For `assign` on a dimmer: the most lighting it takes, W | |
| volts | No | Supply voltage, V; with `assign`, the points' own, 127 or 220 | |
| action | No | `assign` puts `ids` on `circuit` (empty takes them off), `va` sets their power; `voltage` is the supply, 127 or 220 V | |
| uplink | No | For `wifi`: the access points' wired uplink, Gbps (1, 2.5, 5, 10) | |
| circuit | No | Circuit name, e.g. `C3` | |
| modules | No | For `assign` on a distribution panel: the DIN modules it holds | |
| circuits | No | For `assign`: the whole division at once, `{"C1": [ids], "C2": [ids]}`, in one undoable step | |
| earthing | No | For `voltage`: the earthing scheme, `TN-S`, `TN-C-S` or `TT` | |
| short_ka | No | For `voltage`: the presumed short-circuit current at the delivery point, kA, as the utility informs it | |
| standard | No | For `wifi`: the access points' standard, `wifi5`, `wifi6`, `wifi6e` or `wifi7`, written on `ids` | |
| standby_w | No | For `assign` on automation points: standby consumption, W |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| ids | No | |
| rev | No | |
| run | No | |
| via | No | |
| gone | No | |
| tape | No | |
| text | No | |
| added | No | |
| bends | No | |
| changed | No | |
| coverage | No | |
| length_m | No | |
| warnings | No | |
| materials | No | |
| suggested | No | |
| properties | No | |
| annotations | No | |
| by_premise_m | No | |
| access_points | No | |
| replaced_drawn | No |
TDQS
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.
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.
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.
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.
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.
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, checkpointsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | For `checkpoint` and `revert`: the checkpoint's name | |
| action | Yes | What to do |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| gone | No | |
| text | Yes | |
| added | No | |
| changed | No | |
| properties | No | |
| annotations | No |
TDQS
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.
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.
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.
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.
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.
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 settingsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City 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 | |
| name | No | The project's name | |
| level | No | Storey whose properties `properties` changes, e.g. `lv2` | |
| north | No | Clockwise degrees from plan up to north | |
| people | No | Who 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 | |
| region | No | State 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 | |
| country | No | Country 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_d | No | Compass diameter cm | |
| compass_at | No | Where the compass sits on the plan, `[x,y]` cm | |
| properties | No | Project 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_visible | No | Show or hide the compass |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 storeysADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Storey height cm for `add` and `update` | |
| id | No | Level id, e.g. `lv3` | |
| elev | No | Floor elevation cm for `add` and `update` (e.g. a house on stilts) | |
| name | No | Storey name for `add` and `update` | |
| action | No | What to do with the storeys | |
| reference | No | Mark 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
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | publish: the piece whose model, photos, measurements and unit are kept, e.g. `f12` | |
| name | Yes | publish: the entry, lowercase letters, digits, - and _ (e.g. `oak-armchair`) | |
| notes | No | publish: what changed in this version | |
| action | Yes | `publish`: the piece's model as the next version of `name` | |
| fidelity | No | publish: how far it can be trusted (what was estimated, what was measured) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lux | No | Lux wanted instead of the room's reference | |
| room | Yes | Room id | |
| plane | No | Work plane height cm (default 75) | |
| fixture | Yes | The fixture to place in a grid: `downlight`, `led-panel`, `light-ceiling`, `pendant` |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| after | No | |
| before | Yes | |
| placed | Yes |
TDQS
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.
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.
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.
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.
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.
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 fileADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cm | No | measure: the product's value, cm | |
| ids | Yes | Pieces whose model changes, e.g. `["f12"]` | |
| mat | No | material: an image over it, `img:trama.png`, or `none` for the file's own | |
| rev | No | Revision the change was prepared on; refused if the plan has moved on since | |
| file | No | replace/lod/reference: the new .obj/.gltf/.glb file (lod: the lighter one; reference: the photo) | |
| hide | No | part: hide it (true) or show it again (false) | |
| note | No | reference: what it shows | |
| part | No | part: which one, by the name `model` lists (`almofada_encosto`) | |
| size | No | replace: `keep` each piece's w/d/h (default) or take the new file's `natural` size | |
| unit | No | replace: unit of the new file's numbers, `m`, `cm`, `mm` or `in` (default: guessed) | |
| view | No | reference: the side the photo shows | |
| clear | No | material/part: back to the file's own | |
| color | No | material: its color `[r,g,b]` | |
| every | No | replace: also every other piece using the same file as `ids` (default: only `ids`) | |
| scale | No | part: resize it about its center, `[x, y, z]` factors | |
| action | Yes | `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 | |
| beyond | No | lod: farther than this from the camera, cm, the lighter file is drawn (default 400) | |
| detail | No | lod: `always` draws the detailed file however far (a close review); `auto` switches again | |
| offset | No | part: move it by `[x across, y to the front, z up]` cm from where the file has it | |
| remove | No | reference: take out the one at this index (`model id=` lists them) | |
| repeat | No | material: times its image repeats against the file's mapping (2 draws it at half size) | |
| source | No | reference/measure: where it came from (a product page) | |
| material | No | material: which one, by the name `model` lists (`tecido`) | |
| confirmed | No | measure: measured or stated by the maker, not estimated | |
| dimension | No | measure: `width`, `depth`, `height` or `<part>.height` (its top above the floor) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 runADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | For `route`: the points; default every point of the kind | |
| via | No | For `route`: `ceiling`, `floor` or `wall`; omitted, the cheapest that can be built | |
| from | No | For `route`: the piece it starts from (a water meter, a valve, the heater, the inspection box or stack); default the nearest of its kind | |
| kind | No | For `route`: what the run carries | |
| depth | No | For `route` of sewer: the height free under the finished floor, cm (slab recess, or the ceiling void of the storey below) | |
| action | No | The change to make |
Output Schema
| Name | Required | Description |
|---|---|---|
| rev | Yes | |
| run | Yes | |
| via | Yes | |
| bends | Yes | |
| notes | No | |
| branches | No | |
| length_m | Yes | |
| trunk_mm | No | |
| materials | Yes | |
| slope_pct | No | |
| suggested | No | |
| merged_into | No | |
| by_premise_m | No | |
| needs_depth_cm | No | |
| replaced_drawn | No |
TDQS
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.
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.
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.
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.
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.
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 versionsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| i | No | Variant index for switch/rename/delete | |
| name | No | Name for duplicate/new/rename | |
| action | No | `duplicate` copies the active version, `new` starts an empty one |
Output Schema
| Name | Required | Description |
|---|---|---|
| i | No | |
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 videoADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Video height, px | |
| i | No | Keyframe index (`delete`, or insert position for `add`) | |
| n | No | Keyframes for `orbit` | |
| w | No | Video width, px | |
| x | No | Keyframe eye position on the plan, cm | |
| y | No | Keyframe eye position on the plan, cm (y grows down) | |
| z | No | Keyframe eye height, cm | |
| cam | No | Stored view index to add as keyframe | |
| fov | No | Keyframe horizontal field of view, degrees | |
| fps | No | Frames per second of the rendered video | |
| yaw | No | Keyframe direction, degrees clockwise on the plan | |
| path | No | Output `.avi` for `render` | |
| pitch | No | Keyframe tilt, degrees down | |
| speed | No | Camera speed m/s | |
| action | No | What to do with the camera path |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| ids | No | |
| rev | No | |
| secs | No | |
| text | No | |
| bytes | No | |
| frames | No |
TDQS
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.
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.
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.
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.
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.
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 wallsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| t | No | For `split`: where along the wall, 0..1 (default 0.5) | |
| id | No | For `split`: the wall to split | |
| ids | No | For `merge`: the walls to join, in order along the line they make | |
| action | Yes | What to do with the walls |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 projectARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | For `wifi`: the band the suggestion aims at, `2.4`, `5` (default) or `6` | |
| level | No | Storey to review, an id like `lv3` (default: the one shown) | |
| action | No | `check` (default): points by kind and what the norm finds; `circuits`: the load schedule and the panel; `wifi`: coverage and a suggestion |
Output Schema
| Name | Required | Description |
|---|---|---|
| rev | No | |
| panel | No | |
| points | No | |
| pending | No | |
| sources | No | |
| cables_m | No | |
| circuits | No | |
| coverage | No | |
| findings | No | |
| orphaned | No | |
| total_va | No | |
| standby_w | No | |
| suggested | No | |
| main_breaker | No | |
| access_points | No |
TDQS
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.
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.
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.
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.
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.
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 sinkADestructiveInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| d | No | Depth of a new item, cm | |
| h | No | Height of a new item, cm | |
| w | No | Width of a new item, cm (a real product's measurements) | |
| z | No | Niche floor above the room floor, cm (default: oven 80 and microwave 145 in towers) | |
| at | No | Center along the host's width from its left end, cm (default: where the item is, or the middle) | |
| cat | No | …or a new one from the catalog: `cooktop`, `sink-bowl`, `oven`, `microwave` | |
| dry | No | Check and report only | |
| host | Yes | Joinery countertop (sink, cooktop) or cabinet (oven, microwave: a niche) | |
| item | No | Piece already in the plan to embed (id)… |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | |
| host | Yes | |
| item | Yes | |
| kind | Yes | |
| niche | No | |
| notes | Yes | |
| bottom | No | |
| cutout | No | |
| cut_below | No |
TDQS
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.
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.
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.
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.
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.
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 ergonomicsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City whose building code applies for this call only, e.g. `sao-paulo`; `edit_home(city=…)` keeps it with the project | |
| level | No | Storey to review, an id like `lv3` (default: the one shown) | |
| scope | No | Disciplines included in the score. Architecture always counts; excluded findings remain visible | |
| elderly | No | Of them, elderly people | |
| stature | No | Height of the main cook, cm, to size the countertop (default 165) | |
| children | No | Of them, children (sleep in single beds or cribs) | |
| occupants | No | People living in the home (default 2) | |
| wheelchair | No | Someone uses a wheelchair: NBR 9050 turning space, doors and reach |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | No | |
| score | Yes | |
| layout | No | |
| scores | No | |
| sources | No | |
| capacity | No | |
| coverage | No | |
| findings | Yes | |
| orphaned | No | |
| score_basis | No |
TDQS
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.
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.
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.
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.
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.
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 fileADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | For `plan`, `.png` only: height px (default 1200) | |
| w | No | For `plan`, `.png` only: width px (default 1600) | |
| ids | No | For `cut_list`: builds or drawn groups (default every one on this storey) | |
| path | Yes | The file to write; its extension picks the format | |
| what | No | Default `plan`: the drawing or the 3D model. `cut_list`: the boards of the joinery | |
| scale | No | For `plan`, `.pdf`: scale denominator (50 → 1:50); omitted fits the sheet |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| ids | No | |
| rev | No | |
| rows | No | |
| text | No | |
| drawn | No | |
| sheets | No | |
| skipped | No | |
| sources | No | |
| hardware | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| got | No | What came back, literally — the part of the reply that is the proof | |
| cost | No | What it cost: the workaround, the extra calls, the wrong conclusion reached before the right one, the distortion made to the plan | |
| goal | No | What you were trying to do, and the situation in the plan: the pieces, rooms and numbers involved | |
| kind | No | `friction` (it worked, at a cost), `bug` (it answered wrong) or `idea` (something missing) | |
| tool | No | The tool it is about, e.g. `measure` | |
| tried | No | The exact call, with its arguments | |
| expected | No | What was true instead, and how you found out (another tool, a render, a probe) — the reference the fix will be checked against | |
| must_keep | No | What works today and must keep working with that change — the cases where the current behaviour is right. "none known" is an answer | |
| would_help | No | The change that would have shortened the way, as concretely as you can: a field, a parameter, a rule |
Output Schema
| Name | Required | Description |
|---|---|---|
| kept | Yes | |
| sent | Yes |
TDQS
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.
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.
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.
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.
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.
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 saveADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | For `open` and `save`: the file, `.newera` (or `.sh3d` to import) | |
| action | Yes | What to do with the project |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 roofADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Walls and pieces (glass, panels) to fit | |
| off | No | Stop following the roof (heights stay as they are) | |
| above | No | Lowest sloping surface that counts, cm above the floor (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | Yes | |
| ids | No | |
| rev | No | |
| text | Yes | |
| fitted | No |
TDQS
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.
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.
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.
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.
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.
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 checkpointsARead-onlyInspect
The checkpoints edit_history remembered: rows [label, changes ago]. A checkpoint lives with the project and survives saving.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| checkpoints | Yes |
TDQS
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.
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.
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.
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.
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.
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 homeARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Only these ids, group parts included, e.g. `["f833","w24"]` | |
| rect | No | Only what meets this rectangle, `[[x0,y0],[x1,y1]]` cm | |
| room | No | Only what stands inside this room, by id or name | |
| kinds | No | Only these kinds: `walls`, `rooms`, `dims`, `labels`, `furniture`, `polylines` | |
| level | No | Storey to read: an id like `lv3`, or `all`. Default: the one shown | |
| parts | No | List what is inside groups instead of only counting the parts | |
| detail | No | `summary` (counts, bounds, room areas) or `full` (default) | |
| fields | No | Keep only these fields of each element; `id` is always kept | |
| ndjson | No | One 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
| Name | Required | Description |
|---|---|---|
| rev | No | |
| dims | No | |
| name | No | |
| lines | No | |
| north | No | |
| parts | No | |
| rooms | No | |
| walls | No | |
| bounds | No | |
| counts | No | |
| labels | No | |
| levels | No | |
| warnings | No | |
| furniture | No | |
| polylines | No | |
| background | No |
TDQS
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.
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.
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.
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.
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.
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 joineryADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Parameters (flat; everything has a default), see the tool description | |
| at | No | Center on the plan (default: 0,0), or `wall` (+`along` cm) to back it onto a wall | |
| id | No | Or an existing build's group id: `p` holds only what changes | |
| dry | No | Only check and report, create nothing | |
| elev | No | Bottom above the floor, cm (wall cabinets) | |
| kind | No | What a new build is | |
| room | No | `cove`/`shadow_gap`: room id whose outline to follow | |
| wall | No | Wall to back it onto, instead of `at` | |
| along | No | With `wall`: center along it, cm from its start (default: the middle) | |
| angle | No | Clockwise degrees | |
| anchor | No | Changing 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
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| size | Yes | |
| notes | Yes | |
| parts | Yes | |
| hardware | Yes |
TDQS
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.
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.
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.
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.
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.
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 layoutARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| areas | No | Expected room areas in m² by room name or id, e.g. {"Sala": 10.91}; adds rows [room, expected, actual, diff %] | |
| level | No | Storey to check: an id like `lv3`, or `all` for every storey that is not a reference layer. Default: the storey being shown |
Output Schema
| Name | Required | Description |
|---|---|---|
| areas | No | |
| loose | No | |
| turned | No | |
| blocked | No | |
| in_wall | No | |
| no_door | No | |
| overlap | No | |
| accepted | No | |
| orphaned | No | |
| warnings | No | |
| backwards | No | |
| blocks_door | No | |
| above_ceiling | No | |
| blocks_window | No | |
| loose_opening | No | |
| outgrew_niche | No | |
| outside_rooms | No | |
| overlap_kinds | No | |
| unclear_front | No | |
| unrated_light | No |
TDQS
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.
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.
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.
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.
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.
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 storeysARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes |
TDQS
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.
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.
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.
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.
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.
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 libraryBRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | One entry's versions instead of the list, e.g. `win` |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| rows | No | |
| versions | No |
TDQS
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.
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.
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.
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.
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.
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 lightingARead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| room | No | Room id (default: every room of the current storey) | |
| level | No | Storey to review, an id like `lv3` (default: the one shown) | |
| plane | No | Work plane height cm (default 75) |
Output Schema
| Name | Required | Description |
|---|---|---|
| W | Yes | |
| lm | Yes | |
| rooms | Yes | |
| sources | Yes | |
| fixtures | Yes |
TDQS
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.
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.
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.
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.
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.
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 finishesARead-onlyInspect
Wall types [id,name,t] (drywall, masonry, concrete…) and finish patterns [key,label,color,tile].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| patterns | Yes | |
| wall_types | Yes |
TDQS
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.
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.
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.
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.
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.
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 planARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| z | No | Height band that counts, `[z0, z1]` cm above this storey's floor. Default `[0, 200]`: what a person walking through meets | |
| at | No | Probe line: with `axis`, the other axis' coordinate. Reports every stretch a straight line crosses, free floor and solids alike | |
| to | No | What to measure to: an id or `[x,y]` | |
| gap | No | With a probe: how much free floor has to be left along it, cm | |
| axis | No | Restrict to one axis, `x` or `y`. Between two boxes this is the gap along that axis (negative when they overlap) | |
| dirs | No | Sides to measure free floor on: `+x`, `-x`, `+y`, `-y`, or, relative to the piece, `front`, `back`, `left`, `right` | |
| from | No | What 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 | |
| grow | No | With 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 | |
| range | No | Limits of the probe along `axis`, `[from, to]` cm. Default: the plan |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | |
| y | No | |
| cm | No | |
| id | No | |
| fit | No | |
| axis | No | |
| clear | No | |
| faces | No | |
| spans | No | |
| bounds | No | |
| opening | No |
TDQS
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.
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.
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.
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.
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.
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 modelARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | A piece that uses an imported model, e.g. `f12` | |
| tol | No | check: how far a surface must pass the other to count, cm (default 0.05); touching is not a clash | |
| file | No | Instead of `id`: an .obj/.gltf/.glb file, before placing it | |
| part | No | Only the parts whose name has these words (`braco`), all of them | |
| unit | No | Unit of the file's numbers, `m`, `cm`, `mm` or `in` (default: the piece's, or guessed) | |
| check | No | `clashes`: which parts pass through one another, and faces with no area |
Output Schema
| Name | Required | Description |
|---|---|---|
| uv | No | |
| raw | No | |
| cost | No | |
| file | Yes | |
| size | Yes | |
| tris | Yes | |
| unit | Yes | |
| parts | No | |
| piece | No | |
| format | Yes | |
| images | No | |
| meshes | No | |
| checked | No | |
| clashes | No | |
| guessed | No | |
| measures | No | |
| warnings | Yes | |
| materials | Yes | |
| degenerate | No | |
| references | No |
TDQS
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.
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.
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.
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.
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.
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 elementsBDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | Shift in x, cm (with `dy`) | |
| dy | No | Shift in y, cm (with `dx`) | |
| to | No | Instead 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 | |
| dry | No | Try it without applying; see `update` | |
| ids | Yes | The elements to move together | |
| joined | No | Drag endpoints of walls joined to moved walls (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| dry | No | |
| ids | No | |
| rev | No | |
| gone | No | |
| text | No | |
| added | No | |
| score | No | |
| changed | No | |
| resolved | No | |
| clearances | No | |
| issues_new | No | |
| properties | No | |
| added_count | No | |
| annotations | No | |
| score_scope | No | |
| new_findings | No | |
| changed_count | No | |
| issues_changed | No | |
| issues_resolved | No | |
| findings_changed | No | |
| acceptance_cleanup | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| v | No | Plan version (tab) to write to; switches to it first | |
| px | No | Coordinates (`at`, `into`, `a`, `b`, `along`) are pixels of the background image | |
| dry | No | Try it without applying; see `update`. `"summary"` answers short | |
| items | Yes | The pieces to place, one object each: `id` from the catalog (or `copy`), and where (`at`, or `wall` + `along`) | |
| defaults | No | Fields every item takes unless it sets them (cat, w, d, h, color, mat…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| dry | No | |
| ids | No | |
| rev | No | |
| gone | No | |
| text | No | |
| added | No | |
| faces | No | |
| score | No | |
| turned | No | |
| changed | No | |
| resolved | No | |
| clearances | No | |
| issues_new | No | |
| properties | No | |
| added_count | No | |
| annotations | No | |
| score_scope | No | |
| new_findings | No | |
| changed_count | No | |
| issues_changed | No | |
| issues_resolved | No | |
| findings_changed | No | |
| acceptance_cleanup | No |
TDQS
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.
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.
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.
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.
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.
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 pluginsARead-onlyInspect
Plugins (external programs editing through the HTTP API): rows [name,title,description]. Run one with run_plugin.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes |
TDQS
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.
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.
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.
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.
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.
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 projectARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Storey to review, an id like `lv3` (default: the one shown) |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | Yes | |
| pending | Yes | |
| pipes_m | Yes | |
| sources | Yes | |
| findings | Yes | |
| orphaned | Yes |
TDQS
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.
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.
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.
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.
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.
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 viewARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Height px (default 360, 64..1200) | |
| w | No | Width px (default 480, 64..1600) | |
| cam | No | Stored point of view index (see cameras) | |
| cut | No | Elevations: 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 | |
| ref | No | With piece: its reference photo at this index, beside the render, from the photo's side and part | |
| yaw | No | Aerial turn, degrees | |
| part | No | With piece: frame this part of its model (`model` lists them) | |
| view | No | Default `aerial`; `front` to `top` are elevations | |
| zoom | No | Aerial distance factor: 1 frames the building, 2 twice as far | |
| level | No | Storeys drawn: an id like `lv3` draws it and those below, `all` every one (default: as the editor shows them) | |
| piece | No | Only this piece, framed from its own side | |
| pitch | No | Aerial height angle, degrees | |
| walls | No | `up` (default), `cutaway` or `down` |
Output Schema
| Name | Required | Description |
|---|---|---|
| mimeType | Yes |
TDQS
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.
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.
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.
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.
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.
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 photoARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Height px (default 360, 64..1200) | |
| w | No | Width px (default 480, 64..1600) | |
| cam | No | Stored point of view index | |
| yaw | No | Aerial turn, degrees (default 60) | |
| hour | No | Local solar hour, 0–24 | |
| view | No | Default `aerial` | |
| max_s | No | Seconds it may take; past them it stops, and nothing is returned | |
| pitch | No | Aerial height angle, degrees (default 40) | |
| cancel | No | Stop the photo being rendered now (`sessions` shows it) | |
| quality | No | Default `draft` | |
| threads | No | Threads it may use, under the budget (half the cores, at most 4) | |
| estimate | No | Answer the budget and what the photo would take, without rendering |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | No | |
| work | No | |
| budget | No | |
| measured | No | |
| mimeType | No | |
| memory_mb | No |
TDQS
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.
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.
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.
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.
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.
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 planARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Height px (default 480, max 2048) | |
| w | No | Width px (default 640, max 2048) | |
| bg | No | Background image opacity for this render (e.g. 0.5 to compare the drawing with the scanned reference; 0 hides it) | |
| pad | No | With `room`: margin around it, cm (default 30) | |
| grid | No | Draw the grid (default true) | |
| room | No | Instead of `region`: a room id or name to frame | |
| region | No | Plan 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
| Name | Required | Description |
|---|---|---|
| mimeType | Yes |
TDQS
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.
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.
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.
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.
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.
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 reviewARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which review's rules |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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 pluginADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments passed to the plugin as JSON | |
| name | Yes | Plugin to run, by name (the plugins tool lists them) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| code | No | |
| edits | Yes | |
| usage | No | |
| limits | No | |
| stderr | Yes | |
| stdout | Yes | |
| revision | Yes | |
| timed_out | No | |
| not_applied | No |
TDQS
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.
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.
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.
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.
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.
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 editingBRead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rev | Yes | |
| rows | Yes | |
| render | No |
TDQS
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.
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.
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.
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.
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.
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 planARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| svg | Yes | |
| name | Yes | |
| editor | Yes | |
| summary | Yes |
TDQS
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.
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.
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.
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.
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.
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 elementsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| v | No | Plan version (tab) to write to; switches to it first | |
| dry | No | Answer what it would change, without writing | |
| items | No | The elements to change, one object each: `id` and the fields to set | |
| rename | No | Rename in bulk by a regex, in one step |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| ok | No | |
| dry | No | |
| ids | No | |
| rev | No | |
| gone | No | |
| text | No | |
| added | No | |
| score | No | |
| changed | No | |
| resolved | No | |
| unchanged | No | |
| clearances | No | |
| issues_new | No | |
| properties | No | |
| added_count | No | |
| annotations | No | |
| score_scope | No | |
| new_findings | No | |
| changed_count | No | |
| issues_changed | No | |
| unchanged_note | No | |
| issues_resolved | No | |
| findings_changed | No | |
| acceptance_cleanup | No |
TDQS
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.
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.
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.
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.
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.
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 versionsARead-onlyInspect
Plan versions (tabs): rows [i,name,active,walls,rooms,m2,furniture,issues]. Edits apply to the active version; change them with edit_variants.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes |
TDQS
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.
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.
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.
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.
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.
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 pathARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| fps | Yes | |
| rows | Yes | |
| secs | Yes | |
| speed | Yes |
TDQS
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.
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.
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.
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.
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.
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 tool update
v3.1.0- Changed
create6 fields changed- changed
Input schema / $defs / RoofSpec / properties / ridge_h / descriptionPrevious 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" - changed
Input schema / $defs / RoomSpec / properties / ceiling_flat / descriptionPrevious 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)" - changed
Input schema / $defs / RoomSpec / properties / pts / descriptionPrevious value: -"Floor polygon. Omit and give `at` to detect the room enclosed by walls"New value: +"Floor polygon; or omit and give `at`" - added
Input schema / properties / exactAdded value: +{ + "description": "Keep wall ends as given; no snap onto nearby walls", + "type": "boolean" +} - changed
Input schema / properties / roofs / descriptionPrevious 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" - changed
Input schema / properties / solids / descriptionPrevious 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)"
75 tool updates
v3.0.0- Changed
accept10 fields changed- removed
Input schema / properties / accept / defaultRemoved value: -[] - changed
Input schema / properties / accept / descriptionPrevious 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" - removed
Input schema / properties / prune / defaultRemoved value: -false - removed
Output schema / properties / accepted / descriptionRemoved value: -"Findings accepted" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / removed / descriptionRemoved value: -"Acceptances removed" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
annotations10 fields changed- removed
Output schema / properties / checked / descriptionRemoved value: -"stale=true: what was checked" - removed
Output schema / properties / details / descriptionRemoved value: -"Details shown" - removed
Output schema / properties / dims / descriptionRemoved value: -"Dimensions shown" - removed
Output schema / properties / labels / descriptionRemoved value: -"With q: labels {id, text, at, …}" - removed
Output schema / properties / legend / descriptionRemoved value: -"Legend shown" - removed
Output schema / properties / refs / descriptionRemoved value: -"Reference tags shown" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / rooms / descriptionRemoved value: -"The schedule: [room, [[tag, name, w, d, h, brand?, model?, url?]]]" - removed
Output schema / properties / stale / descriptionRemoved value: -"stale=true: [id, written, measured, against, text]" - removed
Output schema / properties / unverified / descriptionRemoved value: -"stale=true: [id, text] nobody can check"
- Changed
arrange9 fields changed- changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - changed
Input schema / properties / action / descriptionPrevious 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" - added
Input schema / properties / action / enumAdded value: +[ + "array", + "align", + "distribute", + "flip", + "rotate", + "mirror", + "group", + "ungroup", + "front", + "back" +] - removed
Input schema / properties / copy / defaultRemoved value: -false - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Added
background - Changed
cabinet_run7 fields changed- removed
Input schema / properties / dry / defaultRemoved value: -false - removed
Output schema / properties / adjusted / descriptionRemoved value: -"Neighbouring runs replanned, same shape" - removed
Output schema / properties / modules / descriptionRemoved value: -"[id, role, from cm, w cm]" - removed
Output schema / properties / notes / descriptionRemoved value: -"What the rules say about it" - removed
Output schema / properties / removed / descriptionRemoved value: -"Cabinets it replaced" - removed
Output schema / properties / row / descriptionRemoved value: -"base, wall or tall" - removed
Output schema / properties / wall / descriptionRemoved value: -"The wall the run is on"
- Changed
cameras2 fields changed- removed
Output schema / properties / active / descriptionRemoved value: -"The camera in use: visitor or aerial" - removed
Output schema / properties / rows / descriptionRemoved value: -"Stored views: [i, name, x, y, z, yaw, pitch, fov]"
- Changed
catalog4 fields changed- removed
Output schema / properties / categories / descriptionRemoved value: -"Categories to search by, when neither q nor cat was given" - removed
Output schema / properties / items / descriptionRemoved value: -"[id, name, w, d, h, front?] cm" - removed
Output schema / properties / more / descriptionRemoved value: -"How many more matched than the limit" - removed
Output schema / properties / used / descriptionRemoved value: -"scope=project: [kind, name, count, id]"
- Removed
check_layout - Removed
checkpoint - Removed
checkpoints - Changed
create22 fields changed- removed
Input schema / $defs / DimSpec / properties / chain / defaultRemoved value: -false - removed
Input schema / $defs / DimSpec / properties / in3d / defaultRemoved value: -false - changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Input schema / $defs / PolylineSpec / properties / closed / defaultRemoved value: -false - removed
Input schema / $defs / PolylineSpec / properties / curved / defaultRemoved value: -false - removed
Input schema / $defs / PolylineSpec / properties / divider / defaultRemoved value: -false - removed
Input schema / $defs / RoofSpec / properties / gables / defaultRemoved value: -false - changed
Input schema / $defs / RoofSpec / properties / kind / descriptionPrevious 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" - added
Input schema / $defs / RoofSpec / properties / kind / enumAdded value: +[ + "gable", + "shed" +] - changed
Input schema / $defs / RoofSpec / properties / skylights / descriptionPrevious 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" - changed
Input schema / $defs / RoomSpec / properties / ceiling_flat / descriptionPrevious 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)" - changed
Input schema / $defs / RoomUse / descriptionPrevious 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" - changed
Input schema / $defs / SolidSpec / properties / profile / descriptionPrevious 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)" - removed
Input schema / $defs / WallPath / properties / closed / defaultRemoved value: -false - removed
Input schema / properties / px / defaultRemoved value: -false - changed
Input schema / properties / px / descriptionPrevious 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" - changed
Input schema / properties / solids / descriptionPrevious 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)" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
cut_list6 fields changed- removed
Output schema / properties / drawn / descriptionRemoved value: -"Hand-drawn builds left out" - removed
Output schema / properties / hardware / descriptionRemoved value: -"Hardware by build: \"<id>: <item>\"" - removed
Output schema / properties / rows / descriptionRemoved value: -"[part, board, qty, length, width, thickness, edge, cutouts?]" - removed
Output schema / properties / sheets / descriptionRemoved value: -".dxf/.svg: [board, sheets]" - removed
Output schema / properties / skipped / descriptionRemoved value: -"[id, name] left out" - removed
Output schema / properties / sources / descriptionRemoved value: -"Standards cited, by code: [title, tier, url]"
- Changed
delete7 fields changed- removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / labels_deleted / descriptionRemoved value: -"Labels deleted with them" - removed
Output schema / properties / labels_left / descriptionRemoved value: -"Labels left pointing at deleted pieces: [id, text]" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
disciplines9 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`active` (default) or `quantities`"New value: +"Default `active`" - added
Input schema / properties / action / enumAdded value: +[ + "active", + "quantities" +] - removed
Output schema / properties / active / descriptionRemoved value: -"Discipline drawn on top: electrical, plumbing, or null" - removed
Output schema / properties / electrical / descriptionRemoved value: -"action=quantities: [kind, count, names?]" - removed
Output schema / properties / hidden / descriptionRemoved value: -"Disciplines hidden" - removed
Output schema / properties / layers / descriptionRemoved value: -"Plan layers: {lighting, appliances, joinery} → {pieces, hidden}" - removed
Output schema / properties / lines_cm / descriptionRemoved value: -"action=quantities: drawn lines by discipline, cm" - removed
Output schema / properties / plumbing / descriptionRemoved value: -"action=quantities: [kind, count, names?]" - removed
Output schema / properties / show_all_3d / descriptionRemoved value: -"Every discipline shown in 3D"
- Changed
edit_annotations16 fields changed- removed
Output schema / properties / anchored / descriptionRemoved value: -"anchor=true: labels now tied to what they measure" - removed
Output schema / properties / chains / descriptionRemoved value: -"dims=true: [[x,y], [x,y], cm]" - removed
Output schema / properties / changed / descriptionRemoved value: -"Switches that changed" - removed
Output schema / properties / details / descriptionRemoved value: -"Details shown" - removed
Output schema / properties / dims / descriptionRemoved value: -"Dimensions shown" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / left / descriptionRemoved value: -"anchor=true: [id, written, measured, near id] left as they were" - removed
Output schema / properties / legend / descriptionRemoved value: -"Legend shown" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / refs / descriptionRemoved value: -"Reference tags shown" - removed
Output schema / properties / released / descriptionRemoved value: -"anchor=true: labels let go" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / rooms / descriptionRemoved value: -"The schedule: [room, [[tag, name, w, d, h, …]]]" - removed
Output schema / properties / symbols / descriptionRemoved value: -"legend=true: {electrical?, plumbing?} → [name, count]" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Added
edit_background - Changed
edit_cameras7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`view`, `aerial`, `store` or `delete`"New value: +"What to do with the points of view" - added
Input schema / properties / action / enumAdded value: +[ + "view", + "aerial", + "store", + "delete" +] - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
edit_disciplines9 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`select`, `show` or `hide`"New value: +"What to do with discipline `d`" - added
Input schema / properties / action / enumAdded value: +[ + "select", + "show", + "hide" +] - removed
Output schema / properties / active / descriptionRemoved value: -"Discipline drawn on top: electrical, plumbing, or null" - removed
Output schema / properties / electrical / descriptionRemoved value: -"action=quantities: [kind, count, names?]" - removed
Output schema / properties / hidden / descriptionRemoved value: -"Disciplines hidden" - removed
Output schema / properties / layers / descriptionRemoved value: -"Plan layers: {lighting, appliances, joinery} → {pieces, hidden}" - removed
Output schema / properties / lines_cm / descriptionRemoved value: -"action=quantities: drawn lines by discipline, cm" - removed
Output schema / properties / plumbing / descriptionRemoved value: -"action=quantities: [kind, count, names?]" - removed
Output schema / properties / show_all_3d / descriptionRemoved value: -"Every discipline shown in 3D"
- Changed
edit_electrical29 fields changed- changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - changed
Input schema / properties / action / descriptionPrevious 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" - added
Input schema / properties / action / enumAdded value: +[ + "assign", + "voltage", + "cable", + "route", + "wifi" +] - removed
Input schema / properties / ids / defaultRemoved value: -[] - changed
Input schema / properties / kind / descriptionPrevious value: -"For `cable`: what the run carries, `power`, `data` or `tv`"New value: +"For `cable` and `route`: what the run carries" - added
Input schema / properties / kind / enumAdded value: +[ + "power", + "data", + "tv" +] - removed
Input schema / properties / pts / defaultRemoved value: -[] - removed
Output schema / properties / access_points / descriptionRemoved value: -"action=wifi: [id, standard, bands, uplink]" - removed
Output schema / properties / added / descriptionRemoved value: -"Ids added, or their count" - removed
Output schema / properties / annotations / descriptionRemoved value: -"Annotation switches {from, to}" - removed
Output schema / properties / bends / descriptionRemoved value: -"Bends along the run" - removed
Output schema / properties / by_premise_m / descriptionRemoved value: -"Total metres by route: {ceiling, floor, wall}; a reason instead where one is impossible" - removed
Output schema / properties / changed / descriptionRemoved value: -"{id, from, to} per element changed; a count past 20" - removed
Output schema / properties / coverage / descriptionRemoved value: -"action=wifi: [room, band, median, worst, good, grade]" - removed
Output schema / properties / gone / descriptionRemoved value: -"Ids removed, or their count" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / length_m / descriptionRemoved value: -"Metres: {horizontal, vertical, total}" - removed
Output schema / properties / materials / descriptionRemoved value: -"Bill of materials: [item, quantity, unit]" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / properties / descriptionRemoved value: -"Project properties changed" - removed
Output schema / properties / replaced_drawn / descriptionRemoved value: -"Hand-drawn lines this run replaced" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / run / descriptionRemoved value: -"The run: <system>:<circuit|all|ids>" - removed
Output schema / properties / suggested / descriptionRemoved value: -"Route: the one the rules suggest; action=wifi: where access points would go" - removed
Output schema / properties / tape / descriptionRemoved value: -"via=tape: the tape light system" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several" - removed
Output schema / properties / via / descriptionRemoved value: -"Where it runs: ceiling, floor, wall (or tape)" - removed
Output schema / properties / warnings / descriptionRemoved value: -"Data points past 90 m"
- Added
edit_history - Added
edit_home - Changed
edit_levels7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`add`, `select`, `update` or `delete`"New value: +"What to do with the storeys" - added
Input schema / properties / action / enumAdded value: +[ + "add", + "select", + "update", + "delete" +] - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Added
edit_library - Added
edit_lighting - Added
edit_model - Changed
edit_plumbing20 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`route`"New value: +"The change to make" - added
Input schema / properties / action / enumAdded value: +[ + "route" +] - removed
Input schema / properties / ids / defaultRemoved value: -[] - changed
Input schema / properties / kind / descriptionPrevious value: -"For `route`: what the run carries, `cold`, `hot` or `sewer`"New value: +"For `route`: what the run carries" - added
Input schema / properties / kind / enumAdded value: +[ + "cold", + "hot", + "sewer", + "vent" +] - removed
Output schema / properties / bends / descriptionRemoved value: -"Bends along the run" - removed
Output schema / properties / branches / descriptionRemoved value: -"Branches off the trunk" - removed
Output schema / properties / by_premise_m / descriptionRemoved value: -"Total metres by route: {ceiling, floor, wall}; a reason instead where one is impossible" - removed
Output schema / properties / length_m / descriptionRemoved value: -"Metres: {horizontal, vertical, total}" - removed
Output schema / properties / materials / descriptionRemoved value: -"Bill of materials: [item, quantity, unit]" - removed
Output schema / properties / merged_into / descriptionRemoved value: -"The run this one joined, or null" - removed
Output schema / properties / needs_depth_cm / descriptionRemoved value: -"Sewer: depth it needs under the floor, cm" - removed
Output schema / properties / notes / descriptionRemoved value: -"What the rules say about the run" - removed
Output schema / properties / replaced_drawn / descriptionRemoved value: -"Hand-drawn lines this run replaced" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / run / descriptionRemoved value: -"The run: <system>:<circuit|all|ids>" - removed
Output schema / properties / slope_pct / descriptionRemoved value: -"Sewer: slope %" - removed
Output schema / properties / suggested / descriptionRemoved value: -"The route the rules suggest" - removed
Output schema / properties / trunk_mm / descriptionRemoved value: -"Sewer: trunk diameter mm" - removed
Output schema / properties / via / descriptionRemoved value: -"Where it runs: ceiling, floor, wall (or tape)"
- Changed
edit_variants8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`duplicate` (copy active), `new` (empty), `switch`, `rename` or `delete`"New value: +"`duplicate` copies the active version, `new` starts an empty one" - added
Input schema / properties / action / enumAdded value: +[ + "duplicate", + "new", + "switch", + "rename", + "delete" +] - removed
Output schema / properties / i / descriptionRemoved value: -"Index of the new version" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
edit_video10 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"`add`, `delete`, `clear`, `orbit`, `set` or `render`"New value: +"What to do with the camera path" - added
Input schema / properties / action / enumAdded value: +[ + "add", + "delete", + "clear", + "orbit", + "set", + "render" +] - removed
Output schema / properties / bytes / descriptionRemoved value: -"action=render: file size" - removed
Output schema / properties / frames / descriptionRemoved value: -"action=render: frames written" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / secs / descriptionRemoved value: -"action=render: length in seconds" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Added
edit_walls - Changed
electrical17 fields changed- added
Input schema / properties / action / enumAdded value: +[ + "check", + "circuits", + "wifi" +] - added
Input schema / properties / levelAdded value: +{ + "description": "Storey to review, an id like `lv3` (default: the one shown)", + "type": "string" +} - removed
Output schema / properties / access_points / descriptionRemoved value: -"action=wifi: [id, standard, bands, uplink]" - removed
Output schema / properties / cables_m / descriptionRemoved value: -"Cable metres: {power, data, tv}" - removed
Output schema / properties / circuits / descriptionRemoved value: -"action=circuits: [name, kinds, points, VA, V, A, wire mm², breaker A, DR]" - removed
Output schema / properties / coverage / descriptionRemoved value: -"action=wifi: [room, band, median, worst, good, grade]" - removed
Output schema / properties / findings / descriptionRemoved value: -"Rows [severity erro|alerta|dica, place, message, source, key, accepted reason?]" - removed
Output schema / properties / main_breaker / descriptionRemoved value: -"action=circuits: {a, phases, load_a_per_phase}" - removed
Output schema / properties / orphaned / descriptionRemoved value: -"Acceptances whose finding is gone: [key, reason, successor key?]" - removed
Output schema / properties / panel / descriptionRemoved value: -"action=circuits: the distribution panel" - removed
Output schema / properties / pending / descriptionRemoved value: -"Findings not accepted" - removed
Output schema / properties / points / descriptionRemoved value: -"Points by kind" - removed
Output schema / properties / rev / descriptionRemoved value: -"action=wifi: plan revision" - removed
Output schema / properties / sources / descriptionRemoved value: -"Standards cited, by code: [title, tier, url]" - removed
Output schema / properties / standby_w / descriptionRemoved value: -"action=circuits: standby watts" - removed
Output schema / properties / suggested / descriptionRemoved value: -"action=wifi: where access points would go" - removed
Output schema / properties / total_va / descriptionRemoved value: -"action=circuits: total load VA"
- Changed
embed10 fields changed- removed
Input schema / properties / dry / defaultRemoved value: -false - removed
Output schema / properties / bottom / descriptionRemoved value: -"Bottom above the floor, cm" - added
Output schema / properties / cut_belowAdded value: +{ + "type": "array" +} - removed
Output schema / properties / cutout / descriptionRemoved value: -"Countertop: the hole [w, d] cm" - removed
Output schema / properties / host / descriptionRemoved value: -"The countertop or cabinet it went into" - removed
Output schema / properties / item / descriptionRemoved value: -"The embedded piece (empty when dry)" - removed
Output schema / properties / kind / descriptionRemoved value: -"sink, cooktop, oven, microwave, …" - removed
Output schema / properties / niche / descriptionRemoved value: -"Cabinet: the niche [w, h] cm" - removed
Output schema / properties / notes / descriptionRemoved value: -"What the rules say about it" - removed
Output schema / properties / x / descriptionRemoved value: -"Countertop or panel: center along it, cm"
- Changed
ergonomics13 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / city / descriptionPrevious 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" - added
Input schema / properties / levelAdded value: +{ + "description": "Storey to review, an id like `lv3` (default: the one shown)", + "type": "string" +} - removed
Output schema / properties / capacity / descriptionRemoved value: -"What the home holds: beds, bedrooms, bathrooms, seats, wardrobe cm" - removed
Output schema / properties / coverage / descriptionRemoved value: -"What was checked and what was not" - removed
Output schema / properties / findings / descriptionRemoved value: -"{sev, place, msg, key, weight, discipline, in_scope, src?, fix?, accepted?}" - removed
Output schema / properties / layout / descriptionRemoved value: -"Layout issues of the storey, as check_layout gives them" - removed
Output schema / properties / orphaned / descriptionRemoved value: -"Acceptances whose finding is gone: [key, reason, successor key?]" - removed
Output schema / properties / scope / descriptionRemoved value: -"Disciplines counted: {electrical, plumbing}" - removed
Output schema / properties / score / descriptionRemoved value: -"Habitability score 0-100" - removed
Output schema / properties / score_basis / descriptionRemoved value: -"What the score is: habitability_heuristic" - removed
Output schema / properties / scores / descriptionRemoved value: -"Score by discipline: {architecture, electrical, plumbing}" - removed
Output schema / properties / sources / descriptionRemoved value: -"Standards cited, by code: [title, tier, url]"
- Added
export - Removed
export_cut_list - Removed
export_plan - Changed
feedback10 fields changed- removed
Input schema / properties / cost / defaultRemoved value: -"" - removed
Input schema / properties / expected / defaultRemoved value: -"" - removed
Input schema / properties / goal / defaultRemoved value: -"" - removed
Input schema / properties / got / defaultRemoved value: -"" - added
Input schema / properties / kind / enumAdded value: +[ + "friction", + "bug", + "idea" +] - removed
Input schema / properties / must_keep / defaultRemoved value: -"" - removed
Input schema / properties / tried / defaultRemoved value: -"" - removed
Input schema / properties / would_help / defaultRemoved value: -"" - removed
Output schema / properties / kept / descriptionRemoved value: -"Where the report was written" - removed
Output schema / properties / sent / descriptionRemoved value: -"Whether it reached the developers"
- Added
file - Removed
fill_lighting - Changed
fit_roof7 fields changed- removed
Input schema / properties / off / defaultRemoved value: -false - removed
Output schema / properties / fitted / descriptionRemoved value: -"Panels fitted under the roof" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Removed
get_home - Added
history - Added
home - Changed
joinery10 fields changed- changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Input schema / properties / dry / defaultRemoved value: -false - changed
Input schema / properties / kind / descriptionPrevious value: -"New build: `cabinet`, `slats`, `countertop`, `cove`, `shadow_gap` or `sofa`"New value: +"What a new build is" - added
Input schema / properties / kind / enumAdded value: +[ + "cabinet", + "slats", + "countertop", + "cove", + "shadow_gap", + "sofa" +] - removed
Output schema / properties / hardware / descriptionRemoved value: -"Hardware it needs" - removed
Output schema / properties / id / descriptionRemoved value: -"The build's group id (empty when dry)" - removed
Output schema / properties / name / descriptionRemoved value: -"Its name" - removed
Output schema / properties / notes / descriptionRemoved value: -"What a workshop would say about it" - removed
Output schema / properties / parts / descriptionRemoved value: -"Parts it is made of" - removed
Output schema / properties / size / descriptionRemoved value: -"[w, d, h] cm"
- Added
layout - Changed
levels1 field changed- removed
Output schema / properties / rows / descriptionRemoved value: -"Storeys: [id, name, elevation, height, selected, index, viewable, reference]"
- Added
library - Changed
lighting6 fields changed- added
Input schema / properties / levelAdded value: +{ + "description": "Storey to review, an id like `lv3` (default: the one shown)", + "type": "string" +} - removed
Output schema / properties / W / descriptionRemoved value: -"Total watts" - removed
Output schema / properties / fixtures / descriptionRemoved value: -"Light fixtures in the plan" - removed
Output schema / properties / lm / descriptionRemoved value: -"Total lumens" - removed
Output schema / properties / rooms / descriptionRemoved value: -"[id, name, m², average lx, minimum lx, uniformity, reference lx, fixtures, W/m², verdict]" - removed
Output schema / properties / sources / descriptionRemoved value: -"Standards cited, by code: [title, tier, url]"
- Changed
materials2 fields changed- removed
Output schema / properties / patterns / descriptionRemoved value: -"[key, label, #rrggbb, tile WxH cm]" - removed
Output schema / properties / wall_types / descriptionRemoved value: -"[id, name, thickness cm]"
- Changed
measure11 fields changed- removed
Output schema / properties / axis / descriptionRemoved value: -"Axis measured along" - removed
Output schema / properties / bounds / descriptionRemoved value: -"The piece's [[minx,miny],[maxx,maxy]] cm" - removed
Output schema / properties / clear / descriptionRemoved value: -"Free floor by side: [cm, against id, name]" - removed
Output schema / properties / cm / descriptionRemoved value: -"Distance, cm" - removed
Output schema / properties / faces / descriptionRemoved value: -"Side its front looks to" - removed
Output schema / properties / fit / descriptionRemoved value: -"Probe with gap: {free, max, blocked_by}" - removed
Output schema / properties / id / descriptionRemoved value: -"The element measured" - removed
Output schema / properties / opening / descriptionRemoved value: -"A door or window: {basis, hosts}" - removed
Output schema / properties / spans / descriptionRemoved value: -"Probe: [from, to, id, name] along the axis" - removed
Output schema / properties / x / descriptionRemoved value: -"Gap along x, cm" - removed
Output schema / properties / y / descriptionRemoved value: -"Gap along y, cm"
- Removed
merge_walls - Added
model - Changed
move25 fields changed- changed
Input schema / $defs / Dry / descriptionPrevious 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" - changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Output schema / properties / acceptance_cleanup / descriptionRemoved value: -"Acceptances orphaned, and the calls that clear them" - removed
Output schema / properties / added / descriptionRemoved value: -"Ids added, or their count" - removed
Output schema / properties / added_count / descriptionRemoved value: -"Roots added" - removed
Output schema / properties / annotations / descriptionRemoved value: -"Annotation switches {from, to}" - removed
Output schema / properties / changed / descriptionRemoved value: -"{id, from, to} per element changed; a count past 20" - removed
Output schema / properties / changed_count / descriptionRemoved value: -"Roots changed" - removed
Output schema / properties / clearances / descriptionRemoved value: -"Free floor around touched pieces, by id" - removed
Output schema / properties / dry / descriptionRemoved value: -"Nothing was written" - removed
Output schema / properties / findings_changed / descriptionRemoved value: -"Findings changed" - removed
Output schema / properties / gone / descriptionRemoved value: -"Ids removed, or their count" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / issues_changed / descriptionRemoved value: -"Layout issues resized" - removed
Output schema / properties / issues_new / descriptionRemoved value: -"Layout issues created" - removed
Output schema / properties / issues_resolved / descriptionRemoved value: -"Layout issues settled" - removed
Output schema / properties / new_findings / descriptionRemoved value: -"Findings created" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / properties / descriptionRemoved value: -"Project properties changed" - removed
Output schema / properties / resolved / descriptionRemoved value: -"Findings settled" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / score / descriptionRemoved value: -"Score [before, after]" - removed
Output schema / properties / score_scope / descriptionRemoved value: -"Disciplines scored" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Removed
new_home - Removed
open_home - Changed
place32 fields changed- changed
Input schema / $defs / Dry / descriptionPrevious 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" - changed
Input schema / $defs / LightSpec / properties / z / descriptionPrevious 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)" - removed
Input schema / $defs / PlaceSpec / properties / cat / defaultRemoved value: -"" - added
Input schema / $defs / PlaceSpec / properties / stretchAdded value: +{ + "description": "With `model`: w/d/h may stretch it unevenly; otherwise one or two of them scale it evenly", + "type": "boolean" +} - added
Input schema / $defs / PlaceSpec / properties / unitAdded value: +{ + "description": "With `model`: unit of its numbers, `m`, `cm`, `mm` or `in` (default: guessed from its size)", + "type": "string" +} - changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Input schema / properties / px / defaultRemoved value: -false - removed
Output schema / properties / acceptance_cleanup / descriptionRemoved value: -"Acceptances orphaned, and the calls that clear them" - removed
Output schema / properties / added / descriptionRemoved value: -"Ids added, or their count" - removed
Output schema / properties / added_count / descriptionRemoved value: -"Roots added" - removed
Output schema / properties / annotations / descriptionRemoved value: -"Annotation switches {from, to}" - removed
Output schema / properties / changed / descriptionRemoved value: -"{id, from, to} per element changed; a count past 20" - removed
Output schema / properties / changed_count / descriptionRemoved value: -"Roots changed" - removed
Output schema / properties / clearances / descriptionRemoved value: -"Free floor around touched pieces, by id" - removed
Output schema / properties / dry / descriptionRemoved value: -"Nothing was written" - removed
Output schema / properties / faces / descriptionRemoved value: -"Where each front looks: <id>:<side>(<front>)" - removed
Output schema / properties / findings_changed / descriptionRemoved value: -"Findings changed" - removed
Output schema / properties / gone / descriptionRemoved value: -"Ids removed, or their count" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / issues_changed / descriptionRemoved value: -"Layout issues resized" - removed
Output schema / properties / issues_new / descriptionRemoved value: -"Layout issues created" - removed
Output schema / properties / issues_resolved / descriptionRemoved value: -"Layout issues settled" - removed
Output schema / properties / new_findings / descriptionRemoved value: -"Findings created" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / properties / descriptionRemoved value: -"Project properties changed" - removed
Output schema / properties / resolved / descriptionRemoved value: -"Findings settled" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / score / descriptionRemoved value: -"Score [before, after]" - removed
Output schema / properties / score_scope / descriptionRemoved value: -"Disciplines scored" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / turned / descriptionRemoved value: -"Pieces turned back to a wall: <id>:back to <wall>" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
plugins1 field changed- removed
Output schema / properties / rows / descriptionRemoved value: -"[name, title, description]"
- Changed
plumbing7 fields changed- added
Input schema / propertiesAdded value: +{ + "level": { + "description": "Storey to review, an id like `lv3` (default: the one shown)", + "type": "string" + } +} - removed
Output schema / properties / findings / descriptionRemoved value: -"Rows [severity erro|alerta|dica, place, message, source, key, accepted reason?]" - removed
Output schema / properties / orphaned / descriptionRemoved value: -"Acceptances whose finding is gone: [key, reason, successor key?]" - removed
Output schema / properties / pending / descriptionRemoved value: -"Findings not accepted" - removed
Output schema / properties / pipes_m / descriptionRemoved value: -"Pipe metres: {cold, hot, sewer, vent}" - removed
Output schema / properties / points / descriptionRemoved value: -"Points by kind" - removed
Output schema / properties / sources / descriptionRemoved value: -"Standards cited, by code: [title, tier, url]"
- Removed
redo - Changed
render_3d7 fields changed- added
Input schema / properties / levelAdded value: +{ + "description": "Storeys drawn: an id like `lv3` draws it and those below, `all` every one (default: as the editor shows them)", + "type": "string" +} - added
Input schema / properties / partAdded value: +{ + "description": "With piece: frame this part of its model (`model` lists them)", + "type": "string" +} - added
Input schema / properties / pieceAdded value: +{ + "description": "Only this piece, framed from its own side", + "type": "string" +} - added
Input schema / properties / refAdded value: +{ + "description": "With piece: its reference photo at this index, beside the render, from the photo's side and part", + "type": "integer" +} - changed
Input schema / properties / view / descriptionPrevious value: -"`aerial` (default) or `visitor`"New value: +"Default `aerial`; `front` to `top` are elevations" - added
Input schema / properties / view / enumAdded value: +[ + "aerial", + "visitor", + "front", + "back", + "left", + "right", + "top" +] - removed
Output schema / properties / mimeType / descriptionRemoved value: -"Type of the image in the content (image/png)"
- Changed
render_photo15 fields changed- added
Input schema / properties / cancelAdded value: +{ + "description": "Stop the photo being rendered now (`sessions` shows it)", + "type": "boolean" +} - added
Input schema / properties / estimateAdded value: +{ + "description": "Answer the budget and what the photo would take, without rendering", + "type": "boolean" +} - added
Input schema / properties / max_sAdded value: +{ + "description": "Seconds it may take; past them it stops, and nothing is returned", + "type": "number" +} - changed
Input schema / properties / quality / descriptionPrevious value: -"`draft` (default), `good`, `best`"New value: +"Default `draft`" - added
Input schema / properties / quality / enumAdded value: +[ + "draft", + "good", + "best" +] - added
Input schema / properties / threadsAdded value: +{ + "description": "Threads it may use, under the budget (half the cores, at most 4)", + "type": "integer" +} - changed
Input schema / properties / view / descriptionPrevious value: -"`aerial` (default) or `visitor`"New value: +"Default `aerial`" - added
Input schema / properties / view / enumAdded value: +[ + "aerial", + "visitor" +] - added
Output schema / properties / budgetAdded value: +{ + "type": "object" +} - added
Output schema / properties / measuredAdded value: +{ + "type": "string" +} - added
Output schema / properties / memory_mbAdded value: +{ + "type": "number" +} - removed
Output schema / properties / mimeType / descriptionRemoved value: -"Type of the image in the content (image/png)" - added
Output schema / properties / textAdded value: +{ + "type": "string" +} - added
Output schema / properties / workAdded value: +{ + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "mimeType" -]
- Changed
render_plan2 fields changed- changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Output schema / properties / mimeType / descriptionRemoved value: -"Type of the image in the content (image/png)"
- Added
rules - Changed
run_plugin10 fields changed- removed
Output schema / properties / code / descriptionRemoved value: -"Exit code; null when it was stopped" - removed
Output schema / properties / edits / descriptionRemoved value: -"Changes it made" - added
Output schema / properties / limitsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / not_appliedAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / ok / descriptionRemoved value: -"The plugin exited cleanly" - removed
Output schema / properties / revision / descriptionRemoved value: -"Plan revision after it" - removed
Output schema / properties / stderr / descriptionRemoved value: -"What it complained" - removed
Output schema / properties / stdout / descriptionRemoved value: -"What it printed" - removed
Output schema / properties / timed_out / descriptionRemoved value: -"It ran out of time" - added
Output schema / properties / usageAdded value: +{ + "type": "object" +}
- Removed
save_home - Changed
sessions3 fields changed- added
Output schema / properties / renderAdded value: +{ + "type": "object" +} - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / rows / descriptionRemoved value: -"[id, name, cursor [x,y]|null, selection, edits]"
- Removed
set_background - Removed
set_home - Changed
show_plan4 fields changed- removed
Output schema / properties / editor / descriptionRemoved value: -"Link that opens the project in the editor" - removed
Output schema / properties / name / descriptionRemoved value: -"Project name" - removed
Output schema / properties / summary / descriptionRemoved value: -"{rooms, area, walls, pieces}" - removed
Output schema / properties / svg / descriptionRemoved value: -"The plan as SVG"
- Removed
split_wall - Removed
trace_background - Removed
trace_walls - Removed
undo - Changed
update43 fields changed- changed
Input schema / $defs / Dry / descriptionPrevious 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" - changed
Input schema / $defs / LightSpec / properties / z / descriptionPrevious 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)" - changed
Input schema / $defs / Point2 / descriptionPrevious value: -"[x, y] in centimeters; x grows right, y grows down"New value: +"[x, y] cm" - removed
Input schema / $defs / RenameSpec / properties / to / defaultRemoved value: -"" - changed
Input schema / $defs / RenameSpec / properties / what / descriptionPrevious value: -"`names` (default: pieces and the parts of groups) or `labels`"New value: +"Default `names`, parts of groups included" - added
Input schema / $defs / RenameSpec / properties / what / enumAdded value: +[ + "names", + "labels" +] - changed
Input schema / $defs / RoomUse / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / about / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / anchor / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / ceiling_flat / descriptionPrevious 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)" - changed
Input schema / $defs / UpdateSpec / properties / fixed / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / layer / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / role / descriptionPrevious 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" - changed
Input schema / $defs / UpdateSpec / properties / stretch / descriptionPrevious 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" - changed
Input schema / properties / dry / descriptionPrevious 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" - removed
Input schema / properties / items / defaultRemoved value: -[] - changed
Input schema / properties / rename / descriptionPrevious 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" - removed
Output schema / properties / acceptance_cleanup / descriptionRemoved value: -"Acceptances orphaned, and the calls that clear them" - removed
Output schema / properties / added / descriptionRemoved value: -"Ids added, or their count" - removed
Output schema / properties / added_count / descriptionRemoved value: -"Roots added" - removed
Output schema / properties / annotations / descriptionRemoved value: -"Annotation switches {from, to}" - removed
Output schema / properties / changed / descriptionRemoved value: -"{id, from, to} per element changed; a count past 20" - removed
Output schema / properties / changed_count / descriptionRemoved value: -"Roots changed" - removed
Output schema / properties / clearances / descriptionRemoved value: -"Free floor around touched pieces, by id" - removed
Output schema / properties / dry / descriptionRemoved value: -"Nothing was written" - removed
Output schema / properties / findings_changed / descriptionRemoved value: -"Findings changed" - removed
Output schema / properties / gone / descriptionRemoved value: -"Ids removed, or their count" - removed
Output schema / properties / ids / descriptionRemoved value: -"Ids created or touched" - removed
Output schema / properties / issues_changed / descriptionRemoved value: -"Layout issues resized" - removed
Output schema / properties / issues_new / descriptionRemoved value: -"Layout issues created" - removed
Output schema / properties / issues_resolved / descriptionRemoved value: -"Layout issues settled" - removed
Output schema / properties / new_findings / descriptionRemoved value: -"Findings created" - removed
Output schema / properties / ok / descriptionRemoved value: -"Always true" - removed
Output schema / properties / properties / descriptionRemoved value: -"Project properties changed" - removed
Output schema / properties / resolved / descriptionRemoved value: -"Findings settled" - removed
Output schema / properties / rev / descriptionRemoved value: -"Plan revision" - removed
Output schema / properties / score / descriptionRemoved value: -"Score [before, after]" - removed
Output schema / properties / score_scope / descriptionRemoved value: -"Disciplines scored" - removed
Output schema / properties / text / descriptionRemoved value: -"The reply as written" - removed
Output schema / properties / unchanged / descriptionRemoved value: -"Asked ids that came out as they were: {id, now}" - removed
Output schema / properties / unchanged_note / descriptionRemoved value: -"Why they did not change" - removed
Output schema / properties / v / descriptionRemoved value: -"Plan version written to, when there are several"
- Changed
variants1 field changed- removed
Output schema / properties / rows / descriptionRemoved value: -"Plan versions: [i, name, active, walls, rooms, m², pieces, issues]"
- Changed
video4 fields changed- removed
Output schema / properties / fps / descriptionRemoved value: -"Frames per second" - removed
Output schema / properties / rows / descriptionRemoved value: -"Keyframes: [i, x, y, z, yaw, pitch, fov]" - removed
Output schema / properties / secs / descriptionRemoved value: -"Length in seconds" - removed
Output schema / properties / speed / descriptionRemoved value: -"Camera speed m/s"
59 tool updates
v0.1.0- First observed
accept - First observed
annotations - First observed
arrange - First observed
cabinet_run - First observed
cameras - First observed
catalog - First observed
check_layout - First observed
checkpoint - First observed
checkpoints - First observed
create - First observed
cut_list - First observed
delete - First observed
disciplines - First observed
edit_annotations - First observed
edit_cameras - First observed
edit_disciplines - First observed
edit_electrical - First observed
edit_levels - First observed
edit_plumbing - First observed
edit_variants - First observed
edit_video - First observed
electrical - First observed
embed - First observed
ergonomics - First observed
export_cut_list - First observed
export_plan - First observed
feedback - First observed
fill_lighting - First observed
fit_roof - First observed
get_home - First observed
joinery - First observed
levels - First observed
lighting - First observed
materials - First observed
measure - First observed
merge_walls - First observed
move - First observed
new_home - First observed
open_home - First observed
place - First observed
plugins - First observed
plumbing - First observed
redo - First observed
render_3d - First observed
render_photo - First observed
render_plan - First observed
run_plugin - First observed
save_home - First observed
sessions - First observed
set_background - First observed
set_home - First observed
show_plan - First observed
split_wall - First observed
trace_background - First observed
trace_walls - First observed
undo - First observed
update - First observed
variants - First observed
video
TDQS
Scored across 57 tools
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.
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.
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.
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
Related MCP Connectors
Room planning to scale from your AI: it places furniture, Roomproof checks walkways and door swings.
Describe a house or upload a DWG/vector-PDF plan and get a walkable, editable 3D model.
AI interior, exterior and landscape design, photoreal rendering, image editing, video and 3D.
211AI virtual staging for real estate — stage rooms, beautify floor plans, classify images.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI-powered virtual staging for real estate professionals: stage empty rooms with photorealistic furniture, beautify floor plans into 3D renders, classify rooms, generate German property descriptions, and get style recommendations.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables interior planning for Korean apartments by converting natural language briefs into floorplans, estimates, quotes, proposals, schedules, and AI-generated renders.MIT
- AlicenseNot gradedqualityCmaintenanceConverts 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 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables 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.4MIT











