measure-mcp
Provides tools for Amazon FBA analysis, including size tier determination, dimensional weight, fee estimates, tier headroom, listing audits, and package measurement.
Provides a companion iOS capture app and tools for reading iPhone Pro LiDAR capture bundles (depth map, photo, camera calibration) and RoomPlan exports, enabling measurements from iOS depth maps, photos, and room scans.
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., "@measure-mcpMeasure this bowl and scale my recipe to it: ~/measure-mcp-inbox/bowl.zip"
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.
measure-mcp
An AI tape measure. An MCP server that turns iPhone LiDAR captures, depth maps, room scans and photos with a reference card into real-world measurements that Claude (or any MCP client) can use.
Kitchen: "How much does this bowl hold?" Measure your own bowls and pans, then scale a recipe to fit them.
Rooms: "Will this 84 inch sofa fit through the door and on that wall?" Works from RoomPlan, Polycam, Scaniverse and other LiDAR scan exports.
Amazon FBA: size tier, dimensional weight, fee estimate, how close you are to the next tier, and what to shrink to drop one.
Moving and storage: cubic feet and weight from an inventory or a room scan, then the truck, container or storage unit that fits.
Every number comes back with a ± and a confidence level, and the server says plainly when it is guessing.
How it works
The AI never touches a sensor. Capture happens on the phone (the companion iOS app, a LiDAR scanner app, or the camera), and this server does the geometry on the files. It picks the best depth source available:
Metric depth already in the file: a 3D scan from a free LiDAR scanner app such as Scaniverse (OBJ or PLY, zipped is fine), an iPhone Pro capture bundle, a depth TIFF/PNG/NPZ, or a RoomPlan USDZ/JSON export.
A depth model on a plain photo (optional
[depth]extra, Depth Anything V2 Small, Apache-2.0).A reference object in frame (credit card, US letter or A4 sheet, quarter) to fix the scale.
A plain photo with none of these has no real scale. The tools say so instead of inventing a number.
Related MCP server: genpark-visual-grounding-spec-comparison-skill
Install
pip install measure-mcp # core: all tools, no ML
pip install "measure-mcp[usd]" # + reading RoomPlan .usdz files
pip install "measure-mcp[depth]" # + depth model for plain photos (pulls in PyTorch)Python 3.10 or newer. uvx measure-mcp works too.
Claude Desktop
Add this to claude_desktop_config.json (Settings, Developer, Edit Config):
{
"mcpServers": {
"measure": {
"command": "uvx",
"args": ["--from", "measure-mcp[usd]", "measure-mcp"]
}
}
}Claude Code
claude mcp add measure -- uvx --from "measure-mcp[usd]" measure-mcpLoad only what you need
All 34 tool descriptions take about 19k tokens of context. Set MEASURE_MCP_TOOLS to the groups you want (the core measure_* tools always load):
| Tools | Context |
(unset) | 34 | ~19k tokens |
| 9 | ~4k tokens |
| 14 | ~6k tokens |
| 15 | ~6k tokens |
| 14 | ~8k tokens |
"measure": {
"command": "uvx",
"args": ["--from", "measure-mcp", "measure-mcp"],
"env": { "MEASURE_MCP_TOOLS": "fba" }
}Combine groups with commas, for example kitchen,room.
Getting files to the server
Tools take file paths on the machine running the server. When you share a photo in chat, save it to ~/measure-mcp-inbox (or AirDrop it to Downloads) and the AI finds it with measure_find_files. Files the tools write (floor plans, inventories) go to ~/measure-mcp-output, or wherever MEASURE_MCP_OUTPUT_DIR points. Tools never write anywhere else.
Try it
Measure the bowl in
~/measure-mcp-inbox/bowl_capture.zipand scale my brownie recipe to it: 1 cup butter, 2 cups sugar, 4 eggs, 1 1/4 cups flour. The original recipe is for a 9x13 pan.
Here's my living room scan (
~/Downloads/living.usdz). Will an 84 x 37 x 34 in sofa get through the door, and does it fit on the wall with the window?
What FBA size tier is a 12 x 9 x 3 in box at 1.4 lb priced at $24, and how close is it to the next tier?
I'm moving out of a 2 bedroom: queen bed, 3-seat sofa, dining table with 4 chairs, 2 dressers, 30 medium boxes. What truck and storage unit do I need?
Tools (34)
Group | Tools |
Core |
|
Kitchen |
|
Room |
|
Amazon FBA |
|
Moving |
|
Conventions shared by every tool: the input file is path, sizes are dims ("12 x 9 x 3 in", a list, or a dict), weights are weight (1.4 or "1.4 lb"), output units are units (metric, imperial, both), and errors come back as {"error": {"code", "message", "hint"}}. An argument a tool doesn't take is rejected with the closest valid name, never silently ignored.
Accuracy
Measured on synthetic scenes with known answers and simulated iPhone LiDAR noise (256 x 192 depth, σ 5 mm). Real-world accuracy will be somewhat worse. Treat these as a ceiling, not a promise.
What | Result |
Bowls, pans and pots (12 vessels, 3 camera angles, 108 renders) | median capacity error 0.9%, 90th percentile 2.5%; the reported ± contained the truth in every render |
Rim diameter | worst error 0.35 cm |
Bowls from scanner-app meshes (OBJ/PLY, cm or m, Y-up or Z-up, holes, clutter) | median capacity error 0.7% on 16 random scans; the ± contained the truth every time |
Boxes (single view, any rotation) | footprint within 0.5 cm across 240 camera views |
Room walls from a LiDAR point cloud | mean 0.13 cm, worst 0.38 cm without drift; 3.5 cm worst with 2 cm drift |
FBA tier risk flags | caught 100% of boxes whose tier was wrong because of measurement noise |
Moving estimates (studio to 3 bedroom) | all within published industry ranges |
Known limits:
Steep camera angles hide the bottom of deep pots. At 30° the tools report low confidence and a wide ±.
Shallow pans (1 inch deep) come back as low confidence.
A guessed camera lens widens the error bars. For depth files without camera intrinsics the tools say "field of view unknown" and cap confidence at low.
Portrait-mode photos carry relative depth only. iPhone Portrait mode depth is not a real-world distance, so it needs a reference object.
Room accuracy figures are synthetic. Scanner drift on real phones is the biggest unknown, and real-scan validation is on the roadmap.
Data and estimates
FBA: size tiers and fee tables live in a versioned data file with an as-of date and sources. Several 2026 figures come from secondary sources and are flagged unverified;
fba_data_statuslists every gap. These are estimates. Amazon's own measurement and fee schedule govern.Moving: the cube sheet, truck capacities, containers and storage units come from published sources, each row marked verified or not. There are no prices in the data.
Companion iOS app (in progress)
ios/ holds the source for a small capture app. One tap saves an iPhone Pro LiDAR depth map, photo and camera calibration as a zip bundle that measure_open_capture reads, and it exposes App Intents ("Measure object") to Siri and Shortcuts. It has not been compiled or run on a device yet. See ios/README.md.
HTTP mode
measure-mcp --transport streamable-http # 127.0.0.1:8765, local only
MEASURE_MCP_TOKEN=... measure-mcp --transport streamable-http --host 0.0.0.0The server reads files on its host, so any non-loopback address requires a bearer token.
Development
git clone https://github.com/purahmanian/measure-mcp && cd measure-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,usd]"
python -m pytest -q # about 1,300 tests, no network
python -m ruff check .
PYTHONPATH=src:. python bench/kitchen_bench.py --quickDesign notes for each feature are in designs/.
License
MIT, Puya Ventures LLC. Depth Anything V2 Small (optional extra) is Apache-2.0.
Built by
Puya Rahmanian. Need an MCP server or an AI integration built for your product? puyarahmanian.com
Available Tools
34 toolsfba_analyzeA
START HERE for "what FBA tier and fee is this product?": one call returns the size tier, dimensional
and shipping weight, the estimated fulfillment fee (this period, and the peak or non-peak alternative),
the nearest limit that would change the tier or fee with its margin in YOUR units, a risk class
(safe / risky / critical) that reflects that nearest edge, and the single best shrink or weight cut to
save money. Quote summary; it is one self-contained paragraph.
Inputs: dims = the 3 edges of the PACKED unit as "12 x 9 x 3 in", [12, 9, 3] (with dims_unit) or {"length":12,"width":9,"height":3}; weight = 1.4 or "1.4 lb" / "22 oz" / "640 g" (a bare number is POUNDS unless weight_unit says otherwise, and the summary says how it was read); price = listing price in USD (29.99 or "$29.99"; selects the fee price band). dims_unit is in (default), cm or mm; weight_unit is lb (default), oz, g or kg. dims_sigma = 1-sigma measuring error per edge in dims_unit (omit for tape values; use sigma_in from fba_measure_package, or 0.2 in for a LiDAR scan); weight_sigma_oz = scale error in ounces. ship_date (ISO, default today) picks peak or non-peak fees. margin_in (0.5 in) and margin_pct (3 %) are the safety margins behind the risk class; a weight-band edge counts as risky when a measuring error of margin_in could cross it. max_shrink_pct and min_dims bound the shrink search.
detail="summary" (default) returns a short caveats list (as-of date, "Amazon's own measurement governs",
data gaps that matter for THIS result); detail="full" adds all thresholds, every suggestion and the full
assumptions list. Use fba_tier_headroom / fba_size_tier / fba_fee_estimate only when you need that detail.
Only product_class "standard" is modelled in v0.1.
Estimate from third-party-compiled rules (see fba_data_status); Amazon's own measurement governs.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| price | Yes | ||
| detail | No | summary | |
| weight | Yes | ||
| min_dims | No | ||
| dims_unit | No | ||
| margin_in | No | ||
| ship_date | No | ||
| dims_sigma | No | ||
| margin_pct | No | ||
| weight_unit | No | ||
| max_shrink_pct | No | ||
| units_per_month | No | ||
| weight_sigma_oz | No | ||
| include_fuel_surcharge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the default detail level and what each level returns (summary returns a caveats list; full adds thresholds, all suggestions, assumptions), instructs the agent to quote `summary` as one self-contained paragraph, flags provenance limits ('third-party-compiled rules', 'Amazon's own measurement governs'), and explains how ambiguous unit inputs are interpreted and echoed back.
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 value proposition and return content before the input contract, and the density is largely justified by 15 parameters at zero schema coverage. It is nonetheless a long block with some terse shorthand that an agent must parse carefully, so it stops short of ideal crispness.
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 not be re-specified, yet the description still tells the agent which field to quote and how detail level changes the payload. Combined with the v0.1 class limitation, the fee-provenance caveat, and near-total parameter coverage, an agent has everything needed to call and interpret this 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 description coverage is 0%, so the description must compensate, and it does for nearly every parameter: dims accepts three formats with an example, weight accepts numbers or unit-suffixed strings with a default-units rule, and it documents dims_unit, weight_unit, dims_sigma, weight_sigma_oz, ship_date, margin_in, margin_pct, max_shrink_pct, min_dims, and detail (with default). Only include_fuel_surcharge and units_per_month are left unstated.
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 an explicit routing statement ('START HERE for "what FBA tier and fee is this product?"') and enumerates exactly what one call returns: size tier, dimensional/shipping weight, fulfillment fee, nearest limit with margin, risk class, and best shrink cut. It also names the sibling tools (fba_tier_headroom / fba_size_tier / fba_fee_estimate) and scopes them as detail-only alternatives, so the agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use it ('START HERE'), when to prefer the alternatives ('Use fba_tier_headroom / fba_size_tier / fba_fee_estimate only when you need that detail'), and adds a scope limit ('Only product_class "standard" is modelled in v0.1'). This is explicit use/alternative/exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_audit_listingA
Compare what Amazon has on file / charged against your own measurement and say whether a remeasurement request looks worthwhile. A design-time and audit aid, NOT dispute evidence.
Naming: dims, weight (and dims_unit, weight_unit, dims_sigma) are YOUR measurement of the packed unit,
as in the other fba tools; every amazon_* parameter is what Seller Central shows or charged.
dims = your 3 edges ("12 x 9 x 3 in", a list or a dict; dims_unit in/cm/mm, default in); dims_sigma = their
1-sigma error in dims_unit (default 0.2 in); weight = your scale reading (1.4, "1.4 lb", "22 oz"; a bare
number is POUNDS) and is optional only when amazon_weight is given. Give at least one of: amazon_dims
(+ amazon_weight; amazon_dims_unit and amazon_weight_unit default in and lb) as shown in Seller Central,
amazon_tier (e.g. "small_bulky"), or amazon_fee = the per-unit fulfillment fee charged (Fee Preview or
order fee, without referral fee; 6.10 or "$6.10"). price = listing price in USD. charge_date = date the fee
was charged (ISO; starts the 90-day reimbursement window), ship_date defaults to it.
fee_includes_fuel_surcharge: leave unset to test both. units_sold_since_charge scales the exposure;
units_per_month adds a monthly amount.
When the fee differs under your dims and Amazon's and edges differ significantly, the verdict is at least
amazon_possibly_over / amazon_possibly_under (uncertainty softens "likely" to "possibly", never to "no money
at stake"); "consistent" is only returned when the central fees match or no edge differs.
Returns verdict (consistent, amazon_likely_over, amazon_likely_under, inconclusive, fee_not_explained_by_dims), confidence (never high), per-edge deltas with significance, tier comparison with probabilities, fee comparison with overcharge per unit (central and conservative), a reverse lookup of which tier/weight-band/period/price-band rows produce the charged fee (works without Amazon's dims), reimbursement_deadline and days_left, likely causes and next steps. The verdict never claims Amazon is wrong; the strongest wording is "likely over-measured; worth requesting remeasurement". detail="full" adds the assumptions list.
Estimate from third-party fee data; Amazon's own measurement governs.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| price | Yes | ||
| detail | No | summary | |
| weight | No | ||
| dims_unit | No | ||
| ship_date | No | ||
| amazon_fee | No | ||
| dims_sigma | No | ||
| amazon_dims | No | ||
| amazon_tier | No | ||
| charge_date | No | ||
| weight_unit | No | ||
| amazon_weight | No | ||
| units_per_month | No | ||
| weight_sigma_oz | No | ||
| amazon_dims_unit | No | ||
| amazon_weight_unit | No | ||
| units_sold_since_charge | No | ||
| fee_includes_fuel_surcharge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses verdict logic, that confidence is 'never high', that uncertainty softens 'likely' to 'possibly', that the verdict 'never claims Amazon is wrong', and the 90-day reimbursement window started by charge_date. It does not explicitly state the tool is read-only/non-mutating, but the 'audit aid' framing makes this inferable.
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 the 'not dispute evidence' caveat are front-loaded, then the naming/unit conventions, then the verdict behavior. It is dense and long, but 19 parameters with 0% schema coverage justify most of the length; a few clauses (e.g. the verdict wording rules) 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?
For a complex 19-parameter analytical tool with no annotations, the description supplies the input conventions, the conditional-requirement rule, verdict semantics, and the 90-day window. An output schema exists, yet the description still previews the key return fields, making it fully sufficient to invoke and interpret.
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 do the work and it largely does: it defines dims, dims_unit, dims_sigma, weight, weight_unit, the amazon_* family, price, charge_date, ship_date, units_sold_since_charge, units_per_month, fee_includes_fuel_surcharge, and detail='full', including formats ('12 x 9 x 3 in', '1.4 lb', bare number = POUNDS) and defaults. Only weight_sigma_oz is left undocumented.
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 comparison action ('Compare what Amazon has on file/charged against your own measurement') and an explicit outcome ('say whether a remeasurement request looks worthwhile'). It also distinguishes itself from sibling fba tools by declaring it is 'a design-time and audit aid, NOT dispute evidence', so an agent can tell it apart from fba_draft_remeasure_request 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 clear usage context ('design-time and audit aid') and a when-not ('NOT dispute evidence'), plus the input condition that selects it ('Give at least one of: amazon_dims..., amazon_tier..., or amazon_fee'). It never names the alternative sibling tools to route to, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_data_statusA
Report which FBA rules dataset is in force and how much to trust it. Call this before quoting a fee,
or when another fba tool's caveats point here.
date (ISO, default today) is the day to check. Returns dataset_id, as_of date of the data, effective range, the peak window and whether peak or non-peak fees apply on that day, active surcharges, a per-section verification table (official / secondary_cross_checked / secondary / unverified), the list of rows that are verified versus not, unverified_fields, staleness warnings (data older than 90 days or past its review date), source URLs and the 90-day reimbursement window. Fee and tier rows are currently compiled from third-party sources, so treat them as estimates; Amazon's own measurement and fee schedule govern.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses data provenance (third-party compiled sources), what 'verified' vs 'unverified' means, staleness thresholds (90 days / past review date), the 90-day reimbursement window, and a direct caution that rows are estimates. This is exactly the failure-mode context an agent needs before quoting fees.
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 the call-site trigger, followed by parameter and return detail. Sentences earn their place, though the long parenthetical enumerations of return fields are dense and could be trimmed given an output schema exists.
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 single-parameter status tool, the description covers purpose, timing, input semantics, provenance caveats, and confidence levels. It even enumerates return fields despite an output schema existing, so nothing an agent needs 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 0% and the schema gives no description for `date`, so the description must compensate. It specifies the format (ISO), the default (today), and the meaning ('the day to check'), plus what the date affects (peak vs non-peak fees). Minor gap: it does not clarify behavior if the date lies outside the effective range.
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: reporting which FBA rules dataset is in force and how much to trust it. It is clearly distinguishable from sibling fee/size tools (fba_fee_estimate, fba_size_tier) because it positions itself as the trust/metadata check rather than a calculation.
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 an explicit trigger: 'Call this before quoting a fee, or when another fba tool's `caveats` point here.' That is a concrete when-to-use condition tied to sibling tools. There is no explicit when-not guidance or named alternative, 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.
fba_draft_remeasure_requestA
Draft (never send) a Seller Support remeasurement request. Pass the dict returned by fba_audit_listing as audit, plus asin / sku / fnsku and seller_name.
The text states measurements as seller-provided hand measurements, asks for a multi-unit Cubiscan remeasurement, asks Amazon to confirm fees and reimburse overcharges since the charge date within policy, and offers sample units. It does not claim a scan proves anything. Bracketed [ADD: ...] placeholders mark facts only the seller knows (number of units measured, name); replace them before use. amazon_dims_text / measured_dims_text override the dimensions taken from the audit, for example "18.5 x 12 x 3 in". measurement_method describes how the seller measured. tone is "concise" or "detailed".
Returns subject, body, checklist (measure 3+ units as shipped, 90-day window from the charge date, reported re-request limits), warnings (audit verdict not 'likely over', low confidence, window passed, missing fields), the channel to use and the deadline. submitted is always false.
Amazon's own measurement governs; photos and estimates from this server are not proof.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| asin | No | ||
| tone | No | concise | |
| audit | No | ||
| fnsku | No | ||
| seller_name | No | ||
| amazon_dims_text | No | ||
| measured_dims_text | No | ||
| measurement_method | No | tape measure and scale, hand-checked | |
| request_reimbursement | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the letter's stance (seller-provided hand measurements, no claim that a scan proves anything), the [ADD: ...] placeholders that must be replaced, the warnings that may be returned, and the 'Amazon's own measurement governs' caveat. This is unusually rich behavioral context for a mutation-adjacent drafting 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?
Front-loaded with purpose and required inputs, then behavior, then returns. Dense and mostly waste-free, though a few sentences are long and the middle paragraph 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?
Despite an output schema, the description still names the key return fields (subject, body, checklist, warnings, channel, deadline) and states submitted is always false. For a 10-param tool with a prerequisite dependency, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 10 params, but the description explains audit, asin/sku/fnsku, seller_name, amazon_dims_text/measured_dims_text (with the format example '18.5 x 12 x 3 in'), measurement_method, and the tone values. Only request_reimbursement is left implicit, so the coverage gap is nearly closed.
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 with scope: 'Draft (never send) a Seller Support remeasurement request.' It also names fba_audit_listing as the source of the audit dict, so an agent can place it precisely relative to siblings like fba_audit_listing and fba_measure_package.
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 a clear entry condition (pass the dict returned by fba_audit_listing as audit) and a hard constraint (never send; submitted is always false). It stops short of explicitly contrasting alternatives such as fba_tier_headroom or fba_fee_estimate, so it is strong context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_fee_estimateA
Estimate the US Amazon FBA per-unit fulfillment fee in USD for a packaged unit.
Inputs: dims = 3 edges of the PACKED unit, any order ("12 x 9 x 3 in", [12, 9, 3] with dims_unit in/cm/mm, or a dict); weight = 1.4 / "1.4 lb" / "22 oz" / "640 g" (a bare number is POUNDS unless weight_unit says otherwise; the summary states how it was read); price = the listing price in USD (24.99 or "$24.99"; selects the fee price band: under 10, 10 to 50, over 50). ship_date (ISO date, default today) selects the peak table (2026-10-15 to 2027-01-14) or non-peak, and whether the 3.5% fuel and logistics surcharge (from 2026-04-17) applies; set include_fuel_surcharge=false to see the fee without it. dims_sigma / weight_sigma_oz add a +-2 sigma fee interval. units_per_month adds a monthly total. Only product_class "standard" is supported; others return an error.
Returns tier, shipping weight, price_band, period (peak/nonpeak), itemised components with the rule used,
total_usd, interval_usd, monthly_usd, the alternate period's total, what is NOT included (bulky packaging
fee, inbound placement, storage, returns) and data_verification. If a fee row is missing in the dataset the
tier is still returned and fee_available is false. detail="summary" (default) adds a short caveats list;
detail="full" adds the assumptions list and disclaimer.
Rates come from third-party summaries and are not yet verified against Seller Central; compare with the Fee Preview report. Amazon's own measurement and fee schedule govern.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| price | Yes | ||
| detail | No | summary | |
| weight | Yes | ||
| dims_unit | No | ||
| ship_date | No | ||
| dims_sigma | No | ||
| weight_unit | No | ||
| product_class | No | standard | |
| sipp_enrolled | No | ||
| units_per_month | No | ||
| weight_sigma_oz | No | ||
| include_fuel_surcharge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses the peak-table window (2026-10-15 to 2027-01-14), the 3.5% fuel/logistics surcharge from 2026-04-17 and how to disable it, the error for unsupported product_class values, and the fee_available=false fallback when a fee row is missing. It also flags calibration risk (unverified third-party rates, compare with Fee Preview) and what is deliberately excluded.
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, then inputs are grouped, then returns, then provenance caveats — a sensible progression for a complex computational tool. It is dense but every paragraph corresponds to a real schema/behavioral need; nothing is padding, though the returns paragraph is long.
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 need not fully explain return values, yet it still usefully summarizes them plus the fee_available fallback and detail modes. Combined with the thorough input and provenance coverage, the only real omission is the undocumented sipp_enrolled parameter.
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 0% schema description coverage, the description does the heavy lifting, documenting acceptable forms and defaults for dims/dims_unit, weight/weight_unit (bare number = pounds), price and its fee bands, ship_date, include_fuel_surcharge, dims_sigma, weight_sigma_oz, units_per_month, product_class, and detail. One parameter, sipp_enrolled, is never mentioned, leaving a real gap for a 13-param 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?
States a specific verb and resource ('Estimate the US Amazon FBA per-unit fulfillment fee in USD for a packaged unit'), including currency and scope, so the agent knows exactly what is produced. It does not, however, name or distinguish itself from siblings like fba_size_tier or fba_analyze, so routing still requires inference from 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?
It implies usage through the input narrative (fill dims/weight/price, set ship_date to pick peak vs non-peak, include_fuel_surcharge=false to exclude the surcharge) and states the product_class='standard' restriction. But it never says when to choose this tool over fba_size_tier, fba_analyze, or fba_tier_headroom, which is the main guidance gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_measure_packageA
Measure the PACKAGED unit (the box or bag as it ships) from 1 to 5 scans of the same package.
Inputs: path = one scan file, or paths = a list of 2 to 5 scans of the same pack (combined by median per
sorted edge). A scan is a 3D scan export (a Scaniverse, Polycam or 3D Scanner App OBJ or PLY mesh or point
cloud; a .zip holding the .obj plus its .mtl and texture is fine) of the package on a table, a metric depth
file (HEIC, TIFF, 16-bit PNG, NPZ) or an iOS capture bundle (folder or .zip); rgb_path is an optional
companion photo for a single depth file. For OBJ/PLY the file's units (m, cm, mm or inches) and up axis are
detected from the table and plausible sizes, and notes say what was assumed; if that is wrong or ambiguous,
pass scan_units (m|cm|mm|in: what the FILE is written in; Scaniverse writes METERS, and units="cm" works as
an alias) and up_axis (x|y|z, signs ok). The package is the object nearest the middle of the scan.
weight is the user's own scale reading of the packed unit (a scan cannot weigh): a number
(POUNDS unless weight_unit says otherwise) or "22 oz" / "640 g"; weight_sigma_oz is the scale's 1-sigma
error in ounces. bbox [x0, y0, x1, y1] or point [x, y] pick the package out of the scene; they are in PHOTO
pixels when the scan carries a photo (HEIC or a capture bundle with its colour image), otherwise in
depth-image pixels (the result's pixel_space says which). reference is only used when the depth is
relative rather than metric: {"type": "credit_card", "corners": [[x,y] x4]} or {"type", "bbox"} in the same
pixel space (see measure_list_reference_objects).
Returns dims_in {longest, median, shortest} in INCHES with 1-sigma sigma_in per edge (LiDAR is never reported better than 0.2 in), dims_cm, length_plus_girth_in, volume_cubic_in, unit_weight (user-supplied), confidence (high/medium/low), quality_flags (thin_item_unreliable, low_coverage, soft_or_irregular_surface, scan_disagreement, monocular_only, relative_depth_not_metric, assumed_intrinsics), capture_advice and fba_args, ready to pass to fba_analyze. Relative, monocular or assumed-intrinsics depth is never high confidence. Items thinner than 1.5 in cannot be certified by a depth scan.
This is an estimate for packaging decisions; Amazon measures the unit itself and its measurement governs. detail="full" adds per-scan results and the assumptions list.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| path | No | ||
| paths | No | ||
| point | No | ||
| units | No | both | |
| detail | No | summary | |
| weight | No | ||
| up_axis | No | auto | |
| rgb_path | No | ||
| reference | No | ||
| scan_units | No | auto | |
| weight_unit | No | ||
| weight_sigma_oz | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it states reliability ceilings ('LiDAR is never reported better than 0.2 in'), a hard limitation ('items thinner than 1.5 in cannot be certified'), confidence rules for relative/monocular/assumed-intrinsics depth, that a scan cannot weigh, and that Amazon's own measurement governs. These are exactly the traits an agent needs before calling.
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 long and dense, but front-loaded with the purpose first and then explicitly partitioned into 'Inputs' and 'Returns' plus a closing caveat, so an agent can navigate it. Given 13 parameters at 0% schema coverage and zero annotations, the length is largely earned rather than padding.
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 13-parameter tool with an output schema and no annotations, the definition covers input formats, unit detection, filtering, the return payload, and confidence/limitation semantics. Nothing an agent needs in order to call it correctly is missing, and the return summary adds interpretive value beyond 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?
Schema description coverage is 0% across 13 parameters, yet the description supplies deep semantics for nearly all of them: file/unit/up-axis detection and override aliases ('Scaniverse writes METERS, units="cm" works as an alias'), weight formats and default units, pixel-space rules for bbox/point, the reference schema, and detail="full" behavior. Only the 'units' output-formatting parameter goes unmentioned.
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 sentence gives a specific verb and a sharply scoped resource: 'Measure the PACKAGED unit (the box or bag as it ships) from 1 to 5 scans of the same package.' The parenthetical and the multi-scan framing distinguish it from generic siblings such as measure_object and kitchen_measure_vessel without the agent needing to open 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?
The description gives strong in-scope guidance (1 scan via path vs 2-5 same-pack scans via paths, when to override scan_units/up_axis, when reference is needed) and cross-references measure_list_reference_objects. It stops short of naming when to prefer this over measure_object/kitchen_measure_vessel, so the when-not case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_size_tierA
Classify a packaged unit into its US Amazon FBA size tier (small standard, large standard, small bulky, large bulky, extra-large bands) and show how close it is to each limit. (fba_analyze answers the usual question, tier plus fee plus nearest limit, in one call.)
Inputs: dims = the 3 edges of the PACKED unit, any order: "12 x 9 x 3 in", [12, 9, 3] with dims_unit (in default, cm or mm) or {"length":12,"width":9,"height":3}; weight = unit weight of the packed unit: 1.4, "1.4 lb", "22 oz" or "640 g" (a bare number is POUNDS unless weight_unit is oz, lb, g or kg; the summary states how it was read). dims_sigma = 1-sigma measurement error per edge in dims_unit (a single number, or 3 numbers in the same order as dims; omit for exact tape/caliper values); weight_sigma_oz = scale error in ounces. as_of (ISO date) picks the dataset effective on that date, default today. Only product_class "standard" is modelled in v0.1.
Returns tier, sorted dims in inches, length_plus_girth_in, unit and dimensional weight in lb (divisor 139,
2 in floor on the two shorter sides for bulky tiers), the shipping weight Amazon bands on (greater of unit
and dimensional, unit-only for small standard), each binding limit with margin, z-score and risk class
(safe/risky/critical), rejected tiers with the failing limits, the next tier up and tier_probabilities when
dims_sigma is given. detail="summary" (default) adds a short caveats list; detail="full" adds the
assumptions list and disclaimer.
Estimate from third-party-compiled rules (see fba_data_status); Amazon's own measurement governs.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| as_of | No | ||
| detail | No | summary | |
| weight | Yes | ||
| dims_unit | No | ||
| dims_sigma | No | ||
| weight_unit | No | ||
| product_class | No | standard | |
| weight_sigma_oz | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral load and does so well: it discloses the dimensional-weight divisor (139), the 2-inch floor, shipping-weight banding rules, risk classes, and that the result is an estimate from third-party rules where 'Amazon's own measurement governs.' Some of the 'Returns...' enumeration overlaps with the output schema rather than adding behavior, keeping it at 4.
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 purpose and separates 'Inputs:' and 'Returns:' cleanly. The long Returns sentence partially restates the available output schema, which is the main source of avoidable length given a 9-parameter tool that genuinely needs input 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 9-parameter, 0%-coverage tool with an output schema, the definition covers all inputs with format rules, states the estimate/disclaimer caveat, and explains detail-dependent return content. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate and it does: dims formats, dims_unit default/cm/mm, weight formats and the pounds-unless-unit-given rule, weight_sigma_oz, as_of dataset selection, detail modes, and that only product_class "standard" is modelled. Every parameter is given meaning beyond the bare 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 and resource ('Classify a packaged unit into its US Amazon FBA size tier') and names the tier bands. It also names the sibling fba_analyze and clarifies the division of labor, so an agent can distinguish it from the other FBA tools 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?
The parenthetical pointing to fba_analyze for 'the usual question, tier plus fee plus nearest limit' implies when to prefer this tool (tier-only). It also gives a clear usage condition for dims_sigma ('omit for exact tape/caliper values'). No explicit when-not statement or prerequisites, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fba_tier_headroomA
Show how close a packaged unit is to every FBA tier, weight and fee-band threshold, and what to shrink to pay less. (fba_analyze is the one-call version with the single best suggestion.)
Inputs: dims = 3 edges of the PACKED unit, any order ("12 x 9 x 3 in", [12, 9, 3] with dims_unit in/cm/mm, or a dict); weight = 1.4 / "1.4 lb" / "22 oz" (a bare number is POUNDS unless weight_unit says otherwise); price = listing price in USD. dims_sigma = 1-sigma error per edge in dims_unit (use sigma_in from fba_measure_package; 0.2 in for a LiDAR scan); weight_sigma_oz = scale error in ounces. margin_in is the safety margin in INCHES (default 0.5) and margin_pct the weight margin in percent (default 3); a threshold is "risky" inside either margin or within 2 sigma and "critical" within 1 sigma. When dimensional weight sets the shipping weight, a weight-band edge is also risky if a margin_in measuring error could cross it. max_shrink_pct caps how much any one edge may shrink (default 15%); min_dims (same form and unit as dims) is the smallest each edge can be because of the contents. ship_date (ISO, default today) picks peak or non-peak fees; units_per_month adds monthly savings.
Returns current tier and fee, thresholds sorted by risk, overall_risk, ranked suggestions (single- and
two-edge shrinks, each with apply_dims_in, new_total_usd, saving_per_unit_usd and per inch, confidence),
tier_drop_suggestions (shrinks that reach a cheaper tier with the safety margin), and weight_suggestions
(unit-weight cuts). Targets include the safety margin. Savings come from the same fee engine as
fba_fee_estimate. detail="summary" (default) adds a short caveats list; "full" adds the assumptions list.
Estimate only; Amazon measures the packed unit itself and its measurement governs.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| price | Yes | ||
| detail | No | summary | |
| weight | Yes | ||
| min_dims | No | ||
| dims_unit | No | ||
| margin_in | No | ||
| ship_date | No | ||
| dims_sigma | No | ||
| margin_pct | No | ||
| weight_unit | No | ||
| max_shrink_pct | No | ||
| units_per_month | No | ||
| weight_sigma_oz | No | ||
| include_weight_options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so richly: it defines 'risky' vs 'critical' bands, the dimensional-weight crossover rule, default margins and shrink caps, the peak/non-peak fee dependency, and the crucial caveat 'Estimate only; Amazon measures the packed unit itself and its measurement governs.'
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 purpose sentence and organized into 'Inputs:' and 'Returns:' blocks, which makes a long body navigable. The Inputs paragraph is an unusually dense run-on that could be broken up, but given 15 parameters the length is largely justified.
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?
Despite an output schema existing, the description still summarizes return fields, and it compensates for absent annotations and 0% schema coverage with defaults, semantics and an estimation caveat. For a complex 15-parameter 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 description coverage is 0% across 15 parameters, so the description must compensate and largely does: it gives accepted formats and unit semantics for dims, weight, price, dims_sigma, weight_sigma_oz, margin_in, margin_pct, max_shrink_pct, min_dims, ship_date, units_per_month and detail, including the 'bare number is POUNDS unless weight_unit says otherwise' rule.
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 headroom to FBA tier/weight/fee-band thresholds) plus the actionable outcome (what to shrink to pay less). It explicitly contrasts itself with fba_analyze as the 'one-call version with the single best suggestion', so an agent can tell the two apart 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 closest alternative (fba_analyze) and implies the selection condition (full threshold picture vs. single best suggestion), and points to fba_measure_package for the sigma value. However it never addresses fba_size_tier or fba_fee_estimate directly, and gives no explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kitchen_measure_vesselA
Capacity of a bowl, baking dish, cake pan, sheet pan or pot from one depth capture or 3D scan (to scale a recipe).
Camera looking down into the upright vessel on a flat surface (45 degrees above the table or steeper), whole
rim in frame. path: LiDAR/Portrait HEIC, capture bundle (folder or .zip), metric depth file (16-bit PNG in mm,
TIFF or NPZ in meters), a plain photo, or a 3D scan: a Scaniverse, Polycam or 3D Scanner App OBJ or PLY
(a .zip with the .obj, .mtl and texture is fine). A scan needs the vessel upright on a table with some table in
view; it is the object nearest the middle, clutter is ignored, and rgb_path, bbox, point and reference do not
apply. Units and up axis are detected and reported in scan and warnings; if wrong, pass scan_units
(m|cm|mm|in: the FILE's units; Scaniverse writes meters; units="cm" also works) and up_axis (x|y|z, signs
ok). rgb_path: optional original photo (EXIF gives the focal length).
bbox [x0, y0, x1, y1] or point [x, y] pick the vessel among several: PHOTO pixels (depth-map pixels when
there is no photo). vessel_type: bowl|pot|round_pan|rect_pan|sheet_pan|casserole hint, or auto. material
(metal|glass|ceramic|silicone) and wall_thickness_mm set the wall allowance (depth is measured to the outer
rim). reference {"type": "credit_card", "corners": [[x,y] x4]}: needed for relative depth, useful when a
depth file has no camera intrinsics; see measure_list_reference_objects. units: metric|imperial|both.
A plain photo has no depth. With the base install it returns NO_DEPTH whose hint lists the options in order: LiDAR capture; a credit card in frame plus pip install "measure-mcp[depth]"; typed dimensions (kitchen_vessel_from_dimensions, which always works). measure_depth_info shows what is installed.
Returns summary (quote it), vessel (pass it as source_vessel/target_vessel to kitchen_scale_recipe), measurements (rim size, inner depth, brimful capacity, each +/- about 95% with a confidence), capacity (L, mL, cups, quarts), fill_guidance, nearest_preset, quality (fit_grade, fit_issues) and warnings. Capacity is BRIMFUL, inner surface. Confidence is never "high" for relative or monocular depth, a noisy or poorly fitting capture, or guessed camera intrinsics (those are "low"); a rim that fits no clean circle/rectangle returns VESSEL_FIT_POOR instead of a number. Present it as an estimate; typed dimensions are more exact.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| path | Yes | ||
| point | No | ||
| units | No | both | |
| up_axis | No | auto | |
| material | No | unknown | |
| rgb_path | No | ||
| reference | No | ||
| scan_units | No | auto | |
| vessel_type | No | auto | |
| depth_source | No | auto | |
| wall_thickness_mm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so unusually well: it discloses supported input families, that units/up-axis are auto-detected and where the result is reported, that capacity is BRIMFUL measured to the inner surface, the confidence grading rules (never 'high' for relative/monocular/guessed intrinsics), and explicit error codes (NO_DEPTH, VESSEL_FIT_POOR).
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 fact is relevant, but the description is a dense wall of run-on sentences with embedded parentheticals and backticks that is hard to scan. Several sentences enumerate return fields (summary, vessel, measurements, capacity, fill_guidance, nearest_preset, quality, warnings) that an output schema already conveys, so some length is not earning 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?
For a 12-parameter tool spanning several capture formats, this covers everything an agent needs to attempt a correct call: required capture geometry, format support, disambiguation of the vessel among several, unit/axis overrides, fallback behavior, and how to interpret the estimate. The output schema handles return structure, so the description's completeness is more than sufficient.
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 and largely does: path formats, rgb_path (EXIF focal length), bbox/point pixel coordinate spaces (photo vs depth-map), vessel_type and material enums, wall_thickness_mm's effect on the allowance, reference's credit-card corner structure with a cross-reference to measure_list_reference_objects, scan_units (file units, Scaniverse=meters) and up_axis signs. Only depth_source goes unexplained.
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-and-resource statement: capacity of a named set of vessels (bowl, baking dish, cake pan, sheet pan, pot) from one depth capture or 3D scan, with the motivation (scaling a recipe). It is clearly distinguishable from kitchen_vessel_from_dimensions (typed dimensions) and kitchen_scale_recipe (downstream consumer), which it names.
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 concrete capture preconditions (camera 45 degrees or steeper, whole rim in frame, vessel upright on a table) and explicitly routes around the failure path: a plain photo returns NO_DEPTH with an ordered hint list, and typed dimensions via kitchen_vessel_from_dimensions 'always work'. It even names measure_depth_info as the way to check installed capabilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kitchen_scale_recipeA
Scale a recipe written for one pan to another vessel, with kitchen-friendly amounts.
ingredients: ONE text block, an ingredient per line (paste the list as is), or a list of strings ("2 1/4 cups
flour", "3 eggs", "1/2 cup (115 g) butter, melted") or {"amount", "unit", "name"} objects. A line with no
number stays unscaled and is listed in warnings. source_vessel: the pan the recipe was written for;
target_vessel: the pan to use now. Each is a vessel object from kitchen_measure_vessel or
kitchen_vessel_from_dimensions, or just a name ("9x13", "8 inch round", "half sheet"); vessels_resolved says
which preset each name became: check it with the user.
recipe_kind: batter_heavy (cakes, quick breads; fill <= 2/3), sponge (<= 1/2), bars_brownies, bread_loaf,
casserole, soup_stew, sauce (these two scale by volume); words like brownies, cake, soup work. Omitted: it is
inferred from the recipe text when obvious, else batter_heavy; recipe_kind.used / source / why say which.
mode auto|area|volume: auto uses the AREA ratio (same batter thickness) unless the target is clearly
shallower or it is a soup (then VOLUME). original_bake_minutes, original_temp_f: optional, for the bake note.
fill_fraction: how full the original fills the source pan (0.05-1.0), else a typical value is assumed.
rounding: kitchen (1/8 cup, 1/4 tsp steps) | exact.
detail: summary (default, lean lines) | full (adds original and exact amounts per ingredient).
Returns summary (quote it), scale_factor (+/-), basis and why, ingredients_scaled (original, scaled, display),
fill (height, limit, ok), bake notes, recipe_kind, vessels_resolved, warnings. Eggs scale to whole, half or
measured beaten egg. Fill height and bake notes are guidance, not measurements: go by doneness. Factors
outside 0.5-2.0 and Bundt/angel-food/cheesecake pans carry warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| detail | No | summary | |
| rounding | No | kitchen | |
| ingredients | Yes | ||
| recipe_kind | No | ||
| fill_fraction | No | ||
| source_vessel | Yes | ||
| target_vessel | Yes | ||
| original_temp_f | No | ||
| original_bake_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: unnumbered lines stay unscaled and surface in warnings, eggs scale to whole/half/measured, factors outside 0.5-2.0 and Bundt/angel-food/cheesecake pans trigger warnings, and fill height/bake notes are explicitly flagged as guidance rather than measurements.
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 goal is front-loaded in the first sentence and every sentence carries information, but the parameter documentation is packed into a single dense block without visual separation, which slightly hurts scannability. No filler content is present.
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-parameter tool with 0% schema coverage and no annotations, the description is complete: it covers inputs, defaults, inference rules, warnings, and even summarizes the return payload despite an output schema existing. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define all 10 parameters, and it effectively does: input formats for ingredients, accepted vessel forms, the recipe_kind vocabulary, mode semantics, fill_fraction range (0.05-1.0), rounding steps, detail levels, and the purpose of the original bake/temp fields.
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 sentence gives a specific verb and resource: 'Scale a recipe written for one pan to another vessel, with kitchen-friendly amounts.' It is clearly distinguishable from siblings like kitchen_measure_vessel and kitchen_vessel_from_dimensions, which it explicitly identifies as sources of vessel objects rather than scaling 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?
It names alternatives for obtaining vessel objects (kitchen_measure_vessel, kitchen_vessel_from_dimensions) and lays out conditions that select behavior: mode auto uses AREA unless the target is shallower or the recipe is a soup (then VOLUME), recipe_kind is inferred when omitted else defaults to batter_heavy, and vessels_resolved should be checked with the user. Guidance on when each option applies is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kitchen_vessel_from_dimensionsA
Build a vessel and its capacity from a standard pan name or typed dimensions; no photo, always works.
Pass EITHER preset OR dimensions (both is an error). preset takes natural names: "9x13", "9 x 13 inch pan", "8 inch round", "8-inch cake pan", "half sheet", "loaf pan", "bundt", "2 qt saucepan", "10 inch skillet", "23x33 cm"... Presets include square/round/springform pans, 9x13, loaf pans, quarter/half/full sheets, pie plate, skillets, bundt and tube pans, one muffin cup, casseroles and pots by quart. The result says which preset it resolved to (preset.resolved_to, preset.match exact|alias|parsed|default|fuzzy): tell the user. An unknown name returns candidates. dims: "9 x 13 x 2 in" (length x width x depth), "9 x 2 in" (round: diameter x depth), a list or a dict; or the named fields diameter, or length and width, plus depth. dims_unit: in (inches, default), cm, mm, m. Measurements are INSIDE, rim to inside floor. For slanted walls add bottom_diameter (or bottom_length and bottom_width, never wider than the rim); profile cylinder|frustum|cap is inferred (bowl: "cap"). Bundt/tube: tube_diameter (approximate). Outside sizes need wall_thickness. corner_radius is optional. Returns summary (quote it), vessel (pass to kitchen_scale_recipe), capacity (L, mL, cups, quarts, brimful), fill_guidance, preset {source, verified, how resolved} and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | No | ||
| depth | No | ||
| shape | No | ||
| width | No | ||
| length | No | ||
| preset | No | ||
| profile | No | ||
| diameter | No | ||
| dims_unit | No | in | |
| bottom_width | No | ||
| bottom_length | No | ||
| corner_radius | No | ||
| tube_diameter | No | ||
| wall_thickness | No | ||
| bottom_diameter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: measurements are INSIDE rim-to-floor, outside sizes require wall_thickness, slant needs bottom_* bounded by the rim, unknown names return candidates, and it states the preset resolution fields (resolved_to, match exact|alias|parsed|default|fuzzy) plus warnings. It also identifies the downstream consumer (kitchen_scale_recipe).
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 and the either/or rule before the detail; the length is justified by 15 undocumented parameters. Some phrasing is instructional filler ('tell the user', 'quote it'), but overall every line carries usable semantics.
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-annotation, 15-param, 0%-schema-coverage tool, this covers input modes, units, geometry conventions and the returned fields. Since an output schema exists, the return list is a bonus rather than a necessity, making the definition complete enough to invoke 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 0% across 15 params, so the description must compensate and largely does: it documents dims string/array/dict forms with ordering, named fields (diameter, length, width + depth), dims_unit values, bottom_*/tube_diameter/wall_thickness/corner_radius, and profile cylinder|frustum|cap semantics. Only 'shape' goes unmentioned, which is a minor gap.
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 — 'Build a vessel and its capacity' — plus the two input modes ('a standard pan name or typed dimensions'). The phrase 'no photo, always works' implicitly separates it from a photo-based sibling like kitchen_measure_vessel, so an agent can route 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?
Explicitly states the input-mode rule: 'Pass EITHER preset OR dimensions (both is an error)', and gives abundant concrete preset and dims examples so the agent knows what to supply. It stops short of naming the photo-based alternative it contrasts against, so the routing is implied ('no photo') rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_depth_infoA
Check what a photo or depth file contains BEFORE measuring from it.
path: HEIC/HEIF, TIFF, 16-bit PNG, NPZ, JPEG, or a capture-app bundle (folder or .zip). Returns summary (quote it), info {kind, has_depth, depth_size [w, h], accuracy absolute|relative, source, intrinsics_origin, valid_fraction, warnings}, advice and capabilities {monocular_depth, heic, usd}. accuracy "relative" needs a reference object; intrinsics_origin "assumed" means the camera field of view is a guess (every size is then capped at low confidence with a wide +/-). A file with no depth is a plain photo: see advice for the options.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it discloses supported input formats and, crucially, the semantics of accuracy='relative' (needs a reference object) and intrinsics_origin='assumed' (FOV is a guess, sizes capped at low confidence with wide +/-). This is genuine behavioral context. It does not cover permissions or rate limits, but those are not relevant to a local file inspection 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 purpose is front-loaded in the first sentence, with format details and field semantics following. It is dense but every clause adds information; the only mild redundancy is restating the output fields that 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?
An output schema exists (so return values needn't be spelled out) yet the description still enumerates the returned fields and explains the ambiguous ones, which makes it complete for an agent deciding whether to trust the file before measuring. The duplicated field listing is the only minor inefficiency.
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% and the single 'path' param is undocumented in the schema, so the description must compensate. It does so by listing exactly what path accepts (HEIC/HEIF, TIFF, 16-bit PNG, NPZ, JPEG, or a capture-app bundle passed as a folder or .zip), which is the key ambiguity for this 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 and resource: 'Check what a photo or depth file contains BEFORE measuring from it.' It clearly distinguishes itself from the measure_* siblings as a pre-flight inspection step, and it enumerates supported formats (HEIC/HEIF, TIFF, 16-bit PNG, NPZ, JPEG, capture-app bundle).
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?
'BEFORE measuring from it' gives explicit timing guidance that places this tool upstream of the measurement tools, and 'A file with no depth is a plain photo: see advice for the options' tells the agent how to proceed in the degenerate case. It stops short of naming specific sibling tools to switch to, so it is context-rich but not fully explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_distance_between_pointsA
Straight-line distance between two pixels of a depth capture (a doorway width, a shelf gap).
path: LiDAR/Portrait HEIC, capture bundle or metric depth file (TIFF, 16-bit PNG in mm, NPZ). point_a and point_b: [x, y] in PHOTO pixels (depth-map pixels when there is no photo). rgb_path: optional original photo (EXIF gives the focal length). reference: see measure_list_reference_objects; with a plain photo the two points must lie on the reference's surface. units: metric|imperial|both. Returns summary (quote it), confidence, measurements [distance] (+/- about 95%), warnings. A depth file without camera intrinsics is capped at low with a wide +/-. Glass, mirrors and black surfaces have no depth (NO_DEPTH_AT_POINT): pick a nearby matte point. Points under 3 cm apart are within the noise.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| units | No | both | |
| point_a | Yes | ||
| point_b | Yes | ||
| rgb_path | No | ||
| reference | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the return shape (summary, confidence, measurements, warnings), an accuracy caveat (depth file without intrinsics capped at low with wide +/-), a failure mode (glass/mirror/black surfaces yield NO_DEPTH_AT_POINT), and a precision floor (points under 3 cm are within noise). Only auth/rate-limit style context is absent, which is largely irrelevant for a read-only measurement.
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 purpose statement followed by compact parameter notes and then return/edge-case behavior. Dense but every clause carries distinct, useful information; 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?
For a six-parameter tool with no annotations and 0% schema coverage, the description covers inputs, coordinate semantics, formats, failure modes, accuracy caveats, and return hints. An output schema exists so return values need not be elaborated, yet the brief mention is a bonus rather than 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 description coverage is 0%, so the description must compensate and it does: it documents all six parameters, including accepted path formats (LiDAR/Portrait HEIC, bundle, TIFF, 16-bit PNG mm, NPZ), that point_a/point_b are [x, y] in photo pixels, that rgb_path supplies EXIF focal length, and that units accepts metric|imperial|both.
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 ('Straight-line distance between two pixels of a depth capture') and even grounds it with examples ('a doorway width, a shelf gap'). The scope is unambiguous, but no sibling tool is named to differentiate it from measure_object or room_check_doorway.
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 through the input context ('depth-map pixels when there is no photo', 'with a plain photo the two points must lie on the reference's surface') and it routes the reference parameter to measure_list_reference_objects. However, it never explicitly states when to choose this tool over alternatives like measure_object, so guidance remains inferential rather than directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_find_filesA
List recent measurable files on this computer, newest first, with what each contains.
When the user says "this photo" or "the scan I just took" in chat you have NO file path: ask them to save it to ~/measure-mcp-inbox (or AirDrop it to Downloads), then call this tool and use the path it returns. folder: look only there (direct children, no recursion); default: $MEASURE_MCP_INBOX, ~/Downloads, ~/Desktop, ~/measure-mcp-inbox. limit: 1-100 (default 20). Finds HEIC/HEIF, JPEG, depth TIFF/PNG/NPZ, capture .zip or folders, PLY/OBJ/USDZ and RoomPlan/scan JSON. Each file: path, size_bytes, modified, age, kind, has_depth (+ depth_size, accuracy, source, intrinsics), can_measure_with. Returns summary, files, searched.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and largely meets it: it discloses the default search directories, that folder lookup is direct children with no recursion, the limit range, and the recognized file formats plus returned depth metadata. It does not explicitly confirm read-only/non-mutating status or mention any failure modes, leaving a small gap for an annotation-free 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?
Purpose is front-loaded, followed by the usage scenario, parameter notes, formats, and return fields — a logical progression. It is dense but each line earns its place; the final return-value sentence slightly overlaps the existing output schema, and the paragraph flow is a touch unconventional, keeping it at 4 rather than 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?
For a two-parameter, zero-required discovery tool with an output schema, the description is fully sufficient: it covers what it finds, where it searches, how to use it when no path exists, parameter behavior, and recognized formats. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does fully. It explains folder semantics ('look only there, direct children, no recursion') with concrete defaults, and limit semantics ('1-100, default 20'), covering both parameters beyond what the bare schema provides.
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 clearly: 'List recent measurable files on this computer, newest first, with what each contains.' An agent immediately knows this is a file-discovery tool. It does not, however, name or contrast itself against discovery-adjacent siblings like measure_open_capture or measure_depth_info, so it lands at 4 rather than 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?
Provides an explicit, concrete usage scenario: when the user references 'this photo' or 'the scan I just took' with no file path, ask them to save to ~/measure-mcp-inbox or AirDrop to Downloads, then call this tool. This tells the agent both when to invoke it and what preparatory step to take, which is unusually actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_list_reference_objectsA
List everyday objects of known size (credit_card, us_quarter, us_letter, a4, half_sheet_pan, dollar_bill)
that give a photo a metric scale, and how to pass one as reference.
Lay it flat on the same surface as the thing measured, fully visible, then pass reference={"type": key, "corners": [[x,y] x4 in photo pixels, clockwise from top-left]} (discs: "bbox"). Needed for relative depth; it also fixes a guessed field of view, and measures a flat object's footprint in a plain photo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose non-obvious traits: the disc vs. card corner convention ('discs: bbox'), the clockwise-from-top-left ordering, and the downstream effects on depth, field of view, and footprint measurement. It is a read-only listing call with no parameters, so little risk remains undisclosed.
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 with no filler; the enumerated keys are front-loaded so an agent immediately learns what the tool returns. The middle sentence is dense with inline JSON and a parenthetical, which slightly slows parsing 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?
For a zero-parameter listing tool with an output schema and full schema description coverage, the description covers everything an agent needs: what the list contains, where the physical object must be placed, and why the reference is required. Return-value details are correctly left to the output 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?
This tool takes zero parameters, so the baseline is 4. The description goes further by documenting the shape of the `reference` argument the returned keys feed into (type plus four pixel corners, or bbox for discs), which is genuinely useful context even though it technically belongs to a sibling tool's 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 and resource ('List everyday objects of known size') and enumerates the exact keys returned (credit_card, us_quarter, us_letter, a4, half_sheet_pan, dollar_bill). The purpose — supplying a metric scale reference for measurement tools — is unambiguous and clearly distinct from siblings like measure_object or measure_depth_info.
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 states when the returned reference matters ('Needed for relative depth; it also fixes a guessed field of view, and measures a flat object's footprint in a plain photo') and gives the physical precondition ('lay it flat on the same surface ... fully visible'). It does not name alternative sibling tools or when a reference is unnecessary, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_objectA
Size (length, width, height) of one object standing on a flat surface, from a depth capture or 3D scan.
path: LiDAR/Portrait HEIC, capture bundle (folder or .zip), a metric depth file (TIFF, 16-bit PNG in mm,
NPZ), or a 3D scan: a Scaniverse, Polycam or 3D Scanner App OBJ or PLY export (a .zip holding the .obj plus
its .mtl and texture is fine). A scan must show the object standing on a table; the object is the one
nearest the middle, as a gravity-aligned box, and rgb_path, bbox, point and reference do not apply to it. The
file's units and up axis are detected and reported in the result's scan block; if they are wrong or
ambiguous pass scan_units (m|cm|mm|in: what the FILE is written in, units="cm" works as an alias) and
up_axis (x|y|z, signs ok). rgb_path: optional original photo (its EXIF gives the focal length; its pixels
are the coordinates for bbox and point). bbox [x0, y0, x1, y1] or point [x, y]: PHOTO pixels (depth-map
pixels when there is no photo) to pick the object. reference {"type": "credit_card", "corners": [[x,y] x4]} (see
measure_list_reference_objects) rescales relative depth and fixes a guessed field of view. units:
metric|imperial|both.
Returns summary (quote it), confidence (worst of the edges, the same rule fba_measure_package uses),
measurements longest/middle/shortest_edge (+/- about 95%) and bounding_box_volume (the enclosing box, NOT a
vessel's capacity: use kitchen_measure_vessel for that), quality, warnings. Never "high" for relative or
monocular depth or for a file without camera intrinsics (those are "low"), nor for a scan whose units had to
be guessed (check scan.units_source). Under 1.5 cm is unreliable.
Plain photo with no depth: pass bbox around a FLAT object plus a rectangular reference lying flush beside it
and you get its footprint (length x width, no heights, no install needed).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| path | Yes | ||
| point | No | ||
| units | No | both | |
| up_axis | No | auto | |
| rgb_path | No | ||
| reference | No | ||
| scan_units | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full behavioral burden and does so: it reports where units/up-axis detection results land (scan block), how confidence is computed (worst of the edges, same rule as fba_measure_package), the grading rules (never 'high' for relative/monocular depth or missing intrinsics), and a hard reliability floor (under 1.5 cm is unreliable). It also warns that the scan 'nearest the middle' is selected and that rgb_path/bbox/point/reference do not apply to scans.
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 one-line purpose, then flows into dense, mostly run-on prose. Given eight undocumented params the length is justified, but there is no bulleted structure to scan and the closing summary of return fields partly duplicates the existing 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?
Covers the acceptance surface (file types), unit/axis overrides, coordinate frames for bbox/point, the reference-based rescaling path, accuracy caveats, and the flat-object fallback — everything needed to call it correctly. Return-value detail is redundant given the output schema but is accurate.
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%, so the description must document all 8 params and largely does: scan_units (m|cm|mm|in with the units alias), up_axis (x|y|z, signs allowed), rgb_path (EXIF focal length; pixels are the bbox/point coordinate frame), bbox/point formats and pixel basis, units (metric|imperial|both), and reference (type credit_card with 4 corners). This meaning is entirely absent from 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 and resource ('Size (length, width, height) of one object standing on a flat surface') plus the input domain (depth capture or 3D scan). It actively distinguishes itself from siblings, explicitly routing vessel-capacity questions to kitchen_measure_vessel and reference setup to measure_list_reference_objects.
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/when-not guidance across every branch: which file formats qualify (LiDAR/HEIC, bundle, TIFF/16-bit PNG/NPZ, Scaniverse/Polycam/3D Scanner App OBJ/PLY), when to override scan_units/up_axis, when rgb_path/bbox/point/reference apply, and the flat-photo fallback with a rectangular reference. It names alternatives for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_open_captureA
Describe a capture bundle from the measure-mcp iOS app (a folder or .zip): depth.tiff, confidence, colour image and a capture.json sidecar with intrinsics, pose and device.
Returns summary (quote it), depth_size, source (lidar), accuracy, valid_fraction, depth_range_m, intrinsics. Pass the same path to kitchen_measure_vessel, measure_object, measure_distance_between_points to measure.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full load. It discloses the return fields (summary, depth_size, source=lidar, accuracy, valid_fraction, depth_range_m, intrinsics), which tells the agent what the operation yields. However it omits mutation/read-only framing, error behavior for an invalid path, and any permission or size constraints, leaving real gaps.
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 core action and file inventory, then the pipeline instruction. The field list is dense but each item is informative; nothing reads as 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?
An output schema exists, so detailed return-value documentation is technically not required, yet the description still front-loads the key outputs. Combined with the downstream-tool instruction, an agent has enough to call this correctly as the pipeline opener.
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% and there is one param, but the description adds meaning beyond the bare 'path' string: the bundle may be 'a folder or .zip' and the same path is reused by downstream measurement tools. That clarifies accepted input forms and lifecycle usage, which 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?
States a specific verb+resource: 'Describe a capture bundle from the measure-mcp iOS app (a folder or .zip)', and enumerates the bundle contents (depth.tiff, confidence, colour image, capture.json). It doesn't explicitly differentiate itself from siblings like measure_depth_info or measure_find_files, but the workflow framing implies it's the entry-point 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?
Gives clear contextual routing: 'Pass the same path to kitchen_measure_vessel, measure_object, measure_distance_between_points to measure.' This positions it as the first step of a measurement pipeline. No explicit when-not-to-use or comparison against measure_depth_info/measure_find_files, 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.
moving_cube_sheet_lookupA
Look up how many cubic feet (and pounds) the movers' cube sheet assigns to an item, with sources.
Use this to answer "why 50 cu ft for my sofa?" or to find the right catalog name before building an inventory. Accepts names, aliases, plurals, small typos and size hints ("55 inch tv", "18 cu ft fridge"). Each match lists the value, the range across published sheets, alternative values, the weight at the movers' 7 lb per cu ft rule, and whether the row was re-verified against its source. Never includes prices.
| Name | Required | Description | Default |
|---|---|---|---|
| room | No | ||
| limit | No | ||
| query | Yes | ||
| units | No | both |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden, and it discloses notable behavioral traits: accepted query variants (aliases, plurals, typos, size hints), what each match contains (value, cross-sheet range, alternatives, 7 lb/cu ft weighted value, re-verification status), and an explicit exclusion ('never includes prices'). It stops short of covering performance, limits, or confirmation behavior, but for a read-style lookup this is solid.
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?
Well front-loaded: purpose first, then usage triggers, then accepted input, then output shape, ending on a terse exclusion. Every sentence adds information, though it runs a little long and could tighten the output enumeration now that an output schema exists.
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 lookup tool with an output schema present, the description needn't restate return values yet does so usefully, and it covers purpose, usage, and input flexibility. The main gap is undocumented non-query parameters, which no other structured field fills.
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% across 4 parameters, so the description must compensate. It does so thoroughly for the required 'query' parameter, explaining accepted input forms, but leaves 'room', 'limit', and 'units' (which has an enum) completely undocumented in both schema and 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?
States a precise verb and resource: 'look up how many cubic feet (and pounds) the movers' cube sheet assigns to an item'. The scope (cube-sheet reference values, not estimates) is clear enough to separate it from the moving_estimate_* siblings. An agent can tell this is a catalog lookup, not a computation.
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 two concrete usage contexts ('why 50 cu ft for my sofa?' and 'find the right catalog name before building an inventory'), which is richer than generic context. However it names no explicit alternative or when-not-to-use condition relative to the many moving_* 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.
moving_data_infoB
Report the versions, as-of dates, source URLs, verified/unverified row counts and staleness warnings of the moving data files (cube sheet, trucks, containers, storage units).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the substance of the response (versions, dates, URLs, verified/unverified counts, staleness warnings) plus the set of files covered. It says nothing about authentication, refresh cadence, or failure behavior, so it is informative but not complete for a no-annotation 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?
A single front-loaded sentence with no filler; the enumerations are dense but each item is substantive output detail rather than padding.
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 reporting tool with an output schema present, the description covers what the tool is about and what it returns; return-value specifics are legitimately left to the output schema. Only the when-to-use dimension is thin.
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 per the rubric the baseline is 4; there is no parameter surface that the description could clarify or neglect.
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 pairs a specific verb ('Report') with a clearly scoped resource ('the moving data files') and enumerates the exact fields reported (versions, as-of dates, source URLs, row counts, staleness warnings). This implicitly distinguishes it from the FBA/measure/room siblings by domain, but it never names an alternative the way a top-tier definition would.
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 such as moving_cube_sheet_lookup or the estimate tools; the data-provenance use case is only inferable from the field list. 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.
moving_estimate_from_inventoryA
Estimate the volume (cu ft / m3) and weight of a move from a list of belongings.
Give inventory_text (one block or a list of lines) such as "queen bed, 3-seat sofa, 20 medium boxes",
and/or structured items. Text understands quantities ("3x", "two", "a dozen"), plurals, small typos,
"Bedroom:" headers and notes in parentheses. Items it cannot match are returned in unresolved and are NOT
in the total; assumed sizes are listed in needs_review: ask the user about them rather than hiding them.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| units | No | both | |
| detail | No | summary | |
| default_room | No | Unassigned | |
| inventory_text | No | ||
| include_recommendations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does real work: it discloses that unmatched items land in 'unresolved' and are excluded from the total, and that assumed sizes surface in 'needs_review' with an instruction to ask the user. That is exactly the kind of behavioral disclosure that prevents a silently wrong estimate. It does not describe determinism or stability of the estimate, and the unresolved/needs_review guarantees are the only failure modes covered.
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?
Roughly four sentences, front-loaded with the outcome (volume and weight), then input format, then edge-case behavior. The parenthetical examples ('3x', 'two', 'a dozen', 'Bedroom:') are dense but each one illustrates a distinct parsing capability rather than padding.
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 output schema covers return values, so the unresolved/needs_review mention is bonus context rather than a required gap-fill, and a pure estimator needs no auth or rate-limit disclosure. The remaining gap is the four undescribed input parameters — for a six-parameter tool with 0% schema coverage, an agent cannot confidently set units, detail, or include_recommendations from this description alone.
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% across six parameters, so the description must compensate, and it only covers two of them: inventory_text (accepted as one block or a list of lines, with quantity/plural/typo/'Bedroom:' header handling spelled out) and items (structured alternative). units, detail, default_room, and include_recommendations — two of which are enums with non-obvious behavioral consequences — receive no explanation at all.
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 with concrete output metrics: 'Estimate the volume (cu ft / m3) and weight of a move from a list of belongings.' The 'from a list of belongings' framing implicitly separates it from moving_estimate_from_scan and moving_estimate_object, but no sibling is named outright, so an agent must infer the boundary rather than read it.
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 tells the agent what to supply ('Give inventory_text ... and/or structured items') and gives one operating instruction ('ask the user about them rather than hiding them'), which implies the right context. It never states when to prefer this tool over the sibling estimators or what input shape rules out the alternatives, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_estimate_from_scanA
Estimate a move from a RoomPlan room scan (JSON export, USDZ, or a PLY/OBJ the room tools can load).
Pass path (one merged scan) or paths (one file per room). Scanned furniture (sofa, bed, table,
storage, appliances...) is mapped to cube-sheet sizes; built-in fixtures (sink, toilet, bathtub, built-in
cabinets) are excluded unless fixture_policy="include_all". IMPORTANT: a scan only sees large furniture, so
boxes, clothes, books and kitchenware are missing: read coverage_warning, ask the user about boxes, and pass
them as extra_items (same item format as moving_estimate_from_inventory) or use contents_allowance. Ambiguous
objects appear in needs_review. A raw point cloud or mesh has no furniture labels: the result then says
no_furniture_recognised and asks for a RoomPlan export or an inventory list instead of a number.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| paths | No | ||
| units | No | both | |
| detail | No | summary | |
| room_names | No | ||
| extra_items | No | ||
| size_method | No | catalog_first | |
| fixture_policy | No | exclude_builtins | |
| contents_allowance | No | none | |
| include_recommendations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and meets it: it discloses mapping behavior (furniture to cube-sheet sizes), fixture exclusion semantics, the `coverage_warning`/`needs_review` signals, and the critical failure mode that a raw point cloud yields `no_furniture_recognised` rather than a number. These are behavioral traits no structured field conveys.
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 every sentence carries operational content, with caps used to flag the IMPORTANT caveat. It is dense but not padded; a mild readability hit from packing the middle into one long block.
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 not be spelled out, yet the description still names key response fields and edge-case outcomes. Combined with input guidance and failure-mode coverage, it is nearly complete for a 10-parameter tool, with only several parameter meanings 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 0%, so the description must compensate. It clarifies `path` vs `paths`, the `fixture_policy="include_all"` value, and that `extra_items` uses the same format as moving_estimate_from_inventory, but leaves `units`, `detail`, `room_names`, `size_method`, and `include_recommendations` unexplained across 10 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 first sentence states a specific verb and resource ('Estimate a move from a RoomPlan room scan') and names the accepted input formats. This clearly separates it from inventory-based siblings such as moving_estimate_from_inventory without needing to open 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?
It gives concrete routing guidance: use `path` for one merged scan vs `paths` for one file per room, and points to `extra_items`/`contents_allowance` as fallbacks when small items are missing. However it stops short of an explicit 'use moving_estimate_from_inventory instead when...' rule, leaving the sibling choice partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_estimate_objectA
Volume of one oddly shaped object from measured size, ready to add to an inventory.
Give dims ("36 x 72 x 12 in", [36, 72, 12] with dims_unit, or {length,width,height}; any order, default
unit inches, no edge over 10 m) or path to a depth capture of the object on a surface, or a 3D scan export
of it (a Scaniverse, Polycam or 3D Scanner App OBJ or PLY; a .zip holding the .obj, .mtl and texture is fine;
the object is the one nearest the middle of the scan). For a scan the file's units and up axis are detected
and reported in the notes; if that is wrong, pass scan_units (m|cm|mm|in: what the FILE is written in;
Scaniverse writes meters) and up_axis (x|y|z, signs ok). The moving volume
is the bounding box times a 0.75 fill factor, with a plus/minus; this is a loose envelope, so confidence is
usually low-to-medium. Returns inventory_item to pass in moving_estimate_from_inventory(items=[...]) or
moving_estimate_from_scan(extra_items=[...]), plus a comparison with the cube-sheet value when the name matches.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | No | ||
| name | Yes | ||
| path | No | ||
| room | No | ||
| units | No | both | |
| up_axis | No | auto | |
| dims_unit | No | in | |
| reference | No | ||
| scan_units | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers substantial behavioral context: the 0.75 bounding-box fill factor, the resulting low-to-medium confidence, auto-detection/reporting of scan units and up axis, supported formats (Scaniverse/Polycam/3D Scanner App OBJ/PLY, zipped OBJ+MTL), and how the target object is picked ('nearest the middle of the scan'). It omits any error/precedence behavior when both dims and path are supplied.
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 walks input formats, unit handling, fill-factor math and return plumbing with no filler sentences. It is dense prose without formatting for a 9-param tool, but nearly every clause carries information the agent needs.
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 not be spelled out, and the description still summarizes them usefully. For a 9-parameter, 0%-coverage tool with three near-name siblings, though, the gaps around name/room/units/reference and the missing explicit sibling routing leave the agent under-informed for edge cases.
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% across 9 params, so the description must compensate; it does well for the hard ones (dims accepted shapes and 10 m edge limit, path formats, scan_units semantics, up_axis signs). However it says nothing about name (the sole required param), room, units, or reference, so about half the parameters remain opaque.
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+scope: 'Volume of one oddly shaped object from measured size'. An agent can tell this is the single-object estimator versus the bulk siblings moving_estimate_from_inventory and moving_estimate_from_scan. Sibling differentiation is only implied through the input description, not stated outright.
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?
Describes the input pathways (dims, depth-capture path, or 3D scan export) and where the result flows next (inventory_item for moving_estimate_from_inventory/from_scan). It never states when to prefer this tool over the two moving-estimate siblings or when it is inappropriate, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_export_inventoryA
Turn an estimate into a printable or shareable inventory list for movers, insurance or storage.
Pass estimate_id from moving_estimate_* (or the full dict from detail='full'). html has print CSS
(open in a browser, Save as PDF); markdown, csv and json come back inline in content when
small. Files are only written into the server's output folder (MEASURE_MCP_OUTPUT_DIR, default
~/measure-mcp-output): output_name is a plain file name (no folders; the extension follows format),
an existing file is never overwritten, and the result's path says where it went. The output lists
unmatched and excluded items under "Not counted" and carries a not-a-quote disclaimer.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Moving inventory | |
| format | No | html | |
| estimate | No | ||
| group_by | No | room | |
| estimate_id | No | ||
| output_name | No | ||
| include_weights | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it explains that html carries print CSS, markdown/csv/json return inline when small, files only land in MEASURE_MCP_OUTPUT_DIR, output_name cannot contain folders and never overwrites, the result's ``path`` records the location, and the output includes a "Not counted" section plus a not-a-quote disclaimer.
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 in the first sentence and every subsequent sentence adds operational detail rather than filler. The dense backtick-laden middle is information-rich, though it could be trimmed slightly.
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 7-param export tool with an output schema, the description covers the important behavioral surface (formats, file handling, non-overwrite, output path, caveats). The remaining gap is undocumented behavior for group_by, title, and include_weights.
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 0% schema coverage the description must compensate, and it explains estimate_id, the estimate dict, the four format behaviors, and the output_name constraints (plain file name, extension follows format). It leaves title, group_by, and include_weights entirely undocumented, so coverage is substantial but incomplete.
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: turns an estimate into a printable/shareable inventory list. The direction (estimate -> inventory list) inherently distinguishes it from the sibling moving_estimate_from_inventory, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on how to feed the tool: pass ``estimate_id`` from moving_estimate_* or the full dict from detail='full'. However it never states when NOT to use this tool or explicitly contrasts it with moving_estimate_from_inventory, so guidance stops short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_recommend_containerA
Pick portable moving containers (PODS 8/12/16 ft, U-Haul U-Box) for a load, by volume AND weight limit.
Containers have hard weight limits that dense loads (books, tools) can hit before the volume is full;
weight_binding says when weight, not volume, decides the count. Returns a plan such as
[{"container_id": "pods.16ft", "count": 1}] per family. PODS capacities come from third-party sources
(marked unverified): confirm with the provider. Input as in moving_recommend_truck. No prices.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | both | |
| weight | No | ||
| estimate | No | ||
| families | No | ||
| weight_lb | No | ||
| efficiency | No | ||
| estimate_id | No | ||
| volume_cuft | No | ||
| weight_unit | No | lb | |
| box_fraction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it explains hard weight limits for dense loads, the weight_binding flag semantics, the returned plan shape, and a data-provenance caveat (PODS capacities unverified, confirm with provider) plus 'No prices'. Only lacks finer caveats like error/edge 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-loads purpose, then adds behavior and caveats in tight sentences with a concrete return example. Slightly dense but every sentence adds information; nothing is redundant.
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 needn't be explained (it explains them anyway). But for a 10-parameter tool with no annotations and 0% schema coverage, the description leaves the input contract substantially undocumented, deferring to a 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?
Schema description coverage is 0% across 10 parameters, and the description documents none of them directly, deferring entirely to 'Input as in moving_recommend_truck'. The weight/volume phrasing hints at some fields but leaves parameters like estimate, estimate_id, efficiency, box_fraction, and families unexplained.
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?
Specific verb ('Pick') plus concrete resource ('portable moving containers (PODS 8/12/16 ft, U-Haul U-Box)') for a load, scoped by volume AND weight. It is clearly distinguishable from siblings like moving_recommend_truck and moving_recommend_storage 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?
Frames the context (choosing containers for a load, with a weight-binding caveat) and points to 'Input as in moving_recommend_truck', but never states explicitly when to choose this over the truck/storage recommenders. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_recommend_storageB
Pick a self-storage unit size (5x5 up to 10x30) for a load, leaving an access aisle.
Unit volume is floor area times ceiling height (8 ft is typical; pass ceiling_ft if the facility differs). Usable space is 0.65-0.80 of that (packing efficiency minus 0.05 for an aisle). Also reports the next smaller unit and how much would not fit, and two-unit combinations. Input as in moving_recommend_truck. No prices.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | both | |
| estimate | No | ||
| ceiling_ft | No | ||
| efficiency | No | ||
| estimate_id | No | ||
| volume_cuft | No | ||
| box_fraction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: the sizing algorithm (floor area × ceiling height), the 0.65-0.80 usable fraction with the aisle adjustment, and that it additionally reports the next smaller unit and two-unit combinations. It does not mention permissions or error conditions, but for a computation-only tool those are minor.
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 sized reasonably for the amount of computational context needed. The volume/usable-space sentence is dense but 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?
An output schema exists, so return values needn't be detailed, and the description usefully previews the smaller-unit and two-unit outputs. However, for a 7-parameter tool with 0% schema coverage and no annotations, deferring most parameter meaning to moving_recommend_truck leaves the definition under-complete on its own.
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% across 7 parameters, so the description must compensate and only partly does. It explains ceiling_ft (8 ft typical) and efficiency (0.65-0.80), but leaves units, estimate, estimate_id, volume_cuft, and box_fraction entirely unexplained, defaulting to 'Input as in moving_recommend_truck' which gives no local 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: pick a self-storage unit size (5x5 up to 10x30) for a load. An agent can distinguish it from siblings like moving_recommend_truck or moving_recommend_container. It doesn't explicitly say why you'd choose storage over truck/container, but the resource 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?
There is no explicit when-to-use or when-not-to-use guidance. 'Input as in moving_recommend_truck' points to an input-format reference in a sibling, but that is not a usage condition. No prerequisites or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moving_recommend_truckA
Pick the smallest rental truck or van (U-Haul, Penske, Budget) for a load, by volume AND payload.
Pass estimate_id (or the dict) from moving_estimate_*, or bare volume_cuft / weight / box_fraction (not
both an estimate and volume_cuft). Loads never fill a truck completely, so the required capacity is volume
divided by a packing efficiency of 0.70-0.85 (more boxes pack tighter; override with efficiency).
size_range shows whether the answer holds across the estimate's error. Capacities are provider-published
approximations. U-Haul does not publish payloads here: for those vehicles the summary says "payload not
published; weight not checked", the load is only compared with similar-sized trucks, and a vehicle with a
published payload is offered as known_payload_alternative. (weight_lb is a deprecated alias of weight.)
No prices.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | both | |
| weight | No | ||
| estimate | No | ||
| providers | No | ||
| weight_lb | No | ||
| efficiency | No | ||
| estimate_id | No | ||
| volume_cuft | No | ||
| weight_unit | No | lb | |
| box_fraction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the packing-efficiency model (0.70-0.85, override via efficiency), that U-Haul payloads are unpublished so weight is not checked and a known_payload_alternative is offered, that capacities are approximations, and that no prices are returned. It stops short of stating read-only/non-mutating behavior explicitly, but the operation is clearly a computation.
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 purpose in the first sentence, then layers constraints and special cases. Dense but every clause (input modes, efficiency, U-Haul caveat, deprecated alias, no prices) adds real 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?
Returns are covered by the output schema, and the description still flags noteworthy output behavior (size_range, known_payload_alternative, 'payload not published' summary). Mutually exclusive inputs and unit ambiguity via schema are addressed; only the undocumented units/providers/weight_unit parameters keep 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 coverage is 0% across 10 parameters, so the description must compensate. It explains estimate_id, estimate, volume_cuft, weight, box_fraction, efficiency, and the weight_lb alias, but leaves units, weight_unit, and providers undocumented in either place. Useful but incomplete against the coverage gap.
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 ('Pick the smallest rental truck or van for a load, by volume AND payload') and names the providers considered. It is clearly distinguishable from siblings like moving_recommend_container or moving_recommend_storage.
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 states the accepted input modes ('Pass estimate_id (or the dict) from moving_estimate_*, or bare volume_cuft / weight / box_fraction') and the mutual exclusion ('not both an estimate and volume_cuft'), which routes the agent correctly. It does not, however, say when to choose this tool over moving_recommend_container, leaving sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_check_doorwayA
Can this item go through that door or open passage? Tests a rigid box through the clear opening, turning it any way it can go.
dims as in room_check_fit but all three sizes are needed: "84 x 37 x 34 in", [84, 37, 34] with dims_unit, or
{"name": "sofa", "width": 84, "depth": 37, "height": 34, "unit": "in", "diagonal_depth": 31, "leg_height": 6}. Real sofas are not
boxes: give diagonal_depth (top-back corner to bottom-front corner of the frame, the figure movers use) when known, and
leg_height if the legs unscrew. opening_id is a door or open passage from room_list_openings; WINDOWS ARE REFUSED
(error NOT_A_DOORWAY, which lists the valid door/opening ids). Open passages (no door leaf) get no leaf allowance, and
unidentified gaps (gap_unknown) are tested with lowered confidence and a note. door_state: "as_is"/"leaf_open_90" (leaf swung
back; it still takes door_intrusion_m, default 4 cm) or "removed" (off the hinges). allow_roll lets the item tilt about
its travel axis; allow_legs_removed removes the legs first. Returns the verdict, margin, best way through, alternatives, and
what would help (remove the door, remove legs). The approach path and turns are not evaluated; near zero margin the answer is
"tight": measure the door. load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| dims_unit | No | ||
| item_name | No | ||
| allow_roll | No | ||
| door_state | No | as_is | |
| opening_id | Yes | ||
| load_options | No | ||
| door_intrusion_m | No | ||
| allow_legs_removed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so richly: it names the NOT_A_DOORWAY error and what it contains, explains the lower-confidence behavior for gap_unknown, that open passages get no leaf allowance, the default door_intrusion_m of 4 cm, the 'tight' verdict near zero margin, and explicitly excludes approach path and turns from evaluation.
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 core question is front-loaded in sentence one, and given 12 parameters and zero schema coverage the length is largely justified. It is dense and reads as a wall of text, but sentences earn their place by disambiguating parameters and edge cases.
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 analysis tool with an output schema, the description supplies the operating model, error behavior, and limitation scope an agent needs. Remaining gaps are the unexplained required `path` and the units/detail toggles.
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?
At 0% schema coverage the description must compensate and largely does: it gives three concrete dims formats, dims_unit, opening_id provenance, door_state semantics, door_intrusion_m default, allow_roll, and allow_legs_removed, plus load_options. However the required `path` parameter and the units/detail/item_name params are never explained, leaving real 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 opening question — 'Can this item go through that door or open passage?' followed by 'Tests a rigid box through the clear opening, turning it any way it can go' — states a specific verb, resource, and method. It is clearly distinguishable from the sibling room_check_fit (which it references for the dims format) 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?
It tells the agent where opening_id comes from (room_list_openings), that windows are refused, and what edge cases mean. There is clear usage context but no explicit statement of when to prefer room_check_fit over this tool, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_check_fitA
Will this item fit? Checks an item's footprint against a wall's free run or the whole room and returns a verdict with margin.
dims is the item size, width x depth x height (width = longest front-facing side, depth = front to back): a string such as
"84 x 37 x 34 in", "60x30 in" (height unknown), "2.1 x 0.95 x 0.9 m"; a list such as [84, 37, 34] with dims_unit (default
inches, and the reply says so); or an object like {"name": "sofa", "width": 84, "depth": 37, "height": 34, "unit": "in"}
({"length", "width", "height"} is read as width = length, depth = width). item_name labels it.
target: a wall, "room" (default; finds spots), or {"type": "region", "x": 0, "y": 0, "width": 2, "depth": 1} in room meters.
A wall is an id ("wall_1", or {"type": "wall", "id": "wall_1"}) or words: "longest wall", "shortest wall", "wall with the door",
"wall with the window", "wall behind the sofa" / "sofa wall" (the wall nearest that object category or id), and
"north/south/east/west wall" ONLY when the scan defines an orientation (see room_load_scan north_deg). An unclear
reference returns an error whose hint lists every wall with its id, length and what is on it (room_list_walls shows the same
labels). clearance: "none", "walkway" (76 cm / 30 in in front), "comfortable" (91 cm / 36 in), or
{"front_m": 0.76, "side_m": 0, "back_gap_m": 0.02}.
It respects doors, door swings, windows (windows warn/block/ignore) and existing furniture; list furniture the user will remove
(or the scan's own copy of the item, e.g. the sofa being replaced) in ignore_objects (ids or a comma list): when the thing
blocking a wall looks like the item itself, the reply says so. verdict is fits / tight / probably_not / does_not_fit from margin
divided by the scan's uncertainty; a 1 cm margin on a drifty scan is "tight", never "fits". Returns placements with footprints (pass
one to room_floor_plan_svg). max_results is 1-10. detail summary|full. load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | Yes | ||
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| target | No | ||
| windows | No | warn | |
| clearance | No | none | |
| dims_unit | No | ||
| item_name | No | ||
| max_results | No | ||
| load_options | No | ||
| rotations_deg | No | ||
| ignore_objects | No | ||
| respect_door_swing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it explains that verdict (fits/tight/probably_not/does_not_fit) is margin divided by scan uncertainty, that a 1 cm margin on a drifty scan is 'tight, never fits', that it respects doors, swings, windows and existing furniture, and that ambiguous references return an error hinting all walls with ids and lengths. It also flags the self-blocking case and the return of placements with footprints.
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 question and purpose before any parameter detail, and nearly every sentence carries usable information. It is long and parenthetical-heavy, which costs some scannability, but no sentence 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 14-parameter spatial computation tool with an output schema, the description covers the decision logic (verdict thresholds, orientation-gated references), the edge cases (ignored objects, self-blocking, error hints) and which sibling to reach for on follow-up. Only the unexplained path/units/rotations_deg/respect_door_swing parameters keep it short of perfect.
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, and it does for most parameters: three accepted dims formats with unit conventions, dims_unit default, item_name, target (wall ids, natural-language wall references, region objects), clearance presets and object form, windows policy, ignore_objects, max_results 1-10, detail summary|full, and delegation of load_options to room_summary. However, path, units, rotations_deg and respect_door_swing are never explained anywhere.
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 concrete question ('Will this item fit?') and states the exact operation: checking an item's footprint against a wall's free run or the whole room, returning a verdict with margin. This cleanly separates it from sibling checks such as room_check_doorway and from measurement/listing tools like room_list_walls.
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 conditional guidance: when compass-wall references are valid ('ONLY when the scan defines an orientation'), what happens on an unclear reference, and when to list items in ignore_objects. It cross-references room_load_scan, room_list_walls, room_summary and room_floor_plan_svg, but never states explicit when-not conditions versus room_check_doorway.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_floor_plan_svgA
Draw the room as a floor plan SVG: walls with dimension lines, doors with swing arcs, windows, furniture, and optionally a proposed item.
Pass placement (one entry of placements from room_check_fit, with an optional "verdict" key to color it) to draw the item;
dims / item_name only supply its label. Dimensions are written in the requested units. The SVG is ALWAYS saved into
the server's output folder (MEASURE_MCP_OUTPUT_DIR, default ~/measure-mcp-output) as output_name (a plain file name; folders in
it are dropped and .svg is enforced, default "floor_plan") and the reply gives path. The svg text is also returned
inline when it is under about 30 KB, otherwise only the path and a note. All labels are sanitized and escaped.
load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | No | ||
| path | Yes | ||
| units | No | both | |
| px_per_m | No | ||
| dims_unit | No | ||
| item_name | No | ||
| placement | No | ||
| output_name | No | ||
| show_labels | No | ||
| load_options | No | ||
| show_dimensions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the persistent side effect (SVG ALWAYS written to MEASURE_MCP_OUTPUT_DIR with the exact default path), filename sanitization (folders stripped, .svg enforced, default 'floor_plan'), the reply shape (path, plus inline svg only under ~30 KB), and label escaping. These are exactly the behavioral traits an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what is drawn, then parameter semantics, then output/side-effect behavior — a logical order with no filler sentences. It is dense and slightly long, but each sentence (placement provenance, filename rules, size threshold) conveys actionable 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?
For an 11-parameter, no-annotation tool this is substantially complete, and the existence of an output schema means return values need not be repeated. Remaining gaps are the required 'path' argument and the rendering booleans (show_labels, show_dimensions, px_per_m), which an agent must guess at.
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 there are 11 parameters, so the description must compensate. It meaningfully explains placement (source and optional 'verdict' key), dims/item_name (label-only), units (dimensions written in requested units), output_name (sanitization and default), and load_options. It leaves path (required!), px_per_m, dims_unit, show_labels, and show_dimensions unaddressed, so coverage is strong but incomplete.
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 ('Draw the room as a floor plan SVG') and enumerates exactly what is rendered (walls with dimension lines, doors with swing arcs, windows, furniture, optional item), which separates it from sibling exporters like room_summary. An agent can identify its output artifact 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?
Gives clear integration context: 'placement' should be one entry of 'placements' from room_check_fit, and load_options behaves 'as in room_summary'. This routes the agent from the fitting/check step to the rendering step. It lacks explicit when-not guidance or a named alternative renderer, 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.
room_list_objectsA
List furniture and appliances found in the scan with category, size (width x depth x height), footprint, height off the floor and nearest wall.
RoomPlan scans carry Apple categories (sofa, table, bed, storage, refrigerator, ...); raw point clouds give unknown.
Filter by category (case-insensitive). Long listings are capped (detail="full" for all). load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| category | No | ||
| load_options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description still carries useful behavior beyond the schema: category provenance (Apple categories on RoomPlan scans vs 'unknown' on raw point clouds), case-insensitive filtering, and the important capping rule with detail="full" escalating to a complete list. It omits any statement of read-only/side-effect profile, but 'List' implies it.
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 in the first sentence, with behavioral caveats following in compact sentences. Dense but each clause earns its place; slight clutter from the parenthetical category examples.
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 not be re-explained, and the description is sufficiently complete for a bounded listing tool. The main gap is units and path semantics, which remain undocumented given 0% schema coverage.
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%, so the description must compensate. It adds real meaning for category (case-insensitive filter) and detail (full vs capped), and cross-references load_options to room_summary, but says nothing about units or path, leaving half the parameters to be inferred from enum values 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 (List) and resource (furniture and appliances found in the scan) and enumerates the returned attributes. It is trivially distinguishable from siblings like room_list_walls and room_list_openings, which list different resources.
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 description notes filtering, capping, and that load_options works 'as in room_summary', but never states when to reach for this tool versus room_summary, room_load_scan, or measure_object. An agent can infer the context but gets no explicit when/when-not or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_list_openingsA
List doors, windows and open passages with width, height, sill and head height, wall, position and swing side.
Filter by kind (door, window, opening, gap_unknown) or wall_id, which takes a wall id or words:
"longest wall", "wall with the door", "wall behind the sofa" (see room_check_fit). Door sizes from RoomPlan may be the leaf
size rather than the clear opening, so measure a tight door with a tape. Only door, opening and gap_unknown
entries can be used with room_check_doorway. load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| wall_id | No | ||
| load_options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers a genuinely useful caveat: RoomPlan door sizes may be leaf size rather than clear opening, so tight doors should be tape-measured. It also discloses the downstream compatibility rule for check_doorway. It does not state permissions or output scope, but for an obvious read-only list tool that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the return content in sentence one, then filters and caveats. Every sentence carries information (filters, cross-tool constraint, measurement warning). The mid-sentence parenthetical '(see room_check_fit)' and the run-on filter sentence make it slightly denser than ideal.
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 instead spends its space on the things structured data cannot carry: the door-size caveat, the natural-language wall_id behavior, and the check_doorway compatibility rule. 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 description coverage is 0%, so the description must compensate, and it does for the two non-obvious parameters: ''kind'' enumerates all four valid values, and ''wall_id'' is revealed to accept natural-language phrases ('longest wall', 'wall behind the sofa') with examples, which the schema cannot convey. ''load_options'' is delegated to room_summary; ''path'', ''units'' and ''detail'' are left to self-explanatory enums, so it is strong but not fully compensating.
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 ('List doors, windows and open passages') and immediately enumerates the returned attributes (width, height, sill, head height, wall, position, swing side), so an agent knows exactly what this returns versus room_list_walls or room_list_objects. The scope is unambiguous 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?
Gives concrete filtering guidance ('filter by kind or wall_id') and a real cross-tool constraint: only door/opening/gap_unknown entries are usable with room_check_doorway. It points to room_check_fit for natural-language wall references. It never states when NOT to use this tool (e.g. use room_list_walls for wall geometry), 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.
room_list_wallsA
List the walls with a plain-language label (id, length, what is on it), length, height, direction, free segments between doors/openings, and what stands along them.
free_segments leave out door and opening spans (plus a 5 cm jamb margin); windows do not cut a wall
because they only limit height. min_free_length_m hides walls whose longest free run is shorter (meters).
Use this to find a wall for a bed, sofa or bookcase and to map "the wall behind the sofa" to an id. u0/u1 are
distances in meters along the wall from its start; inward_normal points into the room. Long listings are capped
(detail="full" for all). load_options as in room_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| load_options | No | ||
| min_free_length_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real data-model behavior: free_segments exclude door/opening spans with a 5 cm jamb margin, windows do not cut a wall, min_free_length_m filters by longest free run, and long listings are capped. It omits any read-only/permission framing, but for a room-scan query that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is listed, then layered with the free-segment rules and the filter parameter. It is dense and slightly long, but nearly every sentence encodes a non-obvious rule, 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?
For a moderately complex listing tool with an output schema and no annotations, it covers the field semantics, the filtering parameter, and the free-segment computation rules, which is enough for correct invocation. The only gaps are the undocumented units/path parameters and no explicit safety framing.
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 and it largely does: min_free_length_m is explained precisely (hides walls whose longest free run is shorter), detail's "full" behavior is noted, and load_options is cross-referenced to room_summary. The units and path parameters are left unexplained, though units is self-evident from its enum.
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 precise verb and resource ("List the walls") and enumerates exactly what each entry carries (label, id, length, height, direction, free segments, objects along the wall). This clearly differentiates it from siblings like room_list_openings and room_list_objects, since it is scoped to walls specifically.
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 concrete use cases: "find a wall for a bed, sofa or bookcase" and "map 'the wall behind the sofa' to an id." That is strong context, but it names no alternative tool or when-not condition (e.g., vs. room_list_openings or room_summary).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_load_scanA
Read a room scan and report what was found (walls, doors, windows, objects, size, detected units and up axis).
path is the scan file. Supported: RoomPlan CapturedRoom JSON (several encodings) and measure-room JSON;
USD/USDZ (RoomPlan export or any labeled scene; needs pip install measure-mcp[usd]); PLY and OBJ point clouds or
meshes, whose floor, ceiling, walls, door/window gaps and furniture are recovered geometrically. Units
(m, cm, mm, in, ft) and the up axis are detected from the geometry, never trusted from file metadata; pass
scan_units / up_axis only to override. known_dimension calibrates the scale from one tape value:
{"target": "ceiling_height" | "wall:wall_1", "length": 2.44, "unit": "m"}. north_deg says which way north points in
the room plan (degrees counter-clockwise from the plan +x axis, the frame of start/end in room_list_walls) and
enables "north wall" style references; scans that carry no compass cannot resolve them.
STATELESS: no option is remembered. The reply's load_options holds the non-default options used; pass that object as
load_options to the other room_* tools (they load path again, cached) when it is not empty.
Raw scans are less precise than RoomPlan; every result carries a +/- and a confidence. Corrupt or empty files give an
error with a code and hint.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| units | No | both | |
| format | No | auto | |
| up_axis | No | auto | |
| north_deg | No | ||
| scan_units | No | auto | |
| known_dimension | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that units and up-axis are detected from geometry and 'never trusted from file metadata', that raw scans are less precise and carry +/- and confidence, that corrupt/empty files return an error with a code and hint, and that no option is remembered. These are exactly the behavioral traits structured fields do not 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?
Long but dense and front-loaded: purpose first, then path, then per-parameter guidance, then a STATELESS block and caveats. Most sentences earn their place, though the format-support sentence is somewhat sprawling 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?
An output schema exists, so return values need not be re-explained, and the description covers the remaining complexity for a 7-parameter loader: detection heuristics, override vs auto semantics, calibration, error behavior, and cross-tool handoff. Nothing essential an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it explains most parameters: path, scan_units/up_axis as overrides, north_deg with its frame convention, and known_dimension with a concrete object shape. The supported-format prose implicitly maps the format enum. The 'units' parameter (metric/imperial/both) is never explained, leaving one gap.
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 ('Read a room scan') and enumerates exactly what it reports (walls, doors, windows, objects, size, detected units and up axis). It also situates itself relative to siblings by naming room_list_walls and referring to 'the other room_* tools', so an agent can tell it is the loader rather than a query 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?
Gives clear operational context: pass scan_units/up_axis 'only to override', use known_dimension to calibrate, and note that scans with no compass cannot resolve 'north wall' references. The STATELESS note tells the agent to carry load_options forward to other room_* tools. It stops short of an explicit when-to-use/when-not statement versus room_summary or the other room_* readers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_summaryA
Overall size of the room: footprint shape and vertices, floor area, ceiling height, volume, wall lengths, openings and objects.
path is the scan file. Each measurement has a value, a +/- (about 95%), a confidence and a display string
in the requested units. The summary field is a sentence that can be quoted as is. Every wall has a label such as
"wall_3: 4.20 m, has door_1 (door), with sofa obj_1". detail="full" adds measurement names and sources and lifts the
list caps. load_options: the object returned by room_load_scan, only if it was non-empty (nothing is remembered).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| units | No | both | |
| detail | No | summary | |
| load_options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that each measurement carries a value, ~95% tolerance, confidence and display string, that detail="full" adds names/sources and lifts list caps, and that nothing is remembered across calls. Return-format detail is partially redundant with the output schema, keeping it below 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?
The primary purpose is front-loaded in the first sentence, followed by dense but informative parameter and output notes. Some output-format detail overlaps the existing output schema, which is minor waste, but nothing is padded.
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 4-parameter tool with an output schema and no annotations, the description covers inputs, output shape and cross-tool state (room_load_scan) thoroughly enough to call it correctly. The only shortfall is the absence of selection guidance relative to the many 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?
Schema coverage is 0%, so the description must compensate, and it does: path is the scan file, units drives the display string, detail="full" expands measurement metadata and lifts caps, and load_options is defined as room_load_scan's non-empty return object. All four parameters get meaning beyond their bare titles, though enum values are not individually unpacked.
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 opener states a specific resource and enumerates what the summary contains: footprint shape and vertices, floor area, ceiling height, volume, wall lengths, openings and objects. An agent can grasp what it returns without opening the schema. It does not, however, explicitly distinguish itself from siblings like room_list_walls or room_list_openings.
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 explicit when-to-use/when-not statement or named alternative. Usage is only implied, mainly through the conditional note that load_options should be passed only if room_load_scan returned a non-empty object, which hints at the intended workflow but not at 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.
34 tool updates
v0.1.0- First observed
fba_analyze - First observed
fba_audit_listing - First observed
fba_data_status - First observed
fba_draft_remeasure_request - First observed
fba_fee_estimate - First observed
fba_measure_package - First observed
fba_size_tier - First observed
fba_tier_headroom - First observed
kitchen_measure_vessel - First observed
kitchen_scale_recipe - First observed
kitchen_vessel_from_dimensions - First observed
measure_depth_info - First observed
measure_distance_between_points - First observed
measure_find_files - First observed
measure_list_reference_objects - First observed
measure_object - First observed
measure_open_capture - First observed
moving_cube_sheet_lookup - First observed
moving_data_info - First observed
moving_estimate_from_inventory - First observed
moving_estimate_from_scan - First observed
moving_estimate_object - First observed
moving_export_inventory - First observed
moving_recommend_container - First observed
moving_recommend_storage - First observed
moving_recommend_truck - First observed
room_check_doorway - First observed
room_check_fit - First observed
room_floor_plan_svg - First observed
room_list_objects - First observed
room_list_openings - First observed
room_list_walls - First observed
room_load_scan - First observed
room_summary
TDQS
Scored across 34 tools
Domains are cleanly separated by prefix (measure/kitchen/room/fba/moving) and most tools target a distinct input or resource. The main overlap is the FBA cluster, where fba_analyze is explicitly the one-call version of fba_size_tier/fba_fee_estimate/fba_tier_headroom; the descriptions admit this and guide tool selection, which keeps ambiguity manageable rather than confusing.
Strong, predictable domain-prefix + verb_noun convention (measure_object, room_list_walls, kitchen_scale_recipe, moving_estimate_from_inventory, fba_size_tier). A few bare-noun outliers (room_summary, fba_data_status, moving_data_info) and info/analyze names deviate slightly, but overall the pattern is readable and consistent.
34 tools is heavy for a single server and sits above the comfortable 3-15 range. It is partly justified because five genuinely distinct domains (measurement, kitchen, room, FBA, moving) are bundled, but the redundant FBA tier/fee/headroom-versus-analyze cluster suggests some bloat rather than each tool earning a unique slot.
Every domain has full lifecycle coverage: measurement (info, object, distance, references, capture, file discovery), kitchen (measure/from-dims/scale), room (load, summary, walls, openings, objects, fit, doorway, floor plan), FBA (analyze, tier, fee, headroom, package measure, audit, remeasure draft, data status), and moving (lookup, three estimators, truck/container/storage, export, data info). No obvious dead ends.
Related MCP Connectors
Construction takeoff and estimating for AI agents. Measure a drawing PDF, export a priced estimate.
Room planning to scale from your AI: it places furniture, Roomproof checks walkways and door swings.
60+ units, live FX, timezones, and date arithmetic for AI agents.
Scraps Kitchen gives any AI agent a persistent, household-aware kitchen memory. Unlike generic chatbot recall, Scraps maintains structured cooking data: what's in your fridge (with freshness tracking), who you cook for (with allergens, dietary restrictions, and preferences), your recipe collection (with cook notes and per-diner ratings), your shopping list, and your kitchen equipment. 27 tools across 6 domains let agents read kitchen context, suggest meals that respect dietary safety, update the pantry after cooking, and build a history of what works for your household. Every interaction makes the data richer. Cooking history, preference signals, kitchen awareness = better suggestions next time. All tools work via oAuth and a free scraps.kitchen account.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceVerified unit conversion and dimensional analysis for AI agents. 190+ units, 31 domain formulas (clinical, physics, aerospace, SRE), physical constants with uncertainty propagation. Refuses invalid conversions structurally: the tool that won't convert mg to mL and knows the difference between torque and energy.AGPL 3.0
- FlicenseNot gradedqualityBmaintenanceEnables agents to ground and compare visual specifications by calculating physical dimensions and degrees of freedom from multimodal inputs.8-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to compare visual specifications and calculate physical dimensions and degrees of freedom from multimodal inputs.7-
- AlicenseAqualityBmaintenanceEnables multimodal AI to convert photos with reference objects into parametric OpenSCAD models and watertight 3D-printable STL files, including calibration, part generation, and printability inspection.47MIT