@getfacade/mcp
OfficialThis server is a thin MCP wrapper over the GetFacade API that lets an agent create buildings, design facades from photos, price them, document them, manage the results, and handle billing.
Buildings & photos: create uniquely named buildings, upload exterior photos, and wait for validation.
Design & refine: start new facade designs from a view with prompts, styles, colors, or brand products; refine finished designs in plain words; choose render effort.
Render management: enqueue and poll render jobs, list recent jobs, list a building's designs/renders, upscale a completed render, and delete renders/designs/buildings.
Estimates: order line-by-line cost estimates for chosen renders, read totals/assumptions/lines, and add, update, or delete estimate lines.
Albums: order PDF blueprint albums with materials, build-up, safety notes and norms, optionally priced from a specific estimate.
Links & sharing: finished results are permanent public links that can be handed directly to a person.
Account & wallet: check token balance and admissibility, list purchasable token packages, buy tokens (when enabled), and report API problems even with an empty wallet.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@getfacade/mcpTurn this photo into a facade design and order a cost estimate"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@getfacade/mcp
MCP server for GetFacade.ai: an agent creates a building, uploads a photo of it, gets the exterior designed, priced and documented, without a human in front of a screen.
Each design is worked out for the country the building stands in: materials that are applicable there, manufacturer products that are actually sold there, and the technical build-up behind the surface. The render shows that on the photo of the house.
The estimate and the album come from the same design:
The estimate prices it line by line, in materials and labour, at what those materials cost in that country.
The album documents it for the crew that builds it: the build-up of the facade, safety notes and the norms behind them.
The server is a thin wrapper over the public GetFacade API. It stores nothing, caches nothing and decides nothing: every rule (pricing, admission, the colour grammar, every message) stays on the server, and the wrapper only carries calls and answers.
Requirements
Node.js 20+
An agent API key. Issue one for yourself at app.getfacade.ai → Account → Settings → API. The value is shown once and cannot be recovered; each key carries a hard spend cap.
Agent access is paid. There are no trial credits in it: the key spends from the agent wallet, and without a balance the first paid call is refused with an explanation. An active Pro Plan fills that wallet up to 1,000 credits once per billing period; past that, credits are bought.
Related MCP server: ritn3d-mcp
Setup
Claude Desktop / any MCP client, mcpServers section:
{
"mcpServers": {
"getfacade": {
"command": "npx",
"args": ["-y", "@getfacade/mcp"],
"env": { "GETFACADE_API_KEY": "your-key" }
}
}
}To run a checkout instead of the published package, point the client at it:
"command": "node", "args": ["/path/to/mcp/src/index.js"].
Variable | Required | Default |
| yes | — |
| no |
|
| no |
|
Messages, including refusals, come from the service in the language of
GETFACADE_LANG. Set it to the language the answer should be read in.
Tools
Tool | What it does |
| Creates a building. The name is unique per account. Say where it stands, or the place is inferred from the connection the call arrives on. |
| Registers a view, uploads the bytes, confirms, waits for validation. |
| Creates a design and queues its render. Returns a job id. |
| Changes a finished design in words. Every step after the first. |
| Polls one render, estimate or album. |
| Recent jobs across the account, unfinished first. |
| Designs of a building with their renders and finished picture. |
| Orders a cost estimate for chosen renders. |
| Orders the PDF album for chosen renders. |
| Enlarges a finished render. Costs tokens, asynchronous. |
| The estimate itself: totals, assumptions and every line. |
| Adds one line to an estimate. |
| Edits one line of an estimate. |
| Removes one line from an estimate. |
| Deletes one render. The main render's design returns to draft. |
| Deletes one design with the renders under it. |
| Deletes a building with everything under it. |
| The packages this account can buy. |
| Refills this key's wallet. See below. |
| Agent wallet, key cap, and whether the next paid call will be accepted. |
| Reports a defect in this API. Free, and works on an empty wallet. |
Rendering is asynchronous: start_design, refine_design, order_estimate and order_album return a job id
immediately, and get_job reports when it is done. A finished estimate reads ready where a
render and an album read completed. The only call that waits is upload_photo, which polls
until the photo is accepted or rejected.
A paid call is never ordered twice
start_design, refine_design, order_estimate, order_album and upscale_render cost
money, and the charge follows the job that gets created. If one of them times out, the honest
question is whether the job exists, and the agent cannot answer it from where it stands.
So this server answers it instead. Every paid call goes out under a name of its own
(Idempotency-Key), and this server, not the agent, retries it under that same name when the
connection fails or when the API says the first attempt is still running. The API recognises
the repeat and hands back the original job, so a timeout costs one design, not two.
Nothing about this reaches the tool arguments: ordering the same design twice on purpose stays possible, because two calls are two names. What is gone is the accidental second order.
The API requires that name on every paid call made with an API key, so calling it without this wrapper means sending the header yourself. The reference is at getfacade.ai/agents.
What the key can reach
A key is a bearer secret that lives in your agent's config, so its reach is the published agent
surface and nothing else: buildings, photos, designs, renders, estimates, albums, the jobs list
and the API wallet. Anything outside that answers 403 AGENT_SURFACE_FORBIDDEN, including the
account's own sign-in settings, its subscription and its payment history. Changing those, and
issuing or revoking keys, is done by a person signed in to the app.
The reference is at getfacade.ai/agents.
Results are permanent public links
A finished render (result_url, main_render_url) and a finished album (result_url) are
served from stable URLs: no signature, no expiry. An assistant can hand one straight to a
person as the answer to "show me the result", with nothing to refresh and no second call.
The honest half of that: because the link is unsigned it asks nobody for permission, so it
keeps working for whoever it is forwarded to, and it cannot be recalled afterwards. Share it as
deliberately as any other link that is public forever. GET /renders/{render}/download is a
different thing — a short-lived signed URL with a filename, for saving the file rather than for
sharing it.
Deletions are soft on the server: a person can undo them in the app, this server cannot.
buy_tokens works only if the key was issued with purchasing enabled (a switch on the
issue screen), and only up to what the key may still spend — a purchase never lifts the key's
own spend cap. It answers charged when the payment provider took it from a saved payment
method, or requires_human with a checkout_url for a person to open. Either way the tokens
are credited when the payment is confirmed, so poll get_balance.
Issuing keys and buying a subscription are deliberately absent: a key that can issue itself a key has no ceiling, and a subscription is bought by a person, in the app.
License
MIT (see LICENSE) — this wrapper carries calls and answers and nothing else, so there is
nothing in it to keep closed. The GetFacade service it talks to is a separate matter: using it
is governed by the terms at getfacade.ai/terms, and a key is
issued to an account, not to this package.
Development
npm install
npm test # smoke test against a stub of the APItest/live-journey.mjs drives the whole journey through a real MCP client against a real API
with a real key. It is not part of npm test, because it spends actual credits; the header of
the file says how to run it.
Releases: see RELEASING.md.
Available Tools
21 toolsadd_estimate_lineAdd a line to an estimateA
Add one line to a generated estimate. unit must be a display code of the estimate's own measurement system — read an existing line to see which codes it uses rather than guessing. Totals are recomputed by the server.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| unit | No | ||
| section | Yes | ||
| category | No | ||
| quantity | Yes | ||
| unit_price | Yes | ||
| estimate_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not idempotent. The description adds behavioral context beyond annotations: the server recomputes totals, and the `unit` must match the estimate's own measurement system. This is valuable operational behavior not otherwise disclosed.
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 three concise sentences with no filler. The core action is front-loaded, followed by the most important usage caveat and a behavioral side effect. Every sentence carries meaningful 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?
Given the schema richly defines required parameters, enums, and constraints, plus annotations describe mutability, the description covers the most critical operational context: how `unit` should be chosen and that totals will be recomputed. It does not explain response or output, but for an add-line tool with no output schema this is a suitable 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 0%, and the description only adds semantic precision for the `unit` parameter. The other parameters rely on self-explanatory names and schema constraints. This is minimally adequate, but leaves several parameters without description-level semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Add'), a distinct resource ('one line to a generated estimate'), and the fact that totals are recomputed. This clearly identifies the operation and distinguishes it by verb from update/delete sibling tools, though it does not explicitly name those alternatives.
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 the tool (adding a line to a generated estimate) and offers important in-use guidance ('read an existing line... rather than guessing'). However, it does not explicitly explain when to choose this tool over update_estimate_line or delete_estimate_line, leaving selection between siblings to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_tokensBuy tokens for this keyA
Buy one token package for this key's wallet. Only works if the key was issued with purchasing enabled, and only up to what the key may still spend — a purchase cannot lift the key's own spend cap. The answer says charged when the payment provider took it from the saved payment method, or requires_human with a checkout_url a person has to open. Either way the tokens arrive asynchronously: poll get_balance.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | Package id from list_token_packages, e.g. "600" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: tokens arrive asynchronously, the payment may be automatically charged or require human checkout, and the key's spend cap cannot be raised by a purchase. It also documents the two main response outcomes (`charged` and `requires_human`) without an 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 three sentences with no filler. It leads with the primary action, follows with restrictions, and then explains response behavior and the subsequent polling step.
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 no output schema, the description adequately supplies response semantics, asynchronous delivery, and the follow-up polling instruction. Together with the schema's package guidance, an agent has enough context to call this tool 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?
The input schema already fully documents the single `package` parameter, including its source (`list_token_packages`) and an example value (`"600"`). The description does not need to add parameter-level detail, 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 opening phrase "Buy one token package for this key's wallet" names a specific action, resource, and target object. It is immediately distinguishable from sibling tools like list_token_packages and get_balance.
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 explicit preconditions: the key must have purchasing enabled and the purchase cannot exceed the key's remaining spend cap. It also tells the agent to poll get_balance afterward, clarifying what happens after this tool completes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_buildingCreate a buildingA
Create a building (a house to design). The name must be unique within the account, max 50 characters — reusing a name is refused, so pick a distinct one instead of retrying the same. goals is the free-form brief (max 10000 chars).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique building name within this account | |
| goals | No | Free-form brief for the design | |
| construction_region | No | Region, used for pricing and regulations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as a write operation, but the description adds important behavior beyond that: reusing an existing name is refused, so the agent should not retry the same name. It also clearly states that `goals` is a free-form brief, which is genuinely useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the main purpose, and each sentence adds a distinct piece of applicable information. There is no filler or repetition that outweighs the guidance.
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?
This is a low-complexity creation tool with a fully documented schema and clear uniqueness constraints, so the agent can confidently make a valid call. It does not describe the returned object or next steps after creation, but for the call itself that is a relatively 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 coverage is 100%, so the schema already documents all parameters. The description adds value by explaining the rejection behavior for duplicate names, advising the agent to choose a distinct name, and clarifying that `goals` is the free-form brief.
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 uses a specific verb and resource: 'Create a building,' then adds the clarifying detail '(a house to design).' This immediately distinguishes the building entity from related objects like designs, jobs, and renders.
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 purpose phrase implies this tool is the entry point for creating a house, but it never explicitly states when to use this tool versus alternatives such as start_design or delete_building. The unique-name guidance is operational retry advice, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_buildingDelete a buildingADestructiveIdempotent
Delete a building with everything under it: photos, designs, renders, estimates and albums. Deletion is soft on the server side and can be undone by a person in the app; this tool cannot undo it. Tokens already spent are not refunded.
| Name | Required | Description | Default |
|---|---|---|---|
| building_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds substantial behavioral context beyond annotations: it discloses server-side soft deletion, that a human can undo it, that this tool itself cannot undo it, and that token spend is not refunded. It also details exactly what is affected (all sub-resources), which is more informative than the raw destructiveHint flag alone.
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 sentences, front-loaded with the core action and its scope, followed by necessary caveats. No fluff or repetition. Slightly more elaborate than the bare minimum, but each detail earns its place by clarifying material consequences of the operation.
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 one-parameter destructive tool with no output schema, the description covers the essential behavioral contract: what gets deleted, whether it is reversible, who can reverse it, and whether consumer tokens are lost. Nothing that an agent needs to decide whether to call this tool or to anticipate its side effects 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 0% and the description offers no additional meaning for building_id; it only repeats the concept of deleting a building. The tool never explains where to obtain building_id or whether it refers to an internal identifier, job-related ID, or app-facing ID. This is a gap because the description carries the full burden for parameter semantics and does not compensate beyond the self-explanatory 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 (delete) and resource (building) and defines the scope with an explicit list of all deleted sub-resources: photos, designs, renders, estimates, albums. This clearly distinguishes it from siblings like delete_render or delete_design, which handle a single sub-resource, and makes the cascade behavior explicit.
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 provides clear context on what the operation entails, such as soft deletion and non-refundability, so an agent can infer when to use it for bulk building removal. However, it never explicitly says when not to use it or names alternatives, like use delete_design for just a design. The guidance is implied through the enumerations of sub-resources and sibling names, not stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_designDelete a designADestructiveIdempotent
Delete one design (concept) of a building, with the renders under it. Deletion is soft on the server side and can be undone by a person in the app; this tool cannot undo it.
| Name | Required | Description | Default |
|---|---|---|---|
| design_id | Yes | ||
| building_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true, readOnlyHint=false, and idempotentHint=true; the description adds genuinely non-inferable context: the deletion is soft on the server side, reversible by a person in the app, and irreversible via this tool. This is exactly the kind of post-action consequence disclosure annotations don't provide.
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 tightly-packed sentences with zero filler: action and cascade are front-loaded, followed by the soft-delete undo caveat. Every sentence earns its place and the ordering correctly prioritizes the core behavior before the reversibility warning.
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 essential facts are present — what is deleted, what cascades, and reversibility — but for a destructive, idempotent tool with 0% parameter coverage and no output schema, it omits downstream consequences (e.g., effects on references from jobs, albums, or estimates) and any error conditions. The parameter-semantics gap is the main completeness hole for an agent attempting a correct call.
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 0% — both design_id and building_id are bare strings — and the description never explains their roles or why both are required. For a cascade delete, an agent is left guessing whether building_id scopes the lookup, guards authorization, or is merely redundant, which a destructive action should not leave ambiguous.
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 ('delete'), the exact resource ('one design (concept) of a building'), and the scope of the action ('with the renders under it'). The parenthetical explaining 'design' as a 'concept' plus the cascade note clearly distinguish it from siblings like delete_render and delete_building without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with the renders under it' signals this is the design-level deletion tool versus the render-level sibling delete_render, but no alternative is named and no when-not-to-use condition is stated. Selection guidance is implied through the cascade scope rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_estimate_lineRemove a line from an estimateADestructiveIdempotent
Remove one line from a generated estimate. Totals are recomputed by the server.
| Name | Required | Description | Default |
|---|---|---|---|
| line_id | Yes | ||
| estimate_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It states that 'Totals are recomputed by the server', which is substantive behavioral context beyond the annotations. The destructiveHint and readOnlyHint are already annotated, and the description aligns with them, clarifying the post-operation effect.
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, both purposeful: one identifies the action, the other communicates the critical side effect. No wasted words or redundancy.
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 simple two-parameter deletion operation, the description covers the essential behavior and server-side consequence. There is no output schema, but explaining return values is unnecessary here; minor missing detail such as whether removal is reversible is mitigated by the idempotent/destructive 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 0%, but the parameter names line_id and estimate_id are highly self-descriptive, and the description reinforces their roles by mentioning 'line' and 'estimate'. No explicit parameter-level guidance is added, but with only two obvious parameters the gap is acceptable.
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 uses a clear verb ('Remove') and target resource ('one line from a generated estimate'), immediately distinguishing this from add_estimate_line and update_estimate_line. It states exactly what the tool does in a single line.
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 usage: call this when you need to remove a line item from an estimate, and the qualifier 'generated' provides some context. However, it does not explicitly mention when not to use it or contrast it with add/update estimate line tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_renderDelete a renderADestructiveIdempotent
Delete one render. Deleting the main render of a design returns that design to draft, so it can be rendered again without creating a new one. Deletion is soft on the server side and can be undone by a person in the app; this tool cannot undo it.
| Name | Required | Description | Default |
|---|---|---|---|
| render_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining this is a soft deletion, that a human can undo it in the app, and that this tool cannot undo it. It also discloses the side effect on the design's main render, which is valuable behavioral context beyond destructiveHint and idempotentHint.
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 three compact sentences with no filler. Each sentence adds a distinct fact: the action, the design-draft side effect, and the soft-deletion caveat.
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 a single parameter, no output schema, and annotations covering safety semantics, the description supplies all necessary operational context: what gets deleted, what happens to the parent design, and what cannot be undone.
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 input schema has only render_id with no description, and the schema coverage is 0%, so the description should compensate. It implies that render_id identifies the render to delete, but it does not explicitly explain the meaning of the ID or how it relates to 'main render' versus other renders.
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 the specific verb and resource, 'Delete one render,' which clearly defines what the tool does. It further distinguishes the action from sibling tools like delete_design and delete_building by explaining the special effect of deleting the main render on the parent design.
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 clarifies the context: deleting the main render returns the design to draft, so it can be rendered again without a new design. This gives a practical reason to use the tool, though it does not explicitly name alternatives or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceCheck the agent walletARead-only
What this key can still spend: the api-scope balance of the account and the cap of this key. is_admissible is the server's own answer to "will the next paid call be accepted" — read it instead of comparing the numbers yourself.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag this as a read-only, open-world operation. The description adds useful behavioral context by explaining that `is_admissible` is the server-authoritative answer and should be trusted over manual comparison. It does not discuss authentication or rate-limit behavior, but that is minor for a zero-parameter read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no filler. It front-loads the core purpose and immediately adds the single most important usage nuance: trust `is_admissible` over manually comparing the numbers.
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-parameter tool without an output schema, this description is sufficient. It describes the key output concepts (`balance`, `cap`, `is_admissible`) and tells the agent which one to use for decision-making, so an agent can invoke and interpret the result 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?
There are zero parameters and schema description coverage is 100%, so there is nothing the description needs to explain about inputs. This matches the expected baseline for a parameter-free tool.
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 identifies the resource: 'the api-scope balance of the account and the cap of this key'. It lets the agent understand this is a wallet/balance check, but it lacks an explicit verb and does not directly name alternatives to distinguish it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied: `is_admissible` tells the agent whether the next paid call will be accepted, so it reads as a pre-payment check. However, the description does not explicitly say when to use `get_balance` instead of related tools such as `list_token_packages` or `buy_tokens`, nor does it include when-not/exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estimateRead an estimateARead-only
The finished estimate: its totals, the area and duration it assumes, and every line with its quantity, unit and price. This is the only way to see what was estimated — get_job reports the status of an estimate, never its content. The unit of a line is the display code to reuse in add_estimate_line.
| Name | Required | Description | Default |
|---|---|---|---|
| estimate_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds context on what the read returns, which aligns with the read-only nature. It also adds a useful cross-tool detail about the `unit` display code for reuse in add_estimate_line.
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 sentences, each with a distinct job: describe payload, distinguish from sibling, and provide cross-tool reuse information. No filler or repetition.
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 simple single-parameter read tool, the description covers what is returned, positions the tool among siblings, and provides a usage hint. It omits only minor context such as error behavior or where estimate_id originates.
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 for the single estimate_id parameter is 0%, and the description does not explicitly explain estimate_id or how to obtain it. The parameter is largely self-explanatory from the tool name and title, but the description does not add meaning 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?
Description clearly states the tool returns the finished estimate with totals, area, duration, and line items. It explicitly contrasts with get_job, implying this tool is the only one for actual estimate content, so an agent can distinguish it from 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?
The description gives direct usage guidance: use this to see what was estimated, and explicitly excludes get_job since that only reports status, never content. This is a clear when-to-use vs. alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobCheck one jobARead-only
Poll one queued job. kind says what it is: a render, an estimate, or an album (albums are listed per design, so an album lookup needs design_id). The finished status differs by kind: a render and an album read completed, an estimate reads ready. Stop polling on any of those and on failed, where error says what went wrong and error_code names it; repeat that reason as it stands instead of composing one. A render and an album report expected_seconds, how long that job usually takes end to end, so the wait between polls can be paced by it; an estimate does not, and reads null. The result_url of a finished job is a permanent public link: no signature, no expiry, so it can be handed to a person as it stands. It also keeps working for anyone it is forwarded to and cannot be recalled, so pass it on as deliberately as any other shared link.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | render | |
| job_id | Yes | ||
| design_id | No | Required when kind is "album" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations by adding per-kind success statuses (`completed` vs `ready`), failure semantics (`error`, `error_code`), pacing behavior (`expected_seconds`), and the important property that `result_url` is permanent, unexpiring, shared, and non-recallable. This is rich behavioral transparency.
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?
Every sentence adds a distinct, decision-relevant fact: success semantics, failure semantics, polling cadence, and URL permanence. The description is long but well organized with the essential operation first, and 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?
There is no output schema, so the description carries the full burden of explaining response behavior, and it does: success statuses, failure fields, expected-wait semantics, and permanent result URL behavior. A capable agent has everything needed to poll correctly and decide when to stop.
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 only 33%, and the description compensates for the most important parameters: it explains the `kind` enum values and the rule that an album lookup requires `design_id`. `job_id` is not described, but it is an obvious identifier and is required by the schema, so the gap is minor.
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?
Starts with a specific verb and resource: 'Poll one queued job.' It then clarifies that the job kind can be a render, estimate, or album, which removes ambiguity about what the tool returns and clearly separates it from sibling tools like list_jobs.
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 strong operational guidance: stop polling on `completed`, `ready`, or `failed`; the expected wait can be paced via `expected_seconds` for render and album jobs; album lookups require `design_id`. It does not explicitly name alternatives to prefer when a set of jobs is needed instead of one, so the routing guidance is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_designsList designs of a buildingARead-only
All designs of a building with their renders. This is where the render ids for order_estimate, order_album and refine_design come from — main_render_id is the finished render of a design, null while nothing has finished, and main_render_url is its permanent public link (no signature, no expiry, safe to hand to a person, and not recallable once shared). Per-render state is not here: poll get_job for that.
| Name | Required | Description | Default |
|---|---|---|---|
| building_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and openWorldHint=true, so the base safety profile is known. The description adds meaningful behavior beyond that: main_render_id is null until a render finishes, main_render_url is permanent, unsignable, and not recallable once shared, and per-render state deliberately belongs to get_job. This is valuable context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and every sentence contributes: the first defines the result, the second explains field semantics and downstream usage, and the third routes user to get_job for per-render state. There is minimal fluff, though it is slightly dense and could be simplified without losing much.
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 tool with one simple required parameter and no output schema, the description provides substantial context: it explains the key fields, their semantics, and the relationship to sibling tools. The main missing piece is any explicit explanation of how the building_id relates to the returned designs, but given the simple single-parameter structure this is 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?
The schema has only one parameter, building_id, with 0% schema description coverage. The description only indirectly refers to it via 'of a building' and relies on the parameter name and tool title for meaning. It does not explicitly document what building_id is, where it comes from, or any format constraints, so it only partially compensates for the missing 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 returns all designs of a building with their renders, making the resource and output explicit. It further distinguishes itself by explaining that this is the source of render IDs used by order_estimate, order_album, and refine_design. This is specific enough to differentiate from siblings like list_jobs and get_job.
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 explicit when-to-use guidance: use this tool when you need render IDs for order_estimate, order_album, or refine_design. It also provides when-not-to-use guidance and an alternative, stating that per-render state is not here and to poll get_job for that. This is exactly the kind of routing the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsList recent jobsARead-only
Recent jobs across the account — renders, estimates and albums in one list, unfinished ones first. Use it to catch up after a restart: each row carries the kind and design_id that get_job asks for, and the building_id the job belongs to. Use get_job to poll a single known job.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, so no contradiction there. The description adds useful behavioral context beyond annotations: unfinished jobs appear first, and each row carries kind, design_id, and building_id. It does not mention pagination or ordering beyond 'unfinished first', but the core behavior is transparent.
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?
Every sentence earns its place: purpose and ordering in the first sentence, the recovery use case and returned row fields in the second, and sibling routing in the third. It is compact, front-loaded, and contains 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 simple read-only list tool with no output schema, the description covers the main things an agent needs: what comes back (fields per row), ordering, and how to move to a single-job tool. It does not mention limit semantics or whether there are more results, but the two optional parameters are simple and the tool's purpose is sufficiently 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 0%, so the description must compensate, but it does not fully. It relates the `kind` enum values by naming renders, estimates, and albums, but never states that the `kind` parameter filters the list or explains `limit`'s semantics beyond what the schema already says. The agent is still left to infer how these parameters affect the result.
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 ('Recent jobs across the account') and defines the exact content: renders, estimates, and albums in one list. It differentiates itself from get_job by noting that this is the collection-level view while get_job handles a single known job.
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 usage context ('Use it to catch up after a restart') and explicitly points to the sibling alternative ('Use get_job to poll a single known job'). The description also explains why this tool is useful: each row includes the identifiers get_job asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_token_packagesList the token packagesARead-only
The packages this account can buy, with their price and how many tokens each carries. Read this before buy_tokens instead of assuming a ladder — the packages and their prices change.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the readOnlyHint annotation by stating that token packages and prices change, so an agent should not cache or assume fixed data. It also clarifies that results are account-specific. This is useful behavioral detail for a read-only list 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?
Two sentences, with the core behavior front-loaded and the operational warning in the second sentence. Every part contributes value without unnecessary detail.
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 parameterless read-only list, the description completely covers what the tool returns, its scope, and its place in the workflow before buying tokens. The absence of an output schema is acceptable because the description already states the key output dimensions: price and token count.
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 description does not need to explain parameter meaning. It still adds context by noting the list is tied to the current account, which helps the agent understand implicit scope.
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 the tool lists token packages available for purchase and what each entry contains: price and token count. It also names the resource ('token packages') and the intended account scope, making it distinguishable from sibling tools like buy_tokens.
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 explicitly instructs to read this tool before calling buy_tokens and warns against assuming a static package ladder. This provides clear usage context, though it does not exhaustively discuss when not to use the tool beyond this scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_albumOrder a PDF albumA
Document the design as a PDF album (the blueprint document) for the renders you name: the materials, the build-up of the facade, safety notes and the regulatory references behind them. This is the document a crew builds from. Name the estimate_id of the estimate whose prices belong in it: without one the album takes the newest finished estimate of the design, which is not necessarily the one that was just ordered. Requires a completed main render on that design, otherwise the API refuses with an explanation. requirements is not honoured on every account: when it is not, the album is still made and notices says so, in the API's own words. The finished album is a permanent public link, so it can be handed to a person as it stands, and it stays readable for anyone it is forwarded to.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Album language, defaults to the account language | |
| design_id | Yes | ||
| render_ids | Yes | ||
| estimate_id | No | The finished estimate to price the album from | |
| requirements | No | ||
| include_estimate | No | ||
| include_blueprints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains important behaviors: the estimate fallback to the newest finished estimate, the refusal without a completed render, the inconsistent application of requirements with a notice in the response, and the permanent public link. This gives the agent a substantially richer model of side effects and failure modes.
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 detailed but every sentence carries operational relevance: it defines the output, the prerequisites, the estimate fallback, and the requirements caveat. It is front-loaded with the core purpose, though the long clauses around API failure and notice wording are slightly dense.
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 description covers the main return behavior, prerequisites, default price-source behavior, and an important API quirk, which is strong without an output schema. It does not explain the two boolean parameters or the default language, so an agent invoking with richer intent will have incomplete context.
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 adds useful meaning for estimate_id (fallback behavior), render_ids (the named renders), design_id (must have a completed main render), and requirements (not honoured on every account). However, with schema coverage at only 29%, it leaves language, include_estimate, and include_blueprints unexplained, so an agent must still guess at their purpose.
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 action and resource: turn named renders into a PDF album/blueprint containing materials, facade build-up, safety notes, and regulatory references. It also reinforces the kind of artifact ('the document a crew builds from'), which differentiates it from sibling tools like order_estimate.
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 clear conditions: a completed main render is required, an estimate_id should be supplied, and behavior differs across accounts. It does not explicitly contrast this tool with siblings such as order_estimate, but it does establish when the tool is appropriate and what prerequisites must exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_estimateOrder a cost estimateA
Price the design, line by line, in materials and labour, for the renders you name. The figures come from the design itself: what the specified materials and build-up cost in this country. Currency and measurement system default to the building's country and the written text to the account language; do not guess any of them, omit them unless the caller asked for a specific one. The money follows the house, the words follow the reader: a building in one country can be priced in its own currency and still be written up in the language the person asking reads.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | ||
| language | No | Language of the written estimate, defaults to the account language | |
| design_id | Yes | ||
| render_ids | Yes | ||
| building_id | Yes | ||
| measurement_system | No | ||
| special_requirements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations disclose safety traits (write, non-idempotent, non-destructive) but not the nontrivial defaulting behavior. The description usefully explains that currency and measurement follow the building's country, language follows the account, and unspecified values must be omitted rather than guessed.
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 opening sentence is specific and front-loaded, and the defaulting rules are important. However, the final 'money follows the house, the words follow the reader' sentence is a poetic restatement of the same rule and adds little for an AI agent.
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 description covers the most ambiguous aspect — defaulting behavior — which is helpful for faithful invocation. However, the tool has seven parameters, no output schema, and unclear effects, so the agent is left guessing about whether a new estimate is created and what the response contains.
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 only 14% of parameters described in the schema, the description partially compensates by explaining currency, language, and measurement_system defaults. It does not clarify the relationship between design_id, building_id, and render_ids, nor the meaning or format of special_requirements.
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 clear verb and object: 'Price the design, line by line, in materials and labour, for the renders you name.' It also clarifies scope by saying the figures come from the design itself, which separates it from manual line-item editing. It does not explicitly name a sibling, but the 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?
The description implies when to use the tool: when you want an estimate derived from a design and its specified renders, rather than a manually assembled estimate. However, it never explicitly tells the agent when not to use it or points to alternatives such as get_estimate or add_estimate_line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refine_designRefine a designA
Revise a finished design in words: "put a canopy over the front door", "make the roof darker". The revision is applied to the finished design, so what is not mentioned stays as it is — this is the tool for every step after the first, not start_design. Give it either the render_id of the picture to change (the job id start_design returned) or the design_id (with building_id) of the design whose finished main render should be changed. The parent render must be finished; refining an unfinished one is refused. Queues a render and returns a new job id, plus the design_id the result lands in (the server keeps every step as its own design, so the previous picture is never overwritten). Styles, colors and brands are optional here: pass them only to change them.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| colors | No | ||
| design_id | No | Alternative to render_id: the design whose finished main render to iterate on. Needs building_id too | |
| render_id | No | Render to iterate on — the job id from start_design or an earlier refine_design | |
| style_ids | No | ||
| building_id | No | Required with design_id | |
| instruction | Yes | What to change, in plain words | |
| render_effort | No | How hard the engine works on this picture: BRAINSTORM is the quickest, STANDARD the middle, HIGH the slowest and most detailed. Some buildings pick the engine themselves and this choice does not reach them | |
| brand_selections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the tool queues a render, returns a new job id, stores each step as its own design, and never overwrites the previous picture. It also states the refusal behavior for unfinished parent renders and the merge semantics: what is not mentioned stays as it is.
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 efficient and front-loaded with the core use case. It covers a lot of behavioral detail in one paragraph; slightly better formatting with separation of input modes would make it easier 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 9-parameter mutation tool with no output schema, the description explains the result contract—new job id plus design_id—and important state behavior such as no overwriting and refusal of unfinished parents. An agent has enough to invoke it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 56%, but the description compensates by clarifying the render_id/design_id/building_id relationships and the meaning of styles, colors, and brands as optional change-only inputs. The seed parameter is not covered, giving this a 4 rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Revise a finished design in words' and gives concrete examples. It explicitly names start_design as what this tool is not, making it easy to distinguish from the closest sibling.
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 this is the tool 'for every step after the first, not start_design', giving a clear selection rule. It also explains the two valid invocation paths (render_id or design_id+building_id) and the precondition that the parent render must be finished.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_problemReport a problem with this APIA
Report something wrong with this API itself: a field that is documented but never arrives, a refusal whose wording leaves no way forward, a call that only works on the second try, a result that does not match what was asked for. Free, and it works on an empty wallet, so a refusal can be reported the moment it happens. This is not the way to reach a person about an account or a charge, and no reply comes back through it; what comes back is a reference to quote. Say what was attempted, what was expected and what happened instead, and put the tool name and the ids in context so the report can be traced.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| message | Yes | What went wrong: what was attempted, what was expected, what happened instead | |
| category | No | bug_report |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals exactly how the tool behaves: it is free, works even on an empty wallet, does not generate a human reply, and returns only a quotable reference. It also instructs the agent on how to structure a report. This goes well beyond the bare annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a typical simple tool, but this length is justified by the complexity of reporting failure conditions and by the need to encode a behavioral contract (free, empty wallet, reference result). It is front-loaded, starting with the purpose, and each clause adds either clarity, contrast, or trace evidence. Slightly more trimmed than this would be possible, but the current size is efficient given the subject.
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 reporting tool with no output schema, the description is complete: it defines what the call produces, what to include in the message and context, what is not handled, and why the free/instant/usage characteristics matter for the caller. There is no relevant gap needed to call the tool 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 low (33%), but the description compensates with usable guidance for the `message` field ('Say what was attempted, what was expected and what happened instead') and for `context` ('put the tool name and the ids in context so the report can be traced'). The `category` parameter is not defined, but its enum values are self-explanatory, and the schema already explains `message`. Overall the description adds meaningful parameter semantics on top of a sparse 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 opens with a precise, specific statement: 'Report something wrong with this API itself', followed by concrete examples that make the intent unambiguous. It also clearly distinguishes the tool from people-facing or account-related contact, so it is easy to tell apart from the other design/order/build tools in the sibling 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?
The description gives explicit conditions for use ('reported the moment it happens', 'a call that only works on the second try') and states a direct exclusion: 'This is not the way to reach a person about an account or a charge'. Although no alternative sibling is named, none exists among the listed tools, so the exclusion and concrete use cases are sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_designStart a design renderA
Design the exterior of this house on a chosen view, and show the result as a picture. The design is worked out against the building's country: which materials are applicable there, which manufacturer products are really sold there, and what the build-up behind the surface is — the render is how that decision is shown, not a picture made for its own sake. Creates a new design (concept) and queues the work; returns a job id to poll with get_job. prompt is the free-form wish for this design ("a modern facade with a wide porch"). Colors accept the same strings the apps use: "palette:1", "paint:412", "siding:88@double-4-dutchlap" or "#RRGGBB" — order carries the 60/30/10 role, the first entry is the dominant wall color; brand_selections names real manufacturer products: "siding:brand:12", "siding:line:40@double-4-dutchlap", "paint:product:412". Omit seed unless reproducing an earlier render. To change a design that already rendered, use refine_design instead of starting another one.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| colors | No | ||
| prompt | No | Free-form instruction for this design | |
| view_id | Yes | View id from upload_photo | |
| style_ids | No | ||
| building_id | Yes | ||
| render_effort | No | How hard the engine works on this picture: BRAINSTORM is the quickest, STANDARD the middle, HIGH the slowest and most detailed. Some buildings pick the engine themselves and this choice does not reach them | |
| brand_selections | No | Manufacturer products, e.g. "paint:product:412" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not a read-only, idempotent operation, and the description adds useful behavioral context: it creates a new design concept, queues async work, and returns a job id to poll. It also explains that the render is a consequence of a design decision rather than a free-standing picture, which sets user expectations without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then flows into causing behavior, return protocol, parameter details, and sibling routing. It is longer than the minimum but each sentence earns its place; the only slightly expendable part is the country/build-up rationale, which arguably strengthens semantic clarity rather than wasting words.
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 that there is no output schema, the description correctly covers the return shape ('returns a job id to poll with get_job') and the async queuing model. It also highlights the alternative refine_design path. Some dependencies are only implicit (building_id, view_id, style_ids), and it doesn't mention credit/token consumption, but for selecting and invoking the tool the description is sufficiently 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?
With only 50% schema description coverage, the description compensates well for the most nuanced parameters: prompt, colors (including format strings, lead role, and 60/30/10 ordering), brand_selections (product tuple format), and seed ('omit unless reproducing'). The less opaque parameters like view_id and render_effort are already described in the schema or are self-evident; only style_ids and building_id lack explicit coverage in either the schema or description.
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: 'Design the exterior of this house on a chosen view, and show the result as a picture,' then clarifies it 'creates a new design (concept) and queues the work.' It also differentiates from refine_design by explicitly stating when to use that sibling tool instead, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct when-to-use guidance: use this for a new design on a chosen view, poll with get_job, and use refine_design to modify an existing render. It also gives a conditional parameter rule ('Omit seed unless reproducing an earlier render'), which further helps correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_estimate_lineEdit a line of an estimateADestructiveIdempotent
Change one line of a generated estimate — its name, quantity, unit, unit price, category or section. Only the fields passed are changed. Totals are recomputed by the server.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| unit | No | ||
| line_id | Yes | ||
| section | No | ||
| category | No | ||
| quantity | No | ||
| unit_price | No | ||
| estimate_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only and is destructive. The description adds meaningful behavior beyond those annotations: it states that only passed fields change and that the server recomputes totals. This helps the agent understand the update semantics and important side effect.
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 concise sentences, front-loaded with the core purpose and immediately followed by the most important operational nuance. There is no filler or redundant restatement of the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity of 8 parameters, the description is sufficient for selecting and using the tool, especially with the annotation hints present. It covers scope, partial update behavior, and server recomputation. It could have been more complete with an example or explicit mention of the required identifiers, but these are evident from the schema.
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 schema itself has no parameter descriptions (0% coverage), but the description partially compensates by listing the modifiable fields: name, quantity, unit, unit price, category, and section. It explains that only supplied fields update, but it does not clarify the role of estimate_id and line_id or the constraints on values, which remain only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Change'), the resource ('one line of a generated estimate'), and explicitly enumerates which fields can be modified. This clearly distinguishes the tool from sibling add_estimate_line and delete_estimate_line without 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?
The description implies it is used for modifying an existing line, and 'Only the fields passed are changed' clarifies partial update behavior. However, it does not state when to prefer this tool over add_estimate_line or delete_estimate_line, nor does it mention any prerequisites such as whether the estimate must be generated first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_photoUpload a photo of the buildingA
Upload an exterior photo of the building and wait for it to be validated. Three legs: register the view, PUT the bytes to storage, confirm. Validation is asynchronous; the result says whether the photo was accepted, and a rejected photo cannot be rendered. The wait is bounded: a pending answer means validation is still running, and calling this again with the same file resumes it on the same view rather than uploading a second copy.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute path to a JPEG, PNG or WebP file on this machine | |
| building_id | Yes | Building id from create_building | |
| wait_for_validation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses asynchronous three-phase execution, the accepted/rejected result states, the permanence consequence, bounded wait behavior, and a retry-identent. This is exactly the kind of operational detail an agent cannot infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and wait expectation, then adds dense, non-repetitive details about state, retries, and behavior. Every sentence earns its place; none of the input schema is simply copied back.
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?
Without an output schema, the description still covers the important result states: accepted, rejected, and pending, plus the no-dup resume retry. It does not detail low-level failure modes such as missing building IDs or invalid bytes, but for a three-parameter upload tool this is nearly 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?
The schema already documents file_path and building_id, and the description adds value by explaining the validation/pending behavior around the call and the same-file retry. The one gap is that wait_for_validation=false is not explained, so the default-true path is documented but the alternate path is 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 first sentence defines a precise verb and object: 'Upload an exterior photo of the building and wait for it to be validated.' This goes beyond a tautology and clearly sets the tool apart from siblings like create_building or report_problem because it is specifically the building-photo upload flow.
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 clear usage context: a local file path is required, the photo must be of the building, validation is expected, and retries with the same file resume the existing view rather than creating duplicates. It does not explicitly say when not to use it or name an alternative, but the context is strong enough that an agent can select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_renderUpscale a renderA
Enlarge a completed render to a higher resolution. Costs tokens like a render and runs asynchronously: poll the returned job with get_job. A render that is already upscaled, or not finished yet, is refused by the API with an explanation.
| Name | Required | Description | Default |
|---|---|---|---|
| render_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavior beyond what the annotations provide: it costs tokens like a render, it runs asynchronously, it returns a pollable job, and it refuses invalid inputs with an explanation. This is exactly the kind of non-obvious behavior an agent needs to know.
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-loaded: the core action comes first, followed by cost/async behavior and refusal conditions. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent how to follow up by polling the returned job with get_job. It does not explain the exact result naming or whether the original render is preserved, but those are not essential 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?
The schema describes render_id only as a string, with 0% coverage, but the description compensates by tying the parameter to a completed, not-yet-upscaled render. For a single self-descriptive required identifier, this is enough semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb-resource operation: 'Enlarge a completed render to a higher resolution.' It also narrows the scope by stating that already-upscaled and unfinished renders are refused, so an agent can distinguish what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states valid usage conditions: the render must be completed and not already upscaled. It also tells the agent to poll the returned job with get_job. It does not explicitly name an alternative for creating a brand new high-resolution render, but the guidance is clear enough for correct tool selection.
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.
21 tool updates
v0.1.0- First observed
add_estimate_line - First observed
buy_tokens - First observed
create_building - First observed
delete_building - First observed
delete_design - First observed
delete_estimate_line - First observed
delete_render - First observed
get_balance - First observed
get_estimate - First observed
get_job - First observed
list_designs - First observed
list_jobs - First observed
list_token_packages - First observed
order_album - First observed
order_estimate - First observed
refine_design - First observed
report_problem - First observed
start_design - First observed
update_estimate_line - First observed
upload_photo - First observed
upscale_render
TDQS
Scored across 21 tools
Each tool targets a distinct resource or action: jobs are polled with get_job, renders are listed through list_designs, new designs use start_design and revisions use refine_design. Even adjacent tools like order_estimate and order_album are clearly separated by output.
All tool names follow a consistent snake_case verb_noun pattern: list_*, create_*, get_*, delete_*, *_design, and *_estimate. The vocabulary is uniform and predictable.
21 tools is on the heavy side for a single server, and several resources have many small operations such as the estimate line CRUD. That said, each tool has a defensible role, and the breadth comes from the multi-stage facade workflow.
The core lifecycle is well covered: building creation, photo upload, starting and refining designs, rendering, estimating, reversing, albums, and token management. Minor gaps remain, such as no list_buildings or update_building, but an agent can work around them.
Maintenance
Related MCP Connectors
Design homes with your AI: floor plans, furniture, joinery, lighting and photos, live.
bim.house — words become buildings. Generate BIM, check code & structure, quote materials.
Construction takeoff and estimating for AI agents. Measure a drawing PDF, export a priced estimate.
Measure property from satellite imagery, price 24 trades, and install contractor quote widgets.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive architectural expertise through specialized agents, resources, and tools for generating, evaluating, and modifying architectural designs.2,432 npmISC
- AlicenseAqualityDmaintenanceEnables AI agents to prepare floor plans for Ritn3D and interpret 3D outputs by providing tools for validation, complexity estimation, pricing, and failure analysis.911 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform construction takeoff and estimating from drawing PDFs, including upload, scale calibration, trade-based takeoff, pricing, and proposal export.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with CAD software through semantic spatial topology and architectural ontology, supporting drawing, block/layer/entity management, and safe preview-apply transaction workflows for AutoCAD, ZWCAD, GstarCAD, and BricsCAD.1Apache 2.0