Skip to main content
Glama

Server Details

MarketCode is an AI-powered UK property intelligence platform by RoboSapien Limited. Its flagship agentic AI valuation pairs a free AVM estimate with a £20 AI-researched valuation report, sources and comparables behind every number. Its Analyst agent plans research, cross-checks evidence and returns sourced answers, shortlists and reports. Land Registry sales, listings, planning and title data - all on one map. REST API and MCP server included.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 98 tools

Disambiguation2/5

Many tools overlap in purpose: property_summary/property_lookup/property_report/site_appraisal all return property records; market_facts/market_profile/market_index_series/asking_price_index_series cover similar market metrics; auction_lots/auction_stats/auction_comps/auction_discount overlap. Descriptions attempt to differentiate, but with 98 tools an agent can easily misselect.

Naming Consistency4/5

All tools use lower snake_case with no camelCase or chaotic mixing. The pattern is mostly consistent, though it mixes verb_noun (search_entities, address_resolve) with noun_noun (property_report, market_facts) and a few verb phrases (changes_since).

Tool Count1/5

98 tools is far beyond the 3–15 recommended range and exceeds the 25+ 'too many' threshold. The domain is broad, but this number is an extreme mismatch for practical tool selection.

Completeness4/5

The surface covers a very wide domain: property, market, planning, ownership, auctions, energy, land, commercial, sourcing, and raw SQL/semantic queries. Gaps are mostly data coverage (Scotland/NI, live exits, mortgage balances) rather than missing tool operations.

Available Tools

98 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
depthNo
limitNo
entity_idYes

Output Schema

ParametersJSON 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 cover read-only/idempotent/non-destructive, and the description adds substantial context beyond that: credit cost (15, and an unpublished root is free), an authentication constraint, truncation signaling, a warning that missing links are not negative findings, and that individuals are excluded. This is exactly the extra behavioral detail 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?

Purpose is front-loaded, then caveats and costs follow in terse sentences with no filler. It is dense and slightly telegraphic, but each sentence carries information an agent needs.

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 explanation is unnecessary, and the description covers cost, auth, network limits, and interpretation caveats. The main gap is the undocumented kind enum and entity_id, which leaves the primary input under-specified.

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 clarifies depth (1–3) and the node cap tied to limit (≤100 nodes), but leaves the 7-value kind enum and entity_id entirely unexplained in both schema and description, so half the parameters 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?

States a specific verb and resource with scope: "Investigate recorded corporate ownership, title and agency relationships." Clear what the tool returns (a relationship network around an entity). However, it does not name the near-sibling actor_path or the ownership_by_* tools, so an agent must infer the boundary between this and other relationship tools.

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 operational conditions (authenticated account required, no anonymous preview key, depth 1–3, ≤100 nodes) but never states when to pick this tool over actor_path or entity_relationships. Usage is only implied from the ownership/agency framing.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
limitNo
source_idYes
target_idYes
source_kindYes
target_kindYes

Output Schema

ParametersJSON 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 readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavior: a 15-credit cost and the important caveat that a clipped search yields incomplete results rather than a negative claim. It does not explain how depth/limit clipping actually works, which is the other half of that caveat.

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?

Five short sentences, each carrying distinct information: purpose, prerequisite, clipping caveat, return shape, cost. Constraint and purpose 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, so return values need not be explained, and cost/prerequisite/caveat are covered. The gap is parameter documentation: with 0% schema coverage, an agent has no guidance on what depth and limit do or how they interact with the stated three-hop bound.

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% and none of the six parameters (depth, limit, source_kind/id, target_kind/id) are defined. The only trace is 'within three hops', which loosely maps to the depth default of 3. For a zero-coverage schema the description should carry this burden and largely does not.

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

Purpose4/5

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

Specific verb+resource+scope: 'Find a recorded path between two corporate-network records within three hops.' An agent can distinguish this from a generic graph query. However, it never names the closest siblings (actor_network, entity_relationships), so the boundary 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?

It gives one prerequisite ('Requires the customer's account') but no when-to-use guidance or alternatives. With actor_network and entity_relationships in the sibling set, the description should say when a between-two-nodes path query is preferred over a network expansion.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
qYes
countryNoUK
max_resultsNo

Output Schema

ParametersJSON 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. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
postcodeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/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's only incremental disclosure is pricing ('Free'), which is genuinely useful but thin; no rate limits, result caps, or pagination behaviour are mentioned.

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, both front-loaded and information-bearing, with zero filler. Nothing could be cut without losing meaning.

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

Completeness4/5

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

For a single-parameter lookup with an output schema present, the description need not explain return shape. It is adequate, though it omits postcode formatting expectations and any result-volume caveats that would matter for a bulk address lookup.

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 the single parameter has no description, so the burden falls on the prose. The description adds only the qualifier 'UK postcode', which is useful format context but nothing about normalisation, spacing, or partial-postcode behaviour.

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 ('Return all addresses at a UK postcode'), so the operation is unambiguous. It does not, however, differentiate itself from close siblings like address_by_uprn, address_autocomplete, or address_resolve, 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 Guidelines2/5

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

Beyond the cost signal 'Free', there is no when-to-use guidance, no mention of when to prefer address_by_uprn or address_resolve, and no prerequisite (e.g. postcode format or coverage limits). The agent gets no routing help.

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). Free. Keyed on a UPRN, not an address: call address_autocomplete (free) to narrow, then address_resolve to get one.

ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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 the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's marginal value is the "UK only" coverage boundary, the "Free" cost signal, and the crucial warning that the key is a UPRN rather than a free-text address. It doesn't discuss return shape or error behavior, but output schema exists so that is largely covered elsewhere.

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 fragments, zero filler: purpose, cost/scope, then input semantics and escalation path. The routing instruction is front-loaded in the same breath as the key constraint.

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 single-parameter, read-only lookup with a published output schema, the description supplies everything an agent needs: scope, cost, what the key is, and how to obtain it. Nothing material 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 only property is a bare integer named "uprn", so the description carries the burden — it clarifies that the value must be a UPRN identifier and points to address_resolve as the way to procure one. It stops short of describing the UPRN's format or numeric range, 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 verb and resource ("Look up an address by UPRN") plus a geographic scope constraint ("UK only"). It also explicitly distinguishes its input from address-based siblings, so an agent can tell it apart from address_autocomplete and address_resolve 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?

Gives an explicit routing recipe: use address_autocomplete to narrow, then address_resolve to obtain the UPRN this tool requires. This names the alternatives and the condition that selects them, 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.

address_resolveResolve an address to a UPRNB
Read-onlyIdempotent
Inspect

Resolve free-text address to canonical record (UPRN for UK). Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
countryNoUK
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/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 the safety profile is fully covered without the description. The description adds only the 'Free' cost note and 'canonical record' framing; it does not disclose match-count behavior, region coverage limits, or what happens on no-match/ambiguous input. Adequate but thin against the annotation baseline.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the core action and canonical output are stated first. It is terse rather than padded, though the terseness comes at the cost of the missing details noted elsewhere.

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 safety. Still, for a resolver that can return multiple candidates (max_results defaults to 5) and is UK-scoped by default, the description should say something about multiple matches and whether non-UK addresses are supported.

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 three parameters. The description covers 'free-text address' (query) and implies a UK scope for country, but max_results is entirely unexplained and no format/default behavior for country is given. For a 0%-coverage schema the description should compensate, and it largely does not.

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

Purpose4/5

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

States a concrete verb ('Resolve') and resource ('free-text address to canonical record (UPRN)'), and the 'free-text' qualifier meaningfully separates it from address_by_postcode and address_by_uprn. It does not, however, mention address_autocomplete, the closest sibling, so sibling disambiguation is incomplete.

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?

'Resolve free-text address' implies the input situation (raw text with no postcode/UPRN yet), and 'Free' hints at cost considerations, which is why one would prefer it over a paid lookup. But there is no explicit when-to-use/when-not statement or named alternative such as address_autocomplete or address_by_uprn.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
monthsNo
area_idYes
listing_typeNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
sectorNoALL
lad_codeNo
postcode_districtNo

Output Schema

ParametersJSON 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 cover safety (readOnly, idempotent, non-destructive), and the description adds non-obvious behavior on top: the per-call credit cost, UK-only scope, and the exact degradation semantics (unsupplied half reads `not_available` with a reason rather than empty, plus the sections_degraded signal). This is context the 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.

Conciseness4/5

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

Front-loaded purpose sentence, then a clearly emphasized scope warning, then operational notes (degradation check, region, cost). Structure is excellent and nearly every sentence earns its place; the description is a touch long, but the complexity of a multi-source composite report justifies most of it.

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 composite report tool with an output schema already documenting return shape, the description supplies the missing pieces: region constraints, cost, scope keying, and the interpretation guidance for sections_degraded. Nothing needed to invoke it correctly is absent aside from the sector value set.

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 explain parameters, and it does so for the two critical keys: lad_code is a GSS local-authority code (with a resolver pointer) and postcode_district drives the listing lane, and it stresses they are not interchangeable. The `sector` parameter (default 'ALL') receives no explanation of accepted values, leaving one of three params 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 composed artifact and enumerates exactly what it contains (sourcing readiness, commercial capital and rent indices, planning decision record, live listing stock). An agent can distinguish this composite document tool from siblings like market_profile or commercial_market 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 strong operational context: UK only, 25 credits, use area_resolve to obtain a lad_code, pass both scopes to fill every section, and check sections_degraded before calling the document complete. It references property_report for shared behavior but does not explicitly state when to prefer this tool over a narrower sibling, keeping it short of a full 5.

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

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
area_nameYes
include_h3No
h3_resolutionNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
type_idYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
area_idYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
methodNohedonic_smoothed
area_codeNoNATIONAL
area_typeNodistrict
frequencyNomonthly

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
methodNohedonic_smoothed
area_codeNoNATIONAL
area_typeNodistrict
frequencyNomonthly

Output Schema

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYes
place_slugNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
monthsNo
max_bedsNo
min_bedsNo
is_commercialNo
postcode_areaNo
postcode_districtNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNo
min_lotsNo
is_commercialNo
postcode_areaNo
postcode_districtNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
date_toNo
date_fromNo
sold_onlyNo
auctioneerNo
with_yieldNo
is_commercialNo
postcode_areaNo
postcode_districtNo
with_achieved_priceNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
quarter_toNo
quarter_fromNo
is_commercialNo
postcode_districtNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
basisNotender
gia_m2No
regionNoNATIONAL
sectorYes
rate_gbp_m2No
rate_periodNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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 bar is lower, and the description still adds substantial context: credit cost, null-rather-than-estimated semantics for year_built/num_floors, which height field to use, attribution preservation, and explicit limits of what the extrusion shows. That is behavior well beyond the annotations.

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

Conciseness5/5

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

Front-loaded with what is returned, then caveats, then the boundary/cost/input-key rules. Every sentence carries a distinct, actionable constraint; nothing is restated from the schema or annotations.

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 single-param, read-only lookup the description covers inputs, cost, coverage, null handling, field-selection pitfalls, and rendering caveats. An output schema exists, yet the field enumeration still usefully frames the response; 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% and there is 1 required param, so the description must carry the meaning — and it does, clarifying that the key is a UPRN (integer identifiers for buildings) and not an address, plus how to obtain valid values. It stops short of stating format/plurality expectations for the array itself.

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 buildings a set of UPRNs sit in) and enumerates the exact attributes returned (height, volume, footprint, floors, materials, basement, green roof, solar, unit mix). An agent can distinguish this from near-neighbours like property_summary or 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?

Explicitly says it is UK-only, costs 15 credits, and is keyed on a UPRN not an address, then names the exact pipeline: address_autocomplete (marked free) to narrow, then address_resolve to obtain the UPRN. This is when-to-use, prerequisite, and alternative in one passage.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNo
uprnsNo
cursorNo
channelNo
event_typesNo
postcode_districtsNo

Output Schema

ParametersJSON 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 (readOnly, idempotent, non-destructive) cover the safety profile, and the description adds substantial non-obvious behavior: the cursor is an event id not a timestamp, late rows take higher ids, empty pages must be checked against coverage.event_types, delisted effectively has no coverage, price change source semantics, and that null means unknown rather than zero. It also gives cost (5 credits) and UK-only scope. The only reason it isn't a 5 is that a couple of behavioral edges (pagination/limit behavior) are 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-loaded with the core mechanism, then layers caveats in a logical order. It is on the long side and uses emphasis/bold for the delisted warning, but nearly every sentence carries decision-relevant information 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?

Given a read-only feed with 7 params, zero schema coverage, and an output schema already present, the description supplies the missing piece: coverage limitations an agent must respect before trusting results, plus the scoping precondition and sibling routing. Nothing essential for correct invocation is missing.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the load and largely succeeds: it defines the meaning of cursor (event id, from previous call), since, uprns, and postcode_districts. However it references the cursor as 'next_cursor' while the schema field is 'cursor', and it never explains the limit or channel parameters, so compensation is thorough but not complete for all 7 params.

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

Purpose5/5

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

Opens with a specific verb+resource: 'What changed since you last looked — the portal change feed.' It names the cursor-driven feed precisely, and the surrounding text makes clear this is a change/event feed rather than a static history tool (property_history, listing_history). An agent can place it against siblings 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-to-use mechanics: pass next_cursor for incremental reads, or supply a scope (postcode_districts/uprns) or since date on a first call because unbounded reads are refused. It also routes to siblings ('call address_autocomplete (free) to narrow, then address_resolve to get one') and states the cannot-answer cases, which is genuine when-not guidance.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
areaNo
limitNo
startNo
sectorNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
sectorNo
area_keyNo
lad_codeNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uarnNo
uprnNo

Output Schema

ParametersJSON 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, and closed-world. The description adds cost (10 credits), UK-only scope, `not_available` behavior for underivable blocks with reasons, and an interpretation caveat that RV is a rating measure at the antecedent valuation date, not passing rent. These are valuable behavioral disclosures 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 description is appropriately sized for a complex multi-block report and every sentence carries information, but the first sentence is a long run-on enumerating report blocks, and the critical routing instructions (keyed on UPRN, call address_autocomplete) are placed at the end rather than front-loaded.

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

Completeness4/5

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

Given a rich output schema, the description needn't detail return values, yet it still outlines report blocks and not_available reasons. It covers scope, cost, keying, and interpretation, though the parameter requiredness/selection ambiguity remains a 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?

Schema coverage is 0% and neither parameter has a schema description. The description names 'UPRN' and 'VOA UARN' and explains that the tool is keyed on UPRN and how to obtain one, but does not state whether one or both are required, what happens if both are supplied, or define UARN beyond the acronym. It adds partial meaning but leaves invocation ambiguity.

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 report keyed on UPRN/UARN and enumerates the report blocks (RV, sector indexes, income-basis value, auction history, owner, lease), so the agent knows what the tool produces. However, it does not explicitly distinguish this report from sibling tools that also expose commercial indexes or market data (e.g., commercial_index_series, commercial_market), leaving sibling selection partly implicit.

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 states UK-only scope, 10-credit cost, and the prerequisite workflow: call address_autocomplete (free) then address_resolve to obtain a UPRN, because the tool is keyed on UPRN not an address. It does not say when not to use this report or name alternative report tools, so it has 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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
areaNo
startNo
sectorNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
relisted_uprnsNo
lookback_monthsNo

Output Schema

ParametersJSON 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 read-only/idempotent safety profile, and the description adds material context beyond them: the 10-credit cost, UK-only coverage, the repeat-sales index fallback chain (district → local authority → national), the `index_unavailable` carry-receipt behavior, and an explicit disclosure that the -10% relisting penalty is an assumption rather than a measured discount.

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 ('The evidence behind a valuation, itemised') and every clause earns its place, but the return-value, penalty, fence, cost, coverage and prerequisite facts are compressed into one dense paragraph of nested parentheticals that is harder to scan than it needs to be.

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

Completeness5/5

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

For a 3-param read-only tool with an output schema, the definition supplies everything an agent needs to call it correctly: identity key, optional-param semantics, range limits, cost, geographic scope and the prerequisite lookup path. The output schema handles the return shape, and the description still usefully previews it.

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 carries the full burden and does: uprn is 'keyed on a UPRN, not an address' with the route to obtain one; relisted_uprns gets meaning, the condition to pass it and its assumption status; lookback_months gets an explicit 12–120 range not present in the schema.

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

Purpose5/5

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

States a specific verb+resource ('same-building comparable sales ... itemised' with time adjustments) and explicitly distinguishes itself from the sibling `valuation_full` ('gives the value itself'). An agent can tell this apart from valuation_comparables, property_comps and time_adjustment 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 ('show WHY a value is what it is') with the named alternative ('valuation_full gives the value itself'), plus a prerequisite workflow (address_autocomplete → address_resolve to obtain a UPRN) and a conditional rule for when to pass relisted_uprns. 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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
freqNo
basisYes
sectorNo
to_periodNo
from_periodNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
areaYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
yearsNo
offsetNo
min_auctionsNo
is_commercialNo
postcode_areaNo
max_guide_to_avmNo
postcode_districtNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
area_idYes

Output Schema

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
depthNo
limitNo
entity_idYes

Output Schema

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
area_idYes

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnNo
limitNo
ring_mNo
parcel_idNo
inspire_idNo
tolerance_mNo
title_numberNo
same_owner_onlyNo

Output Schema

ParametersJSON 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 read-only/idempotent/non-destructive safety, and the description adds substantial extra context: 10-credit cost, UK-only scope, the buffered adjacency definition (strict touch finds nothing), the semantic caveat that 'no owner' means no linked title rather than nobody owns it, and the UPRN keying constraint.

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

Conciseness4/5

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

Dense but front-loaded, starting with what it returns before the mechanics and caveats. Every sentence adds information, though the definition runs long and the workflow sentence packs the cost/UK/keying facts together.

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 eight-parameter aggregation tool, the description is complete: it covers identifier options, adjacency math, the high-level return shape (per-neighbour fields plus the combined block), caveats, cost and jurisdiction. An output schema exists, yet the description still orients the agent on what the combined block contains.

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 compensates well, explaining parcel_id/inspire_id/title_number/uprn as mutually exclusive subject identifiers, tolerance_m semantics (0.5 m default, why it exists) and ring_m control. However, limit and same_owner_only are never explained, leaving two of eight 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 verb+resource: returns the parcels adjacent to one subject and who owns each, plus a combined assembly block. An agent can immediately tell this apart from parcel_lookup or owner_profile, and the description even routes to address_autocomplete/address_resolve for keying.

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 frames the tool as 'the first question of a site assembly' and gives a concrete pre-workflow (address_autocomplete free, then address_resolve to obtain a UPRN). It also tells the agent how to widen scope with ring_m and how to address the subject via four alternative identifiers.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
bedroomsYes
postcodeYes

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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), and the description adds materially more: a cost of 15 credits, the UK-only constraint, the conditional emission rule for `price_trajectory` (only with two-plus priced snapshots), and the semantic that an empty result is a valid answer rather than an error. None of this is recoverable 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.

Conciseness5/5

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

Front-loaded with the resource and its contents, then constraints, then the routing instruction. Every sentence carries distinct information (scope, cost, conditional field, empty-result semantics, acquisition path) with no filler.

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

Completeness5/5

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

For a single-parameter lookup with an output schema present, the description supplies everything an agent needs: what the resource is, the geographic limit, the credit cost, the key format and how to derive it, and how to interpret a null 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% and the single parameter has no description in the schema, so the description must carry the load — and it does, explaining that the key is a UPRN rather than an address and how to obtain one via address_autocomplete/address_resolve. It stops short of describing the UPRN's format or integer type, so it is not fully 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?

Opens with a specific verb+resource ('Every marketing snapshot for a property') and then enumerates exactly what is returned — asking price over time, reductions, days listed, status changes, agent, image count, floor plan. This is clearly distinguishable from siblings like property_history, property_media or 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 explicit prerequisites and a workflow: 'Keyed on a UPRN, not an address: call address_autocomplete (free) to narrow, then address_resolve to get one.' It also pre-empts a false-negative by stating no listing is a real answer, and scopes the tool geographically (UK only).

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
area_idYes
min_yearsNo
min_gain_pctNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: a credit cost, a UK-only constraint, and the gain-based ordering. It doesn't disclose pagination or result-size behavior, which limits it to a solid 3.

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 the cohort definition and ordering rule, then a concrete output illustration, then the prerequisite/constraint/cost facts. Every sentence carries distinct information.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the behavioral facts (cost, geography, prerequisite, ordering) are present. However, with 0% schema coverage and three undocumented parameters, an agent still lacks the meaning of min_years, min_gain_pct, and limit.

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 carries the full burden. It only clarifies area_id (its source is area_resolve); limit, min_years, and min_gain_pct are left entirely unexplained in both schema and prose, even though their concepts underpin the tool.

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 cohort (long-held properties in an area carrying a large paper gain), a specific ordering rule ('ordered by gain rather than by value'), and frames it as the 'classic off-market cohort.' An agent can distinguish this from siblings like equity_estimate or sourcing_offmarket_owners from the text 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?

It names the prerequisite (area_id comes from area_resolve), scopes geography ('UK only'), and discloses cost ('40 credits'). It never explicitly names an alternative tool or a when-not-to-use condition, 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYes
limitNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo
h3_cellNo
metricsNo
lad_codeNo
postcodeNo
lsoa_codeNo
ward_codeNo
asset_classNo
max_periodsNo
bedroom_bandNo
asset_subtypeNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
horizonNo
area_codeYes
area_typeNodistrict
frequencyNomonthly

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
area_codeYes
area_typeNodistrict
frequencyNomonthly
include_forecastNo

Output Schema

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowNo
profile_idYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
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

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNo
limitNo
countyNo
monthsNo
order_byNotxn_count

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
areaNo
startNo
countyNo
metricsNo
districtNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNo
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

ParametersJSON 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 areaB
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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
area_idYes
min_commercialNo
min_residentialNo

Output Schema

ParametersJSON 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 declare readOnly, idempotent, non-destructive, and non-open-world behavior, so the safety profile is covered. The description adds genuinely new operational context: 'UK only' (a geographic constraint) and 'Costs 30 credits' (a consumption cost the agent should weigh before calling). The remaining gap is that it does not explain result shape or volume, though an output schema exists.

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

Conciseness5/5

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

Three short blocks, with the defining criterion front-loaded, then the differentiator, then the practical constraints. No sentence is redundant and nothing is buried.

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?

The output schema removes any need to describe return values, and the cost and UK-only constraints are disclosed. However, with four parameters at 0% schema coverage, an agent cannot determine what area_id accepts or how the min_* thresholds shape results, leaving a real gap for a filtered-query 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%, so all four parameters (limit, area_id, min_commercial, min_residential) rely on the description, which never mentions them. The phrase 'BOTH residential and commercial' faintly implies the min_residential/min_commercial thresholds and their default of 1, but the area_id scoping, limit cap, and unit-count semantics are entirely undocumented.

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 precise, distinctive resource class: 'Buildings holding BOTH residential and commercial units.' The clarification that this is 'a property of the building's unit mix, not an attribute of any single property' separates it from property-level siblings (property_lookup, commercial_property) without naming them explicitly, which is why it lands at 4 rather than 5.

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

Usage Guidelines2/5

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

No explicit when-to-use, when-not-to-use, or named alternative appears. 'Hard to source elsewhere' is a hint at uniqueness but not actionable routing guidance, and no sibling like commercial_property or sourcing_commercial is offered as a contrast. The agent must infer the use case from the resource definition alone.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
limitNo
company_numberNo

Output Schema

ParametersJSON 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 cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: UK-only coverage, a 25-credit cost, the fuzzy-vs-exact result caveat that a name match is a 'candidate set, NOT a portfolio', and the n_distinct_titles vs n_rows distinction.

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 it returns, then how to invoke it, then the interpretation caveat and cost. Every sentence carries distinct information 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?

An output schema exists, so return-value documentation is unnecessary; the description still clarifies the two ambiguous response counts. Cost, region and match-mode caveats round out what 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?

With 0% schema description coverage, the description must compensate, and it does for name (fuzzy substring) and company_number (exact match). The limit parameter is not described at all, so it does not fully cover the three parameters.

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

Purpose5/5

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

States a specific verb and resource with concrete scope: 'What the Land Registry shows for one proprietor: titles held, company status, country of incorporation, directors and PSCs.' This clearly distinguishes it from sibling tools like ownership_by_company 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?

Gives an explicit when-to-use rule for the two lookup modes ('Give a company number for an EXACT match. A name is a fuzzy substring search') and warns how to interpret name-matched results. It does not name a specific alternative sibling tool, which keeps it just below full marks.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
company_numberYes

Output Schema

ParametersJSON 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 readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful non-annotation context: the 15-credit cost and the England & Wales coverage limit. Return format/pagination is not described, keeping 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?

Three short sentences, front-loaded with the purpose followed by the use case and then the constraints. No filler, though the cost/geography lines could be tightened into one.

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 purpose, coverage area, and cost. The gap is the undocumented limit/pagination semantics, which matters for a collection-returning 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% across two parameters, so the description carries the burden. It identifies company_number in prose ('by Companies House number') but gives no format or validation detail, and the limit parameter is not mentioned at all, leaving result-size control undocumented.

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 (titles held by a company) and the keying identifier (Companies House number), and adds a use case (mapping a landlord's or developer's portfolio). It does not explicitly distinguish itself from the sibling ownership_by_title, 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 Guidelines3/5

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

It gives implied usage via the portfolio-mapping use case and states the England & Wales geographic constraint, which is a real selection signal. But it never says when to prefer this over ownership_by_title or owner_profile, so the routing guidance is only implied.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
title_numberYes

Output Schema

ParametersJSON 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 cover the safety profile (readOnly, idempotent, non-destructive, closed-world). Beyond that, the description adds two genuinely new behavioral facts: a credit cost of 15 and the England & Wales geographic restriction, both of which affect invocation decisions.

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 fragments, front-loaded with the core purpose, then scope, then cost. Nothing is wasted and there is 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 not be described, and for a single-parameter geo lookup the description covers what, where, and cost. It could be slightly richer on title-number format, but is adequate 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?

Schema description coverage is 0%, so the description must carry the burden. It partially does by clarifying that title_number is an HMLR title number in England & Wales, but gives no format example or validation hints, leaving the single parameter only loosely specified.

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 proprietor(s)') and the exact key it expects ('HMLR title number'), so an agent knows it returns ownership for a single title. It separates cleanly from the sibling ownership_by_company by virtue of the input dimension, 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?

The geographic scope ('England & Wales only') is stated, which usefully rules out non-E&W titles, but there is no explicit when-to-use versus alternatives guidance (e.g., versus ownership_by_company or owner_profile). Usage is only implied by the input type.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnNo
parcel_idNo
inspire_idNo
title_numberNo

Output Schema

ParametersJSON 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 readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds substantial non-structured context: UK-only scope, a 5-credit cost, the three-valued constraint semantics (in_zone vs checked_false vs not_checked, with the explicit warning that unchecked means UNASSESSED), the ground-plane nature of plot coverage (not a density, not a developable area), and why covenants read not_available (partial title-to-parcel link). This is exactly the 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-loaded with what the tool returns, then layered warnings, all of which are substantive rather than filler. It is on the long side for a lookup tool, but every paragraph (constraint tri-state, plot-coverage caveat, covenant gap, credit cost, address workflow) prevents a concrete misuse, so the length is largely earned.

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 spelled out, yet the description still orients the agent on interpretation pitfalls (unchecked ≠ clear; plot coverage ≠ density; covenants not_available). Combined with the credit cost, UK-only scope and the UPRN workflow, an agent has everything required to call and correctly interpret this 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 description coverage is 0%, so the description must compensate, and it largely does: it names all four handles (parcel_id, inspire_id, title_number, uprn) and frames them as interchangeable 'whichever handle you have', and reiterates that the operation is keyed on a UPRN. It does not, however, distinguish the ID formats or explain that the parameters are optional/alternatives in the mutual-exclusion sense, leaving a little inference to the agent.

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 exact resource and enumerates what it returns (INSPIRE id, title number, OS id, area, land use, proprietor, units, plot utilisation, constraint flags), which lets an agent distinguish it from nearby tools like plot_utilisation or ownership_by_title. It also explicitly contrasts itself with land_assembly ('use land_assembly instead when you want the neighbours'). No ambiguity about what this tool fetches.

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 use address_autocomplete (free) then address_resolve to obtain a UPRN when you only have an address. It states the keying constraint directly ('Keyed on a UPRN, not an address'), which is exactly the when/when-not guidance 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
locationNo
postcodeNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
checksNo
locationNo
postcodeNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
locationNo
postcodeNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
yearsNo
examplesNo
lpa_codeNo
radius_mNo
application_typesNo

Output Schema

ParametersJSON 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 flag a safe read (readOnly, idempotent, non-destructive), but the description adds substantial behavioral context beyond them: two different denominators, the ~13% timing sample, what is excluded from the rate, the London coverage gap, and the 10-credit cost. This is exactly the kind of interpretation-sensitive 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?

Front-loaded with the resource and inputs, then layered warnings. It is long, but the emphasized caveats (two denominators, rate-not-probability, London coverage) each carry decision-relevant content rather than padding, and the return summary sits early where it belongs.

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 are largely covered elsewhere, and the description still summarizes them well. The main gap is undocumented parameters (years, examples, radius_m) and no explicit routing against sibling tools, but for a read-only aggregate the coverage is close to 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 7 parameters, so the description carries the burden. It meaningfully documents lat/lon, lpa_code, and application_types (substring matching with an example), but leaves years, examples, and radius_m entirely unexplained. Partial compensation, hence a mid score.

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 sentence states a specific resource and the two metrics computed (approval rate and median decision time), and the title/detail make clear this is the planning-precedent aggregate rather than a raw listing (planning_applications) or a single-site history (property_planning_history). An agent can tell what it produces 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?

The description explains how to invoke it (give a point or an lpa_code, optionally narrowed by application_types) and states hard constraints (UK only, London-only coverage), but it never says when to choose this over sibling tools such as planning_applications or planning_check. Usage is implied by context rather than explicitly routed.

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

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
area_idYes
min_area_m2No
max_built_coverageNo

Output Schema

ParametersJSON 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 readOnly/idempotent/non-destructive/closed-world, and the description adds substantial behavioral context beyond them: the unknown-coverage exclusion rule when a ceiling is set, the fact that only ~41% of parcels have measured coverage, UK-only geographic restriction, and a 30-credit cost. These are high-value caveats 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?

Purpose is front-loaded, followed by the key data-caveat and cost lines. Every sentence adds information and there is no filler. The mid-sentence line breaks are slightly awkward but do not impede reading.

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

Completeness4/5

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

An output schema exists, so return-format explanation is unnecessary. The description covers the important semantic trap (unknown coverage vs. zero coverage), geography, and cost. It is nearly complete, only lacking coverage of the non-required 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 description coverage is 0%, so the description carries the burden. It explains max_built_coverage well (a 'ceiling' with exclusion semantics), but says nothing about area_id, limit, or min_area_m2, leaving three of four parameters defined only by their bare titles and defaults.

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 states a specific resource and scope: 'Land parcels by size and how much of them is built on.' An agent can infer this returns parcels with built-coverage attributes. It does not explicitly differentiate itself from nearby siblings like parcel_lookup or land_assembly, so it falls short of a 5.

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

Usage Guidelines3/5

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

'Set max_built_coverage to 0.2 to find largely undeveloped plots' gives a concrete usage scenario for one parameter, and the exclusion rule clarifies when results change. However, there is no explicit comparison to alternative tools, no when-not-to-use guidance, and no guidance on the other parameters.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
max_backfillsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.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, non-destructive, idempotent). The description adds genuinely useful behavior: a 30-credit cost, a UK geographic constraint, the UPRN keying requirement, and caveats that flags are evidence not proof and backfilled floor areas are modelled. It does not explain output shape, but an output schema exists.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is a dense block mixing operational facts (cost, geography, address flow) with lengthy domain methodology advice about flags, duplicate tuples, and demises. Some sentences earn their place; others are tangential to invocation.

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 handling return values and annotations covering safety, the description supplies the remaining essentials: cost, geography, the prerequisite address flow, and data-quality caveats. It is close to complete, missing only guidance on the max_backfills parameter.

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 2 parameters. The description clarifies that 'uprn' must be a UPRN (with a path to obtain it), which compensates somewhat for the required param. However, 'max_backfills' is never mentioned anywhere, leaving one of two parameters fully undocumented.

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

Purpose4/5

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

States a specific resource and scope: 'Comparable sales in the same building or block.' The agent knows this returns comps rather than a valuation. It does not explicitly distinguish itself from siblings like valuation_comparables or comps_adjustments, so it misses the top mark.

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 routing guidance: it is keyed on a UPRN, not an address, and instructs to call address_autocomplete (free) then address_resolve. It also notes 'UK only' and 'Costs 30 credits.' It stops short of saying when to prefer this over sibling comps tools.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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?

Against annotations that only cover the safety profile (readOnly, idempotent, non-destructive), the description adds substantial behavior: MEES is a legal bar not a valuation note, band letters are ranges not points, a null gap means unknown rather than 'already at potential', recommended_measures returns not_available (gap G3), and no monetary uplift figure is estimated. It also states cost (5 credits) and jurisdiction (UK only).

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 long but front-loads the core scope before the caveats, and each section (MEES semantics, band-range, missing measures, cost/keying) earns its place given the unusual semantics an agent could get wrong. Capitalized warnings aid scanning, though it could be trimmed slightly.

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 explained, and the description instead supplies the interpretive context an agent cannot get from fields alone: how to read bands, nulls, MEES as legal constraint, and the known missing measure list. Nothing needed to call it correctly is absent.

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

Parameters4/5

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

Schema coverage is 0% — the single 'uprn' integer parameter is entirely undocumented in the schema. The description compensates by stating the tool is 'keyed on a UPRN, not an address' and telling the agent how to obtain one via address_autocomplete/address_resolve. Minor gap: it doesn't state the expected format (e.g. 12-digit) beyond the type.

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

Purpose4/5

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

The description names a specific resource (one property's energy rating) and enumerates exactly what it returns: current rating vs certificate potential, letter bands, assessor-recorded fabric/heating, and MEES. It implicitly separates itself from siblings like energy_profile or epc_certificates, but never explicitly names a sibling it is not, so an agent still has to 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?

Strong operational routing is given: 'UK only. Costs 5 credits. Keyed on a UPRN, not an address: call address_autocomplete (free) to narrow, then address_resolve to get one.' This tells the agent the prerequisites and the exact sibling chain to use first. It stops short of stating when to prefer this over energy_profile or retrofit_candidates.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
max_drilldownsNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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), and the description adds substantial context beyond them: cost, UK-only scope, the meaning of status: no_lease, the fact the AVM does not adjust for short term, and the legal caveat that UPRN linkage does not verify the legal demise.

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 opening sentence front-loads what the tool returns, and every subsequent sentence carries real content (limitations, flags, cost, linking workflow). It is dense and long, but nothing reads as filler — only the volume of caveats keeps it from a 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?

An output schema exists, yet the description still characterizes the return (longest-expiry record, alternatives, identifiers) and flags truncation/unavailable alternatives. Combined with cost, scope, and the no_lease semantics, an agent has everything needed to call and interpret 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 parameter has 0% schema description coverage, so the description carries the burden, and it does: it clarifies that uprn is a UPRN key rather than an address and points to address_resolve to obtain one. It stops short of stating the integer format explicitly, but the meaning is well conveyed.

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 — registered leases linked to a UPRN — and details exactly what comes back: the longest-expiry record plus up to ten alternatives with register descriptions and title/record identifiers. It is clearly distinguishable from siblings like property_lease_batch and ownership_by_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 an explicit workflow: 'call address_autocomplete (free) to narrow, then address_resolve to get one,' and states the tool is keyed on a UPRN rather than an address. It also states UK-only scope and the 5-credit cost, so an agent knows when and how to reach for it.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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 readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: per-item outcome codes (ok | no_lease | not_found | error) returned in input order, and a billing model ('charged per property answered — the sum of the single calls, never more'). Partial-failure and cost behavior are the things an agent most needs and neither is in the structured data.

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

Conciseness5/5

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

Four compact sentences with no filler; the batch scope and per-item outcome contract are front-loaded, followed by coverage, cost, and the key-acquisition path. Every clause carries actionable 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?

An output schema exists, yet the description still supplies the outcome vocabulary and ordering guarantee plus coverage limits and cost — everything needed to call it correctly and interpret partial results. Nothing material is missing for a one-parameter batch 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% for the single `uprns` array parameter, so the description must compensate — and it does by explaining the identifier type (UPRN, not an address), the batch cardinality (up to 100), and how to obtain a valid value via `address_resolve`. It stops short of stating the element type/format explicitly, 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 operation (registered lease lookup) with an explicit batch scope of up to 100 properties in one call, and names the single-item sibling `property_lease` it mirrors. An agent can distinguish it from the ~90 siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly names the prerequisite alternatives and the routing condition: call `address_autocomplete` (free) to narrow, then `address_resolve` to get a UPRN. Also states the geographic restriction (UK only) and that the key is a UPRN rather than an address, which is exactly the when/how-not guidance needed.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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 (read-only, idempotent, non-destructive, closed-world), and the description adds substantial context beyond them: null fields are omitted so output size varies by site, provenance carries <field>_source and <field>_confidence siblings, it is UK-only, and it costs 25 credits. Disclosing cost and the omitted-null behavior materially changes how an agent should budget and parse the call.

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 core purpose, then progressively adds tier detail, return-shape caveats, scope, cost, and workflow. Every sentence earns its place and there is no filler despite the density.

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 output schema exists, so return values need not be re-documented, and the description still usefully signals the tiered ~300-field shape and the provenance sibling fields. Combined with scope, cost, and the UPRN workflow, an agent has everything needed to select and invoke 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 description coverage is 0% for the single uprn parameter, so the description must carry the load. It clarifies that the key is a UPRN rather than an address and routes the agent to address_autocomplete/address_resolve to obtain one, which is more than the bare integer schema provides. It doesn't give the UPRN format or range, keeping it short of 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 verb+resource: a full property record for a UPRN, explicitly broken into named tiers (identity, property, energy, building, etc.). The 'up to ~300 fields' scope distinguishes it from lighter siblings like property_summary, and it makes the UPRN key explicit. An agent can identify 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 explicit prerequisites and workflow: it is keyed on a UPRN not an address, so call address_autocomplete (free) to narrow, then address_resolve. It also notes UK-only scope and a 25-credit cost, which are real selection constraints. It does not, however, contrast against analogous siblings such as property_report or property_summary, so the when-not-to-use case is left implicit.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
typesNo
ttl_secondsNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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 readOnly/idempotent/non-destructive/openWorld=false, yet the description adds genuinely new operational facts: a 5-credit cost, no charge outside London, London-only coverage today, and the distinction between status: not_covered and no_applications. It also discloses the three-valued designation flag semantics and match_level values — context the 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 core purpose before branching into coverage, cost, and keying caveats. The em-dash and nested-parenthesis structure makes it dense rather than wasteful, though the long first sentence packs several distinct concepts together.

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 restated, and the description still supplies the interpretive context an agent needs: match_level levels, coverage semantics, three-valued flags, credit pricing, and the UPRN acquisition 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 description coverage is 0% on a single integer param, so the description must compensate — and it does, specifying that input is a UPRN (not an address) and how to source one via address_autocomplete/address_resolve. It stops short of stating the expected numeric format/range, but the semantic burden is largely met.

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 — planning history AT a property, comprising applications linked to the unit or its building — and enumerates the payload (decision, dates, appeal, CIL liability, development type). An agent can distinguish this from siblings like planning_applications and planning_check from the description alone.

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 prerequisite workflow: call address_autocomplete (free) to narrow, then address_resolve to obtain the UPRN, and warns that UPRN, not address, is the key. It also frames the coverage condition (London-only) so the agent knows the result semantics before invoking.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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 read-only/idempotent annotations by disclosing the billing model (charged per property answered, capped at the sum of single calls, not_covered rows free), an explicit cost of 5 credits, a geographic restriction (UK only), and the enumerated per-item outcome codes returned in input 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?

Three dense sentences, front-loaded with the batch scope and outcome semantics; nothing is filler. Cost information is split across two sentences ('Costs 5 credits' and 'charged per property answered'), which is a minor redundancy that could momentarily read as two separate charges.

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 documentation is not required, yet the description still summarizes the outcome vocabulary. Geography, keying requirement, prerequisite tool chain, cost and billing cap are all covered — nothing an agent needs before invoking 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% and the single `uprns` parameter is undocumented in the schema, but the description compensates by naming the key type and semantics (a UPRN, not an address), the array size ceiling (up to 100), and how to resolve a valid value. It stops short of clarifying integer formatting or what happens on duplicate/over-limit inputs.

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+scope: it runs `property_planning_history` for up to 100 properties in one call. It is immediately distinguishable from the single-property sibling and from the address/planning siblings in the tool list.

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

Usage Guidelines4/5

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

Gives clear preconditions and routing: 'UK only', keyed on a UPRN not an address, and an explicit two-step chain (`address_autocomplete` → `address_resolve`) to obtain the key. It does not explicitly state when to prefer this batch over the single `property_planning_history` call, so the when-not 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.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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?

Adds substantial context beyond the annotations: 15-credit cost, UK-only scope, and detailed semantics of returned fields (`ml_primary`/`imputed` are predictions, `eligible_as_primary: false` marks context only, AVM back-series is scaled not corroborated). It honors the read-only/idempotent annotations without contradicting them and discloses cautionary behavior an agent must respect.

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 caveats about field provenance are grouped, though the block is dense with many distinct caveats in sequence. Each sentence carries real meaning, but the density slightly taxes 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?

With an output schema present, return values need not be re-explained, yet the description still supplies the interpretive semantics (provenance labels, eligible_as_primary meaning), plus cost, scope, and prerequisite workflow. An agent has everything needed to call and interpret 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% and the single required `uprn` param is undocumented in the schema. The description compensates by stating the tool is 'Keyed on a UPRN, not an address' and explaining how to obtain one via address_autocomplete/address_resolve, which materially clarifies an otherwise opaque integer parameter.

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

Purpose4/5

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

States a specific verb (reconcile) and resource (cross-source property facts with provenance and unresolved attributes), so an agent knows it merges facts across sources rather than just fetching one. It does not explicitly contrast itself with near-siblings like property_summary, property_report, or property_lookup, which would have earned 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 concrete usage direction: review floor area/bedrooms/tenure with the user before a valuation, and an explicit prerequisite workflow (call free `address_autocomplete` to narrow, then `address_resolve` to get a UPRN). It lacks explicit when-not-to-use guidance or a direct routing statement against other property-report siblings.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
bedsNo
uprnYes

Output Schema

ParametersJSON 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 cover the read-only/idempotent safety profile, and the description adds substantial context beyond them: cost (5 credits), geographies (UK only), keying (UPRN rather than address), and three separate interpretation traps — asking vs achieved rent, p25–p75 for area_asking, gross vs net yield, and LHA being a benefit cap rather than a market rent.

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 deliverable before the caveats, and every paragraph maps to a distinct output block. The prose is dense but the length is justified by the misinterpretation risks it defuses; a few sentences run 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 structure needn't be explained, yet the description still supplies the interpretation semantics for each returned block (basis, gross yield, LHA, shared-room rate). Nothing needed to call or correctly read the tool is missing for this complexity level.

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 compensates well for uprn (integer UPRN, obtain via address_resolve), but the optional beds parameter is never named or explained — only 'bedroom band' appears, in the context of area_asking, which does not clearly tell the agent what beds does.

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?

Opening sentence states a specific deliverable — what the property would let for, plus its basis — which cleanly separates it from siblings like lha_rate, market_yields and valuation_estimate. It also pre-empts the most likely confusion by naming the three basis variants and explicitly noting that unit_hedonic does not exist.

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 (address_autocomplete is free, then address_resolve to obtain the UPRN) and constrains scope to UK only. It does not, however, state when an agent should reach for this tool instead of valuation_estimate or market_yields, so a routing gap remains.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
include_precedentsNo

Output Schema

ParametersJSON 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 read-only, idempotent, non-destructive, closed-world, but the description adds substantial non-obvious behavior: a fixed 25-credit cost, UK-only coverage, and — critically — the `sections_degraded` contract with its four absence kinds (`not_found`, `no_certificate`, `not_available`, `error`) and the instruction to report what did not answer. That is rich, actionable disclosure beyond the annotations.

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

Conciseness4/5

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

Front-loaded with the core value proposition, then the operational warning, then cost/domain/key. Three short paragraphs, each earning its place. Slightly dense in the degradation paragraph but 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?

An output schema exists, so return shape needn't be restated. The description covers the remaining agent-critical facts: what it composes, how sections degrade, cost, geographic scope, and how to obtain the required key. 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 carries the burden. It explains the `uprn` parameter well (UPRN-keyed, not address, with the resolution path), but says nothing about `include_precedents`, leaving one of two parameters undocumented in both schema and prose.

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 composed resource — 'everything we hold about one property, as one document' — and enumerates the sections it bundles (summary, lease, risk report, rental estimate, energy, planning). The clarifying line 'Each section is the standalone tool of the same name with the same receipts' sharply distinguishes it from the property_summary / property_risk_report / property_lease 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 a concrete prerequisite workflow: narrow with free `address_autocomplete`, then resolve via `address_resolve` to obtain a UPRN, since it is keyed on UPRN not address. Also implies the cost trade-off (cheaper than sections bought separately). It does not explicitly state when NOT to compose versus calling a single section tool, which keeps it from a 5.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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, and closed-world, so the safety profile is covered. The description adds genuine non-structural context: the 5-credit cost, the UK-only scope, the UPRN keying constraint, and crucially the three-valued semantics distinguishing verdicts (true/checked_false) from non-verdicts (defaulted_false/not_checked) that must be reported as such.

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

Conciseness4/5

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

Front-loads the purpose and the critical three-valued caveat before the long parenthetical coverage list. The enumeration is dense but each domain listed earns its place by telling the agent what the report contains; only minor trimming is possible.

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 structure need not be described. With a single required parameter, the description covers scope, cost, keying, acquisition workflow, and interpretation rules. It is essentially complete for correct invocation, missing only sibling-routing guidance.

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 there is one parameter, so the description must carry the semantics. It does the most important thing: clarifies that the argument is a UPRN identifier, not an address string, and points to address_resolve as the way to obtain one, preventing a common misuse.

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 enumerates the exact domains covered (flood, coal, heritage, environmental, planning, infrastructure), which implicitly distinguishes this composite report from single-domain siblings like property_flood_risk or planning_designations. The three-valued framing ('What this property is in, and whether we actually checked') makes the deliverable unambiguous.

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

Usage Guidelines4/5

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

Gives clear operating context: UK only, costs 5 credits, keyed on a UPRN not an address, and a concrete prerequisite chain (address_autocomplete then address_resolve). It does not explicitly state when to prefer this over property_report, property_summary, or the domain-specific siblings, so the exclusion guidance is missing.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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 cover the safety profile (readOnly, idempotent, non-destructive, not open-world), and the description layers on genuinely non-structured behavior: per-item outcomes (ok | not_found | error) returned in input order, partial-failure billing semantics ('charged per property answered — the sum, never more'), a 5-credit cost, and a geographic restriction. Only pagination/rate details are absent.

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, front-loaded with what the tool does and how it is charged, then constraints and prerequisites. No filler, no repetition of the title or schema.

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 single-parameter batch tool with an output schema, the definition supplies everything an agent needs: cost, billing model, regional scope, key format, prerequisite chain, and partial-failure semantics. Return values need not be re-explained since an output schema exists.

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` array, so the description must carry the meaning — and it does, clarifying the key is a UPRN (not an address), that it is an integer identifier, and how to obtain one via `address_resolve`. It does not state the array's ordering/cardinality contract explicitly, but 'in input order' and 'up to 100' cover most of 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 and resource (risk report) plus the batch cardinality (up to 100 properties in one call), and names the singular sibling `property_risk_report` it wraps, so an agent can separate it from that 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?

Gives a concrete prerequisite chain: `address_autocomplete` (free) to narrow, then `address_resolve` to obtain the UPRN this tool is keyed on, and notes 'UK only'. It stops short of an explicit when-not-to-use rule (e.g. use the singular tool for a single property), but the batch-vs-singular framing in the first clause implies it.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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, so the safety profile is covered. The description adds genuinely new behavioral facts: 'UK only' geographic scope, a 20-credit cost, and that the call is keyed on UPRN rather than address. No auth or rate-limit context, but the cost and coverage disclosures are the high-value items.

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, then routing, then constraints — a sensible ordering. Every sentence carries information, though the address-resolution detour is slightly tangential to a summary call and could be trimmed.

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 describe return fields, and it otherwise covers cost, geography, input identity, and the relationship to `property_report` and the address-resolution chain. Nothing an agent needs in order 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% for the single `uprn` parameter, so the description must compensate — and it does, clarifying that the key is a UPRN and not a postal address, plus how to obtain one via the address_* siblings. It does not state the expected format or range of the integer, which keeps it short of 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 verb+resource ('One-call summary of a property') and enumerates what it covers: identity, parent building, and headline attributes. It explicitly differentiates itself from the sibling `property_report`, which 'composes the rest', so the agent can distinguish the two without reading either schema.

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

Usage Guidelines5/5

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

Gives explicit sequencing: once the UPRN is known, 'this is the first call to make for a specific property', and points to `address_autocomplete` (free) then `address_resolve` when the UPRN is unknown. It also names the alternative (`property_report`) and the condition under which it is needed.

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.

Prefer this over `query_sql` — it is cheaper, bounded, and self-describing.
UK only. Costs 50 credits. You are charged if the query reaches the
warehouse and then times out or errors there; a rejected query is free.
ParametersJSON Schema
NameRequiredDescriptionDefault
joinsNo
limitNo
entityYes
periodNo
selectNo
filtersNo
metricsNo
order_byNo
dimensionsNo

Output Schema

ParametersJSON 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 readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered. The description goes beyond them with genuinely useful behavior: alias resolution confines access to what the semantic model exposes, the response contains generated SQL, and there is a specific cost/billing model tied to warehouse timeouts and errors.

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?

Five compact sentences, front-loaded with what the tool does before routing advice and cost rules. No sentence is filler; each one changes how an agent would call or choose the tool.

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 explain return values, and the note that the result includes generated SQL is a useful hint. The gap is the un-narrated top-level parameters (joins, period, limit, select), which leaves an agent guessing on the less obvious inputs.

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% at the top level, so the description must compensate and only partly does: it names entity, metrics, dimensions and filters, but leaves joins, period, select, order_by and limit unexplained. The nested OrderBy/SemanticFilter types are richly documented, but that credit belongs to the schema, not the description.

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 and resource ('run a governed query against the semantic layer') and immediately explains the operating model: pick an entity, then metrics/dimensions/filters. It explicitly contrasts with the sibling `query_sql`, so an agent can distinguish the two 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?

It names the alternative directly ('Prefer this over `query_sql`') and gives the criteria that select it (cheaper, bounded, self-describing). Scope ('UK only') and cost (50 credits, billing on warehouse timeout/error, free if rejected) further constrain when an agent should commit to this call.

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

query_sqlRead-only SQL on the warehouseA
Read-onlyIdempotent
Inspect
Run a read-only SQL statement against the property warehouse. SELECT and
WITH only; reachable schemas are marts_core, marts_facts, dimensions and
location. Results are capped by `max_rows` (max 5000). Use :name bound
parameters via `params` rather than interpolating values into the string.

This is the last resort. If a curated tool or `query_semantic` can answer
the question, it will be cheaper and faster.
UK only. Costs 125 credits. You are charged if the query reaches the
warehouse and then times out or errors there; a query rejected before
it runs — bad SQL, an unreachable schema, a column that does not
exist — is free, and the error says what to change.
ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes
paramsNo
max_rowsNo

Output Schema

ParametersJSON 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?

Goes well beyond the readOnly/idempotent hints: it lists allowed statement types, reachable schemas, the row cap, and a precise cost/charging model — including the subtle rule that rejected-before-execution queries are free while timed-out-or-errored ones are charged. That error-vs-timeout distinction is exactly the kind of detail 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 core action, then dialect constraints, then the routing/cost guidance. Dense but nearly every sentence carries distinct information; the cost paragraph is long but justified given the billing subtlety.

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 high-risk, open-ended SQL escape hatch, the description supplies dialect limits, permissible schemas, parameterization guidance, cost, and failure-charging rules. An output schema exists, so return values need not be described.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it largely does: it documents `max_rows` (cap 5000), the `params` binding mechanism with a concrete :name syntax example, and why to bind rather than interpolate. It doesn't spell out the default of 1000, but the substantive semantics 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 and resource (run a read-only SQL statement) and scopes it to the property warehouse. The 'last resort' framing immediately differentiates it from curated siblings like query_semantic and the domain 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?

Explicitly says when NOT to use it ('This is the last resort. If a curated tool or query_semantic can answer the question, it will be cheaper and faster') and names the preferred alternatives. Also adds a geographic constraint ('UK only').

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
fuelNo
bandsNo
limitNo
area_idYes

Output Schema

ParametersJSON 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 safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds material context beyond them: UK-only scope, a 30-credit cost, and the default band behaviour (E/F/G), all of which affect whether and how an agent should call it. Return format is not described, but an output schema exists.

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

Conciseness4/5

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

Front-loads the resource and ranking, then defaults, then targeting/usage guidance, then constraints (area id source, UK-only, cost). Short paragraphs with little waste; the clipped sentence fragments are compact rather than padded.

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

Completeness4/5

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

Output schema exists, so return values need no explanation, and the description covers scope, cost, defaults, and the key parameter sources. The main gap is the unexplained limit parameter and the accepted bands values, which for a 0%-coverage schema is a minor but real omission.

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 is the only source of parameter meaning. It explains area_id (marts id from area_resolve), fuel (gas cohort), and bands (defaults to E/F/G), but leaves limit undocumented and doesn't state that bands accepts a list of A-G values. Solid coverage of the key params 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 specific resource and scope ('properties in an area with the most improvement headroom, ranked by potential efficiency') and explicitly frames itself as a targeting/list tool, contrasting with the per-property siblings ('not a fact about one property'). An agent can distinguish it from property_energy_retrofit or energy_profile 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 a clear use case ('combine with fuel=gas for the fossil-heated cohort') and frames the tool's role as generating an action list, which implicitly routes agents away from per-property tools. It stops short of naming an explicit alternative to use instead, so 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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
cursorNo

Output Schema

ParametersJSON 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.

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.
ParametersJSON Schema
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

ParametersJSON 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 readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: absence semantics (44% polygon-to-title backfill), failed checks reported as UNKNOWN not absent, 25-credit cost, UK-only scope, and not_available behavior for missing rate inputs. However, it says the designation checks are 'LIVE' while openWorldHint=false implies no external-world access — not a hard contradiction, but the sourcing of the live lookups is left ambiguous, which caps this at 3.

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, then a scannable bulleted block list, then per-block caveats. Nearly every sentence guards against a specific misreporting error, though the caveat tail is long and could be tightened 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?

An output schema exists so return values need not be documented, yet the description still maps each block and warns how to interpret it. For a broad 11-parameter aggregator with zero schema descriptions, the guidance on identifiers, scheme pricing, precedents denominators and plot-utilisation limits is enough to call it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the whole burden. It explains the two identifier params with their source tools, the interaction between scheme_gia_m2, scheme_units and the mandatory user-supplied rate_gbp_m2, and the effect of include_designations. It leaves region, sector, rate_period, include_precedents and precedent_radius_m wholly unexplained, so compensation is strong but incomplete.

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 and resource — 'Everything known about ONE site, assembled and judged' — and distinguishes itself from siblings with 'Returns in one call what would otherwise be six.' The identifying inputs are routed to their source tools (address_resolve, address_autocomplete, sourcing_search), so an agent can tell this apart from the individual report 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 trigger conditions ('Give a uprn or a land_id'), names the alternatives it replaces (the six calls), prescribes reading order ('READ signals FIRST'), and offers a faster mode via include_designations=False for warehouse-only answers. The condition selecting each path is stated rather than inferred.

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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnsYes

Output Schema

ParametersJSON 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 read-only/idempotent/closed-world safety, so the description adds context beyond that bar: UK-only scope, a 20-credit cost, and a reasoned disclosure that no kWp/yield figure is returned because pitch, orientation and shading are absent from the warehouse. The rationale matters because an agent could otherwise present footprint as a forecast.

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 what is returned, then the exclusion and its rationale, then the operational constraints (region, cost, key type). Every sentence carries information an agent needs; there is 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?

An output schema exists, so return values need not be described, and the description instead covers the gaps that schema cannot: scope, cost, key semantics, and the deliberate omission of generation estimates. Nothing needed 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 must carry the parameter burden, and it does the most important part: the key is a UPRN, not a free-text address, plus the route to obtain one. It does not clarify that the parameter is an array accepting multiple UPRNs, leaving minor ambiguity against the schema.

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

Purpose5/5

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

States a specific resource and enumerates exactly what is returned: footprint area, roof shape and material, building height, and panel presence. It also explicitly names what is NOT produced (a generation estimate), which separates it from siblings like energy_profile and 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?

Gives explicit preconditions and a call sequence: UK-only, keyed on UPRN not address, call address_autocomplete (free) then address_resolve to obtain one. It also states the cost (20 credits) and instructs how to report the result as a screening figure, 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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
max_rvNo
min_rvNo
offsetNo
sectorsNo
lad_codeYes
scat_codesNo
with_ownerNo
single_hereditamentNo

Output Schema

ParametersJSON 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 establish the safe read-only profile, and the description layers on substantial extra behavior: it warns NOT to compute £/m² (with the failure mode that produced £235,301/m²), explains that rateable value is not rent, that `income_basis_value` is an arithmetic conversion that reads `not_available` without local yield evidence, and discloses data limits (one 2026 list, no floor area, no vacancy signal) and a 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.

Conciseness4/5

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

Dense but economical: it opens with the resource and scope, then front-loads the critical caveats (no £/m², RV is not rent) before the mechanical details. The warnings are long but each earns its place by preventing a specific misuse; only minor tightening is possible.

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 spelled out, and the description still characterizes row contents. For a complex, 9-parameter analytical tool it covers scope, semantics, limitations, and cost well; the only real gap is the undocumented filter/paging 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 description coverage is 0% across 9 parameters, so the description carries the burden. It documents `lad_code` (required, sole scope), sector and rateable-value filtering, and `with_owner` (freeholder where a title links), but says nothing about `scat_codes`, `limit`, `offset`, or `single_hereditament`. Roughly half the parameters are left to their bare titles.

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 ('Rated commercial stock in a local authority') and immediately scopes it as 'the commercial sourcing lane', distinguishing it from siblings like commercial_property and sourcing_live_listings. An agent can tell what it returns (rateable value, income-basis value, freeholder, auction history) 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 clear operative context: `lad_code` is REQUIRED and 'the only scope', with an explicit pointer to use `area_resolve` to turn a place name into a GSS code, plus 'UK only'. It doesn't compare against nearby alternatives (e.g. commercial_property or sourcing_owners), so it stops short of full when/when-not routing.

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

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.
ParametersJSON Schema
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

ParametersJSON 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 read-only/idempotent/non-destructive, and the description layers substantial additional behaviour: credit cost, UK-only scope, filter-before-pagination semantics, yield computation basis, null comparisons when UPRN match fails, and the explicit 'NO total' + has_more paging contract. This is well beyond what the structured fields convey.

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 output-field list opens the description, which is arguably not the front-most concern for a caller, but the body is dense and each constraint sentence earns its place. No filler or repetition; length is justified by the 14-parameter surface.

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 detailed, and the description still explains the enrichment/null behaviour. Pagination, geographic limits, filtering order, and cost are all covered; only a few filter parameters (channel, new_homes) are left without semantics.

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 coverage across 14 parameters, the description carries the full burden. It adds real meaning for area_geojson (64 corners, 150 km², 20 districts), tenure, EPC, and min_gross_yield_pct computation, but leaves channel, new_homes, min/max price units, and min/max beds undefined in both schema and text.

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 and resource: 'What is on the market RIGHT NOW in these postcode districts, each listing enriched against our own record of the property.' It further distinguishes itself from archived siblings ('a district holds far more archived listings than live ones') and frames the enrichment output, so an agent can separate it from sourcing_search or listing_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?

Gives operational usage context (polygon scoping, pagination with has_more/offset, never quoting totals, filter-before-pagination) and constraints (UK only, 10 credits). However, it never names an alternative tool or states when NOT to use this one versus siblings like sourcing_search or auction_lots, leaving the routing decision implied.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
lad_codeNo
strategyNo
min_unitsNo
postcode_districtNo
strategy_overridesNo

Output Schema

ParametersJSON 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 establish the safe read-only, idempotent profile, and the description adds substantial non-structured behavior: the companies-only construction and how individuals surface in not_itemised, the instruction to report scope.share_itemised, the national_portfolio=not_available caveat against over-reading holdings, UK-only scope, and a 10-credit cost. These are exactly the operational constraints an agent cannot get from the annotations or 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-loads the deliverable and what the rank contains before the caveats, and every warning (companies only, share_itemised, national_portfolio, UK-only, cost) is actionable. It is dense and slightly long, and some of the field enumeration duplicates the output schema, which keeps it out of 5 territory.

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 read-only analytics tool with an output schema present and no required params, the description covers the things the schema cannot: data-construction limitations, reporting obligations, geographic scope, and cost. The only gap is input semantics, which is scored separately.

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 there are 6 parameters, so the description carries the full burden — but it only explains `strategy` (rank owners of units the preset points at) and gestures at strategy_overrides. The area-defining pair (lad_code vs postcode_district), limit, and the min_units=2 threshold are completely unaddressed, leaving the most consequential inputs for scoping the area 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 and deliverable ('who owns the stock in an area, ranked as an approach list') and enumerates exactly what the rank contains (units held, value/equity, years held, short-lease and on-market counts, company status, ranking signals). This is clearly distinguishable from sibling ownership tools like ownership_by_company or sourcing_owners, which do not produce a ranked approach list.

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

Usage Guidelines4/5

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

Gives a concrete usage trigger ('pass a strategy to rank the owners of only the units that preset points at — short-lease flats in a borough, say') and hard exclusions (companies only; private individuals are never listed and must not be inferred). It stops short of naming a sibling alternative to use instead when the caller wants individual owners or non-UK data, 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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoland
parcel_idsYes

Output Schema

ParametersJSON 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 beyond the annotations by naming the underlying data source (bulk HMLR corporate and overseas registers), explaining that unresolved individual titles are a register gap rather than a failure, and disclosing the 25-credit cost. The annotations cover read-only/idempotent safety, but the description carries the important behavioural caveats 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 action and dependency, then caveats. Four sentences are mostly justified, though the individual-ownership explanation could be tightened to one sentence 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?

An output schema exists, so return values need no explanation. Geographic scope (UK only), cost, upstream dependency, and the resolution limitation are all covered — 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.

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 has to compensate. It usefully implies the provenance of `parcel_ids` (output of `sourcing_search`), but the `asset` parameter and its land/units enum are never mentioned, leaving one of two parameters wholly 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 (resolve) plus resource (registered owners) and scopes the input to parcels returned by `sourcing_search`. This cleanly separates it from nearby siblings such as ownership_by_title, owner_profile and ownership_by_company.

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 opening sentence establishes the upstream dependency on `sourcing_search`, which is clear workflow guidance, and the individual-owner caveat functions as a partial when-not. It does not explicitly state how this differs from ownership_by_title or sourcing_offmarket_owners, so an agent must infer the choice.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
areaNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNo
channelNoresidential_sale
area_codeNoNATIONAL
area_typeNodistrict
bedroom_bandNoall

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
postcodeYes
from_dateYes
property_typeNo
lookback_yearsNo

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo
asset_classNo
model_versionNo

Output Schema

ParametersJSON 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. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes
as_ofNo
limitNo

Output Schema

ParametersJSON 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), and the description adds substantial context beyond them: 10-credit cost, UK-only scope, the widening radius/time algorithm until at least 6 qualify, the never-drop-but-flag behavior, the current-record caveat with attributes_after_sale, and the instruction to time-adjust prices with the index.

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

Conciseness4/5

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

Dense but front-loaded, leading with the core purpose and scope before the qualifying rules and return fields. It is a long single block, but almost every sentence adds decision-relevant information, so there is little 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?

For a complex valuation tool with an output schema, the description is complete: it covers scoping rules, cost, geography, keying, and the semantics of returned flags and scores. An agent has everything needed to invoke it correctly and interpret the results.

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 does: as_of accepts YYYY-MM or YYYY-MM-DD with default today, limit is 1-60, and uprn is a UPRN key with guidance on how to obtain it rather than passing 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 verb and resource: 'Comparable completed sales for a valuation, beyond the property's own building.' The scope word 'beyond the property's own building' distinguishes it from sibling tools like property_comps and transactions_by_uprn that surface the subject's own sale.

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 — it is keyed on a UPRN, not an address, and tells the agent to call address_autocomplete (free) to narrow, then address_resolve to get one. It also states the qualifying criteria and the 'review contrary sales rather than ignoring them' stance, so the agent knows exactly when and how to use it.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.
ParametersJSON Schema
NameRequiredDescriptionDefault
uprnYes

Output Schema

ParametersJSON 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 98 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 observedquery_sql
    • First observedretrofit_candidates
    • First observedsearch_entities
    • 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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources