Skip to main content
Glama

MarketCode

Server Details

UK property intelligence with evidence behind the numbers.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.4/5.0

Scored across 99 tools

Disambiguation2/5

The surface contains many overlapping tools with subtly different scopes: valuation_estimate, valuation_full, property_summary, property_report, comps_adjustments, property_comps, and valuation_comparables all answer related valuation questions. Search/lookup/query tools and ownership/network tools also create multiple plausible routes, so an agent can easily misselect despite lengthy descriptions.

Naming Consistency3/5

Almost all names use snake_case, which is consistent, but the action convention is mixed: some are verb_noun (search_entities, resolve addresses via address_resolve), many are noun phrases (property_summary, actor_network), and verbs vary between lookup, search, query, ask, and get-style semantics. The set remains readable but not predictable.

Tool Count1/5

Ninety-nine tools is far beyond an appropriate count for a coherent tool set and creates a large selection burden. Many tools are near-duplicates, report composites, batch variants, or narrow slices of the same domain, so the count is not justified by distinct capabilities alone.

Completeness4/5

The surface is very comprehensive for a read-only UK property intelligence API: address resolution, property records, valuation, comparables, planning, risk, ownership, auctions, market indices, and sourcing are all covered. Only minor gaps and partial batch coverage keep it from being fully complete, and write operations are not expected for this domain.

Available Tools

99 tools
actor_networkCorporate ownership networkA
Read-onlyIdempotent
Inspect

Investigate recorded corporate ownership, title and agency relationships. Requires the customer's account; never use an anonymous preview key. Depth 1–3, at most 100 nodes; clipped networks explicitly say truncated. Cite publication IDs and provenance on each hop. Missing links are not negative findings. Individuals are excluded. An unpublished root costs no credits. Costs 15 credits (15p).

NameRequiredDescriptionDefault
kindYes
depthNo
limitNo
entity_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: depth bounds 1–3, a 100-node cap, explicit truncation signalling on clipped networks, exclusion of individuals, credit cost, and the fact that an unpublished root is free. These are exactly the operational facts an agent cannot infer from structured fields.

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

Conciseness4/5

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

Telegraphic and front-loaded: purpose first, then access constraint, then operational limits, then caveats and cost — every clause carries information and none is redundant. The 'Costs 15 credits (15p)' phrasing is slightly compressed but still parseable.

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

Completeness4/5

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

For a graph-traversal tool with an output schema, the description covers the decisions an agent must make — auth, depth, node cap, truncation interpretation, cost, and the trap of reading absent links as negatives. The remaining hole is the meaning and output shape of each 'kind' value, which the schema leaves undocumented.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden and only partly meets it: it bounds 'depth' to 1–3 and implies the 100-node ceiling that binds 'limit'. It says nothing about the seven enum values of 'kind' (organizations, titles, agents, properties, buildings, land, listings) or the expected form of 'entity_id', which are the two required parameters.

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

Purpose4/5

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

States a specific verb ('Investigate') and resource scope ('recorded corporate ownership, title and agency relationships'), which is far more than a restatement of the name. It does not, however, distinguish itself from close siblings such as actor_path or entity_relationships, so an agent must infer the split.

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

Usage Guidelines3/5

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

Gives a hard usage constraint ('Requires the customer's account; never use an anonymous preview key') and implicit scope limits ('Individuals are excluded'), which is genuine when-not guidance. It never names an alternative tool or explains when to prefer a path/reachability lookup over a network expansion, leaving the sibling choice to inference.

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

actor_pathRecorded corporate connection pathB
Read-onlyIdempotent
Inspect

Find a recorded path between two corporate-network records within three hops. Requires the customer's account. A clipped search returns incomplete, never a claim that no relationship exists. Return the ordered hops with their source/publication evidence. Costs 15 credits (15p).

NameRequiredDescriptionDefault
depthNo
limitNo
source_idYes
target_idYes
source_kindYes
target_kindYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description adds value beyond them: a 15-credit cost, the caveat that a clipped/truncated search yields incomplete results rather than proof of no relationship, and the shape of the return (ordered hops plus evidence). It does not explain what triggers clipping or how limits interact with cost.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries information: scope, prerequisite, caveat, return shape, cost. Slightly dense but no filler.

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

Completeness3/5

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

An output schema exists, so return details need not be spelled out, and the cost/account/clipping signals are helpful. But for a 6-parameter, 0%-coverage tool with a configurable depth that may exceed the stated three hops, the description leaves too much of the invocation surface unexplained.

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

Parameters2/5

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

Schema description coverage is 0% across 6 parameters, so the description must compensate and largely does not. "Within three hops" loosely maps to depth, but source_kind/source_id/target_kind/target_id and especially limit are never explained (what limit bounds, whether depth is capped, how the enum kinds combine).

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

Purpose4/5

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

States a specific verb and resource: finds a recorded path between two corporate-network records, bounded by hop count. It is clear what the tool returns (ordered hops with source/publication evidence). It does not name the closest siblings (actor_network, entity_relationships), so differentiation is left to inference.

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

Usage Guidelines3/5

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

"Requires the customer's account" gives a real prerequisite, and the note about clipped searches warns against over-reading results. However, there is no explicit when-to-use versus actor_network or entity_relationships, and no statement of when not to use this costly tool.

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

address_autocompleteAutocomplete a UK addressA
Read-onlyIdempotent
Inspect
Address autocomplete. Returns ranked candidates for a partial address or
postcode. Use `address_resolve` to turn a candidate into a canonical UPRN.

This is the free entry point: resolve, lookup and postcode listing are
priced because they return OS AddressBase content, but narrowing a search
is not. Prefer it for anything interactive, and resolve once at the end.

UK only. Free.
NameRequiredDescriptionDefault
qYes
countryNoUK
max_resultsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world), so the description's added value is the pricing model (free vs priced OS AddressBase-backed siblings) and the UK-only geographic scope. These are genuinely useful behaviors not in the annotations, though pagination/rate behavior is left unstated.

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

Conciseness4/5

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

Front-loaded purpose in the first sentence, then routing and pricing in short scannable blocks. Slightly padding with the closing 'UK only. Free.' fragments that restate earlier points, but nothing significant is wasted.

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

Completeness4/5

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

An output schema exists, so return shape need not be described, and annotations cover safety. The description supplies scope, pricing, and sibling routing, leaving only parameter details thin — a minor gap for a low-complexity single-required-param search tool.

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

Parameters2/5

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

Schema description coverage is 0% for three parameters, so the description must compensate. It only partially does: 'partial address or postcode' hints at the q input format and 'UK only' implicitly bounds country, but max_results is never explained and no value ranges or defaults are given.

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

Purpose5/5

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

States a specific verb and resource ('Returns ranked candidates for a partial address or postcode') and immediately distinguishes itself from address_resolve by naming what that sibling does instead. An agent can tell it apart from address_by_postcode/address_by_uprn without opening a schema.

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

Usage Guidelines5/5

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

Explicit routing: use address_resolve to canonicalize a candidate, and 'Prefer it for anything interactive, and resolve once at the end' gives a clear when-to-use pattern. It also names when competitors are preferred (priced lookups vs free narrowing).

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

address_by_postcodeList the addresses at a postcodeB
Read-onlyIdempotent
Inspect

Return all addresses at a UK postcode. Costs 2 credits (2p); free on marketcode.ai.

NameRequiredDescriptionDefault
postcodeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful context beyond that: the cost model (2 credits / 2p, free on marketcode.ai). It does not disclose any cap on the number of addresses returned for large postcodes, nor behavior when the postcode is unknown or non-UK.

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

Conciseness5/5

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

Two short sentences, each earning its place: the first defines the operation and scope, the second discloses cost. Front-loaded and free of filler.

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

Completeness3/5

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

An output schema exists and annotations cover the safety profile, so the description needn't restate return values. However, for a bulk-lookup tool it should mention practical limits (how many addresses are returned, whether there is pagination/truncation) and accepted postcode formatting, which are the main failure modes an agent would hit.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden for the single required parameter. It only asserts 'UK postcode', which essentially restates the parameter name 'Postcode' — no guidance on case, spacing, or whether outward codes alone are accepted. It does not compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb+resource+scope: 'Return all addresses at a UK postcode.' The 'at a UK postcode' qualifier implicitly distinguishes it from address_by_uprn (addresses for one property) and address_autocomplete (partial string lookup), though no sibling is named.

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

Usage Guidelines3/5

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

The usage is implied by the purpose statement — you call this when you already have a full postcode and want the addresses on it. But nothing states when to prefer address_by_uprn, when to use address_autocomplete to resolve a partial postcode first, or what to do if the postcode is invalid. Adequate but leaves routing to inference.

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

address_by_uprnLook up an address by UPRNA
Read-onlyIdempotent
Inspect

Look up an address by UPRN (UK only). Costs 1 credit (1p); free on marketcode.ai. Keyed on a UPRN, not an address: call address_autocomplete (free) to narrow, then address_resolve to get one.

NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful operational context beyond the annotations: cost (1 credit / 1p), free access on marketcode.ai, and the UK-only constraint.

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

Conciseness5/5

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

The description is short and front-loaded: purpose, scope, cost, then the key usage distinction/alternative workflow. There is no wasted text.

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

Completeness5/5

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

For a simple one-parameter read-only lookup with an output schema and rich annotations, the description covers the important missing context: cost, geography, UPRN keying, and the alternative lookup path.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the burden. It does add meaning by clarifying that the key is a UPRN rather than an address and by pointing to `address_resolve` as a way to obtain one, though it does not give an example format or range.

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

Purpose5/5

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

The description states a specific verb and resource: look up an address by UPRN. It adds scope ('UK only') and distinguishes this from address-based lookup by saying it is 'Keyed on a UPRN, not an address.'

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

Usage Guidelines5/5

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

It explicitly tells the agent what to do when it does not already have a UPRN: use `address_autocomplete` to narrow and then `address_resolve` to obtain one. It also names the relevant alternative tools directly.

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

address_resolveResolve an address to a UPRNB
Read-onlyIdempotent
Inspect

Resolve free-text address to canonical record (UPRN for UK). Costs 2 credits (2p); free on marketcode.ai.

NameRequiredDescriptionDefault
queryYes
countryNoUK
max_resultsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false. The description adds useful behavioral context about cost (2 credits / 2p, free on marketcode.ai), which is not in annotations, but it does not discuss return behavior or rate limits.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with a compact cost note. Every clause carries useful information and there is no filler.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, for a three-parameter tool the description omits usage guidance and parameter semantics, especially the optional country and max_results fields, making it only minimally complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only implies the required query parameter via 'free-text address' and says nothing about the optional country or max_results parameters, leaving two of three parameters unexplained.

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

Purpose4/5

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

The description states a specific verb and resource: resolve free-text address to a canonical record, naming UPRN as the UK output. It is clear what the tool does, but it does not distinguish itself from close siblings like address_autocomplete or address_by_postcode.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives such as address_autocomplete or address_by_uprn. It mentions cost, but not decision context or prerequisites.

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

agent_activityEstate agent activity in an areaA
Read-onlyIdempotent
Inspect
Which estate agents actually transact in an area, ranked by listing count.

Sale and rental are counted and averaged SEPARATELY — an asking price and a
monthly rent do not combine into one median, so read `median_asking_price`
and `median_monthly_rent` as answering different questions.

`area_id` is the marts area id from `area_resolve`.

UK only. Free.
NameRequiredDescriptionDefault
limitNo
monthsNo
area_idYes
listing_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety bar is lower. The description adds a genuinely non-obvious behavioral trait — sale and rental are aggregated separately, so median_asking_price and median_monthly_rent answer different questions — plus UK-only scope. That is real context beyond the structured fields.

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

Conciseness5/5

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

Front-loads the purpose in the first line, then adds the two nuances an agent would otherwise get wrong, then closes with scope constraints. No filler sentences.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description pre-empts a likely misreading of the two median fields. It is nearly complete for a simple read-only lookup; the only gap is meaning for the limit/months controls.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden. It explains area_id's provenance well and the sale/rental distinction loosely maps to listing_type, but limit and months are left entirely undocumented. Partial compensation, so it lands at the minimum-viable baseline.

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

Purpose5/5

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

States a specific verb and resource: 'Which estate agents actually transact in an area, ranked by listing count.' The output ordering is even declared, which is unusual and helpful. This is distinguishable from siblings like market_ranking or actor_network without opening a schema.

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

Usage Guidelines3/5

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

It implies the prerequisite for area_id ('the marts area id from area_resolve') and scopes to 'UK only. Free.', which is useful context. But it never says when to reach for this versus alternatives (market_ranking, area_report), nor any exclusions — 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.

area_reportOne composed document for an areaA
Read-onlyIdempotent
Inspect
The market for one area, as one document: sourcing readiness per strategy
from the coverage register, the commercial capital and rent indices with
rated stock, the planning decision record for the authority, and the live
listing stock.

THE TWO SCOPES ARE NOT INTERCHANGEABLE. Readiness, commercial stock and the
planning register are keyed on the LOCAL AUTHORITY (`lad_code`, a GSS code
— use `area_resolve` to get one); the live listing lane is keyed on
POSTCODE DISTRICT. Pass both to fill every section, and expect the
unsupplied half to read `not_available` with that reason rather than empty.

As with `property_report`, check `sections_degraded` before describing the
document as complete.
UK only. Costs 25 credits (25p).
NameRequiredDescriptionDefault
sectorNoALL
lad_codeNo
postcode_districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely useful context: UK-only scope, a 25-credit cost, and the degradation/`not_available` semantics. It stops short of describing section structure or output shape, but the output schema covers that.

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

Conciseness4/5

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

Front-loads the one-document purpose, then the critical scope warning in caps, then operational notes. Slightly dense but each sentence carries non-obvious information; the caps warning earns its emphasis.

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

Completeness5/5

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

Covers scopes, keying, degradation behavior, cost, and geography, and an output schema covers return structure. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

With 0% schema coverage the description must carry the parameters, and it thoroughly explains `lad_code` (a GSS code, local-authority keyed) and `postcode_district` (live-listing keyed). `sector` (default ALL) is left unexplained, a minor gap against otherwise strong param guidance.

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

Purpose5/5

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

States a specific verb and resource: composes a single market document for one area, enumerating its sections (readiness, commercial capital/rent indices, planning record, live listings). It explicitly differentiates from `property_report` and points to `area_resolve` for keying, so an agent can tell it apart from single-lane siblings.

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

Usage Guidelines5/5

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

Explicit about the two non-interchangeable scopes (LAD code vs postcode district), tells the agent to pass both to fill every section, and explains what happens when one is omitted (`not_available`). It also directs checking `sections_degraded` and names `area_resolve` as the way to obtain a `lad_code`.

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

area_resolveResolve an area nameA
Read-onlyIdempotent
Inspect
Resolve an area name or code ("Hackney", "E5") to its area_id, centroid
and full hierarchy as breadcrumbs. Call this first when a question is
about a named area rather than a specific address.
UK only. Free.
NameRequiredDescriptionDefault
area_nameYes
include_h3No
h3_resolutionNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds scope and cost context not present anywhere else: 'UK only. Free.' It also previews the return shape. No failure modes or rate limits are mentioned, so not a 5.

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

Conciseness5/5

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

Three short sentences, zero filler, with the core capability and the routing rule front-loaded before the scope/cost note. Every sentence carries information.

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

Completeness4/5

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

The description covers purpose, routing, geography scope, cost, and an output preview, and an output schema exists so return values need not be restated. The remaining omission is guidance on the optional H3 parameters, which are undocumented in both schema and prose.

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

Parameters2/5

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

Schema description coverage is 0% and the description never addresses include_h3 or h3_resolution — an agent cannot tell what H3 output is or when to enable it. Only the required area_name is given indirect meaning via the examples 'Hackney' and 'E5'.

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

Purpose5/5

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

States a concrete verb (resolve) plus the resource and the exact outputs (area_id, centroid, hierarchy breadcrumbs), with an input example ('Hackney', 'E5'). This clearly separates it from address_resolve and area_reverse_geocode, which key off addresses or coordinates rather than names.

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

Usage Guidelines4/5

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

'Call this first when a question is about a named area rather than a specific address' gives an explicit entry-point rule and implicitly contrasts with the address-based siblings. It does not name an alternative tool outright or state when-not to use it, so it falls short of a 5.

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

area_reverse_geocodeArea containing a coordinateA
Read-onlyIdempotent
Inspect
The area of a given type containing a coordinate. `type_id` is an area
type UUID and is required — a point sits inside one area per geography
layer, so without it the answer would be ambiguous.
UK only. Free.
NameRequiredDescriptionDefault
latYes
lngYes
type_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds genuinely non-structured context: geographic coverage is UK only, the call is free, and it explains why type_id is required (one area per geography layer, otherwise ambiguous). That is meaningful beyond the annotations.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core operation, then the required-parameter rationale, then scope/cost. No filler.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description covers scope, cost, and the key required param; the only minor gap is that it doesn't hint where an agent obtains a valid type_id.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load. It thoroughly explains the non-obvious parameter, type_id (an area type UUID, required, and why), which is the one that would otherwise confuse an agent; lat/lng are conventional and need no elaboration.

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

Purpose4/5

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

States a specific verb+resource: it returns the area of a given type that contains a coordinate, which is a distinct operation from siblings like area_resolve or area_report. It is clear what the tool does, though it does not explicitly contrast itself against any named sibling.

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

Usage Guidelines3/5

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

The description implies the use case (you have a lat/lng and want the containing area) and adds scope constraints (UK only, free), but it names no alternative tool and gives no explicit when-to-use/when-not guidance versus area_resolve or parcel_lookup.

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

area_stock_profileBuilt-stock profile of an areaA
Read-onlyIdempotent
Inspect
Composition of the built stock in an area: unit counts, HMO share,
mixed-use share, median building height and footprint, solar penetration.

Medians, not means — one tower would skew an average height enough to make
a low-rise district read as mid-rise. Percentages are whole percentages.

`area_id` is the marts area id from `area_resolve`.

UK only. Free.
NameRequiredDescriptionDefault
area_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuine value beyond them: medians rather than means and why (skew from towers), whole-percentage output, and 'Free'. Return format is covered by the existing output schema.

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

Conciseness4/5

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

Front-loaded with the metric list, then a short methodology note and scope flags; every sentence earns its place. The median aside is slightly conversational but justifies a real methodological choice, so waste is minimal.

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

Completeness5/5

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

With annotations covering safety, an output schema covering return values, and the description covering metric content, methodology, parameter provenance, and geographic scope, an agent has everything needed to select and call this tool correctly.

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

Parameters4/5

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

Schema description coverage is 0% for the single parameter, so the description must compensate, and it does: 'area_id is the marts area id from area_resolve' tells the agent both the identifier space and how to obtain a valid value. It could specify format more exactly, but the provenance is the key missing piece and is supplied.

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

Purpose5/5

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

States a specific resource (composition of built stock in an area) and enumerates the exact metrics returned: unit counts, HMO share, mixed-use share, median height/footprint, solar penetration. This enumeration is enough to distinguish it from siblings like area_report or market_profile without opening any schema.

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

Usage Guidelines4/5

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

The description gives clear prerequisites and scope: area_id comes from area_resolve, and the tool is UK-only. It does not, however, name an explicit alternative or state when not to use it (e.g., versus area_report or energy_profile), so it falls 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.

asking_price_index_seriesAsking-price index (portal listings)A
Read-onlyIdempotent
Inspect
Hedonic ASKING-PRICE index for one postcode district, local authority or
Great Britain, from portal listings (Rightmove ~95%), 2022M01 = 100, with
80% bands and posterior standard errors, smoothed toward the parent
geography.

Use this for "how have asking prices in W14 moved since 2022" or to see
whether sellers are ahead of or behind the sold-price index
(market_index_series). Asking LEADS sold by months and includes what never
sells; `value` is an index level, never a price. For asking-price LEVELS
use listing_market_series.

`area_code` is a postcode district ("W14") with area_type="district", a
local authority NAME ("Camden") with area_type="lad", or "NATIONAL". An
unknown area is an error naming the nearest matches; read them back.

READ provenance.pub_freq: the pipeline judged which grain this area's data
can resolve (posterior SE of the monthly move <= 1 pp). If it says
quarterly, prefer frequency="quarterly" and say the monthly series is
noisy. `inc_se_pp` on each point is the SE of that period's move. Free.
NameRequiredDescriptionDefault
endNo
limitNo
startNo
methodNohedonic_smoothed
area_codeNoNATIONAL
area_typeNodistrict
frequencyNomonthly

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: unknown areas raise an error naming nearest matches (and should be read back), provenance.pub_freq reveals the grain the pipeline judged resolvable, and inc_se_pp carries the per-period standard error of the move. It also notes the series is smoothed toward the parent geography and is free to call.

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

Conciseness4/5

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

Front-loaded with the definition, base period and source, then the routing contrast, then argument semantics, then the provenance caveat. Dense and largely waste-free, though the three-paragraph shape is longer than strictly necessary and the trailing 'Free.' adds little.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the annotations cover the safety profile. The description supplies addressing rules, the sold-vs-asking distinction, and the provenance/frequency caveat; only the method parameter and date/limit semantics are left uncovered.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does so thoroughly for area_code/area_type ('W14'+district, 'Camden'+lad, or NATIONAL) and partially for frequency via provenance.pub_freq. However it says nothing about the method enum (hedonic_smoothed vs hedonic_raw), start, end, or limit, leaving four of seven parameters to be inferred.

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

Purpose5/5

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

States a specific verb+resource (hedonic ASKING-PRICE index) with its scope (postcode district, local authority, or Great Britain), its source (portal listings, Rightmove ~95%), its base (2022M01 = 100), and its output semantics ('value' is an index level, never a price). It explicitly distinguishes itself from the sold-price sibling market_index_series and from the levels sibling listing_market_series.

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

Usage Guidelines5/5

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

Gives a concrete use case ('how have asking prices in W14 moved since 2022') plus the rationale for choosing it over the alternative: asking LEADS sold by months and includes stock that never sells, so use market_index_series for sold prices and listing_market_series for levels. It even names the condition that selects quarterly over monthly frequency.

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

asking_rent_index_seriesAsking-rent index (portal listings, ONS-validated)A
Read-onlyIdempotent
Inspect
Hedonic ASKING-RENT index for one postcode district, local authority or
Great Britain, from portal lettings, 2022M01 = 100, with bands and SEs.
This is the residential rent index; commercial_rent_index_series is the
VOA one for commercial property.

It is validated every build against the ONS Price Index of Private Rents
by local authority and NOT published in a month where the two disagree by
more than a few points a year — so a missing recent month is a refusal, not
an outage; say so. Asking rents, not achieved; `value` is an index level,
never a rent. For rent LEVELS and yields use listing_market_series.

Same area and frequency rules as asking_price_index_series. Free.
NameRequiredDescriptionDefault
endNo
limitNo
startNo
methodNohedonic_smoothed
area_codeNoNATIONAL
area_typeNodistrict
frequencyNomonthly

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description goes well beyond them with genuinely useful behavior: ONS Price Index validation each build, the ~few-points-a-year disagreement threshold, the rule that a missing recent month is a deliberate refusal rather than an outage ('say so'), and the caveat that `value` is an index level, never a rent. It stops short of describing pagination/limit behavior or smoothing effects, so not a full 5.

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

Conciseness4/5

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

Roughly 90 words, front-loaded with the identity and base period before the caveats and alternatives. Information-dense and mostly economical, though the em-dash clauses and semicolon fragments make it slightly harder to scan than it needs to be.

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

Completeness4/5

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

An output schema exists, so return-format explanation is unnecessary, and the description supplies the crucial interpretive context (index level not a rent, refusal-vs-outage semantics, source validation). The only real shortfall is the unaddressed `method` parameter, which an agent must guess at when the default is unsuitable.

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

Parameters3/5

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

Schema description coverage is 0% across 7 parameters, so the description carries the burden. It partially compensates by enumerating the geography options ('one postcode district, local authority or Great Britain') which map onto the area_type enum, and it references shared 'area and frequency rules'. However, hedonic_smoothed vs hedonic_raw is never explained, and start/end/limit formats are undocumented, leaving meaningful gaps.

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

Purpose5/5

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

States a specific verb+resource ('Hedonic ASKING-RENT index for one postcode district, local authority or Great Britain'), its source (portal lettings), base period (2022M01 = 100), and outputs (bands and SEs). It explicitly contrasts itself with commercial_rent_index_series and asking_price_index_series, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Names the alternatives and their selecting conditions: commercial_rent_index_series is the commercial VOA series, and listing_market_series is the tool for rent LEVELS and yields. It also frames the use case as the residential asking-rent index specifically, leaving nothing to inference.

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

ask_questionRoute a MarketCode questionB
Read-onlyIdempotent
Inspect

Use the SAME Ask router as the portal. Route a place/kind into the published taxonomy, a dated figure to the governed semantic query, or exact company/property/title references to a bounded corporate network/path. This tool proposes execution; it does not execute paid work. Respect unsupported criteria and require acceptance of a paid proposal. Routing catalogue IDs are NOT evidence publication IDs; cite the eventual tool's data provenance. Free.

NameRequiredDescriptionDefault
questionYes
place_slugNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/closed-world safety, and the description adds real behavioral context beyond them: two-phase 'proposes execution' flow, no paid execution until a proposal is accepted, free to call, and the caution that routing catalogue IDs are not evidence publication IDs. The main omission is any note on latency, limits, or what a proposal response contains.

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

Conciseness3/5

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

Front-loads the core routing purpose, but the prose is dense, jargon-heavy, and relies on unexplained domain terms ('published taxonomy', 'governed semantic query', 'bounded corporate network/path'), with semicolon-packed clauses that slow comprehension. The final 'Free.' fragment is efficient but the middle sentences do not fully earn their length.

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

Completeness3/5

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

An output schema exists so return values need not be described, and the proposal/acceptance model is covered. What is missing is enough parameter-level guidance to call it correctly (required question, optional place_slug) and any signal about how router results should be consumed or cited downstream.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must carry their meaning and largely does not: 'question' is never discussed, and 'place_slug' is only obliquely gestured at by 'Route a place/kind'. It does not explain the required/optional split or how a place slug changes routing, which is exactly the gap the empty schema leaves.

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

Purpose4/5

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

States a specific role — routing a question ('place/kind', 'dated figure', 'exact references') to the right downstream handler, and explicitly distinguishes proposal from execution. The resource is somewhat abstract (a router rather than a data tool), but an agent can tell it is the entry-point dispatcher rather than one of the concrete lookup siblings.

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

Usage Guidelines3/5

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

Gives category-level triggers (place/kind, dated figure, corporate reference) and notes that it does not execute paid work and requires acceptance of a proposal, which is useful usage context. However, it never tells the agent when to use this router versus calling query_semantic, query_sql, or property_lookup directly — the key selection decision against siblings is left implicit.

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

auction_compsAuction comparablesA
Read-onlyIdempotent
Inspect
Auction comparables on ACHIEVED prices, each against our valuation.

A portal tells you a property went to auction. This says what it MADE, and
what our AVM thought it was worth at the same address — the difference
between a comparable and a listing. Use it to judge whether a guide price
is realistic, or what a lot is likely to fetch.

`achieved_to_avm` is the hammer price as a share of our AVM. Below 1.0 the
lot sold under the estimate; the useful spread is wide, from about 0.45 to
0.95 within a single postcode area. Read it alongside `auction_date`: all
AVMs share one snapshot date, so an older lot carries market movement as
well as discount.

Bedrooms and property type come from the UPRN-matched unit rather than the
auction catalogue, which populates property_type on 12% of sold lots and
tenure on none at all.

Give `postcode_district` or `postcode_area` — auction lots carry a
postcode, not an area_id, so there is no area_id path here.

UK only. Free.
NameRequiredDescriptionDefault
limitNo
monthsNo
max_bedsNo
min_bedsNo
is_commercialNo
postcode_areaNo
postcode_districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, yet the description adds substantial context beyond them: the achieved_to_avm interpretation and typical 0.45–0.95 spread, the single-snapshot AVM caveat on auction_date, UPRN-derived bedrooms/property_type with catalogue coverage figures, UK-only scope, and cost ('free').

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

Conciseness4/5

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

Front-loaded with the core distinction in the first line, and the dense paragraphs on achieved_to_avm provenance each carry real signal. It runs longer than typical, but nothing is filler; the caveats are the value.

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

Completeness5/5

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

For a comps tool with an output schema present, the description covers everything an agent needs: what is measured, provenance and reliability caveats, geographic constraint, and scope/cost. Return-format detail is 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.

Parameters3/5

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

Schema description coverage is 0% across 7 params, so the description must carry the load. It does explain postcode_district/postcode_area and where bedrooms/property_type come from, but limit, months, max_beds, min_beds, and is_commercial are never defined semantically — the 24-month window and paging behaviour are left for the agent to infer.

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

Purpose5/5

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

States a specific verb+resource (auction comparables on ACHIEVED prices, benchmarked against an AVM) and explicitly contrasts it with a plain listing, which separates it from siblings like property_comps, valuation_comparables, and auction_lots. An agent knows exactly what this returns without opening the schema.

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

Usage Guidelines4/5

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

Gives concrete use cases (judge whether a guide price is realistic, estimate what a lot will fetch) and a hard input rule (supply postcode_district or postcode_area, there is no area_id path). It stops short of naming which sibling to pick instead for adjacent questions (e.g. auction_discount, auction_lots), so it's clear but not fully routing.

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

auction_discountAuction discount to valuationA
Read-onlyIdempotent
Inspect
How far below our valuation UK auction actually clears — the one auction
number nobody else can produce.

An achieved hammer price against an automated valuation of the SAME
property. EIG covers 530+ auctioneers to our six and sells API data, but
runs no AVM; we have less auction data and the valuation. The join is the
product, not the feed.

Nationally over the last 24 months the median lot cleared at about 0.66 of
our estimate — a ~34% discount — and 87% of lots sold below it. The spread
by district is large and real: PR2 clears near 47% below, N1 under 8%.

READ `by_year` BEFORE QUOTING THE HEADLINE, and read `meta.sufficient`.
Every AVM in the warehouse shares ONE snapshot date, so this ratio is an
auction discount only where the sale and the valuation are close in time.
The series sits near 0.65 from 2021 and falls to ~0.44 in 2016-2019 — that
fall is house-price growth sitting between the hammer and the estimate, not
a deeper discount. Widening `months` past about 60 measures the market, not
the auction.

`min_lots` suppresses the headline where too few lots match; a median over
three sales is not a market rate, and `meta.sufficient` says which you got.

Geography is by POSTCODE, not area_id — auction lots carry a postcode.

UK only. Free.
NameRequiredDescriptionDefault
monthsNo
min_lotsNo
is_commercialNo
postcode_areaNo
postcode_districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial context beyond them: the single shared snapshot date across all AVMs, the fact that the ratio is only a discount where sale and valuation are close in time, the drift of the series to ~0.44 in 2016-2019 being house-price growth rather than deeper discount, and the `min_lots` suppression behavior reported through `meta.sufficient`. This is unusually rich interpretive disclosure for a read-only tool.

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

Conciseness3/5

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

The headline and the interpretive warnings are front-loaded effectively, but the passage spends real estate on competitor positioning ('EIG covers 530+ auctioneers to our six and sells API data, but runs no AVM') that does not help an agent select or invoke the tool. Several interpretive sentences earn their place; the marketing framing does not.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the description covers the key interpretive pitfalls (temporal alignment, sufficient-sample gating, series drift). It is nearly complete for a 5-param statistical tool, missing only an explanation of `is_commercial` and explicit sibling routing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden and largely delivers: `months` is bounded with a reason (~60), `min_lots` is explained as headline suppression, and `postcode_area`/`postcode_district` are clarified as postcode-based geography rather than area_id. Only `is_commercial` is left unexplained, so it falls short of a 5.

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

Purpose4/5

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

The description states a specific verb+resource: an achieved hammer price against an AVM of the same property, yielding an auction-to-valuation discount ratio. It implicitly separates itself from the sibling auction tools (auction_comps, auction_stats, auction_lots) via the 'valuation join is the product' framing. The competitor comparison and headline stats dilute the core statement somewhat, but the purpose is unmistakable.

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

Usage Guidelines4/5

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

It gives clear operational context: read `by_year` before quoting the headline, read `meta.sufficient`, and don't widen `months` past ~60 because that measures the market rather than the auction. However, it never names an alternative tool (e.g. auction_comps/auction_stats) or the condition that would route the agent elsewhere, which keeps it below a 5.

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

auction_lotsAuction lotsA
Read-onlyIdempotent
Inspect
Individual UK auction lots: the guide price a lot was marketed at, whether
it sold, the HAMMER PRICE where the auctioneer published one, and the net
yield where quoted.

Five auction houses, Allsop back to 1999. Nothing else on the market sells
achieved auction outcomes through an API — a listings portal tells you a
property went to auction, not what it made.

Use this for: what did comparable lots actually sell for, is a guide price
realistic, what yields are commercial lots trading at, how does a district's
auction market behave. For asking-price or private-treaty sales use
market_volume_series or property_history instead — auction is a different
market and the prices are not interchangeable.

Coverage is a real constraint, not a caveat: about a quarter of lots carry
an achieved price and a fifth a net yield, because most auctioneers publish
a guide and never the result. Set `with_achieved_price` or `with_yield` to
restrict to lots that can answer an outcomes question, and read
`meta.coverage` on the way out so a thin result reads as thin.

`auctioneer` is one of: allsop, savills, acuitus, barnettross,
agentsproperty. Acuitus is the one that publishes net yield beside the
achieved price, so filter to it when yield is the question.

Dates are ISO (YYYY-MM-DD). UK only. Free.
NameRequiredDescriptionDefault
limitNo
offsetNo
date_toNo
date_fromNo
sold_onlyNo
auctioneerNo
with_yieldNo
is_commercialNo
postcode_areaNo
postcode_districtNo
with_achieved_priceNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent safety profile, and the description adds substantial extra context: the coverage constraint (~1/4 price, ~1/5 yield), the instruction to read meta.coverage so thin results read as thin, and the observation that most auctioneers publish only a guide. That is exactly the behavioural disclosure annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the resource and payload, then unique value, use cases, alternatives, coverage caveat, and parameters. Each section earns its place, though the coverage paragraph is somewhat verbose and the whole definition runs long for a listing endpoint.

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

Completeness5/5

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

For a complex 11-parameter tool with no annotation gaps and an output schema present, the description supplies what the schema cannot: the enum values, the coverage caveat with meta.coverage guidance, and the sibling routing. An agent has enough to call it correctly on the first attempt.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It documents the high-value filters well: with_achieved_price, with_yield, and the actual auctioneer enum values (schema only declares an untyped string), plus ISO date format. It leaves limit, offset, sold_only, is_commercial, postcode_area and postcode_district unexplained, so several of the 11 parameters remain opaque.

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

Purpose5/5

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

States a specific resource (individual UK auction lots) and enumerates the payload fields: guide price, sold status, hammer price, net yield. It also distinguishes the dataset from listings portals and from asking-price/private-treaty siblings, so an agent can tell it apart from auction_comps, property_history, or market_volume_series.

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

Usage Guidelines5/5

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

Gives explicit use cases (achieved outcomes, guide-price realism, yields, district auction behaviour) and an explicit when-not with named alternatives: 'For asking-price or private-treaty sales use market_volume_series or property_history instead'. It also tells the agent to route yield questions to the acuitus auctioneer.

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

auction_statsAuction statistics by districtA
Read-onlyIdempotent
Inspect
Quarterly UK auction statistics by postcode district: lots offered, lots
sold, the sale rate, and average guide, achieved and net yield.

Use this for the shape of a local auction market over time — is it clearing,
are yields moving, is stock rising. For individual comparables use
auction_lots.

READ `n_guide` AND `n_achieved` BEFORE COMPARING THE AVERAGES. They are
computed over DIFFERENT POPULATIONS: a guide price is published for most
lots, a hammer price by a minority of auctioneers. Subtracting one average
from the other does not give an uplift, a discount, or any meaningful
number — the two sets are not the same lots.

Each row carries a `comparable` flag that is false when the two populations
are too unbalanced for the difference to mean anything. When it is false,
report the two figures separately with their counts, and say why.

`quarter_from`/`quarter_to` are the first day of a quarter (2024-01-01,
2024-04-01, ...). UK only. Free.
NameRequiredDescriptionDefault
limitNo
quarter_toNo
quarter_fromNo
is_commercialNo
postcode_districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds a substantial data-interpretation caveat not present in any structured field: n_guide and n_achieved are computed over different populations, so differencing them is meaningless. It also explains the `comparable` output flag and prescribes fallback reporting behavior when it is false.

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

Conciseness4/5

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

Front-loaded with the one-line purpose, then usage routing, then the critical caveat. Sentences are dense but each carries non-obvious information; the warning block is long relative to the rest, though it is genuinely high-stakes context rather than padding.

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

Completeness4/5

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

With an output schema present, return values need not be re-explained, and the description still adds the key output-semantics note about `comparable`. Scope, time formatting, and geographic limits are covered; the remaining gap is the unexplained is_commercial and limit parameters.

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

Parameters3/5

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

Schema coverage is 0% across 5 params, so the description must carry the load. It documents quarter_from/quarter_to format precisely (first day of a quarter, e.g. 2024-01-01) and the geographic scope, but says nothing about is_commercial, limit (default 50), or postcode_district format — three params left entirely to the schema's bare types.

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

Purpose5/5

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

States a specific verb+resource+granularity: "Quarterly UK auction statistics by postcode district", and enumerates the metrics returned (lots offered, lots sold, sale rate, average guide/achieved/net yield). It explicitly distinguishes itself from auction_lots as the individual-comparables sibling.

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

Usage Guidelines5/5

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

Gives an explicit positive condition ("the shape of a local auction market over time — is it clearing, are yields moving, is stock rising") and names the alternative tool with the condition that selects it ("For individual comparables use auction_lots"). Also states constraints: UK only, free.

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

build_costBuild cost: index, regional factor, estimateA
Read-onlyIdempotent
Inspect
Build cost for a scheme: the sector's cost index with its 1- and 5-year
movement, the regional location factor (`region`: NATIONAL, LONDON,
SOUTH_EAST — an error lists what is loaded), the editorial on-cost
percentages (prelims, contingency, overheads & profit, professional fees)
and, given `gia_m2` and `rate_gbp_m2` (your BCIS or in-house base rate,
with `rate_period` in the series' own format, e.g. 2024Q1), an estimate:
the rate carried through the index to the latest period, localised,
multiplied out, with totals at low / mid / high on-costs. The £/m²
benchmark leg says `not_available` until a tender benchmark is loaded —
no rate is invented, and nothing here is a modelled number.
UK only. Free.
NameRequiredDescriptionDefault
basisNotender
gia_m2No
regionNoNATIONAL
sectorYes
rate_gbp_m2No
rate_periodNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes beyond them: it discloses that the £/m² benchmark leg returns `not_available` until a tender benchmark is loaded, that no rate is invented, that nothing is a modelled number, and that an invalid region raises an error enumerating loaded values. That is real behavioral disclosure about sentinels, errors, and provenance.

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

Conciseness5/5

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

Front-loaded with the purpose, then the output legs, then the estimate mechanics, then the caveat. It is dense but almost every clause carries distinct, actionable information; the three short trailing sentences (not_available behavior, UK only, free) are each independently useful.

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

Completeness4/5

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

An output schema exists, so return structure needn't be restated, and annotations cover safety. The description supplies the operative semantics, error/sentinel behavior, and rate provenance. The only real gap is the unexplained `basis` enum, which an agent would have to guess at.

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

Parameters4/5

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

With schema description coverage at 0%, the description must carry the load, and it does for five of six parameters: sector (index selection), region (enum values plus error behavior), gia_m2, rate_gbp_m2 (BCIS or in-house base rate), and rate_period ("the series' own format, e.g. 2024Q1"). The `basis` parameter (tender/output enum) is never mentioned, leaving one documented enum unexplained.

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

Purpose5/5

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

The opening clause states a specific verb+resource ("Build cost for a scheme") and enumerates the outputs: sector cost index with 1- and 5-year movement, regional factor, on-cost percentages, and a rate-derived estimate. This is clearly distinguishable from narrower siblings like cost_index or valuation_estimate, which an agent can infer without opening a schema.

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

Usage Guidelines3/5

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

It conveys context (UK only, free) and the conditional that triggers the estimate leg ("given gia_m2 and rate_gbp_m2 ..."), which is genuinely useful. However, it never names when to prefer this over cost_index, site_appraisal, or valuation_estimate, so sibling routing 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.

building_physicalPhysical form of buildingsA
Read-onlyIdempotent
Inspect
Physical form of the buildings a set of UPRNs sit in: height, volume,
footprint area, floor count, construction and roof material, basement,
green roof, solar panels, and the residential/commercial unit mix.

`year_built` and `num_floors` are thinly populated and come back null
rather than estimated — treat null as unknown, not as absent.

`footprint_geojson` is the recorded WGS84 building outline, simplified at
0.5 m, for report maps and illustrative 3D massing. Use `building_height_m`
(volume divided by footprint), never altitude `height_m_above_sea_level`,
for extrusion. Preserve `geometry_attribution`. The extrusion does not
show actual facades, roof details, or a flat's internal boundaries.

UK only. Costs 15 credits (15p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, consistent with 'UK only'. The description adds real value beyond that: cost, null-handling for `year_built` and `num_floors`, 0.5 m simplification of the outline, attribution preservation, and the caveat that extrusion is massing-only. However, one important behavioral trait is missing: the description never states any limit on how many UPRNs may be batched per call, so an agent cannot predict the cost or failure mode of a large request.

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

Conciseness4/5

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

Three short paragraphs, front-loaded with the resource and its fields, then data-quality caveats, then usage rules. Every sentence is informative, though the extrusion caveats (no facades, no internal boundaries) sit at the tail and could be tighter for a description that is already long.

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

Completeness5/5

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

An output schema exists, so return values need not be explained; the description instead supplies the operational context an agent needs — geography, cost, prerequisite resolution chain, null semantics, and how to consume the GeoJSON correctly (use building_height_m, not altitude). Nothing material is missing for a single-parameter read tool.

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

Parameters4/5

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

Schema coverage is 0% and the sole parameter is a bare integer array with no description, so the description must carry the load. It does much of that: 'a set of UPRNs' conveys batch semantics, 'keyed on a UPRN, not an address' rules out the wrong identifier type, and it points to the tools that produce valid values. It stops short of stating per-call caps or ordering, which is the remaining gap.

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

Purpose5/5

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

States a specific resource (physical form of the buildings a set of UPRNs sit in) and enumerates exactly what comes back: height, volume, footprint area, floor count, materials, basement, green roof, solar, unit mix. This clearly separates it from siblings such as energy_profile, solar_potential or property_summary without needing their schemas.

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

Usage Guidelines5/5

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

Explicit routing: UK only, keyed on UPRN rather than address, and a named two-step path (free `address_autocomplete` to narrow, then `address_resolve` to obtain the identifier). It also states the cost (15 credits / 15p), letting the agent weigh the call before making it.

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

changes_sinceWhat changed since your cursorA
Read-onlyIdempotent
Inspect
What changed since you last looked — the portal change feed. Pass the
`next_cursor` from your previous call to get only what is new; on a first
call give a scope (`postcode_districts` or `uprns`) or a `since` date,
because an unbounded read of a 14.6-million-row feed is refused.

THE CURSOR IS AN EVENT ID, not a timestamp. Rows recorded late always take
higher ids, so nothing slips behind your watermark between polls. Each
event carries both `event_date` (when the portal says it happened) and
`observed_at` (when our sweep saw it) — a backfill has an old date and a
recent observation, which is exactly why the cursor is an id.

READ `coverage.event_types` BEFORE TRUSTING AN EMPTY PAGE. `added` and
`price_reduced` are live and daily. `price_increased` and `status_changed`
are sparse and only start in late August. **`delisted` has ONE row in the
whole table: withdrawal is NOT observed, so an empty result for it means we
cannot see it, not that nothing was withdrawn.** Five change kinds a user
may ask for — planning decisions, ownership changes, a lease crossing 80 or
60 years, a new EPC, an AVM move — have no feed at all and are listed under
`coverage.not_yet_fed`. Say which of these you cannot answer.

On a price change, `price.old_price_source` says whether the old price came
from the event itself or was derived from the listing's previous event; the
portal usually reports only the new price. Where neither is available the
change is null, never zero.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
limitNo
sinceNo
uprnsNo
cursorNo
channelNo
event_typesNo
postcode_districtsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantive context: the cursor is an event id (so late rows never slip behind the watermark), a 14.6M-row feed rejects unbounded reads, cost is 5 credits, and the delisted event type is effectively invisible. Only the return shape of a page (besides event_date/observed_at) is left implicit.

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

Conciseness4/5

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

Front-loads the core instruction, then layers cursor semantics, coverage caveats, price-field caveats, and cost/prerequisites in a logical order. It is longer than typical but nearly every sentence carries non-obvious information; the bolded delisted warning is worth its space.

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

Completeness5/5

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

With an output schema present, return values need not be explained, yet the description still clarifies event_date vs. observed_at and price.old_price_source — exactly the fields an agent would misread. Combined with the scope rules and prerequisites, nothing needed 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.

Parameters3/5

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 explains cursor (event id, not timestamp), since, postcode_districts, uprns, and even names the event_types values (added, price_reduced, price_increased, status_changed, delisted) — but leaves `limit` and `channel` (with its residential_sale/residential_rent enum) entirely undocumented.

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

Purpose5/5

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

States a specific verb and resource — the portal change feed returning what changed since a cursor — and its scope (UK, UPRN-keyed) distinguishes it from siblings like listing_history or property_history. An agent can identify it without opening the schema.

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

Usage Guidelines5/5

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

Explicitly prescribes the two call patterns (pass next_cursor vs. first call with scope or since), states that unbounded reads are refused, and routes the agent through address_autocomplete (free) then address_resolve to obtain a UPRN. It also names what cannot be answered via coverage.not_yet_fed.

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

commercial_index_seriesCommercial capital indexA
Read-onlyIdempotent
Inspect
Repeat-sales CAPITAL index for UK commercial property, quarterly,
1995Q1 = 100.

Three families exist and nothing else: national ALL; national x sector
for the sectors that passed the level gate (OFFICE, RETAIL, HOTEL,
HOLIDAY_LET); and local authority x ALL for the 19 authorities with enough
pooled repeat sales. There is deliberately NO local x sector series — a
local sector cell is too thin to carry an index — so for "office values in
Manchester" call twice, sector="OFFICE" (national) and area="Manchester"
(ALL), and present the two side by side; each is real.

`area`: omit for national; a local authority NAME ("Manchester", "South
Hams") for the city scope. `sector`: omit for ALL, or a sector name.
`start` / `end`: "2015", "2015Q1", "2015-Q1" or "2015-06"; `end` is
inclusive.

`provenance.method` is repeat_sales for the raw estimator and
repeat_sales_shrunk where thin quarters were blended toward the national
increment; `n_pairs` per quarter is the straddle count, and a quarter with
few pairs is carried by the blend. An empty `series` with
`available_sectors` means the area exists but that sector is not published
for it; an unknown area is an error naming the nearest matches.

This is a capital-value index. For RENTS use commercial_rent_index_series;
the two are not interchangeable (capital = rent / yield, and yields
moved). UK only. Free.
NameRequiredDescriptionDefault
endNo
areaNo
limitNo
startNo
sectorNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world, but the description adds substantial behavioral context beyond them: provenance.method meanings (repeat_sales vs repeat_sales_shrunk), n_pairs as straddle count, thin-quarter blending, empty-series-with-available_sectors semantics, error behavior naming nearest matches for unknown areas, and free/UK-only scope.

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

Conciseness4/5

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

Well front-loaded with the core definition and structured with backticked parameter names. It is somewhat long and carries minor filler ('each is real', parenthetical justification about yields moving), but nearly every sentence conveys actionable constraint rather than restating structured data.

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

Completeness5/5

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

For a 5-param, output-schema-backed tool, the description covers the series taxonomy, per-param semantics, the local-x-sector gap and its workaround, provenance edge cases, and error/empty-result behavior. An agent has everything needed to call and interpret it correctly without the output schema explaining returns.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and does so well for four of five params: area (omit for national, LA name), sector (omit for ALL, accepted values), start/end with concrete accepted formats ('2015', '2015Q1', '2015-Q1', '2015-06') and inclusive end. The `limit` parameter is never mentioned, leaving one gap.

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

Purpose5/5

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

States a specific verb/resource and scope: 'Repeat-sales CAPITAL index for UK commercial property, quarterly, 1995Q1 = 100.' It enumerates exactly which series families exist (national ALL, national x sector, LA x ALL), so an agent knows what this returns, and it explicitly contrasts with the rent index sibling. This is not a tautology of the title.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('office values in Manchester' → call twice with sector=OFFICE and area=Manchester) and when-not-to-use ('For RENTS use commercial_rent_index_series; the two are not interchangeable'). It names the alternative and the condition that selects it, leaving nothing to inference.

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

commercial_marketCommercial capital and rent indices for a placeA
Read-onlyIdempotent
Inspect
The commercial market for a sector and a place: the repeat-sales CAPITAL
index, the VOA rating-list RENT index, and the rated stock standing in the
authority with its hereditament count, total and median rateable value.

THE TWO INDICES ARE NOT COMPARABLE and must never be plotted on one axis
or differenced. The capital index is quarterly and THIN — several quarters
rest on single-digit sale pairs, `n_pairs` is on every point, and
`thin_periods` names the recent ones you should not quote a move from. The
rent index is keyed on VOA rating lists at their antecedent valuation
dates, so it has four points in sixteen years and each is a revaluation of
a constant sample, not a quarter.

Only 19 local authorities carry a capital series, ALL sector only, because
a local sector cell is too thin to publish. Ask for one that has none and
the NATIONAL series comes back labelled as national — check
`area.index_scope` before describing it as local.

Rated stock is the 2026 list only, so it is a snapshot: RV change on appeal
is not derivable per property.
UK only. Free.
NameRequiredDescriptionDefault
sectorNo
area_keyNo
lad_codeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Far beyond the readOnly/idempotent annotations, it discloses thinness (n_pairs per point, thin_periods), the frequency mismatch (quarterly vs four points in sixteen years), the silent national fallback with the area.index_scope label to check, the 2026-only snapshot nature of rated stock, and non-derivability of RV change on appeal.

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

Conciseness4/5

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

Purpose is front-loaded and every paragraph carries distinct information (comparability warning, thinness, fallback behaviour, snapshot caveat). It runs long with heavy capitalization emphasis, but nearly every sentence is load-bearing rather than filler.

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

Completeness5/5

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

For a tool combining three datasets across two incompatible index methodologies, the description covers the caveats an agent needs to interpret results correctly, and the output schema already covers return-shape detail. UK-only and free-to-use scope are stated outright.

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

Parameters3/5

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

Schema coverage is 0% and none of the three parameters is described in the schema, so the description must carry the load. It references sector, place and local authority conceptually, but never disambiguates area_key from lad_code, states mutual exclusivity, or gives any expected format.

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

Purpose5/5

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

The description names a specific verb+resource bundle: the repeat-sales capital index, the VOA rating-list rent index, and rated stock standing for a sector and place. It is clearly distinguishable from siblings like commercial_index_series and commercial_rent_index_series because it explicitly says it returns all three together.

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

Usage Guidelines4/5

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

It gives strong operational guidance — the two indices must never be plotted on one axis, don't quote a move from thin_periods, and only 19 authorities have a capital series so a missing request silently returns the national series. It does not, however, name sibling tools to use when only one index is wanted, so the routing guidance is implicit rather than explicit.

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

commercial_propertyCommercial property report: RV, indexes, yield, ownerA
Read-onlyIdempotent
Inspect
The commercial property report, by UPRN or by VOA UARN: the hereditament
as the 2026 rating list describes it (rateable value, sector, description),
the sector's rent index across the 2010/2017/2023/2026 lists and its
capital index (national, plus the local authority where one exists), an
income-basis value that capitalises the RV at the district's commercial
auction net yield — with the yield's receipt, and `not_available` where
the district published none — the auction history at the address, the
district's commercial auction market by quarter, the registered owner and
the lease. Blocks that cannot be derived today say `not_available` with
the reason (the RV history per hereditament; the VOA measured area). RV is
a rating measure at the antecedent valuation date, not passing rent —
say so when you quote the income-basis figure.
UK only. Costs 10 credits (10p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uarnNo
uprnNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, it discloses that the tool is UK only, costs 10 credits (10p), returns `not_available` with reasons for underivable blocks, and that the income-basis value capitalises RV at the district's commercial auction net yield with `not_available` where no yield was published. It also warns that RV is a rating measure at the antecedent valuation date, not passing rent — valuable behavioral context that annotations cannot provide.

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

Conciseness4/5

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

The description is dense and front-loaded, opening with the report identity and key inputs before detailing outputs and caveats. It is relatively long and packed into a single paragraph with nested parentheticals, so structure could be improved, but most content earns its place for a complex report tool.

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

Completeness5/5

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

Given the tool's complexity, the description is complete enough: it covers scope, geographic limitation, cost, keying requirements, output block behavior including `not_available` reasons, and an important interpretation caveat. An output schema exists, so it does not need to enumerate return fields.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It identifies the two lookup keys as UPRN and VOA UARN and emphasizes that the tool is keyed on a UPRN, not an address, with a concrete workflow via address_autocomplete and address_resolve. It does not specify that at least one key is required or explain how to obtain a UARN, but it adds substantial semantics beyond the bare schema.

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

Purpose4/5

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

The description clearly states a specific resource and report scope: a commercial property report keyed by UPRN or VOA UARN, covering rateable value, rent/capital indexes, income-basis value, auction history, owner, and lease. It does not explicitly distinguish this report from sibling tools such as property_report, property_summary, commercial_market, or commercial_index_series, so it falls short of the top score.

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

Usage Guidelines4/5

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

It gives clear operational guidance: UK only, keyed on UPRN rather than address, and instructs the agent to use address_autocomplete then address_resolve to obtain a UPRN. It does not explicitly say when to choose this tool over sibling report or market tools, but the prerequisite workflow and cost are well stated.

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

commercial_rent_index_seriesCommercial rent indexA
Read-onlyIdempotent
Inspect
Commercial RENT index from the VOA rating lists — FOUR points, one per
list (2010 / 2017 / 2023 / 2026), each dated at that list's antecedent
valuation date (2008-04-01, 2015-04-01, 2021-04-01, 2024-04-01), with the
2010 list = 100.

READ `basis` AND REPEAT IT when you quote a number: the index is derived
from VOA rateable values — the Valuation Office Agency's assessment of
open-market rent at each valuation date — NOT from advertised rents, and
it is not a capital-value index. It moves in four steps; do not
interpolate between them as if it were monthly, and date each point by
`avd_date`, not `list_year`.

Why it exists: it covers the sectors the repeat-sales capital index
cannot (INDUSTRIAL_WAREHOUSE trades in portfolios, not Price Paid), for
every VOA sector and 320 local authorities.

`sector`: omit for ALL, or a VOA sector (OFFICE, RETAIL,
INDUSTRIAL_WAREHOUSE, INDUSTRIAL_FACTORY, PUB_BAR, HOTEL, LEISURE,
HEALTHCARE, EDUCATION, ...). `area`: omit for national; a local
authority GSS code ("E08000003") or NAME ("Manchester", bridged to its
code). `start` / `end`: rating-list years, e.g. "2017".

`link_ratio` is the median rateable-value ratio between consecutive lists
over the hereditaments present in both (`n_constant` of them). An empty
`series` with `available_sectors` means the area is published but not
that sector; an unknown area is an error. UK only. Free.
NameRequiredDescriptionDefault
endNo
areaNo
startNo
sectorNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already carry the safe-read profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds material behavior: the index derives from VOA rateable values, not advertised rents or capital values; it moves in four discrete steps; points must be dated by `avd_date` not `list_year`; and it defines error/empty semantics (unknown area is an error, empty `series` with `available_sectors` means the sector is unpublished). That is well beyond the structured fields.

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

Conciseness4/5

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

Front-loads the subject (rent index, four points, base year) and then sequences provenance, usage, and per-parameter notes efficiently. It is dense and slightly over-emphatic (all-caps warnings, a repeated 'NOT from advertised rents'), but nearly every sentence earns its place for a tool with a non-obvious index construction.

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

Completeness5/5

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

Given four optional parameters, an output schema (so return shape needn't be explained), and the closed-world read-only annotations, the description supplies everything an agent needs: scope, granularity, date semantics, provenance caveats, and empty/error handling. Nothing material is missing.

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

Parameters5/5

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

Schema description coverage is 0% and there are no enums, so the description carries the full burden — and it does: `sector` (omit for ALL or a named VOA sector with examples), `area` (omit for national, GSS code 'E08000003' or name 'Manchester' bridged to code), and `start`/`end` (rating-list years, e.g. '2017'). It also adds value beyond the schema for `link_ratio`/`n_constant` output semantics.

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

Purpose5/5

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

States a specific verb+resource: a commercial RENT index built from VOA rating lists, with exactly four points tied to list antecedent valuation dates and a 2010=100 base. This is sharply distinguished from the advertised-rent and capital-value siblings (asking_rent_index_series, commercial_index_series) without needing to open any schema.

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

Usage Guidelines4/5

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

Gives strong context for when to reach for it: it covers sectors the repeat-sales capital index cannot (INDUSTRIAL_WAREHOUSE portfolio trades), spans all VOA sectors and 320 local authorities, and is 'UK only. Free.' It warns against monthly interpolation and against quoting without `basis`, but never names a specific alternative sibling to use instead, so it stops short of explicit alternatives/exclusions.

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

comps_adjustmentsComparables with their time adjustmentsA
Read-onlyIdempotent
Inspect
The evidence behind a valuation, itemised: same-building comparable
sales for the property, each with its registered price and date, its
time adjustment on the published repeat-sales index (the district's own
series, else the local authority's, else national) to the index's latest
settled month with the carry receipt (`index_unavailable` and no
adjustment where no series covers the property), any relisting penalty
(pass `relisted_uprns` only to model an explicit -10% sensitivity for
relisted/withdrawn comps; this is an assumption, not a measured discount), and the IQR fence that
decided which comps count. Use it to show WHY a value is what it is;
`valuation_full` gives the value itself. `lookback_months` 12–120.
UK only. Costs 10 credits (10p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
relisted_uprnsNo
lookback_monthsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the read-only/idempotent profile, but the description adds substantial context beyond them: index fallback order (district → local authority →national), the `index_unavailable` carry receipt and no-adjustment outcome, UK-only scope, and a concrete cost of 10 credits (10p). It also flags that the -10% relisting penalty is an assumption, not a measured discount — exactly the kind of caveat an agent cannot get from structured fields.

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

Conciseness4/5

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

It is front-loaded with the payload and every sentence earns its place, but the central sentence is a ~60-word run-on with stacked parentheticals (index fallback, `index_unavailable`, relisting caveat) that take effort to parse. Splitting that block would cost nothing in content and improve scanability.

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

Completeness5/5

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

An output schema exists so return shape needs no explanation, yet the description still summarises what each comp carries. Combined with cost, jurisdiction, keying, and index-fallback behaviour, an agent has everything needed to call this correctly and interpret the result.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does: `relisted_uprns` is reframed as an explicit sensitivity switch with a stated -10% magnitude, `lookback_months` gets an enforced 12–120 range, and `uprn` is qualified as a UPRN rather than an address with the resolution path spelled out.

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

Purpose5/5

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

It names a specific resource (same-building comparable sales with registered price, date, time adjustment, relisting penalty, IQR fence) and explicitly contrasts with `valuation_full`, which 'gives the value itself'. The distinction from `property_comps`/`valuation_comparables` is not drawn by name, but the 'evidence behind a valuation' framing is precise enough to separate it from every other comps sibling.

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

Usage Guidelines5/5

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

It tells the agent when to reach for it ('Use it to show WHY a value is what it is'), names the alternative for the value itself, warns to pass `relisted_uprns` only for a deliberate sensitivity rather than a default, and spells out the prerequisite chain (`address_autocomplete` free → `address_resolve` → UPRN).

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

cost_indexConstruction cost index seriesA
Read-onlyIdempotent
Inspect
Construction cost index series for a development appraisal's cost side:
`basis` is tender (tender price indices), output (output price indices),
deflator (the construction deflator) or labour. Optional `sector`
(residential, commercial, industrial, infrastructure, all, …), `freq`
(monthly | quarterly | annual) and an inclusive period window in the
series' own format (2014Q1, 2014M01, 2014). Each series carries its base
period and method. UK-wide; regional factors come with the site appraisal.
UK only. Free.
NameRequiredDescriptionDefault
freqNo
basisYes
sectorNo
to_periodNo
from_periodNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/non-destructive profile, so the description's added value is the period-window inclusivity rule, the series' own date format, and the fact that each series carries its base period and method. Those are genuine behavioral details beyond the annotations, though coverage scope (which years exist) is unstated.

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

Conciseness4/5

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

Purpose is front-loaded and the parameter notes are dense but each earns its place. The trailing fragments ('UK-wide; ... UK only. Free.') are slightly choppy but still informative rather than padding.

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

Completeness4/5

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

With an output schema present, return values needn't be detailed, and the description still mentions base period and method. Required parameter, date formats, frequency, and geographic limits are all covered; the only soft spot is the open-ended sector list.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: it enumerates all four basis values matching the enum, gives sector examples, the freq options, and the exact period token formats (2014Q1, 2014M01, 2014) for from_period/to_period that the schema titles alone do not convey.

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

Purpose4/5

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

The description gives a specific resource (construction cost index series) and its domain role ('for a development appraisal's cost side'), and it indirectly distinguishes itself from site_appraisal by noting regional factors are handled there. It does not explicitly differentiate from the closest sibling, build_cost, so it falls short of a 5.

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

Usage Guidelines4/5

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

Usage context is clear (cost side of a development appraisal) and constraints are stated: UK-wide, UK only, free. It routes regional work elsewhere ('regional factors come with the site appraisal'), but never states when to prefer build_cost or the other index series siblings.

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

council_tax_bandCouncil tax bandA
Read-onlyIdempotent
Inspect
VOA council tax band for a property, from the official list.

Every band is DECLARED — read from the VOA list, never inferred by a model.
`band_source` states which, and a predicted band would arrive as a distinct
value rather than folded in, because a caller cannot tell the two apart
after the fact.

DO NOT PRESENT A BAND AS A BILL. Three fields come back null on purpose and
must not be filled in by estimating:
  * `annual_cost_gbp` — the per-band charge for each billing authority is a
    separate source we do not hold.
  * `effective_date` — the crawl records when the VOA refreshed the LIST,
    which is not when this property's band took effect.
  * `composite` — same reason; it lives on the per-property detail page.

`status` is `not_found` when the band exists in the VOA list but address
matching has not linked this UPRN to it. That is a matching gap on OUR
side, not evidence the property has no band — report it that way round.

England and Wales only: Scotland is the Scottish Assessors Association and
Northern Ireland is Land & Property Services, neither of which is in this
list. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With annotations already covering read-only, idempotent, and non-destructive behavior, the description adds substantial behavioral context: declared versus inferred bands, band_source semantics, three intentionally null fields, not_found matching-gap behavior, and coverage limits. These are exactly the details an agent could otherwise misinterpret.

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

Conciseness4/5

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

The purpose is front-loaded and most content is high-value warning material. It is longer than average, with several paragraphs and bullets, but nearly every sentence earns its place by preventing misuse or misinterpretation of returned fields.

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

Completeness5/5

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

Given the tool's simplicity, one required UPRN parameter, and an existing output schema, the description is more than complete. It explains geography, workflow, null-field semantics, status behavior, and output meaning without needing to restate the output schema itself.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It does so by stating the tool is keyed on a UPRN rather than an address and describing how to obtain one via address_autocomplete and address_resolve. It does not specify UPRN format constraints, but it covers the essential meaning beyond the schema's integer type.

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

Purpose5/5

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

The description states a specific verb and resource: retrieves the VOA council tax band for a property from the official list. It clearly distinguishes itself from address-resolution siblings by instructing callers to use address_autocomplete and address_resolve to obtain the required UPRN.

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

Usage Guidelines5/5

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

It explicitly defines the geographic scope (England and Wales only, excluding Scotland and Northern Ireland), notes that the tool is free, and explains the correct workflow: use address_autocomplete to narrow and address_resolve to get a UPRN. It also warns not to treat a band as a bill and explains the not_found matching-gap semantics.

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

data_coverageData coverage register for a local authorityA
Read-onlyIdempotent
Inspect
The data-coverage register for a local authority — read it before the
data: per-field non-null and source shares over every unit in the
authority (floor area, bedrooms, year built, EPC, last sale, tenure…),
which designation flags were checked and how fully, how many units carry
a registered lease or a hereditament, whether official planning data
covers the authority and how deep it goes (applications, link shares,
latest decision), and how much of the live listing stock the sweep has
dated. `area` is a GSS code (E09000032), a local authority name
(Wandsworth) or a warehouse area id. State the coverage before quoting a
share from a thin field.
UK only. Free.
NameRequiredDescriptionDefault
areaYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and closed-world behavior, so the safety profile is covered. The description adds genuinely new operational context: UK-only availability, zero cost, and a full inventory of what the register reports. It does not describe failure modes for invalid area identifiers, which is a minor gap.

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

Conciseness4/5

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

Front-loaded with the tool's identity and the 'read before the data' directive, followed by the content inventory. The parenthetical field list is long but each item conveys what the register measures; a small amount of trimming is possible but nothing is truly wasted.

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

Completeness5/5

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

An output schema exists, so return-format details are unnecessary. Given a one-parameter read-only tool, the description covers purpose, usage timing, input formats, geographic scope, and cost — everything an agent needs to call it correctly.

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

Parameters5/5

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

Schema coverage is 0% and the single `area` parameter has no description, so the description carries the full burden. It fully compensates by spelling out three accepted formats: a GSS code (E09000032), a local authority name (Wandsworth), or a warehouse area id, with a concrete example.

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

Purpose5/5

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

States a specific verb (read) and resource (data-coverage register for a local authority), then enumerates exactly what it reports: per-field non-null/source shares, designation flags, lease/hereditament counts, planning coverage, and dated listing stock. This is clearly distinguishable from sibling tools like area_stock_profile or area_report, which return the data itself rather than coverage metadata.

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

Usage Guidelines4/5

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

Gives explicit when-to-use direction: 'read it before the data' and 'State the coverage before quoting a share from a thin field.' It also states scope limits (UK only) and cost (Free). It stops short of naming an alternative tool for when coverage is adequate, but the usage condition is unambiguous.

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

distressed_assetsDistressed assets: repeatedly unsold lotsA
Read-onlyIdempotent
Inspect
Properties that keep going to auction and NEVER SELL — the distress screen.

The clearest distress signal in the warehouse: a vendor who wants out and a
market that has said no more than once, both on the public record. Ranked by
how many separate auctions the lot has failed at, then by how long it has
been on the circuit.

READ `guide_to_avm` BEFORE CALLING ANY ROW AN OPPORTUNITY. It is the latest
guide divided by our AVM, and it is the difference between the two reasons a
lot fails:
  * above 1.0 — guided ABOVE our estimate. It keeps failing because it is
    priced wrong. That is a repricing conversation, not a discount.
  * 0.5-1.0 — guided below estimate and repeatedly unsold. The cohort worth
    a call.
  * below ~0.5 — check the lease before anything else. A flat guided at a
    fraction of a freehold estimate is usually short lease, ground rent or a
    garage, not a bargain.

`max_guide_to_avm` filters on that ratio; 0.8 keeps only lots guided at
least 20% below estimate. Lots with no guide or no AVM are EXCLUDED when it
is set, because an unknown ratio is not a low one.

Rows are grouped by ADDRESS, not UPRN. Flat-level UPRN matching in this
table collapses separate flats onto one id — five flats in one Nottingham
block share a single UPRN — so a per-UPRN count over-reports. `uprn` is
returned for onward lookups but is not what rows are counted by, and for a
subdivided building it may name a neighbouring unit.

Geography is postcode district or area, not area_id — the auction table
carries postcodes and the UPRN join is too weak to filter on.

UK only. Free.
NameRequiredDescriptionDefault
limitNo
yearsNo
offsetNo
min_auctionsNo
is_commercialNo
postcode_areaNo
max_guide_to_avmNo
postcode_districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the safety annotations (readOnly, idempotent, closed-world) with behavior the agent could not otherwise know: rows are grouped by ADDRESS not UPRN because flat-level UPRN collapses units, the returned uprn may name a neighbouring unit, and max_guide_to_avm EXCLUDES lots with missing guide/AVM. These disclose non-obvious counting and filtering semantics and the UK-only, free scope.

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

Conciseness4/5

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

Front-loaded with the headline and the headline constraint, then the interpretation ladder as a scannable bullet list. The opening line 'both on the public record' is slightly rhetorical and the guide-section is long, but every block carries decision-relevant content rather than filler.

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

Completeness4/5

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

An output schema exists, so return values need no prose, and the description covers counting unit, geography, and the exclusion trap. The remaining gap is the undocumented pagination/scope parameters (limit, offset, years), which an agent must guess at defaults for.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains max_guide_to_avm (with a worked 0.8 example) and pins geography to postcode_area/postcode_district rather than area_id, but leave limit, offset, years, min_auctions and is_commercial undocumented — five of eight parameters have no semantics anywhere.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Properties that keep going to auction and NEVER SELL — the distress screen.' This is clearly distinguishable from siblings like auction_lots (all lots) and auction_discount (price fall), and the ranking logic ('failed auctions, then time on circuit') further pins down what the tool returns.

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

Usage Guidelines4/5

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

Strong domain guidance: read guide_to_avm first, and an explicit interpretation ladder (above 1.0 = repricing conversation, 0.5-1.0 = worth a call, below ~0.5 = check the lease) that tells the agent both when the output is actionable and when it is a trap. It does not, however, name sibling tools or say when a different auction tool would be the better pick, so routing to alternatives 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.

energy_profileEnergy profile of an areaA
Read-onlyIdempotent
Inspect
Energy composition of an area: EPC band mix, mains gas / electric / oil
split, heat-pump penetration.

`area_id` is the marts area id from `area_resolve` — pass
`analytics_area_id`, not `area_id`, if the resolve response gives both.

Percentages are of properties HOLDING an EPC, not of all stock, and are
whole percentages (0-100). EPCs are lodged on sale or let, so long-held and
social housing are under-represented — say so when reporting a figure.

UK only. Free.
NameRequiredDescriptionDefault
area_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is free to add real operational context: percentages are of EPC-holding properties only, whole numbers 0-100, EPCs are lodged on sale/let so long-held and social housing are under-represented and the figure should be caveated, plus 'UK only. Free.' That is exactly the kind of bias/cost disclosure annotations cannot carry.

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

Conciseness5/5

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

Front-loads the content summary, then the critical parameter routing rule, then the data caveat and scope/cost. Short paragraphs, no filler; every sentence changes how the agent calls or reports the tool.

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

Completeness5/5

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

With an output schema present, return values need no explanation. The description supplies the remaining gaps an agent needs: input provenance, unit semantics, known coverage bias to caveat in reporting, and geographic/cost scope.

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

Parameters5/5

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

Schema description coverage is 0% and the single parameter is undocumented in the schema, so the description must carry it — and it does, explaining the provenance (marts area id from area_resolve) and the exact disambiguation rule (pass analytics_area_id, not area_id, when both exist). No ambiguity remains.

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

Purpose5/5

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

Names a specific resource (energy composition of an area) and enumerates the exact outputs: EPC band mix, mains gas/electric/oil split, heat-pump penetration. That metric list differentiates it from neighbours like area_stock_profile or property_energy_retrofit without needing to name them.

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

Usage Guidelines4/5

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

Tells the agent where the required input comes from ('area_id is the marts area id from area_resolve') and which field to pass when both are returned, plus the UK-only scope. It does not, however, name an alternative tool or state when this should be preferred over the other area/energy siblings.

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

entity_relationshipsRecorded entity relationshipsB
Read-onlyIdempotent
Inspect

Recorded relationship evidence from the derived graph. Use canonical ids from search. Cite path provenance and publication dates. Bounded and eventually consistent; missing links do not establish absence, ownership or off-market status. No private ownership payloads are returned. Free.

NameRequiredDescriptionDefault
kindYes
depthNo
limitNo
entity_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior4/5

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

Beyond the annotations (which already declare a safe read-only, idempotent operation), the description adds real behavioral context: bounded and eventually consistent results, the caveat that missing links do not imply absence/ownership/off-market status, that no private ownership payloads are returned, and that calls are free. It stops short of describing traversal cost at higher depth or pagination behavior.

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

Conciseness4/5

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

Five short, telegraphic sentences that are front-loaded with the purpose statement and each carry distinct information (routing, provenance, consistency caveats, payload limits, cost). No filler, though the clipped style makes a few claims (e.g. 'derived graph') harder to parse than an explicit sentence would.

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

Completeness3/5

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

An output schema exists, so return format needn't be covered, and the annotations carry the safety profile. The description usefully adds consistency and provenance caveats, but for a traversal tool with 0% parameter documentation it leaves depth/limit semantics and the choice against sibling traversal tools unaddressed, so an agent still lacks enough to call it confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it only partially does: it clarifies entity_id semantics ('canonical ids from search') and hints that results are bounded (relevant to depth/limit). The meaning of 'depth' (default 1, presumably traversal hops) and 'limit' (default 25, presumably max results) is never explained, which are the two parameters that most affect how the tool is invoked.

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

Purpose3/5

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

The description states the resource ('relationship evidence from the derived graph'), which maps to a relationship-traversal tool, but it never says plainly what the tool returns or does — e.g. 'returns entities related to entity_id of a given kind up to depth'. It also does not differentiate itself from siblings like actor_network, actor_path, ownership_by_company or lookup_entities, so an agent must infer the distinction.

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

Usage Guidelines3/5

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

'Use canonical ids from search' is an implicit prerequisite routing the agent to the entity-search siblings, and 'Cite path provenance and publication dates' hints at how results should be used. However, there is no explicit when-to-use/when-not versus the numerous relationship-adjacent siblings, leaving selection largely to inference.

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

entity_search_capabilitiesSearch capabilities and coverageA
Read-onlyIdempotent
Inspect

Governed entity families, criteria, coverage and query limits. Call before building searches. Free.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the full safety profile (read-only, idempotent, non-destructive, closed-world), so the bar is lower. The description adds value beyond them by disclosing that the call is "Free" (no cost/rate-limit concern), which affects agent planning.

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

Conciseness5/5

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

Two terse sentences with the resource scope first and the call-to-action second. No filler; every clause earns its place.

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

Completeness4/5

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

An output schema exists, so return-value detail is unnecessary, and annotations cover the safety profile. For a zero-param discovery tool the description is nearly complete, lacking only explicit linkage to the search tools it is meant to precede.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond what the empty schema already conveys.

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

Purpose4/5

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

The description states the resource it exposes (governed entity families, criteria, coverage, query limits) and its role as a pre-flight discovery tool. It is clear what you get, though it does not explicitly differentiate itself from overlapping siblings like data_coverage or search_entities.

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

Usage Guidelines4/5

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

"Call before building searches" gives explicit, actionable timing guidance that an agent can follow. It stops short of naming alternatives or when-not-to-use conditions, so it is clear context without exclusions.

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

epc_certificatesEPC certificates for a propertyA
Read-onlyIdempotent
Inspect
Recent Energy Performance Certificates for a property, newest first:
up to five mart certificates and up to five raw certificates. Raw readings
include exact certificate URL/address, floor level, top-storey indicator,
rooms, area and source dates. Compare source vintages; raw certificates may
be newer than the property summary. Unknown floor codes remain unknown;
habitable rooms are not bedrooms. Changes between certificates do not alone
prove building works or a measured-area change.

Each carries a `retrofit_gap`, or null where it cannot be computed. Null
means unknown, NOT zero — a zero gap means the property is already at its
potential, which is a different claim.

No certificate is a real answer, not a failure: EPCs are lodged on sale or
let, so a long-held property may never have had one.

UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly, idempotent, non-destructive); the description adds substantial context beyond them: result-count caps, the meaning of a null `retrofit_gap` versus zero, interpretation caveats (habitable rooms are not bedrooms, changes don't prove works), UK-only scope, and that the tool is free and keyed on UPRN.

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

Conciseness4/5

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

Front-loads the return shape before the caveats, and every sentence carries interpretive value. It is dense and slightly long for a single-parameter tool, but there is little genuine filler.

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

Completeness5/5

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

For a one-param read tool with an output schema and full safety annotations, the description covers the remaining burden: how to supply the key, what a null gap means, how to read the results, and the geographic/scope limits. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 0% for the single `uprn` parameter, but the description compensates by explaining that the key is a UPRN rather than an address and narrating exactly how to obtain one via `address_autocomplete`/`address_resolve`.

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

Purpose5/5

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

States a specific resource (Energy Performance Certificates) for a specific key (a property/UPRN) and the exact return shape ('newest first: up to five mart certificates and up to five raw certificates'). This clearly separates it from siblings like energy_profile, property_energy_retrofit, or property_summary.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite workflow — call `address_autocomplete` then `address_resolve` to obtain the UPRN — and clarifies that an empty result is a valid answer rather than a failure. It lacks explicit when-not guidance versus other energy/retrofit 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.

equity_estimateEquity gain estimateA
Read-onlyIdempotent
Inspect
Current estimated value against the last recorded sale: gain in pounds and
percent, and how long it has been held.

NOT a loan-to-value: the warehouse holds no mortgage balance, so never
describe the result as equity net of debt. The gain is NOMINAL — a 1998
purchase showing +747% has not beaten inflation by that much, and saying so
is part of reporting it honestly.

A null gain means no recorded sale, not a zero gain.

UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/non-destructive, and the description layers on genuinely useful behavioral context: a null gain means no recorded sale rather than zero, the gain is nominal not inflation-adjusted, coverage is UK-only and free. This directly shapes how the result should be interpreted and reported.

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

Conciseness4/5

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

Well front-loaded: the positive definition comes first, then the negation, caveat, and routing. The 'saying so is part of reporting it honestly' aside is slightly editorial, but every sentence carries a distinct constraint and nothing is redundant.

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

Completeness5/5

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

With an output schema present, return structure needn't be restated, and the description fills the remaining gaps an agent needs: null semantics, nominal-vs-real framing, geographic scope, cost, and the UPRN acquisition path. Nothing required to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 0% for the lone 'uprns' parameter, so the description must carry the meaning — and it does, clarifying the key is a UPRN rather than an address and pointing to the resolver tools. Minor gap: the schema types the field as an array while the prose speaks of 'a UPRN', leaving batch semantics unstated.

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

Purpose5/5

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

States a specific computed output: current estimated value against the last recorded sale, expressed as gain in pounds and percent plus holding period. It explicitly negates the nearest misinterpretation (loan-to-value / equity net of debt), which separates it from valuation_estimate and related siblings at a glance.

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

Usage Guidelines5/5

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

Gives the exact precondition and workflow: keyed on a UPRN, so call address_autocomplete to narrow then address_resolve to obtain one. Also supplies a reporting guideline (call it NOMINAL, don't imply inflation-adjusted real return), which is when-to-use guidance beyond mere invocation.

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

h3_densityHex-binned density for mapsA
Read-onlyIdempotent
Inspect
Hex-binned stock and transaction density for map layers, at H3 resolution 8.

DENSITY ONLY. There is no usable price per cell — the hex cube's price
column is populated on about 2% of rows and its rental, EPC and per-m2
columns are empty. The response lists what is and is not available; do not
offer a price heatmap from this.

`tx_n` is the transaction COUNT and `tx_value` is the total in pounds.

UK only. Free.
NameRequiredDescriptionDefault
limitNo
area_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare the read-only, idempotent, non-destructive, non-open-world profile, yet the description adds material context those annotations cannot convey: which columns are populated (~2% price coverage, empty rental/EPC/per-m2), the meaning of tx_n and tx_value, and the UK-only, free constraints. This is exactly the data-quality disclosure an agent needs before building a downstream offering.

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

Conciseness4/5

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

The critical warning 'DENSITY ONLY' is front-loaded and the sentences are short and skimmable. Minor redundancy between the header warning and the body, but no wasted prose.

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

Completeness4/5

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

With an output schema present the description needn't restate return shapes, yet it still flags the exact data-availability caveat that matters. The main gap is the undocumented area_id/limit inputs, but UK-only, free, and the density-only constraint round out the picture well.

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

Parameters2/5

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

Schema description coverage is 0% and neither area_id nor limit is explained in the description. The description's clarifications (tx_n, tx_value) describe response fields, not the input parameters, so it does not compensate for the schema gap.

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

Purpose5/5

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

States a specific resource (hex-binned stock and transaction density for map layers) with a precise scope qualifier (H3 resolution 8). Crucially, it differentiates itself from the price-heatmap use case an agent might otherwise assume, so it is distinguishable from siblings like market_yields or valuation_full.

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

Usage Guidelines4/5

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

Explicitly warns 'do not offer a price heatmap from this' and leads with 'DENSITY ONLY', which is strong when-not guidance. It stops short of naming a concrete alternative tool for price data, leaving the agent to infer the substitute from the sibling list.

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

land_assemblyAdjacent parcels, owners and the combined siteA
Read-onlyIdempotent
Inspect
The parcels adjacent to one parcel and who owns each — the first question
of a site assembly. Returns each neighbour with its area, land use,
constraints and registered proprietor, plus a `combined` block: total area
in m² and hectares, the number of distinct owners, how many neighbours
already share the subject's proprietor (the parcels needing no second
negotiation), how many have no linked owner, and every constraint present
across the whole assembly.

Address the subject by `parcel_id`, `inspire_id`, `title_number` or
`uprn`. Adjacency means a boundary intersecting the subject's buffered by
`tolerance_m` (0.5 m default) — registered boundaries rarely share an
exact edge, so a strict touch finds almost nothing. Widen `ring_m` to look
further than immediate neighbours.

A neighbour with no owner is one no registered title has been linked to,
NOT one nobody owns — say which when you report it.
UK only. Costs 10 credits (10p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnNo
limitNo
ring_mNo
parcel_idNo
inspire_idNo
tolerance_mNo
title_numberNo
same_owner_onlyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already establish that this is a safe, idempotent read, and the description adds substantial behavioral context: returned neighbour fields, the combined block contents, tolerance-based adjacency, ring widening, UK scope, credit cost, and the important distinction that an unowned neighbour means no linked registered title rather than no owner. Nothing conflicts with the annotations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then moves cleanly through return content, addressing, adjacency semantics, caveats, and cost/workflow. Despite being relatively long, every sentence contributes useful operational context.

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

Completeness4/5

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

The tool is complex with eight parameters and no schema descriptions, but the description covers the main identifiers, adjacency controls, output shape, scope, cost, and key semantic caveat. It is nearly complete, with the notable remaining gap being same_owner_only and, to a lesser extent, limit.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does explain the four subject identifiers plus tolerance_m and ring_m. However, it leaves limit and same_owner_only unexplained, and same_owner_only is behaviorally important enough that this is only a partial compensation for the schema gap.

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

Purpose5/5

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

The description states a specific verb/resource: adjacent parcels and their owners, with the combined-site output explicitly named. It distinguishes this from a simple parcel lookup by emphasizing adjacency analysis and aggregate owner/constraint results, so an agent can tell what this tool is for without opening the schema.

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

Usage Guidelines4/5

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

It clearly frames the tool as the first step in a site assembly, explains how to address the subject parcel, and gives the address workflow via address_autocomplete and address_resolve. It also notes UK-only availability and credit cost, though it does not explicitly state when to choose sibling tools such as parcel_lookup or area_report instead.

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

lha_rateLocal Housing Allowance rateA
Read-onlyIdempotent
Inspect
Local Housing Allowance for a postcode and bedroom category — the ceiling
on housing benefit, and therefore the effective rent floor for a
benefit-funded tenancy. Nothing else in this API tells you what the state
will pay for a property.

THE RATE IS WEEKLY. `rate_unit` says `gbp_per_week` and the figure is
exactly as the rate-setting bodies publish it. Comparing it against a
monthly rent — from `market_facts` rental_value, or a listing's
monthly_rent — understates it by about 4.33x. Convert with 52/12, NOT by
multiplying by 4: a "monthly" figure built from four weeks is 7.7% low and
the error is invisible once it is in a spreadsheet.

Resolved through the Broad Rental Market Area containing the postcode, not
the local authority — a BRMA is its own geography and they do not align.
`brma` names which one answered, and `shared_accommodation_rate` is the
separate, lower figure for under-35 single claimants.

Needs a FULL postcode (a district is not enough to place a BRMA), and
there is no category above 4 bedrooms. Three bodies set these rates: the
VOA in England, Rent Service Scotland, and Rent Officers Wales. Free.
NameRequiredDescriptionDefault
bedroomsYes
postcodeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/non-destructive, but the description adds substantial behavioral context: the rate is weekly and must be converted with 52/12, resolution happens via BRMA rather than local authority, a separate lower shared-accommodation rate applies to under-35 claimants, and three distinct rate-setting bodies exist. This is exactly the beyond-structured-data context an agent needs.

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

Conciseness4/5

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

Content is front-loaded with the core meaning and then ordered by importance (unit trap, geography, postcode/room limits, providers). It is longer than strictly necessary — the 52/12 vs 4x arithmetic aside borders on over-explanation — but nearly every sentence carries decision-relevant information.

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

Completeness5/5

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

Given a two-required-param tool with an output schema, the description is complete: it explains input constraints (full postcode, bedroom cap), the meaning of returned fields (rate_unit, brma, shared_accommodation_rate), and the free/no-auth nature. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does: it requires a FULL postcode because a district cannot place a BRMA, and notes there is no category above 4 bedrooms, matching the enum values. It doesn't explain the enum labels individually, but the key semantics for both parameters are covered.

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

Purpose5/5

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

States a specific verb+resource (retrieve Local Housing Allowance for a postcode/bedroom category) and frames its role concretely: the ceiling on housing benefit and effective rent floor. It also contrasts itself against siblings that provide rent figures (market_facts rental_value, listing monthly_rent), so an agent can place it without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context for when the figure matters (benefit-funded tenancies, comparing against rent sources) and names the alternatives it should be used alongside. It stops short of explicit when-not-to-use guidance or naming a sibling tool by name, so it is strong but not fully prescriptive.

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

listing_historyListing history for a propertyA
Read-onlyIdempotent
Inspect
Every marketing snapshot for a property: asking price over time, price
reductions, days listed, status changes, agent, image count and whether it
had a floor plan.

`price_trajectory` appears only when at least two snapshots carry a price.
No listing at all is a real answer, not a failure — a property sold
off-market or never advertised has none.

UK only. Costs 15 credits (15p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, yet the description still adds non-obvious behavior: cost of 15 credits (15p), a geographic restriction (UK only), and a conditional output rule (`price_trajectory` appears only with at least two priced snapshots). The empty-result semantics are exactly the kind of context annotations cannot express.

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

Conciseness5/5

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

Three short blocks front-loaded with what you get, then output caveats, then cost/region/input workflow. No sentence is filler; each carries a distinct, actionable fact.

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

Completeness5/5

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

With an output schema present, return values need not be described, yet the description still flags the one conditional output field and the legitimate empty case. Combined with cost, region, and UPRN acquisition path, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 0% for the single `uprn` parameter, so the description carries the burden and does so well: it states the tool is keyed on a UPRN rather than an address and routes the agent to `address_autocomplete` and `address_resolve` to obtain one. It omits the accepted numeric format, which is only implied by the schema type.

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

Purpose5/5

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

The description names a specific resource (every marketing snapshot for a property) and enumerates exactly what it contains: asking price over time, price reductions, days listed, status changes, agent, image count, floor plan. That content list distinguishes it from generic siblings like property_history or property_lookup without the agent needing to open any schema.

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

Usage Guidelines4/5

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

It gives a clear usage context: UK only, keyed on a UPRN not an address, and an explicit two-step prerequisite workflow (`address_autocomplete` then `address_resolve`). It also pre-empts a false-negative interpretation ('no listing at all is a real answer'). It stops short of naming when to prefer a sibling such as property_history or listing_market_series instead.

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

listing_market_seriesSupply-side listing statisticsA
Read-onlyIdempotent
Inspect
Monthly supply-side statistics from portal listings for one area, channel
and bedroom band: listings added and reduced, reduction share (the
market-temperature signal), asking price or rent median and quartiles,
£/m² where a floor area is stated, new-build share, agent concentration
(HHI, top-3 share), and — on rent rows — gross yield on two bases (cell
rent over cell price; per-listing rent over the unit's AVM value), and on
sale rows the asking-to-sold ratio and days to completion on listings the
registry matched to a sale.

THREE THINGS TO SAY WHEN YOU QUOTE THIS. (1) listings_added_n is the
NEVER-REDUCED cohort — listings later reduced carry no listing date — so it
undercounts new listings by reduction_share. (2) sold_matched_n is a
match-rate-limited subset; never divide it by listings_added_n and call it
a sell-through rate. (3) There is no days-on-market-to-sale here: the
portal records no exit dates. Use listing_stock_series for what is on the
market NOW. Free.
NameRequiredDescriptionDefault
endNo
limitNo
startNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare it a safe read (readOnlyHint, idempotent, non-destructive); the description goes well beyond that, disclosing that listings_added_n is a never-reduced cohort that undercounts by reduction_share, that sold_matched_n is match-rate limited, that no exit dates exist, and that the call is free. These cohort caveats are exactly the kind of behavioral context an agent cannot get from structured fields.

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

Conciseness4/5

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

Front-loaded with the purpose and metric list, then a clearly labelled caveat block. The metric enumeration is dense and long, but each item maps to a real returned field and the numbered warnings earn their space.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the caveats give the agent enough to interpret the numbers responsibly. The main gap is that 7 input parameters with zero schema coverage are only partially addressed by prose.

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

Parameters3/5

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

Schema description coverage is 0% across 7 parameters, so the burden shifts to prose. The description covers the semantics of channel and bedroom_band ('one area, channel and bedroom band') but says nothing about start, end, limit, area_code or area_type, leaving the temporal window and area-key conventions unexplained.

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

Purpose5/5

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

States a specific verb+resource (monthly supply-side statistics from portal listings) scoped by area, channel and bedroom band, and enumerates the exact metrics returned (listings added/reduced, reduction share, price/rent median and quartiles, HHI, yields, asking-to-sold ratio). It explicitly distinguishes itself from the sibling listing_stock_series ('what is on the market NOW').

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

Usage Guidelines4/5

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

Names a concrete alternative and the condition that selects it: 'Use listing_stock_series for what is on the market NOW.' It also warns against two misuse patterns (dividing sold_matched_n by listings_added_n; expecting days-on-market). However it gives no guidance on when this tool is the right choice versus other index/market series siblings.

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

listing_stock_seriesLive listings stock, dailyA
Read-onlyIdempotent
Inspect
Live listings on the market by day for one area, channel and bedroom band
— the stock-on-market series, with the median age of the dated live stock,
median asking price or rent, and the new-build count.

The series began 2026-09-05 and grows by one point a day: the portal keeps
no exit dates, so stock cannot be reconstructed for the past, only observed
forwards. A short series is therefore expected, not missing data. `start` /
`end` are dates (YYYY-MM-DD). Free.
NameRequiredDescriptionDefault
endNo
limitNo
startNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's real contribution is the data-availability caveat: no exit dates are kept, stock cannot be backfilled, and the series grows one point per day. That is valuable non-obvious context, though it says nothing about the limit/pagination behavior.

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

Conciseness5/5

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

Two short paragraphs, front-loaded with the resource and filters, followed only by the caveats that materially affect interpretation. Every sentence earns its place.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the temporal caveat is handled thoroughly. The gaps are the undocumented limit and area_type parameters against 0% schema coverage, which leaves the definition slightly short for a 7-parameter tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the burden. It clarifies that start/end are YYYY-MM-DD dates and that the series is sliced by area, channel and bedroom band, but leaves limit (default 90 points) and area_type granularity completely unexplained, so several parameters remain opaque.

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

Purpose5/5

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

States a specific resource and scope: a daily stock-on-market series for one area, channel and bedroom band, naming the exact measures returned (median age of dated live stock, median asking price/rent, new-build count). This distinguishes it from sibling series tools such as asking_price_index_series or market_volume_series without needing the schema.

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

Usage Guidelines4/5

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

Gives clear context for legitimate use: the series starts 2026-09-05 and a short series is expected rather than missing data, which pre-empts a common misreading. It does not name alternative tools or state explicit exclusions, 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.

long_held_high_equityLong-held, high-equity propertiesA
Read-onlyIdempotent
Inspect
Long-held properties in an area carrying a large paper gain — the classic
off-market cohort, ordered by gain rather than by value.

Typical output for a London district: mid-1990s purchases at £23,000-37,000
now valued at £566,000-758,000.

`area_id` is the marts area id from `area_resolve`.

UK only. Costs 40 credits (40p).
NameRequiredDescriptionDefault
limitNo
area_idYes
min_yearsNo
min_gain_pctNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely non-structured behavior: result ordering by gain, the commercial cost (40 credits / 40p) and the UK-only scope. It says nothing about pagination or the effect of the limit parameter, which keeps it short of a 5.

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

Conciseness5/5

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

Front-loaded with the cohort definition, then a concrete illustrative output line, then the parameter note and hard constraints. Every sentence contributes something an agent would otherwise have to guess, with no padding.

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

Completeness4/5

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

An output schema exists, so return shape needs no prose (the example is a bonus, not a substitute), and annotations cover safety. What remains thin is the tuning of `limit` and the thresholds behind min_years/min_gain_pct — for a 4-parameter query tool with 0% schema coverage, that keeps it at a 4 rather than a 5.

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

Parameters3/5

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

Schema description coverage is 0% across four parameters, so the description carries the burden. It does resolve the most error-prone one — `area_id` is the marts area id from `area_resolve` — and the cohort framing implicitly explains min_years (long-held) and min_gain_pct (high equity). `limit` and the actual defaults (10 years, 50%) are never mentioned, so compensation is partial.

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

Purpose5/5

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

The description defines a precise cohort (long-held properties carrying a large paper gain, i.e. the off-market segment) and states the ordering rule explicitly: 'ordered by gain rather than by value.' That ordering detail alone separates it from the many sourcing_* and valuation_* siblings, so an agent can pick it without opening the schema.

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

Usage Guidelines3/5

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

It gives clear context signals — UK only, 40 credits, and that `area_id` must come from `area_resolve` — which is prerequisite guidance an agent needs. However, it never states when to prefer this over overlapping siblings such as sourcing_offmarket_owners or sourcing_owners, nor any exclusion beyond geography, so usage is implied rather than directed.

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

lookup_entitiesFind public records by address or referenceA
Read-onlyIdempotent
Inspect

Find public records by title/address text, postcode or public UUID. Exact and lexical lookup uses no model or embeddings; supports token prefixes and bounded typo tolerance in accepted search publications. Returns separate families with UUID detail links and explicit searched coverage. Never claim an unlisted family was searched, or that no match proves nonexistence. For full address matching use address_autocomplete; for a UPRN use address_by_uprn. For attribute criteria use search_entities with the governed query. Free.

NameRequiredDescriptionDefault
qYes
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real behavioral detail beyond them: exact/lexical lookup with no model or embeddings, token-prefix support, bounded typo tolerance, and the coverage caveat about unsearched families. The 'Free' note is a useful cost signal. Slight overlap with the output schema on return structure keeps it from a 5.

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

Conciseness4/5

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

Front-loaded with purpose and accepted inputs, then alternatives, then caveats; no filler sentences. It is dense and runs long, but nearly every clause carries routing or behavioral information.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description covers routing, lookup semantics, coverage limits, and cost. The only real gap is the limit parameter's behavior and whether it applies per-family or overall.

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

Parameters3/5

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

Schema coverage is 0%, so the description carries the burden. It does clarify what q accepts (title/address text, postcode, UUID, prefixes, typo tolerance), which is genuinely useful. However, 'limit' is never mentioned, and its interaction with the 'separate families' result structure is left unexplained.

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

Purpose5/5

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

States a specific verb and resource (find public records) plus the accepted key types (title/address text, postcode, public UUID). It also names the sibling tools it is not (address_autocomplete, address_by_uprn, search_entities), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use-this and when-to-use-an-alternative: full address matching goes to address_autocomplete, a UPRN goes to address_by_uprn, attribute criteria go to search_entities. It also states the negative case (an unlisted family was not searched, no match does not prove nonexistence).

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

market_factsMarket facts for an areaA
Read-onlyIdempotent
Inspect
Price, price per sqm and turnover rate for ONE geography × asset class ×
bedroom band × period, from the pre-cubed area_facts table.

Metrics: sales_price, price_psm, turnover_rate are populated today.
rental_value, gross_yield and days_on_market are NOT — the pipeline has
never backfilled them, so they come back null and are named in the
response's `metrics_with_no_data`. Do not compare or rank on them, and do
not report a null from them as "no activity"; it means "not collected".

turnover_rate is sales as a share of the stock that could have sold. It
is the liquidity measure — transaction COUNT is market size, not
liquidity (W2 has the largest dwelling stock of any London district and
near-bottom turnover).

Geography is `postcode` (resolved to its district — the cube has no
sector or unit grain) or `lad_code` (a local-authority NAME, e.g.
"Lambeth", not a GSS code). There are no LSOA or ward areas in the
warehouse; those selectors return 422.

To compare AREAS against each other use `market_ranking`, not repeated
calls here. For "how many sales" use `market_volume_series` — the `tx_n`
here counts only UPRN-matched, non-anomalous sales and runs well short of
the registry. The prices are sound; the count is a sample size.

READ `tx_decision` BEFORE QUOTING A PRICE. Every row carries one, and it
says how much evidence is behind that number. Measured over the whole cube:

  direct      2.7%   30+ sales in the cell. Quote it plainly.
  modeled    15.4%   5-29 sales. Sound, lightly smoothed.
  suppressed 44.0%   1-4 sales. Indicative — say the sample is thin.
  imputed    17.3%   ZERO sales. The price is the prior BORROWED from a
                     parent geography, not a measurement of this cohort.
  missing    20.7%   zero sales and no price at all (null).

An `imputed` row looks exactly like a real one — a confident, specific
figure — and it repeats: in one district, 25 cohorts all read the same
353,909, because they are all the same borrowed number. Reporting it as
"2-bed detached in AL10 sell for £353,909" states a fact the data does not
contain. Say the cohort has no recorded sales instead, or aggregate up to a
grain that does. `turnover_rate` is 0 on every one of these rows, which is
a second tell.

Where you want the AREA rather than a cohort, do not read a cohort row and
call it the area: aggregate, or use `market_ranking`, which does it for you
weighted by the sales behind each cohort. There is no rollup row in this
cube — no `bedroom_band="all"` and no `hmo_flag="all"`; filtering on either
matches nothing at all.

`max_periods` (default 3) bounds how many recent MONTHLY periods come back
when `period` is not given. The grain is one row per (asset_subtype ×
bedroom_band × hmo_flag × period) — about 13 cohorts per period — so a wide
window gets large fast. The response reports `period_frequency`,
`periods_returned` and `truncated` so you can tell a short answer from a
cut-off one.

UK only. Free.
NameRequiredDescriptionDefault
periodNo
h3_cellNo
metricsNo
lad_codeNo
postcodeNo
lsoa_codeNo
ward_codeNo
asset_classNo
max_periodsNo
bedroom_bandNo
asset_subtypeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly/idempotent/destructive=false), but the description goes far beyond them: it names the null metrics, warns that imputed rows are borrowed priors that look real, gives the tx_decision distribution, and cites the repeating-353,909 tell. This is exactly the kind of behavioral context annotations cannot carry.

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

Conciseness4/5

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

Front-loads the one-line purpose and grain before the caveats, and each paragraph covers a distinct failure mode (null metrics, imputation, geography grain, rollup absence, truncation). It is long and repeats the 'don't rank on nulls / aggregate instead' idea, but the length is largely justified by the tool's complexity.

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

Completeness5/5

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

For an 11-parameter cube reader with an output schema present, the description supplies everything needed to call and interpret it: grain, valid geographies, the tx_decision evidence ladder, and the response fields (period_frequency, periods_returned, truncated, metrics_with_no_data). Only h3_cell is left unexplained, which is minor.

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

Parameters4/5

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

With 0% schema description coverage the description must carry the params, and it does: postcode resolves to district (no sector/unit grain), lad_code is a NAME not a GSS code, max_periods defaults to 3 and bounds monthly periods, and period semantics are explained. Gaps remain — h3_cell is never mentioned and the accepted values of `metrics` are only implied by the populated/null list.

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

Purpose5/5

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

Opens with a precise verb+resource+grain: what it returns (sales_price, price_psm, turnover_rate) and the exact cube grain (geography × asset class × bedroom band × period). It also names the sibling tools it is not (market_ranking for area comparison, market_volume_series for counts), so an agent can route without opening another schema.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not: 'To compare AREAS against each other use market_ranking, not repeated calls here' and 'For "how many sales" use market_volume_series'. It further states that LSOA/ward selectors return 422 and that there is no rollup row, removing the most likely mis-invocations.

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

market_forecastIndex forecast h1–h7 with bandsA
Read-onlyIdempotent
Inspect
The published house-price index forecast for a postcode district or local
authority: the last SETTLED index point as the anchor, then up to seven
forecast periods with `lo`/`hi` bands, plus the method and publication
grain behind them. Seven is the horizon the index publishes — nothing
beyond it is offered, and a forecast is a projection of the smoothed
repeat-sales index, not a valuation of any property.
UK only. Free.
NameRequiredDescriptionDefault
horizonNo
area_codeYes
area_typeNodistrict
frequencyNomonthly

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, openWorldHint=false), so the bar is lower. The description adds real behavioral context beyond them: the hard horizon ceiling of seven periods, the settled-index anchor, the method (smoothed repeat-sales index), and the explicit disclaimer that this is not a property valuation, which guards against misuse as an appraisal tool.

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

Conciseness4/5

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

Front-loaded with what is returned, then constraints and caveats; roughly 70 words with no filler sentences, and the terse 'UK only. Free.' is efficient. The phrase about the smoothed repeat-sales index is slightly ornamental but earns its place as a misuse guard. Minor redundancy between 'the horizon the index publishes' and 'nothing beyond it is offered'.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the bands, anchor and horizon limit are all covered for a read-only forecast tool. The remaining shortfall is on the input side: with 0% schema coverage, the description should specify the area_code format and what monthly vs quarterly changes about the series. Otherwise an agent has everything needed to call the tool correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the load. It partially compensates: 'postcode district or local authority' maps to the area_type enum, and 'up to seven forecast periods' documents the horizon cap, while 'publication grain' loosely gestures at frequency. It says nothing about the expected format of area_code (GSS code vs postcode) or the distinction between monthly and quarterly frequency, leaving two of four parameters ambiguous.

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

Purpose4/5

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

States a specific verb+resource+output shape: a published house-price index forecast for a postcode district or local authority, anchored on the last settled index point with up to seven banded periods. It also implicitly separates itself from valuation tools by noting the forecast is a projection of the smoothed repeat-sales index, not a property valuation. It never names the closest sibling (market_index_series / asking_price_index_series) explicitly, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

The description states hard constraints — UK only, free, horizon capped at seven with nothing beyond offered — which effectively tells the agent when the tool is in scope. However, it gives no explicit guidance on when to prefer this over the historical index tools (market_index_series, asking_price_index_series) or what to do if a forecast is unavailable for an area. Usage is implied by 'forecast' rather than directed.

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

market_index_seriesHouse price index seriesA
Read-onlyIdempotent
Inspect
The published house-price INDEX for one postcode district or local
authority: the level per month (base period = 100), the forecast tail
flagged, and provenance saying how the index was built.

Use this for "how has W14 moved since 2015", "what is the trend in
Camden", or to carry a known price to today:
price(t2) = price(t1) x value(t2) / value(t1). It is the same series that
shapes valuation_full's back-series (`provenance.series_basis` matches
its `series_basis`). For PRICES by cohort use market_facts; for sale
COUNTS use market_volume_series. `value` is an index level, never a price.

`area_code` is a postcode district ("W14"; a full postcode is truncated)
with area_type="district", or a local authority NAME ("Camden",
"Manchester" — not a GSS code) with area_type="lad". An unknown area is an
error naming the nearest matches; read them back to the user.

`start` / `end` are periods: "2015", "2015-06" or "2015-Q2"; `end` is
inclusive. `limit` keeps the most recent N periods inside the bounds (the
default returns the whole monthly series, 1995 to present).

READ `provenance` BEFORE QUOTING A MOVE. `index_method` is
repeat_sales_area where the area carries its own repeat-sales index, and
repeat_sales_national where the area was too thin and the pipeline
published the NATIONAL index against it — the turns are then national,
not local, and you must say so. `last_settled_period` is the last month
the registry has filled; points after it carry is_forecast=true with
lo/hi bands. `tx_n` per point is the cube's UPRN-matched sample, not the
registry's count.

The index is published monthly. frequency="quarterly" returns an empty
series with a note wherever no quarterly rows exist. UK only. Free.
NameRequiredDescriptionDefault
endNo
limitNo
startNo
area_codeYes
area_typeNodistrict
frequencyNomonthly
include_forecastNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is free to add real operational context: index_method repeat_sales_area vs repeat_sales_national (a correctness trap), last_settled_period and is_forecast with lo/hi bands, tx_n being a cube sample not a registry count, quarterly returning an empty series with a note, UK-only, free, and unknown-area error behavior that must be read back to the user.

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

Conciseness4/5

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

Front-loaded with purpose and routing, then parameters, then the provenance warning, and it uses emphasis ('READ provenance BEFORE QUOTING A MOVE') to surface the highest-risk step. It is long and dense, but nearly every sentence carries actionable information rather than restating the name or title.

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

Completeness5/5

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

For a 7-parameter tool with zero schema descriptions, an output schema, and rich annotations, the description covers what an agent must know: valid formats, filtering scope, default series range, the provenance/index_method interpretation rule, forecast flags, and failure behavior. Nothing needed for correct invocation or correct quoting of results is missing.

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

Parameters5/5

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

Schema description coverage is 0%, and the description compensates thoroughly: area_code is a postcode district (full postcodes truncated) with area_type='district', or a local authority NAME (not a GSS code) with area_type='lad'; start/end accept '2015', '2015-06', '2015-Q2' with end inclusive; limit keeps the most recent N periods, default whole series 1995-present. Only include_forecast is left implicit, conveyed via 'the forecast tail flagged'.

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

Purpose5/5

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

States a specific verb+resource: the published house-price index for one district or local authority, with level per month, base period, forecast tail and provenance. It explicitly differentiates from siblings by naming the exact boundary: 'For PRICES by cohort use market_facts; for sale COUNTS use market_volume_series' and clarifies its relationship to valuation_full's back-series via provenance.series_basis.

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

Usage Guidelines5/5

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

Gives concrete triggering questions ('how has W14 moved since 2015', 'what is the trend in Camden'), the carry-forward formula for pricing, and explicit exclusions routing to market_facts and market_volume_series. It also tells the agent when the output is not local (thin areas publishing the national index) and how to report that.

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

market_profileMarket profile for an area and bedroom cohortA
Read-onlyIdempotent
Inspect

One market profile: an area × residential bedroom cohort with every published measure — asking sale price and rent, completed sale price, gross yield on asking, live stock, new listings, price reductions, turnover and registry sale volume — each with its basis sentence, unit, coverage and an observed monthly series sliced to window months (default 60); plus the asking price/rent indexes, the whole-area house price index (labelled so; there is no cohort HPI), agent concentration and days to completion, and SearchQuery links to the related completed sales and listings. A measure the source does not publish for the cohort is null with the reason, never zero. Ids come from search_entities with entity market_profiles. Free.

NameRequiredDescriptionDefault
windowNo
profile_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real behavioral value beyond that: unpublished measures are returned as null with the reason, never zero, and there is no cohort HPI (only whole-area, explicitly labelled). That null-vs-zero contract is exactly the kind of disclosure that prevents misreading results.

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

Conciseness2/5

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

The bulk of this single run-on sentence enumerates return fields — indexes, agent concentration, days to completion, SearchQuery links — which an output schema already provides, so many tokens do not earn their place. The input-relevant facts (window default, id sourcing, null semantics) are buried mid-stream rather than front-loaded.

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

Completeness5/5

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

Given an output schema is present, the description need not restate returns, yet it ensures the agent understands the result contract (nulls with reason, no cohort HPI, index coverage) plus how to obtain the required id. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden — and it largely meets it: `window` is defined as the number of months the series is sliced to (default 60), and `profile_id` is sourced from search_entities with entity market_profiles. Neither parameter is left to guesswork, though no format or validity constraints are given.

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

Purpose4/5

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

The description states a specific resource — a single market profile for an area × bedroom cohort — and enumerates the categories of measures it returns, so the purpose is unambiguous. However, it never names or contrasts itself against close siblings such as area_report, market_facts, or market_yields, leaving the agent to infer differentiation.

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

Usage Guidelines3/5

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

It provides one genuinely useful usage fact: profile_id comes from `search_entities` with entity `market_profiles`, and it notes the call is 'Free'. But there is no guidance on when to choose this over the many related market siblings, nor any exclusion criteria.

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

market_rankingRank areas on a market metricA
Read-onlyIdempotent
Inspect
Rank areas AGAINST EACH OTHER on a market metric — one row per area,
AGGREGATED over a trailing window of whole months.

This is the comparison tool. `market_facts` answers for one geography;
calling it in a loop to build a league table is slower, costs more and
gives you rows from different periods. Use this for "which districts in
Greater Manchester turn over fastest", "rank these twelve postcodes by
price per sqm", "cheapest LADs in the North West by price_psm".

ALWAYS report the `window` block from the response alongside the ranking.
It names the months aggregated, and it matters: a 12-month turnover and a
3-month one differ by roughly 4x. `lag_months` (default 3) deliberately
drops the most recent months because HM Land Registry registers sales
long after completion — the newest month looks near-dead and would rank
registration lag rather than liquidity.

turnover_rate is exact — it is sales over stock, recomputed at this grain.
Price, rent and yield are weighted means of the underlying medians, so
describe them as indicative, not as medians.

`min_stock` (default 50) skips areas with too few dwellings for a rate to
mean anything: one sale in a 2-dwelling district is a turnover of 0.5,
which otherwise tops the table. Where a returned area still has a small
`stock_count`, say so rather than presenting its rate as comparable.

Scope it EITHER by `parent_area_code` (every child of that area, e.g.
every district in a county) OR by an explicit `area_codes` allowlist.
`area_type` is the grain: "Postcode District" (default) or an
administrative type such as "Local Authority District".

`sort` defaults to turnover_rate, the liquidity measure — sales as a
share of the stock that could have sold. Do NOT sort on gross_yield or
days_on_market: they are 0% populated, so every row ties as NULL and the
"ranking" is arbitrary order. Populated metrics are sales_price,
price_psm and turnover_rate. Whatever you sort on is always returned,
and anything empty is named in `metrics_with_no_data`.

Distinct from `market_volume_ranking`, which ranks on raw transaction
COUNT — that is market size, not liquidity.

UK only. Free.
NameRequiredDescriptionDefault
hmoNo
sortNo
limitNo
orderNo
metricsNo
area_typeNo
min_stockNo
area_codesNo
lag_monthsNo
asset_classNo
bedroom_bandNo
window_monthsNo
parent_area_codeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial behavioral context beyond them: the need to report the `window` block, why `lag_months` exists (registration lag), which metrics are exact vs. weighted means, that `min_stock` guards against tiny-stock distortion, and that gross_yield/days_on_market are 0% populated so sorting on them yields arbitrary order.

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

Conciseness4/5

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

Front-loaded with purpose and sibling routing before the caveats, and every paragraph carries non-redundant information (window reporting, metric caveats, sort warnings). It runs long and leans on capitalization for emphasis, but the density earns the length.

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

Completeness4/5

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

An output schema exists, so return-shape explanation is not needed, and the description instead covers the behavioral traps an agent would otherwise hit (lag, min_stock, unpopulated metrics, indicative vs. exact metrics). The gap is undocumented parameters like `hmo`, `limit`, and `order`, but for this complexity the description is nearly complete.

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

Parameters3/5

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

Schema coverage is 0% across 13 parameters, so the description must carry the load. It meaningfully documents `sort` (defaults to turnover_rate), `min_stock` (default 50), `lag_months` (default 3), `area_type`, and the parent_area_code/area_codes scoping choice, but leaves `hmo`, `limit`, `order`, `metrics`, `asset_class`, and `bedroom_band` entirely unexplained. Partial compensation on a wide-param tool justifies a 3.

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

Purpose5/5

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

The opening states a specific verb and resource with scope: 'Rank areas AGAINST EACH OTHER on a market metric — one row per area, AGGREGATED over a trailing window of whole months.' It then names the siblings it differs from (`market_facts`, `market_volume_ranking`), so an 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.

Usage Guidelines5/5

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

Explicit when-to-use with worked examples ('which districts in Greater Manchester turn over fastest'), an explicit alternative and why (`market_facts` in a loop is slower, costs more, mixes periods), and an explicit exclusion ('Distinct from `market_volume_ranking`, which ranks on raw transaction COUNT'). Nothing 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.

market_volume_rankingRank districts by volume or priceA
Read-onlyIdempotent
Inspect

Rank postcode districts by transaction volume or median price over a trailing window — "the busiest districts in Greater London last year", "the priciest districts in SW".

Restrict the candidate set with county ("GREATER LONDON") or area ("SW"); omit both to rank nationally. UK only. Free.

NameRequiredDescriptionDefault
areaNo
limitNo
countyNo
monthsNo
order_byNotxn_count

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context beyond that: trailing-window semantics, UK-only geography, and the fact that it is free. It does not disclose ordering/pagination behavior, but it clears the bar the annotations set.

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

Conciseness5/5

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

Three tight sentences: purpose and examples front-loaded, scoping rule next, and scope/cost constraints last. Every clause earns its place and nothing is redundant.

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

Completeness4/5

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

An output schema exists, so return values needn't be described. The description covers the key scoping inputs and geographic limits, but given 5 undocumented params it would benefit from noting the default window and the richer order_by options.

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

Parameters3/5

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

With 0% schema description coverage, the description carries the full burden. It meaningfully explains `county` and `area` (with worked examples and the omit-both default) and implies `months` via 'trailing window', but leaves `limit` and the 9-option `order_by` enum largely unexplained — only 'volume or median price' is implied, not p25/p75 or new-build variants.

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

Purpose4/5

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

States a specific verb (Rank) and resource (postcode districts) with the ranking dimension (transaction volume or median price). It implicitly separates itself from siblings like market_volume_series (a series) and market_ranking, though it never names an alternative to differentiate explicitly.

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

Usage Guidelines4/5

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

Provides concrete triggering examples ('busiest districts in Greater London last year', 'priciest districts in SW') and states the selection rule for scoping — use county or area, or omit both to rank nationally. It stops short of naming sibling alternatives or stating when NOT to use it.

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

market_volume_seriesMonthly transaction volumeA
Read-onlyIdempotent
Inspect
Monthly transaction VOLUME for a postcode district, postcode area or
county — every registered sale, 1995 to present, oldest month first.

Use this, not `market_facts`, for "how many sales" questions.
`market_facts` reads the area_facts cube, whose count is a UPRN-matched
sample that runs 17-66% short of the registry; this reads HMLR price paid
directly. Conversely use `market_facts` for price/rent/yield by asset
class and bedroom band, which this does not break down.

Provide exactly one of district ("SW11", or a full postcode, which is
truncated), area ("SW") or county ("GREATER LONDON"). `district` is a
POSTCODE district, not a borough — "NW1", not "Camden".

`start` and `end` are months: "2024-06" or "2024-06-01", either accepted.

Metrics default to txn_count + median_price. Prices are category A only —
a median including repossessions is not a market median.

ALWAYS check `provisional_from` in the response before reading a trend:
HM Land Registry registers sales months after completion, so the trailing
months are incomplete and will rise. UK only. Free.
NameRequiredDescriptionDefault
endNo
areaNo
startNo
countyNo
metricsNo
districtNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld=false), and the description adds substantive behavior beyond that: data provenance, the `provisional_from` caveat that trailing months are incomplete and will rise, category A-only prices, and UK-only scope. This is exactly the context annotations cannot carry.

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

Conciseness5/5

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

Despite its length, it is front-loaded with the core purpose and every sentence carries actionable information — routing, parameter formats, and the provisional-data caveat. No filler or restatement of the title.

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

Completeness5/5

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

An output schema exists, so return structure need not be documented, yet the description still flags `provisional_from`, the single most important field for correct trend reading, plus data scope and provenance. Nothing needed to invoke or interpret it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate and it does: exactly one of district/area/county, concrete examples ("SW11", "SW", "GREATER LONDON"), the note that a full postcode is truncated, the district-is-not-a-borough warning, accepted month formats ("2024-06" or "2024-06-01"), and default metrics.

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

Purpose5/5

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

States a specific resource (monthly transaction volume), the exact geographies covered (postcode district/area/county), and the temporal span (1995 to present, oldest month first). It explicitly distinguishes itself from the sibling `market_facts` in both directions, 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.

Usage Guidelines5/5

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

Gives explicit when-to-use ("how many sales" questions) and when-not-to-use, naming the alternative `market_facts` and the reason (its count is a UPRN-matched sample 17-66% short vs HMLR price paid). It also redirects price/rent/yield queries back to market_facts.

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

market_yieldsGross yield on two bases, by monthB
Read-onlyIdempotent
Inspect
Gross rental yield for an area and bedroom band on two bases, by month,
with n: `gross_yield_asking` (12 × the month's median asking rent ÷ the
median asking price of sale listings in the same area, band and month —
different properties) and `gross_yield_avm_median` (the median, over rent
listings matched to a property, of 12 × asking rent ÷ our valuation of
that property; `gross_yield_avm_n` behind it). Both rest on ASKING rents,
not achieved ones. Null where a month is too thin to publish — say so
rather than averaging around it. `latest` is the most recent month with a
figure. The basis sentence comes with it.
UK only. Free.
NameRequiredDescriptionDefault
monthsNo
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive safety, so the description correctly spends its words elsewhere: it discloses that both bases rest on ASKING rather than achieved rents, that nulls appear where a month is too thin, and that 'latest' is the most recent month with a figure. It even warns against averaging around nulls, which is genuinely useful behavioural context not present in annotations.

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

Conciseness4/5

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

Purpose is front-loaded and the definition of each basis is compact and self-contained. The nested parentheticals and backticked field names make it dense, but no sentence is wasted.

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

Completeness3/5

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

An output schema exists, so return values arguably needn't be spelled out, and annotations carry the safety profile. The remaining gap is parameter meaning: for a four-parameter tool with zero schema coverage, the description should have explained months, area_code and area_type, but it does not.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden, yet it never explains the four parameters. It vaguely references 'an area and bedroom band' but says nothing about months, the area_code vs area_type split, the district/lad/national enum, or any default values.

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

Purpose4/5

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

The description states a specific resource (gross rental yield for an area and bedroom band) and precisely defines the two output bases, gross_yield_asking and gross_yield_avm_median. It is clear what the tool returns, but it never distinguishes itself from similar series siblings such as market_index_series or asking_rent_index_series.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no alternative tool is named despite several index/series siblings existing. 'UK only. Free.' is contextual scope, not usage direction, and defaults such as NATIONAL are never explained.

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

mixed_use_buildingsMixed-use buildings in an areaA
Read-onlyIdempotent
Inspect
Buildings holding BOTH residential and commercial units — the conversion
and permitted-development cohort.

Hard to source elsewhere: it is a property of the building's unit mix, not
an attribute of any single property.

UK only. Costs 30 credits (30p).
NameRequiredDescriptionDefault
limitNo
area_idYes
min_commercialNo
min_residentialNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds non-redundant behavior: a geographic restriction (UK only) and a concrete per-call price of 30 credits, both of which materially affect whether and how an agent calls it. It stops short of describing result volume or how the limit parameter bounds output.

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

Conciseness5/5

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

Three short sentences, each doing distinct work: definition, differentiation, then constraints. The identifying criteria and the UK-only/cost caveats are front-loaded with no filler.

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

Completeness3/5

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

An output schema exists and annotations are rich, so return values and safety need no explanation. What is missing is the practical calling detail for a 0%-documented schema: no hint about what an area_id looks like (a relevant sibling, area_resolve, exists) or how limit and the two minimum thresholds interact.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, so the description must carry the load and largely doesn't. The 'BOTH residential and commercial' framing loosely implies that min_residential and min_commercial are thresholds of at least 1, but area_id, limit, and their formats/defaults are never addressed.

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

Purpose4/5

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

The description names a concrete resource and the defining filter: buildings holding BOTH residential and commercial units, framed as the 'conversion and permitted-development cohort'. The line 'a property of the building's unit mix, not an attribute of any single property' implicitly separates it from property-level siblings like property_lookup or commercial_property, though no sibling is named outright.

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

Usage Guidelines3/5

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

It supplies real usage constraints — 'UK only' and a 30-credit (30p) cost — which an agent needs before calling. However, there is no guidance on when to prefer this over adjacent tools such as commercial_property, property_summary, or area_stock_profile; the agent must infer the boundary from the unit-mix framing.

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

mortgage_ratesBank of England mortgage ratesA
Read-onlyIdempotent
Inspect
Average UK mortgage rates from the Bank of England: 2-year fixed, 3-year
fixed at 75% LTV, and the standard variable rate.

This is the BoE's published market average — an input to an appraisal, not
a quote. It carries no applicant, product or lender, so do not present it
as a rate someone can get. Pair it with a yield figure or an appraisal
(`site_appraisal`) rather than quoting it alone.

No parameters: it is one national series. Free.
NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld=false, but the description adds real behavioral context beyond them: it is a published national average with no applicant, product or lender attached, it is an appraisal input rather than a quotable rate, and it is free. That framing prevents a category of misrepresentation the annotations say nothing about.

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

Conciseness5/5

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

Three short paragraphs, front-loaded with what the data is, then how to use it, then the mechanical facts (no params, free). No sentence is redundant with another and nothing is buried.

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

Completeness5/5

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

An output schema exists, so return values need no explanation. Scope (UK, national), data provenance (BoE), the specific series covered, the absence of parameters, and the recommended pairing are all present; nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

With zero parameters the baseline is 4, and the description justifies the empty schema ('one national series'), which explains why no filtering arguments exist. It does not go further into what distinguishes each published series or its update cadence, so it stays at the baseline rather than exceeding it.

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

Purpose5/5

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

States a specific verb+resource (average UK mortgage rates from the Bank of England) and enumerates the exact series returned: 2-year fixed, 3-year fixed at 75% LTV, and SVR. An agent can distinguish this from sibling series tools like market_yields or asking_price_index_series without opening the schema.

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

Usage Guidelines5/5

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

Explicit when-not guidance: 'do not present it as a rate someone can get,' plus a positive routing instruction to pair it with a yield figure or `site_appraisal`. This names both the misuse mode and the alternative consumer of the output, which is exactly what an agent needs to place the tool in a workflow.

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

owner_profileProprietor profileA
Read-onlyIdempotent
Inspect
What the Land Registry shows for one proprietor: titles held, company
status, country of incorporation, directors and PSCs where known.

Give a company number for an EXACT match. A name is a fuzzy substring
search — company names repeat across unrelated entities, so a name-matched
result is a candidate set, NOT a portfolio, and the response says which
kind you got. Report it that way.

`n_distinct_titles` is the holding count; `n_rows` is higher because one
title appears on several ownership rows over time.

UK only. Costs 25 credits (25p).
NameRequiredDescriptionDefault
nameNo
limitNo
company_numberNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: UK-only coverage, a 25-credit cost, and a crucial interpretation caveat that name-matched results are a candidate set and the response declares which kind you got. It also explains the n_distinct_titles vs n_rows discrepancy, which prevents a serious misreading of the returned counts.

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

Conciseness5/5

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

Front-loaded with what the tool returns, then the input-mode choice, then interpretation warnings and cost. Every sentence carries information an agent needs; nothing is redundant with the annotations.

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

Completeness4/5

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

An output schema exists, so return-value documentation is optional, and the description still pre-empts the main misreading of the counts. Cost, geography and match semantics are all covered; the only gap is unmentioned pagination/limit behavior on a tool defaulting to 200 rows.

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

Parameters4/5

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

With 0% schema description coverage the description must carry parameter meaning, and it does for the two decision-critical params: exact company_number vs fuzzy name, including the deduplication caveat. The limit parameter and its default of 200 are never mentioned, leaving one of three parameters undocumented.

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

Purpose5/5

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

States a specific resource (a proprietor's Land Registry profile) and enumerates exactly what it returns: titles held, company status, country of incorporation, directors and PSCs. The exact-vs-fuzzy distinction and the 'proprietor' framing separate it from siblings like ownership_by_company and entity_relationships without needing the schema.

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

Usage Guidelines4/5

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

Gives clear selection guidance between the two input modes: company_number for an exact match, name as a fuzzy substring search with an explicit warning that name matches are a candidate set, not a portfolio. It does not name a specific sibling as the alternative for the fuzzy case, so it stops short of the top band.

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

ownership_by_companyTitles held by a companyA
Read-onlyIdempotent
Inspect

Titles held by a company, by Companies House number. Useful for mapping a landlord's or developer's portfolio. England & Wales only. Costs 15 credits (15p).

NameRequiredDescriptionDefault
limitNo
company_numberYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds two things annotations cannot express: the credit cost (15 credits/15p) and the geographic coverage limit, both of which materially affect whether an agent should call it.

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

Conciseness5/5

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

Three short sentences, front-loaded with the resource and key, then use case, then constraints and cost. No filler, and each sentence carries distinct information.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and cost plus geography are covered. The only gap is pagination/limit behavior for portfolios larger than the default 500 titles, which matters given this tool's stated portfolio-mapping purpose.

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

Parameters2/5

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

Schema coverage is 0%, so the description carries the full burden. It clarifies that company_number is a Companies House number, but says nothing about the limit parameter (default 500) or what happens when a portfolio exceeds it — a real risk for large landlords.

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

Purpose4/5

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

States a specific resource (titles held) and the exact key it is indexed by (Companies House number), with a concrete use case (portfolio mapping). It implicitly distinguishes itself from the sibling ownership_by_title, but never names that sibling to make the reverse-lookup distinction explicit.

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

Usage Guidelines4/5

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

'Useful for mapping a landlord's or developer's portfolio' gives clear usage context, and 'England & Wales only' functions as an explicit when-not constraint for Scottish/NI data. It stops short of naming the alternative tool (ownership_by_title) for the opposite query direction.

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

ownership_by_titleRegistered proprietors of a titleA
Read-onlyIdempotent
Inspect

Registered proprietor(s) for an HMLR title number. England & Wales only. Costs 15 credits (15p).

NameRequiredDescriptionDefault
title_numberYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds two things annotations cannot: a per-call cost of 15 credits (15p) and a geographic eligibility restriction — both material to an agent deciding whether to call.

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

Conciseness4/5

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

Three short lines, zero padding, with the core capability front-loaded ahead of the scope and cost constraints. It is arguably over-terse — the fragments 'England & Wales only' and 'Costs 15 credits' could be framed as explicit constraints — but nothing is wasted.

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

Completeness4/5

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

An output schema exists, so return values need no explanation here, and the annotations carry the safety profile. For a one-parameter, metered lookup the description is nearly sufficient; the remaining gap is how to supply or validate a title number and what is returned on a miss (including whether credits are still charged).

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

Parameters3/5

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

Schema coverage is 0% for the single required parameter, so the sole parameter is undocumented in structured form. The description partially compensates by naming it an 'HMLR title number', which tells the agent the expected identifier source, but gives no format example, validation rule, or behaviour when the title does not exist.

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

Purpose4/5

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

States a specific resource (registered proprietors) and the exact lookup key (an HMLR title number), and adds jurisdictional scope (England & Wales only). It implicitly distinguishes itself from ownership_by_company by keying on title rather than company, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the tool for 'who owns title X', and the England & Wales restriction usefully excludes Scottish/NI titles. But there is no explicit guidance on when to prefer ownership_by_company, owner_profile, property_lookup, or parcel_lookup instead, or how to obtain a title number first.

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

parcel_lookupOne parcel: owner, units, plot, constraintsA
Read-onlyIdempotent
Inspect
One land parcel in full: its INSPIRE id, title number and OS id, area and
land use, the registered proprietor where a title links, the units
standing on it, plot utilisation, and every constraint flag.

Address it by `parcel_id`, `inspire_id`, `title_number` or `uprn` —
whichever handle you have. Use `land_assembly` instead when you want the
neighbours.

CONSTRAINTS ARE THREE-VALUED. `in_zone`, `checked_false` and `not_checked`
are three different answers, and a parcel with unchecked flags is
UNASSESSED, not unconstrained. Never report an unchecked flag as clear.

Plot coverage is built footprint over parcel area: a ground-plane measure
that says nothing about storeys, so it is not a density. The unbuilt ground
it implies is an upper bound before any constraint, access or amenity test
— not a developable area, and not a capacity.

Restrictive covenants read `not_available`: the register holds them per
title and the title-to-parcel link is partial.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnNo
parcel_idNo
inspire_idNo
title_numberNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world, so the description focuses on what annotations cannot express: credit cost, UK-only scope, and the three-valued constraint semantics (unchecked != clear). The note that covenants return not_available because the title-to-parcel link is partial is genuinely valuable behavioural context. Slightly short of 5 only because the response shape/pagination behaviour is left to the output schema.

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

Conciseness4/5

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

Front-loaded with the returned fields, then addressing, then the semantic traps. Most sentences carry weight — the three-valued constraint warning and the plot-coverage-as-ground-plane caveat prevent concrete misreporting. The plot coverage paragraph is the longest block and could be tightened, but it is substantive rather than filler.

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

Completeness5/5

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

An output schema exists, yet the description still summarises the payload sensibly; combined with cost, region, identifier workflow, and the three misreading traps (unchecked flags, footprint ratio as density, covenants as absent), an agent has everything needed to call and interpret this correctly for a four-optional-param tool.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the parameters, and it names all four handles (parcel_id, inspire_id, title_number, uprn) and frames them as alternatives — 'whichever handle you have'. That adds real meaning over bare titles like 'Uprn' and 'Parcel Id'. It does not state whether multiple identifiers may be combined or which takes precedence, nor any format constraints, leaving a small gap.

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

Purpose5/5

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

Opens with a specific verb and resource (one land parcel) and enumerates exactly what comes back: INSPIRE id, title number, OS id, area/land use, proprietor, units, plot utilisation, constraint flags. It explicitly distinguishes itself from land_assembly for neighbour queries, so an agent can separate it from siblings without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit routing: use land_assembly for neighbours, and call address_autocomplete (free) then address_resolve when only an address is available because this tool is keyed on a UPRN. It also states the geographic scope (UK only) and the cost (5 credits / 5p), which are exactly the conditions an agent needs before invoking.

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

planning_applicationsPlanning authority for a locationA
Read-onlyIdempotent
Inspect
The local planning authority for a location and its planning-portal URL.
This returns WHERE to look, not the applications themselves — council
portals are not machine-readable.

Give either `postcode` or `location` as "lat,lng".
UK only. Free.
NameRequiredDescriptionDefault
locationNo
postcodeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world. The description adds value beyond them: geographic coverage limit ('UK only'), cost ('Free'), and the crucial behavioral fact that the returned portals are not machine-readable, which sets expectations for the output. It does not contradict anything.

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

Conciseness5/5

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

Three short sentences, front-loaded with the identity of the resource and immediately followed by the scope caveat and input rules. Every sentence carries information; nothing is padding.

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

Completeness4/5

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

An output schema exists, so return values need not be re-explained, and the description nonetheless summarizes them (authority + portal URL). Combined with the format and coverage notes, an agent has what it needs, though edge-case behavior (missing/invalid inputs, non-UK postcodes) is left unspecified.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: it tells the agent the two parameters are alternatives ('either postcode or location') and gives the required format for location ('lat,lng'). It omits what happens if neither or both are supplied, so it is not exhaustive.

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

Purpose5/5

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

States a specific resource (the local planning authority for a location plus its portal URL) and explicitly scopes what it returns versus what it does not ('WHERE to look, not the applications themselves'). This cleanly separates it from siblings like planning_check, planning_designations, and property_planning_history.

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

Usage Guidelines3/5

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

The line 'council portals are not machine-readable' hints at why you'd use this (to get a link rather than data), and 'UK only' bounds applicability, but no sibling is named and there is no explicit when-to-use/when-not guidance versus planning_check or planning_precedents. Usage is implied rather than stated.

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

planning_checkChosen planning designation checksA
Read-onlyIdempotent
Inspect
The planning designation checks you choose, for one location, in one
call. `checks` is any of: article_4, brownfield, ancient_woodland,
heritage_at_risk, tpo, aqma, scheduled_monument, sssi, agricultural_land,
flood_risk, green_belt, listed_buildings, aonb, national_park,
conservation_area — omit it for all fifteen. Each check reports its own
result, and one that could not be read says `status: unknown` rather
than disappearing. Use `planning_designations` for the fixed bundle of
thirteen; use this when you need SSSI or agricultural land grade, or only
two or three checks. Give either `postcode` or `location` as "lat,lng".
UK only. Free.
NameRequiredDescriptionDefault
checksNo
locationNo
postcodeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive. The description adds genuine behavioral context beyond them: a failed check reports `status: unknown` rather than disappearing, omitting `checks` returns all fifteen, and it's UK-only and free. Solid added value though not exhaustive.

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

Conciseness4/5

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

Front-loaded with the core purpose, then the enum list and alternative routing. The long enumeration is necessary but makes it slightly dense; every sentence still earns its place.

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

Completeness5/5

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

With an output schema present (return values needn't be described) and annotations covering the safety profile, the description supplies everything else: valid inputs, defaults, error behavior, region, and sibling routing. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: it enumerates all fifteen valid `checks` values, specifies the omit-for-all default, gives the "lat,lng" format for `location`, and states 'give either postcode or location'. This fully compensates for the bare schema.

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

Purpose5/5

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

States a specific verb (checks) and resource (planning designations for a location), and explicitly names and contrasts the sibling planning_designations. An agent can distinguish it from the sibling without opening either schema.

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

Usage Guidelines5/5

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

Explicitly routes usage: 'Use planning_designations for the fixed bundle of thirteen; use this when you need SSSI or agricultural land grade, or only two or three checks.' Both the when and the alternative are spelled out.

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

planning_designationsPlanning designations at a locationA
Read-onlyIdempotent
Inspect
Every planning designation affecting a location, in one call: conservation
area, listed building, green belt, AONB, national park, flood zone,
Article 4, brownfield, ancient woodland, heritage at risk, TPO, AQMA and
scheduled monument.

Give either `postcode` (full UK postcode) or `location` as "lat,lng".
UK only. Free.
NameRequiredDescriptionDefault
locationNo
postcodeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds two things beyond that: the aggregation behaviour ('in one call') and the cost signal ('Free'). It does not discuss precedence when both inputs are supplied, failure behaviour for an invalid postcode, or coverage latency, so the added behavioural value is modest.

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

Conciseness4/5

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

Front-loaded with the outcome ('every planning designation ... in one call') before the enumeration, and the input rules are compressed into two short lines. The 13-item designation list is long but each item is query-relevant vocabulary rather than filler, so it earns its place. Slight redundancy between the title and the opening clause.

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

Completeness4/5

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

An output schema exists, so return-value detail is correctly omitted, and the description covers scope, dual input formats, geography, and cost. What is missing for a fully self-contained definition is input arbitration (both supplied, neither supplied) and any note on invalid postcode handling. For a two-parameter read-only lookup, the remainder is close to sufficient.

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

Parameters4/5

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

Schema coverage is 0% — the two properties have no descriptions at all — so the description carries the full burden, and it does specify the expected format for each: 'full UK postcode' and 'location as "lat,lng"'. That format detail is genuinely load-bearing since nothing in the schema conveys it. The gap is that it doesn't say whether at least one is required (schema marks neither required), what happens if both are given, or which wins.

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

Purpose4/5

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

States a specific verb+resource and scope: every planning designation affecting a location, returned in one call. The enumeration of 13 designation types (conservation area, listed building, green belt, AONB, flood zone, TPO, etc.) makes the tool's content unmistakable and separates it by implication from planning_applications or property_planning_history. It stops short of explicitly naming the sibling it is not, which keeps it out of 5 territory.

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

Usage Guidelines3/5

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

The description gives useful boundaries — 'UK only' and 'Free' — and tells the agent how to supply input, but it never says when to prefer this over neighbours like planning_check, planning_applications, or property_flood_risk. Usage is implied by the purpose statement rather than stated as a when/when-not rule.

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

planning_precedentsApproval rate and decision time nearbyA
Read-onlyIdempotent
Inspect
What happened to applications like this one nearby — the planning
precedent record. Give a point (`lat`/`lon`) or an `lpa_code`, optionally
narrowed by `application_types` (substrings of the authority's own type
labels, e.g. ["Householder"]).

Returns the approval RATE with its denominator, the median days to a
decision, a breakdown by application type, and recent examples with their
outcomes and links.

TWO DENOMINATORS, AND THEY ARE NOT THE SAME. The rate is over approvals
plus refusals only. The decision time is over the much smaller set of
applications carrying BOTH a received and a decision date — about 13% of
the register. Quote each with its own n; never present the timing sample
as though it were the rate's.

IT IS A RATE, NOT A PROBABILITY. It says what a committee did nearby, not
what it will do with this proposal. Do not convert it into a chance of
approval.

Withdrawals, advisory outcomes (observations on another authority's
application, and confirmations that consent was not required) and
undecided applications are counted separately and excluded from the
denominator — they appear under `excluded_from_rate`.

COVERAGE IS LONDON. The official register is the 35 Greater London
authorities; elsewhere this returns nothing, which is a coverage gap and
NOT a quiet planning history. Say so rather than implying the site is
unprecedented.
UK only. Costs 10 credits (10p).
NameRequiredDescriptionDefault
latNo
lonNo
yearsNo
examplesNo
lpa_codeNo
radius_mNo
application_typesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, it discloses a great deal the schema cannot: two distinct denominators (rate over approvals+refusals, timing over the ~13% with both dates), how withdrawals/advisory outcomes/undecided cases are bucketed under `excluded_from_rate`, London-only coverage, and a 10-credit (10p) cost. The interpretation caveat — committee behaviour nearby, not a probability for this proposal — is exactly the kind of context annotations can't carry.

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

Conciseness4/5

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

Open, return shape, then three bolded caveats, then coverage and cost — well front-loaded and no sentence is filler, since each caveat prevents a specific misuse. The all-caps emphasis blocks are slightly heavy, but they're earning their space rather than padding.

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

Completeness4/5

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

An output schema exists, so the description needn't enumerate return fields, yet it usefully sketches rate/denominator/timing/breakdown/examples anyway, and it closes the biggest operational risk with the coverage-gap warning. The remaining hole is the three undocumented tuning parameters (radius, years, example count) that shape the answer materially.

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

Parameters3/5

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

With 0% schema description coverage the description must carry the parameters, and it explains `lat`/`lon`, `lpa_code`, and `application_types` (including that values are substrings of the authority's own labels, with an example). It says nothing about `years` (10), `examples` (10), or `radius_m` (800) — the radius in particular is a meaningful, non-obvious spatial control left undocumented anywhere.

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

Purpose4/5

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

It states a specific verb+resource: an aggregate planning-precedent record with approval rate, median decision days, a type breakdown, and recent examples, retrievable by point or LPA. That aggregate framing implicitly separates it from per-application siblings like planning_applications or property_planning_history, but no sibling is named to make the boundary explicit.

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

Usage Guidelines4/5

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

It gives clear invocation conditions — supply `lat`/`lon` OR `lpa_code`, optionally narrow with `application_types` — plus two hard usage constraints: quote each denominator with its own n, and don't present the rate as a probability. It never names an alternative tool or says explicitly when to prefer one, which keeps it short of a 5.

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

plot_utilisationPlot utilisation of land parcelsA
Read-onlyIdempotent
Inspect
Land parcels by size and how much of them is built on. Set
`max_built_coverage` to 0.2 to find largely undeveloped plots.

Parcels with NO measured coverage are excluded when you set a ceiling,
rather than counted as empty — unknown coverage is not evidence of a vacant
plot. Coverage is measured on about 41% of parcels.

UK only. Costs 30 credits (30p).
NameRequiredDescriptionDefault
limitNo
area_idYes
min_area_m2No
max_built_coverageNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already establish a safe read-only, idempotent operation, and the description adds substantive behaviour: parcels with no measured coverage are excluded under a ceiling rather than treated as empty, coverage exists for only ~41% of parcels, scope is UK-only, and each call costs 30 credits. The exclusion semantics are the kind of trap an agent would otherwise misread as a vacancy signal.

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

Conciseness4/5

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

Front-loaded with the core output, then the actionable example, then the correctness caveat, then the cost/geography constraints. Every sentence carries information; only the line breaks are slightly heavier than needed.

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

Completeness4/5

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

An output schema exists, so return values needn't be described, and annotations cover the safety profile. What remains missing is guidance on the undocumented area_id/limit/min_area_m2 parameters, which matters for a costing, area-scoped query tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains max_built_coverage meaningfully (a ceiling with exclusion semantics) but says nothing about area_id, limit, or min_area_m2, leaving three of four parameters undocumented anywhere.

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

Purpose4/5

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

Opens with a specific verb-resource framing: land parcels described by size and built coverage, which is more precise than the title. It doesn't name a sibling to differentiate from (e.g. parcel_lookup, area_stock_profile), so an agent must infer the boundary itself.

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

Usage Guidelines4/5

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

Gives a concrete usage pattern — set max_built_coverage to 0.2 to surface largely undeveloped plots — which tells the agent the intended query shape. It stops short of stating when to prefer this over a related tool or when the tool is a poor fit.

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

property_compsComparable propertiesA
Read-onlyIdempotent
Inspect
Comparable sales in the same building or block. Preserve original price,
sale date, UPRN and `attrs_source`. Backfilled/modelled floor areas are
estimates: their derived price per square metre is not directly observed.
An EPC room count is not automatically a bedroom count. Review anomaly and
category flags; they do not prove distress or justify silently removing
lower contrary sales. Aggregate flags on duplicate identity/date/price
tuples. Verify combined-unit/building-parent demises before treating them
as flat comparables. Repeated sales of one unit are correlated evidence.
Report selection and rejection reasons before applying adjustments.
UK only. Costs 30 credits (30p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
max_backfillsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial context beyond them: cost (30 credits/30p), geographic restriction, and interpretive caveats about backfilled floor areas, EPC room counts, anomaly flags, combined-unit demises, and correlated repeat sales. It also directs the agent to report selection/rejection reasons rather than silently dropping contrary sales, which is real behavioral guidance.

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

Conciseness3/5

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

The content is dense and largely relevant, but the invocation-critical facts (UK only, 30 credits, UPRN keying, address chain) are buried at the end after a long block of analysis caveats. Front-loading the operational essentials would make selection faster.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description covers scope, cost, prerequisites, and interpretation pitfalls well. The only material gap is the undocumented max_backfills parameter and no signal of result volume or how comps are selected.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It explains that the key is a UPRN (and how to obtain one), which meaningfully disambiguates the required parameter, but the second parameter max_backfills is never mentioned and its semantics (what a backfill is, why the default is 12) remain opaque.

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

Purpose4/5

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

Opens with a specific resource and scope: 'Comparable sales in the same building or block', and clarifies it is keyed on a UPRN rather than an address. It does not explicitly contrast itself with near-siblings such as valuation_comparables, auction_comps, or comps_adjustments, so the agent must infer the boundary from the name alone.

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

Usage Guidelines4/5

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

Gives concrete preconditions: UK only, costs 30 credits, and an explicit prerequisite chain ('call address_autocomplete (free) to narrow, then address_resolve to get one'). It does not state when to prefer this over valuation_comparables or auction_comps, but the operational guidance is clear and actionable.

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

property_energy_retrofitEnergy rating, MEES and the retrofit gapA
Read-onlyIdempotent
Inspect
The energy picture for one property: current rating against the
certificate's own potential, the points and letter bands available, the
fabric and heating the assessor recorded, and MEES.

MEES IS A LEGAL BAR, NOT A VALUATION NOTE. An F or G cannot lawfully be let
on a new or continuing tenancy in England and Wales without a registered
exemption. Report it as a constraint on what the owner may do, not as a
discount to apply.

A band letter is a RANGE — G spans 19 SAP points, D spans 13 — and the
range is on the response. A null gap means unknown, never "already at
potential".

`recommended_measures` reads `not_available` (gap G3): the assessor's own
improvement list with indicative costs is published by MHCLG in a file we
do not load. Do NOT substitute a generic list of retrofit measures — it
would read as this property's assessment. No pound figure is put on the
uplift either; the elasticity is local and contested and we have not
estimated one.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description still adds substantial non-schema behaviour: a 5-credit (5p) cost, the meaning of a null gap ('unknown, never at potential'), a deliberate not_available state for recommended_measures with a reason (MHCLG file not loaded), and an explicit refusal to estimate a pound uplift. These are exactly the caveats an agent needs to avoid misreporting results.

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

Conciseness4/5

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

The payload sentence is front-loaded and each block earns its place: the MEES legal framing, the band-as-range warning, the not_available caveat, and the access recipe. Some phrasing is rhetorical (capitalised prohibitions, 'the elasticity is local and contested'), which costs a little density but guards against real misuse.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, and the description still covers the interpretive traps an agent would otherwise hit: band ranges, null gaps, the unavailable measures list, absent cost uplift, and how to obtain the UPRN. Nothing needed to call or correctly report on this tool is missing.

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

Parameters4/5

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

With 0% schema description coverage and a single untyped integer 'uprn', the description carries the burden and does: it states the key is a UPRN not an address, and gives the two-tool path to obtain one. It does not give the UPRN's format (e.g. 12-digit) or how to handle missing/ambiguous results, so it is strong but not exhaustive.

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

Purpose4/5

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

The first sentence names a specific resource (one property's energy picture) and enumerates the contents: current rating vs certificate potential, SAP points and letter bands, recorded fabric and heating, and MEES. That is more specific than a title restatement, but it never names the sibling it displaces (energy_profile, epc_certificates) so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Explicit prerequisites and routing: 'UK only', 'Keyed on a UPRN, not an address', plus the two-step recipe via free address_autocomplete then address_resolve. It also constrains interpretation ('report MEES as a constraint on what the owner may do, not as a discount'). It stops short of stating when to prefer this over energy_profile or epc_certificates.

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

property_flood_riskFlood risk for a propertyA
Read-onlyIdempotent
Inspect
Environment Agency surface-water flood risk for a property.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorldHint=false, so safety is covered. The description adds genuinely new context: the data source (Environment Agency surface-water, i.e. not river/sea flooding), the geographic restriction, that it is free to call, and that it fails without a UPRN — behavioral facts not present in the annotations.

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

Conciseness5/5

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

Three compact lines with the identity, scope/constraint, and the prerequisite workflow front-loaded. No filler, no restatement of the title, and the most load-bearing constraint (UPRN, not address) comes last where it acts as a call-to-action.

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

Completeness5/5

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

For a one-parameter read tool with a full output schema, the description covers everything the agent needs: what the tool returns conceptually, its cost, its geographic limits, and how to satisfy the required argument. 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.

Parameters4/5

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

Schema description coverage is 0% for the single parameter, so the description must compensate, and it does: it explains that the key is a UPRN (not a free-text address) and how to obtain one via the address tools. It does not state the expected UPRN format/validity range, which the schema's bare 'integer' type leaves unaddressed.

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

Purpose5/5

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

Names a specific verb+resource ('surface-water flood risk for a property'), pins the authoritative source (Environment Agency), and constrains scope ('UK only'). An agent can distinguish this from the broad property_risk_report siblings because the data domain and keying are stated outright.

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

Usage Guidelines4/5

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

Gives explicit operational guidance: UK only, free to call, and requires a UPRN rather than an address, with the prerequisite chain (address_autocomplete -> address_resolve) spelled out. It stops short of saying when to prefer this over sibling risk tools such as property_risk_report, which likely bundles flood risk with other perils.

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

property_historySold-price historyA
Read-onlyIdempotent
Inspect
Sold-price history for a property, with per-sale detail.
Use `transactions_by_uprn` instead if you only need the raw HMLR rows.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
max_drilldownsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds genuinely useful non-schema facts: UK-only coverage, free cost, and that the key is a UPRN rather than an address. It does not explain what max_drilldowns does or the latency/cost tradeoff it controls.

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

Conciseness4/5

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

Three short sentences, front-loaded with purpose and immediately followed by routing and prerequisites. The 'UK only. Free.' fragments are terse but earn their place as scope/cost constraints; nothing is wasted.

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

Completeness4/5

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

An output schema exists, so return values need not be explained. Combined with annotations, the description covers scope, cost, key type, and acquisition workflow. The only real gap is the unexplained max_drilldowns control on a tool whose depth it likely governs.

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

Parameters3/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It handles uprn well (not an address; how to obtain one) but says nothing about max_drilldowns beyond the schema's default, leaving the second parameter's semantics undocumented in both places.

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

Purpose5/5

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

States a specific resource and scope: 'Sold-price history for a property, with per-sale detail.' It names the sibling it overlaps with (transactions_by_uprn) and the distinction is immediately usable, so an agent can separate the two without opening schemas.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use transactions_by_uprn for raw HMLR rows, and this tool when per-sale detail is wanted. It also gives the prerequisite workflow (address_autocomplete then address_resolve to obtain a UPRN), which is exactly the when/how guidance most tools omit.

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

property_leaseRegistered lease: term, unexpired years, flagsA
Read-onlyIdempotent
Inspect
Registered leases linked to this UPRN, with the selected longest-expiry
record and up to ten alternatives, exact register property descriptions,
title/record identifiers, source/link limitations and computed remaining
term. UPRN linkage does not verify the legal demise: a garage, parking or
sibling title must not establish the flat lease. Compare descriptions and
disclose truncated/unavailable alternatives. Short-term flags are research
prompts, not legal advice or proof of mortgage eligibility. The AVM does
not adjust for a short term. `status: no_lease` means none was found; it
does not independently prove freehold tenure.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare a safe read, but the description adds cost (5 credits), the legal caveat that UPRN linkage does not verify the demise (garage/parking/sibling titles), the 'status: no_lease' interpretation limit, and the warning that the AVM does not adjust for a short term. These are behavioral constraints an agent cannot infer from structured fields.

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

Conciseness4/5

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

Front-loaded with what the tool returns, followed by caveats, then the calling workflow last. Every sentence is load-bearing, though the dense run-on enumeration and stacked disclaimers make it heavier than necessary for a one-parameter tool.

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

Completeness5/5

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

An output schema exists, so return-value detail is not required; the description instead supplies the missing operational context: cost, geography, UPRN keying, upstream chaining, truncation disclosure expectations, and the critical caveat that no_lease does not prove freehold tenure.

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

Parameters4/5

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

The single parameter has 0% schema description coverage, so the description carries the burden and does compensate: it specifies the parameter is a UPRN identifier (not an address string) and that it must be obtained via address_autocomplete/address_resolve. It stops short of stating expected format or invalid-UPRN behavior.

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

Purpose5/5

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

States a specific verb+resource ('Registered leases linked to this UPRN') and enumerates the payload: longest-expiry record plus up to ten alternatives, register property descriptions, title/record identifiers, and computed remaining term. This distinguishes it clearly from ownership_by_title, property_lease_batch, and property_lookup without opening their schemas.

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

Usage Guidelines4/5

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

Explicitly routes keying ('Keyed on a UPRN, not an address: call address_autocomplete (free) to narrow, then address_resolve to get one') and scopes geography and cost ('UK only. Costs 5 credits (5p)'). It does not state when to prefer property_lease_batch or property_report over this single-UPRN call, so it falls short of full when/when-not guidance.

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

property_lease_batchRegistered leases for up to 100 propertiesA
Read-onlyIdempotent
Inspect
`property_lease` for up to 100 properties in one call, per-item outcomes
(ok | no_lease | not_found | error) in input order. Charged per property
answered — the sum of the single calls, never more.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: per-item outcome codes (ok | no_lease | not_found | error) in input order, per-property charging capped at the sum of single calls, the 5-credit price, and a UK-only constraint. That is rich behavioral disclosure.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and pricing, with no filler. Every clause earns its place.

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

Completeness5/5

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

With an output schema present handling return values, the description covers scope, pricing, outcome codes, geographies, and the UPRN prerequisite chain — everything an agent needs to call it correctly.

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

Parameters4/5

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

The single required parameter is uPRNs, and though schema coverage is 0%, the description clarifies the keying ('Keyed on a UPRN, not an address') and the 100-item ceiling, adding meaningful semantics beyond the bare name.

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

Purpose5/5

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

The description states a specific verb+resource ('`property_lease` for up to 100 properties in one call') and its batch semantics, making clear it is the bulk form of the `property_lease` sibling. An agent can distinguish it from the single-property tool without opening either schema.

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

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context ('up to 100 in one call') plus a prerequisite workflow: 'call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.' Explicit exclusions are thin, but the operational context is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_lookupFull property recordA
Read-onlyIdempotent
Inspect
Full property record for a UPRN, grouped into tiers: identity, property,
energy, building, land, risk, designations, infrastructure, ownership,
provenance. Up to ~300 fields — null fields are omitted, so a typical
urban flat returns fewer than a rural site with designations on it.
`provenance` carries the `<field>_source` and `<field>_confidence`
siblings, so you can trust individual cells and not just rows.
UK only. Costs 25 credits (25p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive, and the description adds substantive behavior: UK-only scope, 25-credit cost, null-field omission, variable field counts, and provenance source/confidence fields. That is meaningful context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the resource and tier structure, then adds only high-value details: field count/null behavior, provenance, UK/cost, and UPRN acquisition. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema and clear annotations, the description covers the essential call context: what the record contains, variable returns, cost, geography, and how to get the key. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares an integer 'uprn' with 0% description coverage; the description compensates by clarifying it is keyed on a UPRN, not an address, and by naming the free address_autocomplete → address_resolve path to obtain one. It still does not define UPRN format or validation, so it does not fully compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: a full property record keyed on a UPRN, with enumerated tiers and up to ~300 fields. It distinguishes from the address chain by saying it is not address-keyed, though it does not explicitly contrast with property_summary or property_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear workflow for obtaining the required identifier: call address_autocomplete (free) to narrow, then address_resolve to get a UPRN. It also discloses the 25-credit cost, but does not explicitly say when to prefer property_summary/property_report or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_mediaPhotographs, floorplans and brochuresA
Read-onlyIdempotent
Inspect
Photographs, floorplans, EPC graphs and brochures for a property, from the
listings we have crawled. Narrow with `types` — a comma-separated list of
`image`, `floorplan`, `epc`, `brochure`, `virtual_tour`.

EVERY LINK IS OURS AND EVERY LINK EXPIRES. Do not store them; call this
again when you need fresh ones, and set `ttl_seconds` to match how long the
surface you are building keeps them on screen. The portal's own URL is
never returned, so a saved response cannot turn into a hotlink later.

COVERAGE IS UNEVEN AND THE COUNTS TELL YOU. We hold the actual files for
floorplans and brochures only, and for a minority of those; everything else
— including all photographs — is a link that redirects to the source.
`n_held_by_us` against `n_redirected` says which is which for this property,
and `delivery` says it per item. Do not describe a property as having no
photographs when the answer is `no_media`: about a third of listings never
resolve to a UPRN, so that is as often a matching gap as an absence.

Each item carries the portal and host it came from — useful when a user
asks where a picture is from, and when one source turns out to be bad.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
typesNo
ttl_secondsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds substantial unstated behavior: every link expires and the portal URL is never returned (anti-hotlinking), coverage is uneven with held vs redirected files, and no_media is often a UPRN-matching gap rather than true absence. ttl_seconds is framed as a caller-controlled freshness policy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and the `types` filter, then the expiry warning, coverage caveat, and routing. Every sentence is relevant, but the caps-lock emphasis and dense coverage paragraph make it longer than strictly necessary for an agent to act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be fully re-explained, yet the description still names the discriminating fields (n_held_by_us, n_redirected, delivery, no_media) so an agent can interpret coverage. Combined with routing instructions and the freshness model, nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the load: it enumerates the valid `types` values (image, floorplan, epc, brochure, virtual_tour) as a comma-separated list and explains `ttl_seconds` as matching how long the consuming surface keeps links on screen. It also clarifies `uprn` semantics as a keyed identifier rather than an address.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (photographs, floorplans, EPC graphs, brochures) tied to a crawled-listing scope, with the verb of retrieval implied clearly. It distinguishes itself from siblings by noting it is keyed on a UPRN rather than an address, unlike address_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit workflow guidance: use address_autocomplete to narrow then address_resolve to obtain the UPRN, and call this tool fresh each time links are needed rather than storing them. It also states the UK-only and free constraints, so an agent knows the operating envelope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_planning_historyPlanning history at a propertyA
Read-onlyIdempotent
Inspect
Planning history AT this property: applications linked to the unit or its
building — each with decision, dates, appeal, CIL liability, development
type and `match_level` (`unit`, `building`, or `nearby` within 25 m when
nothing is linked) — a summary (approved / refused / withdrawn / pending),
what needs consent here from the designation flags read three-valued
(`applies` against `unchecked`), the LPA, and `coverage`: official
planning data covers the 33 London boroughs today, so
`status: not_covered` outside London is a different answer from
`no_applications`, and is not charged.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive and closed-world, but the description adds critical behavior beyond them: cost of 5 credits (5p), coverage limited to the 33 London boroughs, `not_covered` outside London is not charged, and designation flags are three-valued (`applies` vs `unchecked`). This level of pricing and coverage transparency is exactly what 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and then layered with match_level, summary, coverage and cost — every clause carries information. It reads as a dense run-on paragraph rather than a structured list, which slightly hurts scanability, but there is minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single-parameter tool with an output schema present, the description still explains result semantics (match_level values, summary buckets, coverage status, three-valued designations), pricing, geographic limits and the UPRN acquisition path. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with a single bare `uprn` integer parameter, so the description must compensate — and it does, explaining the tool is keyed on a UPRN (not an address) and how to obtain one via address_autocomplete/address_resolve. It still doesn't state format constraints (e.g., integer, 12-digit) but the usage guidance is meaningful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Planning history AT this property'), then enumerates what is returned (applications linked to unit/building with decision, dates, appeal, CIL, match_level) and the summary/designations/LPA/coverage components. An agent can distinguish it from planning_applications, planning_check and property_history without checking schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States geography (UK only), keying requirement (UPRN, not address) and an explicit prerequisite workflow: call address_autocomplete (free) to narrow, then address_resolve to obtain the UPRN. Also clarifies that `not_covered` outside London differs from `no_applications` and is not charged. Lacks a direct comparison to sibling tools like planning_applications or property_planning_history_batch, but covers most when-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_planning_history_batchPlanning histories for up to 100 propertiesA
Read-onlyIdempotent
Inspect
`property_planning_history` for up to 100 properties in one call, per-item
outcomes (ok | no_applications | not_covered | not_found | error) in input
order. Charged per property answered — the sum of the single calls, never
more; not_covered rows are free.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the pricing model (charged per property answered, sum of single calls, not_covered rows free) and the partial-failure contract (per-item outcomes in input order). It does not state behavior when more than 100 UPRNs are supplied or whether batches partially charge on upstream failure, which keeps it from a 5 given the annotations already cover safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact clauses, front-loaded with what the tool is, followed by outcome semantics, cost, and the UPRN resolution path. No filler, and the cost/monetization detail sits where an agent will see it before deciding to call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, yet the description still summarizes the per-item outcome enum and ordering guarantee, which is the piece an agent needs to reason about partial failures. Combined with pricing, geography, and the UPRN resolution workflow, nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 0% schema description coverage, the description carries the burden and does so: it explains that the key is a UPRN (integer identifier), not an address string, and that the array is capped at 100 items. It could still name the parameter explicitly or describe item-level validation errors, but the essential semantics are supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (batch-fetch), resource (planning histories), and scope (up to 100 properties in one call). It explicitly frames itself as the batch form of the sibling `property_planning_history`, so an agent can distinguish the two without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit prerequisites and the alternative path: 'Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.' It also states the 'UK only' applicability constraint, so when-not-to-use is implied by geography.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_reconcileReconcile a property across sourcesA
Read-onlyIdempotent
Inspect
Cross-source property facts with provenance and unresolved attributes.
Review floor area, bedrooms and tenure with the user before a valuation.
`ml_primary` and `imputed` are predictions, not measurements; a warehouse
value is not automatically declared. `eligible_as_primary: false` marks
context only: EPC habitable rooms are not bedrooms, occupier tenure is not
legal tenure, and price-derived areas are not measurements. The AVM back-
series is scaled from its headline, not independent corroboration. Keep
user confirmations labelled as user-supplied and unknown facts unknown.
UK only. Costs 15 credits (15p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial context beyond them: UK-only scope, a 15-credit/15p cost, the UPRN keying requirement, and a detailed semantic layer distinguishing predictions from measurements and declaring that EPC habitable rooms are not bedrooms and occupier tenure is not legal tenure. That is exactly the kind of interpretive context an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scope and the pre-valuation review instruction are front-loaded, and the back half is a dense but purposeful list of interpretation rules with no filler. Some sentences pack multiple caveats together, which slightly hurts scannability, but no clause is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is not required, yet the description still explains how to read key result flags (eligible_as_primary: false, imputed, ml_primary) and what to do with user confirmations. Geography, cost, prerequisite tooling and data-provenance caveats are all present for a one-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single integer parameter has no description, so the description must carry the meaning — and it does, stating that the tool is keyed on a UPRN rather than an address and naming the two sibling tools that produce one. It does not specify the UPRN format or an example value, but the semantic gap is otherwise well compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line plus title establish that this returns cross-source property facts with provenance and unresolved attributes for a single UPRN, which is a specific output shape an agent can distinguish from property_summary or property_lookup. It stops short of stating the reconciling/merging action as a verb, so the agent must infer that the value is in adjudicating conflicting sources rather than just listing facts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete invocation context ('Review floor area, bedrooms and tenure with the user before a valuation') and a full prerequisite chain: address_autocomplete to narrow, then address_resolve for a UPRN. It also implicitly rules out address-keyed calls. What is missing is explicit guidance on when to prefer this over sibling fact tools such as property_summary or property_report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_rental_estimateRent estimate with its basis and yieldA
Read-onlyIdempotent
Inspect
What this property would let for, and on what basis. Always quote the
basis: `unit_asking` is the property's OWN live rental listing (an asking
rent, not an achieved one); `area_asking` is the median asking rent for its
bedroom band in its postcode district — a locality statistic applied to one
property, so quote the p25–p75 range with it rather than the median alone.
`unit_hedonic`, a per-unit model, does not exist (gap G1).

THE YIELD IS GROSS: annual rent over our valuation, before voids,
management, maintenance, insurance, ground rent or service charge. A net
yield is materially lower and we do not publish one — do not present the
gross figure as what an investor keeps.

The LHA block is the local housing allowance for the property's broad
rental market area. That is a HOUSING BENEFIT CAP, not a market rent: it is
the floor for a supported tenancy and usually below the market median. The
shared-room rate is included for an HMO room-by-room comparison.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
bedsNo
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds the material context an agent needs: credit cost, the asking-vs-achieved distinction, gross-only yield with the items excluded, and that LHA is a benefit cap rather than a market rent. This is well beyond annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, then basis definitions, then yield caveat, then LHA, then workflow/cost. Dense but nearly every sentence adds a caveat an agent would otherwise get wrong; it is long-ish but justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shapes needn't be described, and the description covers the interpretive hazards (basis labels, gross yield, LHA cap) thoroughly. The gap is the undocumented `beds` parameter, which leaves a small but real hole in an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the `uprn` parameter's semantics well (an identifier, not an address, plus the resolution workflow) but never mentions the optional `beds` parameter or its role in the bedroom-band logic. Half of the parameters are effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States precisely what the tool returns: what the property would let for, plus the basis behind each figure and a gross yield. It also differentiates itself from siblings by explaining that `unit_hedonic` does not exist and by pointing at `lha_rate` concepts and valuation siblings implicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: keyed on a UPRN, so call `address_autocomplete` (free) to narrow then `address_resolve`. It also states UK-only scope and the 5-credit cost, and gives concrete instructions on what to quote (p25–p75 with area_asking) and what not to present (gross as net).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_reportOne composed document for a propertyA
Read-onlyIdempotent
Inspect
Everything we hold about one property, as one document — summary, the
registered lease, the risk report with every flag three-valued, a rental
estimate with its basis, the energy picture, and the planning decisions
nearby. One price for the composition, cheaper than the sections bought
separately.

CHECK `sections_degraded` BEFORE SUMMARISING. A section that could not
answer degrades in place and names the KIND of absence — `not_found`,
`no_certificate`, `not_available` with its gap, or `error` — and those call
for different things being said. Report what did not answer rather than
describing the document as complete.

Each section is the standalone tool of the same name with the same
receipts; nothing is computed differently because it is inside a report.
UK only. Costs 25 credits (25p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
include_precedentsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations with cost (25 credits / 25p), geography (UK only), keying (UPRN not address), and — most importantly — the `sections_degraded` contract explaining that a failed section degrades in place and reports the kind of absence (`not_found`, `no_certificate`, `not_available`, `error`), each with different implications. It also guarantees parity with the standalone tools' receipts. That is materially actionable behavior an agent cannot infer from readOnly/idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: what it is and what it contains come first, then the operational warning, then the practical constraints. The capitalized `sections_degraded` warning is appropriately prominent. Minor redundancy between 'cheaper than the sections bought separately' and 'Costs 25 credits (25p)', but nothing that misleads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-section aggregate with an output schema (so return shape needn't be explained), the description covers cost, region, the identifier requirement, the degraded-section semantics, and fidelity to standalone tools. The only real hole is the undocumented `include_precedents` flag, which could change what the agent gets back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain `uprn` well — integer identifier, not an address, with the sequence to obtain it — but `include_precedents` (default true) is never mentioned in either the schema or the description, leaving one of two parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (one property) and a specific action (compose everything into one document), then enumerates the composed sections — summary, lease, risk report, rental estimate, energy, planning. It explicitly distinguishes itself from buying the sections separately, so an agent can tell it apart from property_summary, property_lease, property_risk_report and the other same-named siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite chain: this is keyed on a UPRN, so call `address_autocomplete` (free) to narrow and `address_resolve` to obtain one. It also frames the trade-off versus the standalone section tools on price. What's missing is an explicit statement of when NOT to use the bundle (e.g. when only one section is needed), though that is strongly implied by the per-section pricing note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_risk_reportRisk report: every flag three-valued, with sourceA
Read-onlyIdempotent
Inspect
What this property is in, and whether we actually checked: every
designation and hazard flag THREE-VALUED with its source — flood (zone,
historic flooding, defences, rivers-and-sea band, surface water), coal
(high-risk area, past mining, surface hazard distance), heritage (listed,
conservation area, scheduled monument, registered park, battlefield,
World Heritage), environmental (AONB, national park, green belt, SSSI, NNR,
ancient woodland, nutrient neutrality, SAC, Ramsar, LNR), planning
(Article 4, TPO, brownfield register) and infrastructure (nearest
substation distance, voltage and demand headroom, nearest renewable
project). `true` and `checked_false` are verdicts; `defaulted_false` and
`not_checked` are not — say which when you report it.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only/idempotent/non-destructive/open-world false, and the description adds critical behavior: three-valued verdict semantics, source tracking distinction between true/checked_false vs defaulted_false/not_checked, credit cost, and UK-only scope. This is strong disclosure beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and the UPRN prerequisite are front-loaded, and the long category list earns its place by defining report scope. It is dense and could be more scannable, but has little filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return structure needn't be explained, and the description covers scope, semantics, cost, UK restriction, and input acquisition. It is complete enough for an agent to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only one required parameter and zero schema description coverage, the description compensates by explaining that it is keyed on a UPRN rather than an address and giving the exact free workflow to obtain one. This adds substantial meaning beyond the bare integer schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific report over a property and enumerates the exact risk domains (flood, coal, heritage, environmental, planning, infrastructure). It is distinguishable from generic property_report/property_summary by its 'every designation and hazard flag' scope, though it does not explicitly contrast those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions: UK only, costs 5 credits, keyed on UPRN not address, and directs to address_autocomplete then address_resolve. It does not explicitly say when to prefer property_risk_report over property_flood_risk or planning_designations, so not full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_risk_report_batchRisk reports for up to 100 propertiesA
Read-onlyIdempotent
Inspect
`property_risk_report` for up to 100 properties in one call, per-item
outcomes (ok | not_found | error) in input order. Charged per property
answered — the sum, never more.
UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), yet the description adds value they cannot express: per-item outcomes (ok | not_found | error) returned in input order, partial-failure semantics, and billing that is per property answered and never exceeds the sum. Pricing (5 credits / 5p), regional limitation, and the UPRN keying constraint are all disclosed up front.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense clauses, each carrying distinct information: identity, return shape, billing, geography/keying. Nothing is repeated from the title or schema, and the most decision-relevant facts (batching, UPRN keying) come first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is rightly omitted, and the description covers the remaining risks an agent faces: wrong key type, wrong country, cost, and partial failure. Edge cases such as duplicate UPRNs or behavior above the 100-item cap are not addressed, which keeps it short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single `uprns` parameter, so the description must carry the burden — and it does: it identifies the parameter as UPRNs (not addresses) and bounds the array at 100 items. It does not spell out the UPRN form (integer identifier) or duplicate handling, leaving a small residual gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens by naming the sibling it batches (`property_risk_report`) and states the scaling factor (up to 100 properties in one call). The verb/resource relationship is unambiguous, and an agent can immediately tell it apart from the single-property tool, address tools, and unrelated reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly restricts scope ("UK only"), states the keying requirement ("Keyed on a UPRN, not an address") and prescribes the prerequisite chain: `address_autocomplete` (free) to narrow, then `address_resolve`. It stops short of saying when to prefer the single-property `property_risk_report` over the batch, but the "up to 100 in one call" framing makes that inference nearly trivial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

property_summaryProperty summaryA
Read-onlyIdempotent
Inspect
One-call summary of a property: what it is, what building it belongs to,
and the headline attributes. Once you have the UPRN this is the first call
to make for a specific property — it usually answers the question on its
own, and `property_report` composes the rest.
UK only. Costs 20 credits (20p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely non-structured context: UK-only coverage, a 20-credit (20p) cost, and the critical constraint that the tool is keyed on UPRN rather than address. It does not discuss result size or failure modes for an unknown UPRN, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the deliverable first, then the decision rule and alternative, then the access/cost/prerequisite constraints. Every clause carries operational weight with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Coverage, cost, key type, prerequisite workflow, and the sibling boundary are all present, and an output schema exists so the return shape needn't be restated. For a single-parameter read tool this is effectively complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does the most important thing: it clarifies that the lone parameter is a UPRN rather than an address, and explains how to obtain one. It still doesn't state the expected format or range of a UPRN value, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific deliverable — a one-call property summary covering identity, parent building, and headline attributes — with an explicit scope ('this property'). It also implicitly separates itself from `property_report`, which 'composes the rest', so an agent can distinguish the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit ordering guidance ('Once you have the UPRN this is the first call to make for a specific property'), states it usually answers the question alone, and names the escalation path to `property_report`. It also supplies the prerequisite acquisition chain: `address_autocomplete` (free) then `address_resolve` to obtain the UPRN.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_semanticGoverned semantic queryA
Read-onlyIdempotent
Inspect
Run a governed query against the semantic layer: choose an entity, then
the metrics, dimensions and filters you want. Aliases are resolved to
physical columns by the registry, so this cannot reach anything the
semantic model does not expose. The result includes the generated SQL.

Bounded and self-describing.
UK only. Costs 50 credits (50p). You are charged if the query reaches the
warehouse and then times out or errors there; a rejected query is free,
and so is one that matches no rows. Filter area facts on the
`analytics_area_id` from area_resolve; they are monthly, so a year
("2025") or quarter is widened to its months.
NameRequiredDescriptionDefault
joinsNo
limitNo
entityYes
periodNo
selectNo
filtersNo
metricsNo
order_byNo
dimensionsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the read-only annotations: discloses UK-only scope, a specific cost (50 credits/50p), the exact charging rule on warehouse timeouts/errors, that rejected and zero-row queries are free, and that the response includes generated SQL. This is precisely the billing and scope information 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then aliasing, then cost, then the area-facts hint — a sensible order with little waste. The dangling fragment 'Bounded and self-describing.' earns no place and slightly interrupts flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and cost/scope/timing caveats are well covered. However, for a 9-parameter tool with 0% schema coverage, the description leaves core params (joins, select, limit, order_by) undocumented, which is a real gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema coverage is 0%, and the description only explains some of the 9 params (entity, metrics, dimensions, filters, and implicitly period via the year/quarter widening note). It says nothing about limit, joins, select, or order_by; the nested OrderBy/SemanticFilter defs carry their own docs, but the bare top-level params are left to the schema's titles alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run a governed query against the semantic layer') and enumerates the inputs an agent assembles (entity, metrics, dimensions, filters). It clearly positions itself as the generic semantic-model query rather than a specific metric endpoint, distinguishing it from the many named-data siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage context: entity-first workflow, alias resolution guarantees only modelled columns, and a concrete pointer to a sibling ('filter area facts on the analytics_area_id from area_resolve'). It does not explicitly state when to prefer this over a purpose-built sibling like market_facts, 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.

retrofit_candidatesRetrofit candidates in an areaA
Read-onlyIdempotent
Inspect
Properties in an area with the most improvement headroom, ranked by
potential efficiency. Defaults to the sub-standard bands E, F and G.

A targeting tool: it returns a list to act on, not a fact about one
property. Combine with `fuel='gas'` for the fossil-heated cohort that
carries the largest retrofit case.

`area_id` is the marts area id from `area_resolve`.

UK only. Costs 30 credits (30p).
NameRequiredDescriptionDefault
fuelNo
bandsNo
limitNo
area_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description adds genuinely non-structured facts: UK-only coverage and a 30-credit cost per call, plus the default band behavior and the ranking basis. These are exactly the constraints an agent needs before spending credits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short paragraphs, each earning its place: purpose first, then framing (targeting vs fact), then the key parameter/filter idiom, then hard constraints. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be described; the description instead covers the decisions an agent must make — geographic eligibility, credit cost, filter defaults, and ID provenance. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and does well: area_id is tied to the marts area id from area_resolve, fuel is illustrated with the 'gas' fossil-heated cohort, and bands is explained as defaulting to E/F/G (clarifying the null default). Only `limit` is left undocumented, which keeps it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (properties in an area), a specific ranking criterion (improvement headroom / potential efficiency), and explicitly contrasts itself with single-property tools: 'it returns a list to act on, not a fact about one property.' An agent can distinguish it from property_energy_retrofit and energy_profile without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational guidance: default band set E/F/G, the fuel='gas' cohort pattern, and that area_id must come from area_resolve. It stops short of explicitly naming when to prefer a sibling (e.g. property_energy_retrofit for a single address), so it is clear context without full exclusion rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_entitiesSearch assets, completed sales, planning and market profilesA
Read-onlyIdempotent
Inspect

Bounded public search using the versioned SearchQuery. Criteria are validated by the server; sorting and pagination use the same eligibility as the map. All Entities returns separate groups. No graph inference or unknown evidence changes eligibility.

QUERY SHAPE — `query` is one object:
  {"entity": "land",
   "geography": {"kind": "area", "id": "Kettering"},
   "criteria": {"parcel_area": {"min": 5000, "max": 9000}},
   "sort": "<a sort key>"}
`geography` is {"kind": "area", "id": <area UUID, code or exact name>} or {"kind": "polygon", "geometry": <GeoJSON Polygon>}. Refinements go in `criteria`, an object keyed by refinement (not a list, not `filters`/`refinements`). `limit` and `cursor` are arguments of this tool, not of the query.

Families (`query.entity`): Assets — `properties`, `buildings`, `land`, `listings`; Activity — `transactions` (HM Land Registry completed sales matched to a property) and `planning_applications` (official publishers only); Markets — `market_profiles` (one record per area × residential bedroom cohort with the selected `measure`'s latest value and observed trend; open one with `market_profile`). `market_facts` remains for existing observation ids but is superseded by `market_profiles`. Call `entity_search_capabilities` for each family's refinements and sorts. Free.. Actors — `owners` (companies that own homes in the place, ranked by holdings; companies only, signed-in account required, not the shared preview) and `agents` (estate and letting agents by listing activity in a trailing window). Owners and agents are searched on their own, not inside All Entities.
NameRequiredDescriptionDefault
limitNo
queryYes
cursorNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only/idempotent/non-destructive, and the description goes well beyond them: criteria are server-validated, sorting and pagination share the map's eligibility rules, no graph inference or unknown evidence alters eligibility, All Entities returns separate groups, and owners exclude anonymous preview. That is meaningful behavioral context an annotation cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but justified by a ten-family tool; the single-sentence opening and the dedicated QUERY SHAPE block make it front-loaded and scannable. Minor cost: cramped phrasing such as the garbled 'Free.. Actors' line and dense enumeration slightly reduce readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described, and for a high-complexity multi-family search the description supplies the family taxonomy, geography forms, criteria conventions, and the capability-discovery next step. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema descriptions are empty (0% coverage), so the description carries the load and does so well: the full query shape, the 'area' vs 'polygon' geography forms, the correct 'criteria' object shape with range/choice/date-range conventions, and the warning that it is not a list nor 'filters'/'refinements'. It only falls short on `limit` and `cursor`, which are named but not explained (default, pagination semantics).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (entities across named families), and enumerates every family with a plain-language gloss (e.g. 'transactions (HM Land Registry completed sales matched to a property)', 'market_profiles (one record per area × residential bedroom cohort...'). An agent can tell what each family yields without opening the schema, and it distinguishes itself from siblings like market_profile and entity_search_capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Call entity_search_capabilities for each family's refinements and sorts', 'open one with market_profile', 'market_facts ... is superseded by market_profiles', and 'Owners and agents are searched on their own, not inside All Entities'. It also states preconditions (signed-in account required, not the shared preview) and the when-not for All Entities.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_summaryCount and summarise a search by groupA
Read-onlyIdempotent
Inspect

Counts and statistics over EXACTLY what search_entities would match: how many records, grouped by a field, with min, median, mean and max of up to three numeric fields. Use it for "how many", "what share", "median floor area" and "price by type" questions instead of paging through records.

`query` is the same object `search_entities` takes (entity, geography, criteria). Summaries cover `properties`, `buildings`, `land` and `listings`. `group_by` is one choice field of that family and `measures` are its range fields; `entity_search_capabilities` lists them under `summary.families`. For example properties: group_by asset_subtype / asset_class / tenure / epc, measures bedrooms / floor_area; listings: group_by property_type / channel / auction / new_home, measures price / bedrooms / floor_area; buildings (a postcode district or a drawn area): group_by tenure / epc, measures footprint / storeys / units; land: group_by tenure, measures parcel_area / built_coverage.

Example: {"query": {"entity": "listings", "geography": {"kind": "area", "id": "SW11"}, "criteria": {"transaction": ["sale"]}}, "group_by": "property_type", "measures": ["price"]}.

A measure's `count` is the records that have a value for it; missing values are never zero. Groups come largest first, `top` of them (max 50), each with its `share` of the total. No record identities are returned: open records with `search_entities`. Too wide a place (a region) or too slow a summary is refused with what to narrow. Transaction counts by area: `market_volume_series`. Free.
NameRequiredDescriptionDefault
topNo
queryYes
group_byNo
measuresNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds substantial context: missing values are never zero, groups are ordered largest first, `top` is capped at 50, each group includes its share of the total, no record identities are returned, and overly wide/slow requests are refused with narrowing guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by parameter guidance, a compact example, and behavioral constraints. Despite its length, every sentence adds necessary information for a complex grouped-statistics tool with no top-level parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the input shape, supported entity families, grouping/measure semantics, ordering and top limits, refusal behavior, and alternatives, while the output schema handles return details. It is complete enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is reported as 0%, so the description carries the burden and does so well: it explains that `query` is the same object `search_entities` takes, that `group_by` is one choice field of the family and `measures` are its range fields, where `entity_search_capabilities` lists them, that `top` is capped at 50, and it provides a concrete example. It also clarifies the `count` semantics for measures.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: counts and statistics over exactly what `search_entities` would match, grouped by a field, with min/median/mean/max of numeric measures. It explicitly distinguishes itself from `search_entities` (records) and `market_volume_series` (transaction counts by area), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names concrete question types ("how many", "what share", "median floor area", "price by type") and says to use this instead of paging through records. It also names alternatives for adjacent needs: open records with `search_entities`, and use `market_volume_series` for transaction counts by area.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

site_appraisalSite appraisal dossierA
Read-onlyIdempotent
Inspect
Everything known about ONE site, assembled and judged — the site dossier.

Give a `uprn` (from address_resolve or address_autocomplete) or a `land_id`
(from sourcing_search). Returns in one call what would otherwise be six:

  * `site` — the land parcel: area, land use, built coverage, and the
    boundary as GeoJSON you can put straight on a map
  * `valuation` — our AVM against the last recorded sale, with gain and
    years held
  * `ownership` — the registered proprietor, type, company number
  * `energy` — the latest EPC
  * `auction_history` — every appearance, matched on address as well as
    UPRN, and whether it ever sold
  * `designations` — LIVE checks: conservation area, green belt, AONB,
    national park, flood risk, listed buildings
  * `signals` — the judgement

READ `signals` FIRST. It is why this exists rather than being six calls.
Each entry names what fired it and carries its evidence: repeat auction
failure with the guide-to-estimate ratio, long_held with the nominal gain,
mees_unlettable with the EPC band (F and G cannot legally be let),
under_built with the plot coverage, corporate_owner with the company
number. A site with nothing to say returns `signal: "none"` explicitly.

ABSENCE IS A REAL ANSWER, NOT AN ERROR. No registered proprietor means the
polygon-to-title backfill has not reached this parcel — it covers about 44%
— not that the land is unregistered. No EPC, no auction history and no
valuation are all normal, and each says so in its own block.

A designation check that FAILS is reported as UNKNOWN, never as absent. Do
not tell a user a site is unconstrained on the strength of a failed check.

A SCHEME PRICES THE BUILD. Pass `scheme_gia_m2` (and `scheme_units` for a
cost per unit) and you get a `scheme` block: build cost from the published
construction index times the regional factor, with on-costs. You must
supply `rate_gbp_m2` yourself — no £/m² benchmark is loaded, so without one
the block reads `not_available` rather than inventing a rate. It is
CONSTRUCTION COST ONLY: no land, finance, sales, S106 or CIL, so it is one
side of a residual and never a residual. Say that when you report it.

`precedents` summarises what nearby applications were decided: an approval
rate with its denominator, and a median decision time on the much smaller
sample that carries both dates. Quote each with its own n, and never as a
probability for this scheme.

`plot_utilisation` gives built coverage and unbuilt ground. Coverage is
footprint over area — a ground-plane measure, NOT a density — and unbuilt
ground is an upper bound before any constraint or access test, not a
developable area.

`include_designations=False` skips the live lookups and answers from the
warehouse alone, which is faster.

UK only. Costs 25 credits (25p).
NameRequiredDescriptionDefault
uprnNo
regionNoNATIONAL
sectorNoresidential
land_idNo
rate_gbp_m2No
rate_periodNo
scheme_unitsNo
scheme_gia_m2No
include_precedentsNo
precedent_radius_mNo
include_designationsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnly/idempotent annotations: discloses cost (25 credits/25p), UK-only coverage, the ~44% polygon-to-title backfill limit, that missing EPC/auction/valuation are normal, that a failed designation check reports UNKNOWN not absent, and that the scheme block returns not_available without a supplied rate. These are exactly the failure modes an agent could otherwise misreport to a user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded and bulleted, with the critical 'READ signals FIRST' instruction placed high. The interpretive caveats (absence, UNKNOWN designations, construction-cost-only, precedent denominators) each earn their space, though the prose runs longer than strictly necessary for a tool an agent calls repeatedly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description focuses on interpretation rather than field listing, and it covers the highest-risk misreadings: precedence of signals, absence semantics, failed-vs-absent designations, the scheme block's scope and limits, and how to quote precedent rates with their n. Nothing critical for correct reporting is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all 11 parameters. It explains uprn, land_id, scheme_gia_m2, scheme_units, rate_gbp_m2 and include_designations well, but region, sector, rate_period, include_precedents and precedent_radius_m are never mentioned — notably region/sector drive the regional cost factor, so their effect is invisible.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific outcome — one assembled and judged dossier for a single site — and enumerates the exact blocks returned (site, valuation, ownership, energy, auction_history, designations, signals). It explicitly positions itself against the six separate calls it replaces, so an agent knows what it is versus the atomic siblings like valuation_full or property_flood_risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the upstream producers for each key (uprn from address_resolve/address_autocomplete, land_id from sourcing_search) and gives a speed tradeoff for include_designations=False. It lacks an explicit 'use this instead of property_report / area_report when…' exclusion, so the boundary against other aggregate siblings is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solar_potentialSolar potential of roofsA
Read-onlyIdempotent
Inspect
Roof characteristics for solar screening: footprint area, roof shape and
material, building height, and whether panels are already present.

Returns NO generation estimate, deliberately. Pitch, orientation and
shading are not in the warehouse, and a kWp figure derived from footprint
alone would read as a yield forecast without being one. Report the usable
roof area as a screening figure and say what it excludes.

UK only. Costs 20 credits (20p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: a 20-credit cost, UK-only coverage, and an explanation of why pitch/orientation/shading are absent. The only reason this is a 3 rather than higher: it doesn't cover the batch nature of the call, rate limits, or partial-failure behavior for a multi-UPRN request.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information — contents, deliberate exclusion, coverage/cost, and keying/routing — with the most important constraint front-loaded. No filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be described; the description instead spends its budget on what an agent cannot get from structured fields — the deliberate absence of yield data, UK scope, credit cost, and UPRN acquisition path. Complete for a one-parameter read tool with annotations covering safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter is an opaque integer array named 'uprns'. The description compensates well by stating it is keyed on a UPRN (not an address) and where to get one, which is the critical semantic the schema omits. It does not say whether multiple UPRNs are meaningfully supported in one call or what the integer format expects, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (roof characteristics for solar screening) and enumerates exactly what comes back: footprint area, roof shape and material, building height, existing panels. It also states a deliberate negative — no generation estimate — which prevents the agent from misreading it as a yield tool, cleanly separating it from siblings like energy_profile or property_energy_retrofit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit prerequisites and routing: UK only, costs 20 credits, keyed on UPRN and not address, with the exact two-step path (address_autocomplete then address_resolve) to obtain one. It also tells the agent how to report results ('report the usable roof area as a screening figure and say what it excludes'), which is actionable guidance rather than inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sourcing_commercialRated commercial stock in an authorityA
Read-onlyIdempotent
Inspect
Rated commercial stock in a local authority, filtered by sector and
rateable value — the commercial sourcing lane. Each row carries its
rateable value, an income-basis value, the freeholder where a title links,
and any auction history.

NO £/m² IS PUBLISHED and you should not compute one. The VOA's measured
area is not loaded, and dividing a hereditament-level rateable value by
the twin's unit-level floor area gives nonsense — it produced £235,301/m²
on a Westminster office before it was removed.

`lad_code` is REQUIRED and is the only scope: this is the one indexed way
into the twin for a bounded set of hereditaments. Use `area_resolve` to
turn a place name into a GSS code.

RATEABLE VALUE IS NOT RENT. It is the VOA's estimate of annual rental
value at the rating list's antecedent valuation date (1 April 2024 for the
2026 list). Do not quote it as passing rent or as income.

`income_basis_value` divides that RV by the district's own commercial
auction yield, so it is an arithmetic conversion anchored to local
evidence, not a valuation — and it reads `not_available` where the
district has no auction yield evidence, because a default yield would
produce a number that looks like a valuation. Report the yield and the
number of lots behind it.

One rating list is loaded (2026), so there is no RV trajectory per
property, no measured floor area from the VOA, and no vacancy signal.
UK only. Costs 10 credits (10p).
NameRequiredDescriptionDefault
limitNo
max_rvNo
min_rvNo
offsetNo
sectorsNo
lad_codeYes
scat_codesNo
with_ownerNo
single_hereditamentNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnly/idempotent annotations: discloses the credit cost (10), UK-only coverage, that only one rating list (2026) is loaded so no RV trajectory or vacancy signal exists, that income_basis_value can return `not_available`, and that £/m² must not be computed. This is exactly the operational context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it returns, then the derived-value caveats; every paragraph is doing work. The 'valued' framing is somewhat repetitive ('NOT RENT' admonition restated in the income_basis paragraph), which costs a point but not much.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape needn't be explained, and the description covers method, limits and cost thoroughly. The remaining gap is pagination and the scat_codes/sectors vocabulary for a 9-parameter tool, which an agent calling it will hit immediately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains lad_code, RV filtering (min/max), sectors, with_owner (freeholder where a title links) and hereditament granularity, but says nothing about limit, offset or scat_codes, leaving a third of the surface undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Rated commercial stock in a local authority') plus its scoping dimensions (sector, rateable value) and explicitly labels itself 'the commercial sourcing lane', which separates it from sourcing_live_listings, sourcing_owners and commercial_property without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one explicit routing rule ('Use `area_resolve` to turn a place name into a GSS code') and states lad_code is required and is the only scope. It does not say when to prefer this over siblings like commercial_property or sourcing_search, so the exclusion half is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sourcing_live_listingsLive listings enriched against our valuationA
Read-onlyIdempotent
Inspect
What is on the market RIGHT NOW in these postcode districts, each listing
enriched against our own record of the property: asking price against our
valuation (`asking_vs_avm_pct`, `discount_to_avm_gbp`), £/m², gross yield
on both the asking and valuation bases, unexpired lease years, EPC with
its retrofit gap, the designation flags, days listed, the agent, and a
plain-language `signals` list.

A drawn UK polygon can scope the search; pass postcode_districts=[] to
resolve its districts. At most 64 corners, 150 km² and 20 districts.
Only listings with located properties inside the boundary match.

Tenure accepts freehold or leasehold. Tenure, EPC ratings and minimum
gross yield filter before pagination.
Yield uses recorded asking monthly rent annualised against the asking or
auction guide price. Unknown rent/price cannot satisfy a yield filter.

There is NO total — a district holds far more archived listings than live
ones, so counting them costs seconds while the page costs milliseconds.
Read `has_more` and page with `offset`; never tell a user how many
listings exist, only how many you fetched.

A listing enriches only where the portal's own UPRN match landed on a unit
we hold; `enrichment.n_with_valuation` says how many of the rows that was,
and the rest carry the listing's fields with null comparisons.
UK only. Costs 10 credits (10p).
NameRequiredDescriptionDefault
limitNo
epc_inNo
offsetNo
tenureNo
channelNoresidential_sale
max_bedsNo
min_bedsNo
max_priceNo
min_priceNo
new_homesNo
area_geojsonNo
auction_onlyNo
postcode_districtsYes
min_gross_yield_pctNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: states the 10-credit (10p) cost, that a total is deliberately omitted because counting archived listings costs seconds, that only located properties inside the boundary match, that yield filters silently exclude unknown rent/price, and that non-matched rows carry null comparisons. These are exactly the behaviors an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool returns before constraints and caveats; nearly every sentence carries a non-obvious rule. It is dense and a single long block rather than broken into sections, which costs a little scannability for a 14-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return shape needn't be restated, and the description instead covers the things structure cannot: geographic limits, UK-only scope, cost, pagination policy, and the enrichment-matching caveat. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 0%, the description carries the load and does well: it defines the polygon constraints (64 corners, 150 km², 20 districts), the postcode_districts=[] resolution trick, allowed tenure values, yield computation basis, and auction guide price pricing. It leaves limit, channel, min/max beds and min/max price unexplained, though those are largely self-describing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource - 'What is on the market RIGHT NOW in these postcode districts' - and enumerates the enrichment payload (asking_vs_avm_pct, discount_to_avm_gbp, £/m², yields, lease years, EPC, signals). The 'RIGHT NOW' framing plus the explicit contrast with archived listings makes clear it is not listing_history or sourcing_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operative context: filters (tenure, EPC, min yield) apply before pagination, polygon scoping via area_geojson with postcode_districts=[] to resolve districts, and explicit instruction to page with offset rather than counting. It does not name a sibling alternative for the archived/off-market case, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sourcing_offmarket_ownersOwners in an area, ranked as an approach listA
Read-onlyIdempotent
Inspect
Who owns the stock in an area, ranked as an approach list: units held here,
total value and equity, average and longest years held, how many of their
units are on a short lease or already on the market, company status, and
the signals behind the rank. Pass a `strategy` to rank the owners of only
the units that preset points at — the owners of short-lease flats in a
borough, say.

COMPANIES ONLY, by construction: owners are grouped by company number, so
units held by private individuals have no group to appear in. They are
counted under `not_itemised` and never listed, and you must not attempt to
identify them by other means. Report the `scope.share_itemised` figure so
the user knows what fraction of the area the list covers.

`national_portfolio` reads `not_available`: only the in-area holding is
known, and it is not the owner's whole book — do not present it as one.
UK only. Costs 10 credits (10p).
NameRequiredDescriptionDefault
limitNo
lad_codeNo
strategyNo
min_unitsNo
postcode_districtNo
strategy_overridesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent, but the description adds substantial context beyond them: the companies-only grouping by company number, where private individuals go (`not_itemised`), the null `national_portfolio` semantics, the instruction to report `scope.share_itemised`, UK-only scope and a 10-credit cost. This is exactly the kind of behavioral disclosure that prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It front-loads what the tool returns and then layers constraints and caveats in short, purposeful paragraphs. The opening enumeration of metrics is slightly dense but each sentence carries operational information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, yet the description usefully flags the `not_itemised` and `national_portfolio` edge cases and the cost. The remaining hole is geographic input: with no schema descriptions, an agent is not told which of the two location parameters to supply or whether either is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description must carry the load, yet it explains only `strategy` meaningfully. It never clarifies the area-selection pair `lad_code` vs `postcode_district`, nor `min_units` (default 2), `limit`, or `strategy_overrides`, which an agent must guess at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (owners of stock in an area) and returns it as a ranked approach list, enumerating the metrics returned. It is clearly distinguishable from the sibling sourcing_owners by the emphasis on ranking owners rather than stock, though it never explicitly names or contrasts any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage rule for the `strategy` parameter ('rank the owners of only the units that preset points at') with an example. It also sets a hard usage boundary ('COMPANIES ONLY... do not attempt to identify them by other means'). However, it offers no guidance on when to use this versus sourcing_owners, ownership_by_company, or owner_profile.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sourcing_ownersOwners of sourced parcelsA
Read-onlyIdempotent
Inspect
Resolve registered owners for parcels returned by `sourcing_search`.

Uses the bulk HM Land Registry corporate and overseas ownership registers,
so it names companies, public bodies and overseas entities. Individually
owned titles are not in the bulk data and come back unresolved — that is a
gap in the free register, not a failed lookup, and naming an individual
requires a paid per-title purchase which this tool does not make.

UK only. Costs 25 credits (25p).
NameRequiredDescriptionDefault
assetNoland
parcel_idsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the data source (bulk HM Land Registry corporate and overseas ownership registers), the coverage limitation for individually owned titles, the UK-only scope, and the cost of 25 credits. These are important behavioral facts an agent would not know from the schema or annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and source, then adds the important coverage limitation, scope, and cost. Each sentence earns its place, and the cost and UK-only constraints are stated compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key context for a reasonably complex lookup tool: source data, unresolved individual owners, UK scope, and cost. It is mostly complete given the presence of an output schema, though the unexplained `asset` parameter is a small remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It helps explain `parcel_ids` by referencing parcels returned by `sourcing_search`, but it does not explain the `asset` parameter or when to choose between `land` and `units`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action, 'Resolve registered owners', and a specific resource, parcels returned by `sourcing_search`. It distinguishes the tool's scope from general ownership lookup by tying it to `sourcing_search` outputs and by explaining which owner types the bulk registers cover.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says to use this for parcels returned by `sourcing_search`, which gives a practical usage context. It also warns that individually owned titles remain unresolved and that naming an individual requires a paid per-title purchase this tool does not make, though it does not name a specific alternative tool for that paid lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sourcing_strategiesThe nine sourcing strategies, with readinessA
Read-onlyIdempotent
Inspect
The nine sourcing strategies as data — read this BEFORE running
`sourcing_search` in strategy mode. Each preset publishes its thesis, its
filters (every key overridable, with the default and the unit), its
ranking components with weights and scales, the feature columns it reads,
the data gaps that limit it, and its version.

Pass `area` as a local-authority GSS code (E09000032) to get `data_ready`
per strategy for that authority: `ready`, `partial`, `not_ready` or
`unknown`, with the coverage share behind the verdict. A `partial` verdict
is usable — say the share when you report the results. Do not run a
preset over an authority marked `not_ready` without telling the user what
is missing.
UK only. Free.
NameRequiredDescriptionDefault
areaNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description is free to add the operational context: the meaning of the `ready`/`partial`/`not_ready`/`unknown` verdicts, that `partial` carries a coverage share worth reporting, constraints ("UK only", "Free"), and that every filter key is overridable with defaults and units.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The prerequisite is front-loaded in the first sentence, followed by what the payload contains, then the `area` behavior, then the reporting obligation and terms of use. No filler or repetition; the length is justified by the amount of contract it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one optional parameter and an output schema present, the remaining burden is guidance on interpretation and constraints — all supplied (readiness semantics, coverage-share disclosure, UK-only, free). An agent has everything it needs to call this correctly and use the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameter, and it does: `area` is a local-authority GSS code with the concrete example E09000032 and an explicit statement of what supplying it returns (`data_ready` per strategy). It only implies rather than states the omit-the-parameter behavior, so it falls just short of full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely ("the nine sourcing strategies as data") and enumerates what each preset publishes — thesis, filters, ranking components, feature columns, data gaps, version. It distinguishes itself from sourcing_search by positioning itself as the metadata read that precedes strategy-mode search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing: "read this BEFORE running `sourcing_search` in strategy mode." It also states the negative case — do not run a preset over a `not_ready` authority without disclosing the missing data — and clarifies that `partial` is usable. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subject_transaction_anchorThe property's own sale, carried to todayA
Read-onlyIdempotent
Inspect
The property's own last registered sale carried by the published
repeat-sales index to its latest settled month: the price paid, the date,
the index factor applied and the anchored value. Where a property has
sold, this is the strongest single piece of evidence a valuation has.
When no published series can carry the sale the factor and the anchored
value are null and the anchor is diagnostic, never carried at 1.0.
Returns an empty anchor when no registered sale is linked to the UPRN.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe-read profile (readOnlyHint, idempotent, non-destructive), so the bar is lower. The description nonetheless adds meaningful edge-case behavior: the factor and anchored value are null when no series can carry the sale, the anchor is diagnostic and never carried at 1.0, and an empty anchor is returned when no registered sale is linked. It also states scope (UK only, free) – genuinely useful context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then edge cases, then scope, then the prerequisite workflow – a sensible order with no filler. It is slightly dense and could trim a clause, so 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and rich annotations already present, the description only needs to add purpose, edge cases, and prerequisites – and it covers all three. An agent has everything required to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it clarifies the tool is 'keyed on a UPRN, not an address' and points to address_autocomplete/address_resolve to obtain the value, which is exactly the missing semantics. It does not describe the integer format or constraints, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (carries the property's own last registered sale to today via a repeat-sales index) and enumerates the outputs (price paid, date, index factor, anchored value). This is clearly distinguishable from siblings like transactions_by_uprn, time_adjustment, and valuation_estimate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use context ('the strongest single piece of evidence a valuation has') and an actionable prerequisite chain: call address_autocomplete to narrow, then address_resolve to obtain the UPRN. It does not explicitly contrast with alternatives like transactions_by_uprn or time_adjustment, so it stops at 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supply_demandLive stock and monthly flow for an areaB
Read-onlyIdempotent
Inspect
Supply and demand for an area in one call: live stock today (count,
median days on market, new-home count) and the monthly flow — listings
added and reduced, reduction share, new-home share, agent concentration,
asking-to-sold on the registry-matched subset and days to completion.
Read the basis sentences: the flow count is the never-reduced cohort; the
live-stock series began 2026-09-05 and is forward-only.
UK only. Free.
NameRequiredDescriptionDefault
monthsNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the flow count is defined as the never-reduced cohort, and the live-stock series starts 2026-09-05 and is forward-only, which materially affects how results should be interpreted. It stops short of noting rate limits, pagination, or latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the core value proposition and the metrics returned, and the second carries the interpretive caveats. Dense but every clause carries information; the metric enumeration is long yet earns its place by describing output scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The metric list and the data-definition caveats make it usable, but the complete absence of per-parameter meaning plus no routing to sibling tools leaves real gaps for an agent choosing and configuring this call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five parameters, so the schema contributes no semantics and the description must compensate. Beyond loosely implying an area and a monthly window, it says nothing about area_code vs area_type interaction, channel values, or what the bedroom_band enum means for the aggregates, leaving most parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific resource (supply and demand for an area) and enumerates the concrete outputs: live stock count, median days on market, new-home count, listings added/reduced, reduction share, agent concentration, asking-to-sold, days to completion. That is far more specific than a tautology. It does not, however, name or rule out the closest siblings such as area_stock_profile, listing_stock_series, or area_report, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives scoping constraints ('UK only. Free.') and implies the use case by framing the tool as a combined one-call supply+demand view, which suggests using it instead of stitching together stock and flow tools. It never states explicitly when to prefer it over the sibling area/stock/index tools, so usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

time_adjustmentIndex factor between two datesA
Read-onlyIdempotent
Inspect
The factor that carries a price paid in a past month to the latest
SETTLED month of the published repeat-sales house-price index: the
postcode district's own series, else its local authority's, else the
national series; forecast months are never used. Returns `factor`, the
two index levels (`index_level_from`, `index_level_to`), `basis`
(repeat_sales_district | repeat_sales_lad | repeat_sales_national),
`current_period` (the month carried to, which trails the calendar by the
registry's lag) and provenance. `status` is ok or index_unavailable: a
price no published series covers has a null factor, never a stand-in 1.0.
A factor of exactly 1.0 is real (a price from that month or later; see
`reason`). The same carry the valuation applies to each comparable and to
the property's own last sale. `postcode` is a full UK postcode or a
district; `from_date` is YYYY-MM-DD; `lookback_years` (1–20) only sets
how much of `monthly_series` comes back.
UK only. Free.
NameRequiredDescriptionDefault
postcodeYes
from_dateYes
property_typeNo
lookback_yearsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds substantial behavior: the fallback hierarchy (district -> local authority -> national), the ban on forecast months, the status vocabulary, the null-factor rule (never a stand-in 1.0), that exactly 1.0 is real, and that current_period trails the calendar due to registry lag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then fallback rules, then status/edge-case semantics, then parameter notes. Dense and mostly waste-free, though the run of parenthetical clarifications and return-field enumeration makes it longer than strictly needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only index tool with an output schema present, the description is nearly self-sufficient: basis, status, null handling, and provenance are all covered, removing reliance on the output schema. The only real gap is the undocumented property_type parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description must carry params, and it documents postcode (full postcode or district), from_date (YYYY-MM-DD), and lookback_years (1-20, only affects monthly_series return size) well beyond the bare schema titles. It omits any explanation of property_type, one of four params, so it is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: computing the factor that carries a past-month price to the latest settled month of the repeat-sales house-price index. It is immediately distinguishable from siblings like market_index_series or comps_adjustments because it names the exact index basis and the carry semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context ('the same carry the valuation applies to each comparable and to the property's own last sale') and a constraint ('forecast months are never used'), which implies valuation-adjustment use. However, it never explicitly names when to choose this tool over index or valuation siblings, leaving the selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_by_uprnRegistered sales for a propertyA
Read-onlyIdempotent
Inspect
All HMLR Price Paid records joined to this UPRN, newest first.
England & Wales only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read profile (readOnly, idempotent, non-destructive, not open-world). The description adds genuinely new behavioral context: newest-first ordering, England & Wales geographic restriction, and that the call is free. Return format is covered by the output schema, so its absence here is fine.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero waste, front-loaded with the core verb+resource and ordering, followed by coverage, cost, and the prerequisite workflow. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with rich annotations and an output schema, the description covers purpose, geography, cost, ordering, and input sourcing. Only minor gaps remain (e.g., pagination/record limits), which are partly implied by 'All ... records'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single required 'uprn' parameter, so the description must carry the load. It adds real value by telling the agent where to source a UPRN (address_resolve) and that an address is not accepted, but it does not describe the parameter's type or format. Partial compensation for a 0% coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: 'All HMLR Price Paid records joined to this UPRN, newest first.' It also explicitly names the keying dimension ('Keyed on a UPRN, not an address'), which distinguishes it from address-oriented siblings like address_by_uprn.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit prerequisite routing: call address_autocomplete to narrow, then address_resolve to obtain a UPRN. This is clear 'how/when to get the input' guidance. It does not, however, contrast against alternative transaction tools like property_history or subject_transaction_anchor, so it stops short of full alternative selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_accuracyOur valuation error, forward-validated monthlyA
Read-onlyIdempotent
Inspect
How accurate our valuations have been, measured the only way that cannot
leak: each month, every registered sale the model had ALREADY valued is
compared with the price actually paid — MdAPE (median absolute
percentage error), PPE20 (share within 20%) and n, per asset class and
model version. Until the first vintage lands in October 2026 the answer is
`status: no_rows_yet` with the metric definitions: an empty table, not a
zero error. Filters: `asset_class` (Residential | Commercial | Mixed-Use),
`model_version` (e.g. gbm-h3-v4), `since` (YYYY-MM).
UK only. Free.
NameRequiredDescriptionDefault
sinceNo
asset_classNo
model_versionNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds genuine non-structured context: the forward-validated, leakage-free methodology, monthly refresh cadence, and crucially the `status: no_rows_yet` empty-state that must not be read as zero error. It stops short of describing auth or rate limits, but nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the crucial empty-state caveat are front-loaded, with filters and scope ('UK only. Free.') packed into a compact trailing block. The prose is slightly ornate ('measured the only way that cannot leak') but nearly every clause carries real information; no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with a full permission annotation set and an output schema, the description supplies what structured fields cannot: the metric definitions' meaning, the pre-October-2026 empty-state, geographic scope and cost. The only shortfall is the incomplete enumeration of asset_class values, which could mislead an agent into thinking 'Other'/'Unclassified' are invalid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and largely delivers: it names all three filters and supplies formats/examples ('since' as YYYY-MM, 'model_version' e.g. gbm-h3-v4). One gap: it lists only Residential | Commercial | Mixed-Use for asset_class while the schema enum also allows 'Other' and 'Unclassified'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('how accurate our valuations have been') and precisely defines the measurement (registered sales the model had already valued vs. actual price paid, reported as MdAPE/PPE20/n). It is unmistakably distinct from siblings like valuation_estimate, valuation_full and valuation_comparables, which produce valuations rather than score them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a critical timing caveat ('until the first vintage lands in October 2026 the answer is no_rows_yet'), which tells the agent when the tool is and isn't useful. However, it never says when to reach for this versus other accuracy-adjacent siblings, and no exclusion or alternative is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_comparablesComparable sales near the property, scoredA
Read-onlyIdempotent
Inspect
Comparable completed sales for a valuation, beyond the property's own
building: Land Registry sales of the nearest units (within 1 km, the 60
months before `as_of`), widening from 250 m and 12 months until at least
6 qualify. A sale qualifies when it is the same broad type (flats with
flats, houses with houses, from the type recorded at the sale), within
0.67-1.5x the subject's floor area when both are known, category A and
not an anomaly. Category B, anomalous, new-build and out-of-band sales
are returned with `flags`, never dropped: review contrary sales rather
than ignoring them. Each sale: price, date, UPRN, address, distance,
floor area, bedrooms, tenure, `qualifies`, `similarity` (score with
distance, recency, size, type and bedrooms components). Floor area and
bedrooms are the unit's CURRENT record, not as at the sale
(`attributes_after_sale` flags a record dated after it). `selection`
names the step used; `provenance` lists every step tried and the data
watermark. Time-adjust prices with the published index before use.
`as_of` YYYY-MM or YYYY-MM-DD (default today); `limit` 1-60.
UK only. Costs 10 credits (10p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes
as_ofNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: it discloses the widening radius/time window, the six-sale minimum, qualification criteria, and that non-qualifying sales are returned with flags rather than dropped. It also warns that floor area and bedrooms reflect the current record, explains selection and provenance, advises time-adjustment, and states the 10-credit cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although dense, the description is front-loaded with the tool's purpose and then proceeds through qualification, return behavior, caveats, parameters, cost, and prerequisites. Every sentence adds material information needed to interpret or invoke the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a complex valuation-comparables tool: it covers scope, selection logic, flags, data caveats, return-field semantics, provenance, time adjustment, pricing, geography, and lookup prerequisites. Because an output schema exists, it does not need to restate the full response shape, and it already explains the most important returned concepts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates: it explains that the key is a UPRN rather than an address, gives as_of accepted formats and default, and states the limit range. The parameter meanings are clear enough to call correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and operation: completed Land Registry comparable sales near the subject property for valuation, explicitly beyond the property's own building. It distinguishes the scope and qualification logic from generic property or transaction lookup tools without needing to name siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context and prerequisites, including that the call is keyed on a UPRN and that address_autocomplete then address_resolve should be used to obtain one. It explains the widening search and qualification rules, but does not explicitly contrast this tool with siblings such as property_comps or valuation_rent_comparables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_estimateAutomated valuation estimateA
Read-onlyIdempotent
Inspect
Automated value estimate for a property: a point value plus a range.
Returns 404 when we hold no valuation for the UPRN — most often because
the unit has no floor area on record, which the model requires.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioural detail: a 404 failure mode and its usual cause (no floor area on record), the UK-only scope, and that the call is free. It stops short of 5 by not covering rate limits or latency for a model-backed endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what the tool returns, followed by failure behaviour and then scope/identity. Every clause carries information an agent needs; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema and full annotation coverage, the description covers purpose, failure mode, scope and the UPRN acquisition path. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter has no description, so the description must carry the load — and it does: it states the key is a UPRN, not an address, and explains how to obtain one via address_autocomplete/address_resolve. It never restates the integer type or required-ness, which is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Automated value estimate for a property') and even the return shape ('a point value plus a range'), so the agent knows what it gets back. It does not explicitly differentiate itself from close siblings such as valuation_full, valuation_comparables or equity_estimate, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage context: UK only, free, and keyed on a UPRN rather than an address, plus an explicit two-step path ('call address_autocomplete ... then address_resolve'). It never says when NOT to use it in favour of valuation_full or valuation_comparables, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_fullFull valuation with back-seriesA
Read-onlyIdempotent
Inspect
Full valuation block for a property: the value and its range, a monthly
back-series (the value scaled by the local £/m² index, so it terminates
at the headline figure by construction), a rental estimate where the
district benchmark supports one, and a `trust_score` scoring the evidence
behind the number — index sample size, floor-area provenance, model
confidence. Use `valuation_estimate` if you only need the number; this is
materially more expensive.
UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
uprnYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds value annotations don't: it is materially more expensive than valuation_estimate, it is free, and it is UK-only. It does not discuss rate limits or failure modes, but cost and geographic scope are exactly the kind of behavioral context that matters here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Heavily front-loaded: the output contents come first, then the alternative, then prerequisites. Most sentences earn their place, though the parenthetical explaining the back-series mechanics ('scaled by the local £/m² index, terminating at the headline figure') is dense and slightly more than an agent needs to select the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, yet it still usefully previews the payload components. Combined with the cost note, UK-only scope, and the UPRN-acquisition path, an agent has everything required to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single uprn parameter, so the description carries the burden. It does so well by stating the tool is 'keyed on a UPRN, not an address' and describing how to obtain one via sibling tools, which prevents the common error of passing an address string. It stops short of documenting the UPRN format or integer bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (full valuation block for a property) and enumerates what it returns: value and range, monthly back-series, rental estimate, and trust_score. It explicitly distinguishes itself from valuation_estimate ('if you only need the number'), so the agent can separate it from a sibling without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit alternative and the condition selecting it ('Use valuation_estimate if you only need the number; this is materially more expensive'). It also spells out the prerequisite pipeline (address_autocomplete then address_resolve) and the UK-only constraint, so the agent knows when and how to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_rent_comparablesComparable lets near the property and the rent they indicateA
Read-onlyIdempotent
Inspect
Comparable lets for a market rent, and the rent they indicate. ASKING
rents from portal adverts: no achieved rents exist, so say "asking" when
you quote them. Reads the rent adverts of the nearest units (within 1 km,
last seen in the 24 months before `as_of`), widening from 250 m and 6
months until 4 effective comparables qualify. A let qualifies when it is
the same type family (flats with flats, houses with houses; house shares
and rooms never), the same bedrooms (+/- 1 only when exact cannot reach
the minimum), and within 0.67-1.5x the subject's floor area when both are
known; others come back with `flags`. Each let:
address, distance, beds, floor area, first/last seen, `outcome`
(let_agreed | withdrawn | live | unknown), first and last asking rent,
reductions, days on market, the rent carried to the last complete month
on the asking-rent index (`carried_rent_pcm`), `adjusted_rent_pcm` (equal
to it while size adjustment is off) and its `weight` (distance, recency, size, beds,
type; let agreed counts more, an unlet reduced asking rent less).
`estimate`: central_pcm (weighted median, an achievable ASKING rent),
low_pcm/high_pcm (80% range; back-tested on let-agreed adverts: median
miss 10%, 80% coverage), n_effective, and asking_to_achieved_ratio
(ONS paid rents over the local asking median for the bedroom band, capped
0.85-1.05, 1.0 with ratio_source `none` when no cell) published BESIDE
the estimate, not applied. `time_on_market_days`: median days to let
agreed for the comparable lets. The property's own adverts are never
comparables; its latest is `subject_advert`. `status` ok | thin |
no_comparables | location_unavailable. PASS `beds`, `property_type`
(flat | terraced | semi-detached | detached | bungalow) and
`floor_area_m2` whenever you have established them: the unit record's
bedrooms are imputed for most properties, and a wrong bedroom count
doubles the miss (`subject.attributes_source` says what was used).
`as_of` YYYY-MM or YYYY-MM-DD (default today); `limit` 1-30.
UK only. Costs 10 credits (10p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
NameRequiredDescriptionDefault
bedsNo
uprnYes
as_ofNo
limitNo
floor_area_m2No
property_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly/idempotent/non-destructive). The description adds substantial behavioral context: 10-credit cost, UK-only scope, the adaptive widening algorithm (250m/6mo to 1km/24mo until 4 effective comps), qualification criteria, `flags` for near-misses, status outcomes, estimate methodology with back-tested accuracy, and the asking_to_achieved_ratio caveat published beside (not applied to) the estimate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the 'asking' caveat are front-loaded, and nearly every sentence carries real information. It is nonetheless a dense block with many parenthetical clauses that could be trimmed slightly without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description fully explains return fields, the qualification/widening behavior, edge statuses (ok|thin|no_comparables|location_unavailable), and the address-to-UPRN prerequisite. Nothing an agent needs to invoke and interpret this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates for every parameter: beds and property_type (with enumerated values flat|terraced|semi-detached|detached|bungalow), floor_area_m2 (with the size qualification rationale), as_of format (YYYY-MM or YYYY-MM-DD, default today), limit range (1-30), and uprn (keyed on UPRN, obtained via address_resolve). This is well beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb+resource: 'Comparable lets for a market rent, and the rent they indicate', immediately clarified as ASKING rents from portal adverts. Combined with the qualification rules and estimate output, it is unambiguous enough to distinguish from the rent-estimate and sales-comparable siblings even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational context: 'ASING rents... say "asking" when you quote them', the prerequisite workflow 'call address_autocomplete (free) to narrow, then address_resolve to get one', and 'PASS beds, property_type and floor_area_m2 whenever you have established them' with the reason (imputed bedrooms). It stops short of explicitly naming an alternative sibling tool and when to prefer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 99 tool updates
    • First observedactor_network
    • First observedactor_path
    • First observedaddress_autocomplete
    • First observedaddress_by_postcode
    • First observedaddress_by_uprn
    • First observedaddress_resolve
    • First observedagent_activity
    • First observedarea_report
    • First observedarea_resolve
    • First observedarea_reverse_geocode
    • First observedarea_stock_profile
    • First observedask_question
    • First observedasking_price_index_series
    • First observedasking_rent_index_series
    • First observedauction_comps
    • First observedauction_discount
    • First observedauction_lots
    • First observedauction_stats
    • First observedbuild_cost
    • First observedbuilding_physical
    • First observedchanges_since
    • First observedcommercial_index_series
    • First observedcommercial_market
    • First observedcommercial_property
    • First observedcommercial_rent_index_series
    • First observedcomps_adjustments
    • First observedcost_index
    • First observedcouncil_tax_band
    • First observeddata_coverage
    • First observeddistressed_assets
    • First observedenergy_profile
    • First observedentity_relationships
    • First observedentity_search_capabilities
    • First observedepc_certificates
    • First observedequity_estimate
    • First observedh3_density
    • First observedland_assembly
    • First observedlha_rate
    • First observedlisting_history
    • First observedlisting_market_series
    • First observedlisting_stock_series
    • First observedlong_held_high_equity
    • First observedlookup_entities
    • First observedmarket_facts
    • First observedmarket_forecast
    • First observedmarket_index_series
    • First observedmarket_profile
    • First observedmarket_ranking
    • First observedmarket_volume_ranking
    • First observedmarket_volume_series
    • First observedmarket_yields
    • First observedmixed_use_buildings
    • First observedmortgage_rates
    • First observedowner_profile
    • First observedownership_by_company
    • First observedownership_by_title
    • First observedparcel_lookup
    • First observedplanning_applications
    • First observedplanning_check
    • First observedplanning_designations
    • First observedplanning_precedents
    • First observedplot_utilisation
    • First observedproperty_comps
    • First observedproperty_energy_retrofit
    • First observedproperty_flood_risk
    • First observedproperty_history
    • First observedproperty_lease
    • First observedproperty_lease_batch
    • First observedproperty_lookup
    • First observedproperty_media
    • First observedproperty_planning_history
    • First observedproperty_planning_history_batch
    • First observedproperty_reconcile
    • First observedproperty_rental_estimate
    • First observedproperty_report
    • First observedproperty_risk_report
    • First observedproperty_risk_report_batch
    • First observedproperty_summary
    • First observedquery_semantic
    • First observedretrofit_candidates
    • First observedsearch_entities
    • First observedsearch_summary
    • First observedsite_appraisal
    • First observedsolar_potential
    • First observedsourcing_commercial
    • First observedsourcing_live_listings
    • First observedsourcing_offmarket_owners
    • First observedsourcing_owners
    • First observedsourcing_search
    • First observedsourcing_strategies
    • First observedsubject_transaction_anchor
    • First observedsupply_demand
    • First observedtime_adjustment
    • First observedtransactions_by_uprn
    • First observedvaluation_accuracy
    • First observedvaluation_comparables
    • First observedvaluation_estimate
    • First observedvaluation_full
    • First observedvaluation_rent_comparables

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    UK property area intelligence: validated trajectory scores, gentrification early-warning and area screening for 2,292 England & Wales postcode districts, from 30+ government data sources.
    7
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Unified UK property search across major portals with deduplication and open-data enrichment, enabling natural-language queries for listings, sold prices, EPC, crime, schools, and market stats.
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to shortlist London neighbourhoods and assess homes and listings, drawing on official open data for recorded sale prices, rents, crime, schools, flood risk, noise and commute times. Every answer returns a cited evidence envelope with confidence, sources, licences and caveats.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources