Close Knit
Server Details
London neighbourhoods and homes: crime, schools, prices, rents, commute, green space, sourced.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 24 tools
Most tools are distinct, but several clusters overlap: find_areas, match_areas and open_shared_search all rank neighbourhoods against household criteria, while get_area_overview, get_area_evidence_pack, get_area_metric and assess_listing all inspect an area or listing. The long descriptions clarify intended use, but an agent must parse many preconditions to choose correctly, so misselection risk remains.
All 24 tool names are snake_case and follow predictable verb_object patterns such as get_area_metric, rank_areas_by_metric, find_similar_areas and list_custom_presets. There is no mixing of camelCase or vague bare verbs, making the naming highly consistent.
24 tools sits at the heavy end of the 16-25 range for a complex London property and neighbourhood analytics server. Many tools represent distinct data products, but the surface is large enough to burden tool selection and make the server feel heavy.
The read-only surface covers area discovery, metrics and rankings, market depth, home sale history, rents, commute, flood risk, schools, crime and listing assessment, plus watch setup and feedback. Gaps are mostly deliberate, such as no live listing content and no persistent watch management, which agents can work around.
Available Tools
24 toolsassess_listingAssess listingARead-onlyIdempotentInspect
Check one listing the user found against local evidence: asking price vs the neighbourhood's recorded £/m² (with floor area or a bedroom-based ballpark), turnover, growth, the borough's official HPI, costs (stamp duty on the asking price, the borough's council tax by band), crime with its offence mix, noise, schools (state and independent counts), planning rules (home: conservation, Article 4, listed buildings), listed buildings recorded at or near the postcode (listedNearby), the IMD decile, and the questions to ask the agent (lease, service charge, EWS1, listing). Not a valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | For sale or to rent. | buy |
| tenure | No | Tenure if the listing states it; lease questions are hedged ('If leasehold') when unknown and skipped for freehold. | unknown |
| bedrooms | No | Bedrooms in the listing. | |
| postcode | Yes | Full postcode of the listing, e.g. W5 2NU. | |
| listing_url | No | Echoed back for citation only. | |
| rent_period | No | The rent's period: month = £ per calendar month, week = £ per week (converted ×52/12 for the comparison). | month |
| asking_price | Yes | £ (buy) or the rent in its rent_period (rent). | |
| property_type | No | Property type if the listing states it; used for a same-type comparison. | |
| share_percent | No | Shared-ownership share for sale, e.g. 25: the asking price is compared as asking_price ÷ share against whole-home prices. Omit when the listing does not state it (the verdict stays unknown). | |
| floor_area_sqm | No | Floor area in m² if the listing states it. | |
| floor_area_sqft | No | Floor area in sq ft if the listing states it; converted server-side (1 sq ft = 0.092903 m²). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 job is added context — which it supplies: the assessment is built from recorded local evidence, it is explicitly not a valuation, and price comparison falls back to a bedroom-based ballpark when floor area is absent. It does not discuss provenance freshness or uncertainty, which would have pushed it higher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first clause, which is good, but the remainder is a single sprawling 60+ word enumeration of roughly fifteen evidence categories. Much of that list duplicates what the output schema presumably documents, and the run-on structure makes it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, read-only analysis tool with a dedicated output schema and full annotation coverage, the description is complete enough: it states the input trigger, the evidence computed, the non-valuation caveat, and the fallback logic. Return-value detail is legitimately delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by explaining how parameters combine — floor area versus a bedroom-based ballpark for the £/m² comparison, stamp duty calculated on the asking price, and council tax taken by band. These are the levers that change the output, not restatements of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource are specific ('Check one listing ... against local evidence') and the scope (price vs £/m², HPI, crime, schools, planning, IMD) makes clear this is a per-listing evidence bundle, distinct from the area-level siblings like get_area_evidence_pack. It stops short of naming a sibling, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Check one listing the user found' implies the trigger (the user has a specific property in hand), and 'Not a valuation' sets one important expectation. But there is no explicit when-to-use/when-not guidance and no routing to alternatives (e.g. get_area_evidence_pack for area-only queries, get_home_prices for pure price checks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_watch_specBuild watch specARead-onlyIdempotentInspect
Turn a finished search into a watch: portal searches per postcode district, filters, a state file path for de-duplication and a ready prompt for a scheduled task in the user's Claude that reports only new listings. Stateless: nothing is stored on Close Knit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short name, e.g. 'Ealing 2-bed'. | |
| market | No | buy | |
| area_ids | Yes | LSOA ids to watch. | |
| frequency | No | daily | |
| max_price | Yes | £ (buy) or £ per month (rent). | |
| must_haves | No | Free-text requirements the agent checks per listing. | |
| min_bedrooms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent with that ('Stateless: nothing is stored on Close Knit'), resolving the apparent tension of a 'build' tool being read-only. It adds real behavioral context — the output is a de-duplication state file path plus a scheduled-task prompt reporting only new listings — though it doesn't cover rate limits, auth, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the opening clause, and the second sentence adds the important stateless fact. The first sentence is a dense run-on list of artifacts that could be broken up, but there is little wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex tool with an output schema present, the description conveys what gets produced and that nothing is persisted server-side. Input-to-output mapping is thin, but the presence of an output schema covers return values, making the description largely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57%, and the description mostly describes outputs (state file, prompt, per-district searches) rather than clarifying the inputs. It weakly maps 'filters' to must_haves/min_bedrooms/max_price and hints at area scope, but adds no concrete meaning beyond the schema, and 'postcode district' is loosely aligned with the finer-grained 'LSOA ids' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific transformation ('Turn a finished search into a watch') and enumerates the artifacts produced (portal searches, filters, state file path, scheduled-task prompt). It is clearly distinguishable from the read-only query siblings, which makes a solid 4, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Turn a finished search into a watch' sets a clear precondition (a completed search) for when this tool applies. It gives clear context but offers no explicit when-not conditions or references to sibling tools, 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.
evaluate_custom_criterionEvaluate custom criterionARead-onlyIdempotentInspect
Evaluate a criterion from places on the map for every London neighbourhood ('where are more cafés than kebab shops', 'most gyms in the area'), counting the places inside each neighbourhood's boundary: a preset_id or the user's own criterion (sets of OSM tag matchers and a formula). Returns the best and worst areas with place counts and London percentiles, the legend and a map link that shows it as a layer. Places, never people: religion or who lives there is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many top and bottom areas to list. | |
| area_ids | No | Also report these areas (LSOA ids from search_places). | |
| criterion | No | Or the user's own criterion. | |
| direction | No | Which end the user wants (for the top list and the map link). | |
| preset_id | No | A ready-made criterion from list_custom_presets. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the readOnly/idempotent annotations: it discloses the refusal policy ('Places, never people: religion or who lives there is refused') and what the response contains (best/worst areas, counts, percentiles, legend, map layer). No rate limits or failure modes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core purpose before examples and constraints. Nearly every clause carries weight, though the formula/output detail is somewhat packed and could have been left to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with an output schema and 100% param coverage, the description supplies the missing conceptual layer: what the tool computes, the refusal constraint, and the return contents. Nothing essential to correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself fully documents top_n, area_ids, criterion, direction, preset_id and deeply explains the formula enum. The description only restates that a criterion is 'sets of OSM tag matchers and a formula', adding little beyond structured fields. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (evaluate) and resource (a criterion counting places within neighbourhood boundaries) with concrete example queries and explicit scope of every London neighbourhood. An agent can distinguish this from rank_areas_by_metric or list_custom_presets without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the two input modes (a preset_id from list_custom_presets or a user-built criterion) and gives example phrasings that select the tool. It stops short of explicitly naming alternatives to avoid or the conditions under which another ranking tool is better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_areasFind areasARead-onlyIdempotentInspect
Shortlist London neighbourhoods for a household: budget, bedrooms, weighted priorities (crime, station access, price level, official deprivation decile, noise, disorder, energy rating, leasehold share) and optional stations/boroughs to live near. Returns ranked areas with score, factor values, a ballpark price for the bedroom count and budget fit, postcode districts and website links. Pass rejected areas in exclude_area_ids when refining after the user's feedback (LSOA, MSOA or borough ids).
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many areas to return. | |
| custom | No | The user's own criteria from places on the map ('more cafés than kebab shops', 'near gyms'): a preset_id or a criterion, each scored by its percentile within the area's region (London for a London area). Describes places, never who lives there. | |
| market | No | Buying or renting. | buy |
| places | No | Where the household goes — work, a gym, a particular school, friends (pinned: latitude/longitude from search_places) or the nearest of a kind (category). Each becomes a criterion; must = hard limit. | |
| ranges | No | Any other map layer as a range with soft edges, e.g. gigabit broadband at 90% of homes or more: {layer: 'broadband-gigabit', scale: 'value', min: 90}. Bounds are percentiles within each area's region by default (London's areas among London's; min 90 = the region's top 10%); scale 'value' uses the layer's own unit. Only layers list_metrics shows. | |
| bedrooms | No | Bedrooms needed (0 = studio). | |
| boroughs | No | Live in these boroughs (uk:borough:E09…, from search_places). Stations + boroughs ≤ 3. | |
| max_budget | Yes | Maximum price in £ (buy) or £ per month (rent). | |
| priorities | No | What matters, with importance 1-5 (criteria are ranked by importance, then in the order given; the order sets the weights). Translate the user's words: 'safe' → crime, 'near the tube' → station-access, 'good value' → market-level, 'quiet' → noise, 'no rough streets / graffiti' → disorder, 'low energy bills' → epc-share, 'freehold' → leasehold-share. must = only areas in London's better half for it. | |
| budget_must | No | True = areas whose ballpark is over max_budget are out. | |
| near_stations | No | Live within walking distance of these stations (e.g. on the user's commute line). | |
| only_in_zones | No | With stations/boroughs given: True = only areas inside them (a must Where criterion); False = ranked first in the order, the fit falling with distance outside (zone_soft_metres). | |
| property_type | No | House or flat, for the price comparison on the brief page (sales of similar homes). | any |
| target_budget | No | Comfortable price; defaults to max less 8% (the site's own rule: £650k max → £600k). | |
| liked_area_ids | No | Areas the user liked: carried into the map link and highlighted there. | |
| exclude_area_ids | No | Areas the user already rejected — LSOA, MSOA or borough geography ids (boroughs and MSOAs expand to their LSOAs) — so they are not suggested again. | |
| zone_soft_metres | No | Outside the zones the fit falls to 0 over this distance (when only_in_zones is False). | |
| budget_importance | No | Where the budget sits in the order (5 = first). Fit 1 up to target_budget, falling to 0 at max_budget. | |
| include_over_budget | No | Keep areas whose typical home looks over budget. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety burden is lifted. The description adds the refinement/exclusion behavior and the geography-id types accepted (LSOA, MSOA, borough), but most of its remaining text recites return fields that the output schema already provides, and it says nothing about cost, latency or result limits beyond top_n.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: purpose and inputs, return shape, then the refinement instruction. Front-loaded with the verb and resource, and the long factor list is contained inside the first sentence rather than sprawling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with an output schema and full annotation coverage, the description supplies the essentials: what it ranks, what comes back, and how to re-run after feedback. Nothing critical is missing, though the soft-vs-must weighting model and the station/borough ≤3 constraint are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, which sets the baseline at 3. The description does contribute the factor vocabulary (crime, station access, price level, deprivation decile, noise, disorder, energy rating, leasehold share) that maps onto the priorities enum and the idea of 'weighted' priorities, but it adds no syntax or default guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Shortlist') and resource ('London neighbourhoods') and scopes the inputs a household would supply (budget, bedrooms, weighted priorities, stations/boroughs). An agent can tell this is a ranked-shortlist tool rather than a single-metric ranker, though it never names the near siblings (match_areas, search_areas, rank_areas_by_metric) to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage loop: pass rejected areas in exclude_area_ids 'when refining after the user's feedback', which tells the agent this is the iterative tool in a household flow. It stops short of explicit exclusions or a named alternative, so there is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_areasFind similar areasARead-onlyIdempotentInspect
Neighbourhoods like one the user liked (crime, deprivation, income, price level and station access percentiles), optionally only cheaper ones: 'like this but cheaper / elsewhere'.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many areas to return. | |
| area_id | Yes | A neighbourhood (LSOA) the user liked. | |
| cheaper | No | Only areas with a lower £/m² price level. | |
| bedrooms | No | Adds a ballpark price for this size. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 description's main added value is disclosing the scoring dimensions behind 'similar' — crime, deprivation, income, price level, station access percentiles. That is genuine context an agent cannot get from the schema. It doesn't discuss result ordering or how ties are resolved, but the output schema covers the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource, the similarity dimensions, and the optional filter, with the user-intent quote last. The parenthetical list is dense but every element earns its place; nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, four-parameter similarity tool with 100% schema coverage, an output schema, and full annotation coverage, the description supplies the one missing piece — what 'similar' means. Nothing needed to invoke it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented, and the description's 'cheaper ones' and 'neighbourhood the user liked' largely restate the cheaper and area_id parameter descriptions. It adds marginal framing by tying 'cheaper' to the price-level percentile dimension but says nothing about top_n or bedrooms. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-less but clear operation: returning neighbourhoods similar to one the user already liked, and enumerates the dimensions of similarity (crime, deprivation, income, price level, station access). It implies but does not explicitly contrast with siblings like match_areas, search_areas, or find_areas, so the agent must infer the similarity-vs-search distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The quoted user intents ('like this but cheaper / elsewhere') and the 'optionally only cheaper ones' clause give real routing cues for when to enable the cheaper flag. However, no sibling tool is named and no exclusion ('do not use for X; use Y instead') is stated, so the usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_address_historyGet address historyARead-onlyIdempotentInspect
Recorded achieved sale prices for one address id (HM Land Registry Price Paid, GBP, with the EPC floor area where matched; no per-sale GBP/m2). These are historic transactions, never valuations or asking prices. listingLinks open the postcode on Rightmove (past listings and their photos), Zoopla and OnTheMarket: links only, Close Knit does not fetch or host listings.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Address id returned by search_areas (uk:addr:…). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: data source (HM Land Registry Price Paid), currency (GBP), EPC floor area where matched, absence of per-sale GBP/m2, and precise link behavior (listingLinks open Rightmove/Zoopla/OnTheMarket, links only, no fetching or hosting of listings).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences, front-loaded with the core purpose and data source, followed by key clarifications about data type and link behavior. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which handles return values) and rich annotations (read-only, idempotent, non-destructive), the description completes the picture by covering data provenance, limitations, and link semantics. An agent has all needed context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is fully documented in the schema. The description only reiterates 'one address id' without adding syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns recorded achieved sale prices for one address id. It clearly distinguishes the data from valuations or asking prices, though it does not explicitly name a sibling tool it replaces or complements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: for a single address id, and explicitly excludes valuations or asking prices. It does not, however, name an alternative tool or specify when to choose a different sibling for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_area_evidence_packGet area evidence packARead-onlyIdempotentInspect
One cited evidence pack for an area: market depth (as get_market_depth), the latest recorded crime rate, road and rail noise shares, state schools within 1.5 km with their standing Ofsted grade, and, given an address_id inside the area, its building and street sale aggregates. Every block names its source release; not advice and not a valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | Geography id, e.g. uk:lsoa:E01000004. | |
| address_id | No | Optional address id (uk:addr:…) inside the area: adds its building and street sale aggregates. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description focuses on content-level behavior: every block carries a source release, the optional address_id conditionally adds building and street sale aggregates, and the output is explicitly 'not advice and not a valuation'. It does not describe what happens when address_id falls outside area_id or whether the pack is expensive to build.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence introduces the pack before listing its blocks, with no filler. The enumeration is dense and takes effort to scan, and the 'as get_market_depth' phrasing is slightly awkward, but every clause carries substantive information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return shapes, and it usefully pre-summarizes the blocks an agent will receive. The main gap is unspecified behavior for an address_id outside the given area and any latency or cost expectations for a multi-block pack.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: address_id must be inside the area and its presence adds building and street sale aggregates, which is a conditional effect the schema only hints at. area_id's geography semantics remain schema-driven.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (an area evidence pack) and enumerates its constituent blocks: market depth, crime rate, noise shares, state schools with Ofsted grades, and address-level sale aggregates. The parenthetical 'as get_market_depth' explicitly ties one block to a sibling tool, letting an agent distinguish this composite from the single-metric siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the enumerated blocks suggest this is a bundled alternative to calling get_market_depth, get_home_prices, get_flood_risk and peers separately, and the address_id clause hints at when to pass it. There is no explicit 'use this when…' routing or exclusion against siblings such as get_area_overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_area_metricGet area metricARead-onlyIdempotentInspect
Evidence-backed value of one metric for one area in one month: value, regional (londonPercentile: within the area's region, London for a London area; rankScope names it) and England percentiles, quality, sample size, category breakdown where available, plus up to 12 prior months as evidence rows. Units follow the metric (per 1,000 residents, GBP/m2). Confidence is high only for observed (not modelled) values. Some metrics are published for a wider area (income per MSOA; rent change and mobile coverage per borough): on a smaller area they return the enclosing area's value with quality 'fallback' and carrierGeographyId naming where it came from. Period defaults to the metric's latest. The find_areas factors disorder, epc-share, leasehold-share and schools are read the same way for one neighbourhood (latest value, period ignored), to verify or explain a find_areas result.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Month, YYYY-MM. Defaults to the metric's latest period (defaultPeriod in list_metrics). | |
| area_id | Yes | Geography id, e.g. uk:lsoa:E01000004. | |
| metric_id | Yes | Metric id from list_metrics, e.g. crime or price-per-square-metre. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses unusually rich behavior: units follow the metric (per 1,000 residents, GBP/m2), confidence semantics (high only for observed, not modelled values), a fallback mechanism with quality='fallback' and carrierGeographyId for wider-published metrics, and that period is ignored for the find_areas factors. These are exactly the non-obvious traits an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The value proposition is front-loaded in the first clause and nearly every sentence carries distinct information (units, confidence, fallback, default period, find_areas caveat). It is a single dense paragraph, though, so the fallback and find_areas caveats are buried mid-block rather than separated, which slightly hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with fallback geography logic, modelled-vs-observed confidence, and multi-month evidence rows, and the description covers all of those along with units and period defaults. An output schema exists, yet the description's return-format detail serves the purpose statement rather than duplicating schema burden; nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by adding meaning not in the schema, namely that period is ignored for the find_areas factor metrics and that fallback geography can override the requested area. The area_id and metric_id semantics are already fully covered by the schema, so no further credit there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Evidence-backed value of one metric for one area in one month') and immediately enumerates what the value includes (regional/England percentiles, quality, sample size, category breakdown, up to 12 prior months). This scope ('one metric, one area, one month') distinguishes it implicitly from ranking tools like rank_areas_by_metric and aggregate tools like get_area_overview, and the find_areas cross-reference further separates its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage conditions: period defaults to the metric's latest, and it explicitly describes how the find_areas factors (disorder, epc-share, leasehold-share, schools) are read via this tool 'to verify or explain a find_areas result'. What is missing is an explicit exclusion or named alternative for the other siblings (e.g., when to prefer get_area_overview or rank_areas_by_metric instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_area_overviewGet area overviewARead-onlyIdempotentInspect
One neighbourhood in detail for a decision: local market (sales, turnover, leasehold share, £/m² medians, growth), the borough's official UK HPI (hpi: average price by type, 1/5/10-year change vs London: quote this for how prices moved), £/m² price trend, crime with its offence mix (topTypes, a busy-centre note), road/rail noise, nearby state schools with their standing Ofsted grade plus independent schools (schools.independent), planning rules (home: conservation, Article 4, listed buildings, broadband), council tax bands and a typical bill (councilTax), the IMD decile (deprivation), a ballpark price for a bedroom count and website links.
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | Geography id, e.g. uk:lsoa:E01000951. | |
| bedrooms | No | Adds a ballpark price for this size. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 useful provenance context (borough-level 'official UK HPI' vs local market aggregates, a 'busy-centre note' caveat on crime), but says nothing about response size, latency, or cost of a payload that spans a dozen domains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact two-sentence form that opens with the one-line purpose and then enumerates contents, using the parenthetical field names as compact pointers to the output schema rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't restate return shapes, and it still signals domain coverage, data provenance, and the bedroom-price option. The main remaining gap is routing guidance against the many sibling area tools, which the description leaves entirely to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies: area_id's LSOA/MSOA/borough pattern is fully documented and the description only echoes that bedroom count yields 'a ballpark price'. It is notable that area_id accepts three geography levels but the description's body text does not discuss how output differs by level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and scope ('One neighbourhood in detail for a decision') and then enumerates the domains returned (market, HPI, crime, schools, planning, council tax, IMD), so an agent knows exactly what the resource covers. It does not name the sibling it is not (get_area_evidence_pack, get_area_metric), so differentiation is inferred from content rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'for a decision' and the inline instruction 'quote this for how prices moved' hint at when to reach for the HPI figures, but there is no explicit when-to-use/when-not and no mention of the obvious alternatives like get_area_metric for a single figure or get_area_evidence_pack for a deeper pack.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commuteGet commuteARead-onlyIdempotentInspect
Door-to-door minutes from one neighbourhood to the user's places on a weekday morning, by public transport (R5 on TfL timetables), bike (at the speed Santander Cycles riders reach; checked against TfL), car (typical morning traffic, no parking) and walking, each with a range. Places within 1.5 km of a commute hub (King's Cross, Bank, Canary Wharf, Oxford Circus…) are routed through it; others in Greater London get a straight-line estimate (estimate: true); places outside Greater London, and every place from a neighbourhood outside London (the routing is London only), get no minutes (reason 'outside-london', or 'outside-coverage' where Close Knit covers England). Journeys over 120 minutes are not timed (minutes null, capped: true).
| Name | Required | Description | Default |
|---|---|---|---|
| places | Yes | Pinned places (latitude/longitude) to reach. | |
| area_id | Yes | The neighbourhood (LSOA) to travel from. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent safety, and the description adds substantial context on top: hub-based routing within 1.5 km, straight-line estimation flagged with estimate: true, null minutes with reason codes 'outside-london'/'outside-coverage', and capping at 120 minutes with capped: true. These are exactly the non-obvious behaviors an agent needs before interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core fact is front-loaded, and nearly every clause carries real information. But it is delivered as one sprawling sentence with nested parentheticals and an ellipsis, making the edge-case rules hard to parse rather than separating them into scannable statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't explain return shapes, yet it still documents the sentinel fields (estimate, capped, reason) that the schema won't convey semantically. Combined with the London-only routing constraint, an agent has everything needed to call this correctly and read the results honestly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents area_id, places, and every mode/category nuance. The description adds only that results are per-place with a range and that car means typical morning traffic with no parking — a point the schema also makes. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with precise scope: door-to-door minutes from one neighbourhood to a set of places, on a weekday morning, across four modes. This is unmistakably different from metric-reading siblings like get_area_metric or find_areas, which the agent can rule out without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful operating conditions (hub routing, straight-line fallback, outside-London and outside-coverage cases, 120-minute cap), effectively telling the agent when results will be degraded. However, it never names an alternative tool or states when to prefer a different call, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flood_riskGet flood riskARead-onlyIdempotentInspect
Flood bands for an area's land (rivers/sea, surface water) and, with a UPRN, that home's own bands. Bands show the likelihood for an area, not a specific property: send the user to the Environment Agency check for one address.
| Name | Required | Description | Default |
|---|---|---|---|
| uprn | No | A home's UPRN for its own bands; without it, only the area's land bands. | |
| area_id | Yes | Geography id, e.g. uk:lsoa:E01000951. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's job is interpretive context — and it delivers the critical caveat that bands describe an area's likelihood, not a particular property. It adds a real usage hazard the agent would otherwise misreport. It doesn't discuss data coverage gaps (e.g. England-only) or missing-band cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the primary output described first and the UPRN variant second. The caution lands last where it will be read before the agent responds to the user.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema descriptions, the description needn't explain return values, and it correctly focuses on interpretation. What's missing is edge-case behavior — what happens when no flood data exists for the area, or geographic limits on the dataset. Adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the uprn parameter already documents 'A home's UPRN for its own bands; without it, only the area's land bands,' so the description largely restates structured data. The one marginal addition is framing UPRN results as still not property-specific, which changes how results should be presented. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete resource (flood bands for land, split into rivers/sea and surface water) and the second mode activated by a UPRN. That is specific enough that an agent can distinguish it from metrics siblings like get_area_metric or get_area_overview. It stops short of explicitly contrasting itself with any sibling, which keeps it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear routing logic: use this for area-level bands, and if the user wants one specific address, send them to the Environment Agency check. That is an explicit 'do not use for this' condition. It doesn't state when to prefer this over other area-evidence tools (get_area_evidence_pack, get_area_metric), so it isn't a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_home_pricesGet home pricesARead-onlyIdempotentInspect
One London home's recorded sales (date, price, HM Land Registry link) and prices in its area today: the middle half (25th-75th percentile) of same-type standard sales since three years back, each adjusted to the latest month by the local price index, with sample size and the area used (LSOA, else MSOA, else borough), and the coarse band its last sale fell in that year (top 10%, top quarter, upper middle, lower middle, bottom quarter, bottom 10%) with today's prices of that band in the area. Accepts a UPRN, an address id (uk:addr:…) from search_places, or an address fragment. Area statistics only: never say what the home is worth; describe the area. When a fragment matches several homes the tool returns their candidates instead of picking one: ask which home, or pass its addressId. Homes without a linked UPRN are reached by address id or fragment and carry uprn null. facts holds the home's type and tenure (Land Registry) and, where shown, energy-certificate facts (rating, potential rating, certificate date, built form, age band, rooms, floor level); null fields are not shown for this home; withheld lists features held back. Below 5 sales of the type nothing is shown. Hidden homes are not found.
| Name | Required | Description | Default |
|---|---|---|---|
| property_ref | Yes | UPRN (digits), an address id (uk:addr:…) as returned by search_places, or an address fragment, e.g. '100a Baker Street EN1'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, idempotent operation. The description adds substantial behavioral detail beyond annotations: how area statistics are computed, fallback geography, sample-size thresholds, null UPRN handling, withheld facts, and candidate behavior for ambiguous fragments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main output, but it is a dense wall of text with long semicolon-separated clauses and parentheticals. Most details earn their place, yet the lack of structure makes it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity and the presence of an output schema, the description covers the key behavioral edges an agent needs: area-only valuation stance, sample thresholds, hidden homes, null and withheld facts, and ambiguous-fragment handling. Nothing critical appears to be missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents property_ref, but the description adds useful semantics about fragment ambiguity, asking which home, and passing its addressId. It also clarifies that homes without a linked UPRN are reachable and will carry uprn null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: recorded sales for one London home plus today's area price statistics. It distinguishes the scope from sibling area tools by emphasizing 'Area statistics only: never say what the home is worth; describe the area.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation context: accepts a UPRN, an address id from search_places, or a fragment, and explains that ambiguous fragments return candidates rather than choosing a home. It also states key exclusions such as below-five-sales suppression and hidden homes, though it does not explicitly route agents to sibling alternatives like get_nearby_sales_summary or get_area_metric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listing_search_linksGet listing search linksARead-onlyIdempotentInspect
Pre-filtered searches on Rightmove, Zoopla, OnTheMarket (and OpenRent for rentals) for the postcode districts of shortlisted areas. Links only: open them on the user's behalf to read listings; Close Knit itself never fetches or stores listings.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Buying or renting. | buy |
| area_ids | Yes | LSOA ids from find_areas. | |
| max_price | Yes | £ (buy) or £ per month (rent). | |
| min_bedrooms | No | Minimum bedrooms. | |
| outcodes_per_area | No | Postcode districts per area (busiest first). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structural context: the tool returns links only, Close Knit never fetches or stores listings, and OpenRent is included for rentals — all useful for an agent deciding whether the output is usable directly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler. The resource and portal scope are front-loaded and the 'links only / never fetches or stores' caveat follows immediately after — nothing redundant with the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be described, and the description usefully says the result is links to open externally. It is nearly complete; only the relationship between outcodes_per_area and the emitted link count/wording is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, which sets the baseline at 3. The description adds only marginal detail (postcode districts, all-portal coverage, rental inclusion for OpenRent) without explaining area_ids, max_price units, or outcodes_per_area ordering beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — pre-filtered search links on Rightmove, Zoopla, OnTheMarket (plus OpenRent for rentals) for postcode districts of shortlisted areas. That is concrete and distinct from siblings like evaluate_custom_criterion or get_area_evidence_pack, but no sibling is named as an alternative, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context ('for the postcode districts of shortlisted areas') plus 'open them on the user's behalf to read listings' implies when to reach for this tool: after areas have been shortlisted you want external portal results. But it never states when NOT to use it or names sibling tools that would serve the same need, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_depthGet market depthARead-onlyIdempotentInspect
Local market depth of one LSOA or MSOA from HM Land Registry Price Paid (standard category A sales only): sales in the last 12 months, turnover (% of EPC-linked homes that sold), the leasehold share OF SALES (not of homes), new-build and resale median GBP/m2 over 36 months with the new-build premium (each median needs 10 sales, the premium both), and the LSOA's GBP/m2 growth. Aggregates only: never a valuation, a listing or addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | LSOA or MSOA geography id, e.g. uk:lsoa:E01000004 (boroughs are unavailable). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/no open world, so the safety profile is covered. The description adds genuine behavioral context beyond that: data source and filter (HM Land Registry Price Paid, standard category A sales only), minimum-sample thresholds (10 sales per median, both for the premium), and the leasehold-share-of-sales caveat that resolves a likely misreading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the metric list and caveats. It is dense and long for one sentence, but nearly every clause carries distinct information (thresholds, sales-vs-homes distinction, exclusions); only the parenthetical threshold restatement feels heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. The description covers scope, source, filter, every metric definition, sample-size thresholds, and explicit non-uses, which is everything an agent needs to invoke and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single area_id parameter is fully documented with a pattern and example. The description only restates that the area is LSOA or MSOA; the borough exclusion is already in the schema, so the description adds little beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and then enumerates exactly which metrics it returns (12-month sales, turnover, leasehold share of sales, new-build/resale median £/m2 over 36 months, new-build premium, £/m2 growth). The scope 'one LSOA or MSOA' plus 'aggregates only' distinguishes it from siblings like get_area_metric, get_home_prices and get_nearby_sales_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Scope is implied clearly (one area, aggregates only, Price Paid standard category A), and 'never a valuation, a listing or addresses' usefully fences off misuse. However, it never names an alternative tool or states a condition that would route the agent to get_area_metric or get_home_prices instead, so routing must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nearby_sales_summaryGet nearby sales summaryARead-onlyIdempotentInspect
Counts and median GBP/m2 of other homes' recorded sales in the same building (postcode, house number or name, street) and on the same street (other buildings) as one address id, last 10 years. The median is withheld under 5 standard sales with an EPC floor area. Summary only: no sale rows and no addresses; homes with a privacy objection are left out.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Address id returned by search_areas (uk:addr:…). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral details: the 10-year window, grouping by building and street, suppression of medians under 5 sales with an EPC floor area, exclusion of privacy-objection homes, and confirmation that no sale rows or addresses are returned. These are exactly the caveats an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded: it starts with what is computed and for what geography, then adds time range and limitations. Every clause contributes useful scope or caveat information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, read-only annotations, single required parameter, and 100% schema coverage, the description supplies all remaining context: aggregation method, geographic grouping, time window, suppression rules, and privacy exclusions. Nothing needed to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 100% schema description coverage, the schema already defines address_id, its pattern, and that it comes from search_areas. The description reinforces that a single address id drives the lookup but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation and scope: counts and median GBP/m2 of nearby recorded sales for one address over the last 10 years. It clearly distinguishes itself as a summary-only tool with no sale rows or addresses, though it does not explicitly name a sibling alternative for detailed sales data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for summary-level nearby sales information, but gives no explicit when-to-use guidance and does not compare itself with sibling tools such as get_home_prices or get_address_history. The agent must infer the usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rent_levelsGet rent levelsBRead-onlyIdempotentInspect
Median monthly rent by bedroom count for areas (the figure the site shows). Borough averages per LSOA; empty for a studio or before the rents are loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| area_ids | Yes | Geography ids, e.g. uk:lsoa:E01000951. | |
| bedrooms | Yes | Bedroom count; the site shows rents per bedroom count. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, so the description's job is edge-case disclosure and it delivers: it warns that LSOA-level values are borough averages (a provenance/fallback caveat) and that results are empty for studios or before rents are loaded. These are non-obvious behaviors an agent would otherwise misreport as real data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the metric front-loaded and caveats after. 'Borough averages per LSOA' is compressed to the point of ambiguity but no sentence is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape needn't be described, and the edge cases are covered. However, for a two-required-param lookup embedded among many similar metric tools, the absence of any routing guidance and of currency/timeframe context leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both area_ids and bedrooms; baseline 3 applies. The description adds only an edge case ('empty for a studio'), and it slightly muddies things since bedrooms has a minimum of 1 — it does not clarify units, currency, or whether area_ids must all be the same geography level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: median monthly rent by bedroom count for given areas, with the parenthetical '(the figure the site shows)' tying it to a known quantity. It does not name or distinguish itself from siblings like get_home_prices or get_area_metric, but the metric itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this instead of get_home_prices, get_area_metric, or rank_areas_by_metric. The agent must infer that this is the rent-specific lookup from the name alone; no exclusions, prerequisites, or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_presetsList custom presetsARead-onlyIdempotentInspect
Ready-made custom criteria built from places on OpenStreetMap, with neutral descriptive names: kebab shops vs cafés, specialty coffee vs kebab shops, sandwich chains vs bakery chains, independent vs chain cafés, the nearest gym or sports centre, bars, pubs and clubs (more or fewer, per 1,000 residents), cinemas, theatres, museums and galleries, universities, the nearest playground or nursery, variety of cuisines, bakeries vs betting shops, takeaways, coworking, bike parking, the nearest EV charging point, the nearest market, the nearest dog park, vet or pet shop. Each has an id for evaluate_custom_criterion and find_areas(custom=[…]), a mapUrl (the map coloured by it) and a one-line definition. Use the names as given: no brand names or value words ('good', 'cheap') in what you tell the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, so the safety profile is covered. The description adds the return shape per entry (id, mapUrl, one-line definition) and the neutral-naming convention, which annotations do not convey. Pagination or count are not discussed, but with a fully enumerated preset catalog that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The middle of the description is a long run-on enumeration of ~20 preset examples that largely duplicates what the output schema already delivers. The genuinely useful guidance — the id/mapUrl/definition fields and the 'use names as given' rule — sits at the end rather than being front-loaded, and the opening sentence starts with content rather than with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, zero parameters and full annotations, the description only needs to frame what the catalog is and how to use it — both are covered, including downstream tool references and naming conventions. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The description correctly adds no parameter talk and instead spends its words on output semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear these are ready-made, pre-built custom criteria derived from OpenStreetMap places, and that each carries an id, mapUrl and one-line definition — so an agent knows what the tool returns. It also names the sibling consumers (evaluate_custom_criterion, find_areas(custom=[...])). It does not lead with an explicit verb like 'Lists all available presets', so the listing action is inferred from the name rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It ties the output to concrete downstream calls — the id feeds evaluate_custom_criterion and find_areas(custom=[...]) — which tells the agent when this tool is the entry point. It also gives a usage constraint on how to surface the names (no brand names or value words like 'good'/'cheap'). There is no explicit when-not or a statement that this is the discovery step to run before the two consumer tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metricsList metricsARead-onlyIdempotentInspect
List every area metric the active release serves (id, unit, direction, available periods, legend, provenance, caveats), plus the My match factors (kind 'factor': disorder, epc-share, leasehold-share, schools) that get_area_metric and rank_areas_by_metric also read. Call first to learn valid metric_id/period values for the other area tools; compact=true returns only id, unit, direction and defaultPeriod. Sources carry licence and methodology links.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Only id, unit, direction and defaultPeriod per metric: a small reply when you just need valid metric_id/period values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds real context beyond them: the reply is scoped to 'the active release', compact mode shrinks the payload, and factor metrics are included alongside area metrics. It stops short of describing pagination or size limits for the full (non-compact) response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned, followed by the calling sequence and then the compact caveat — every sentence carries information. The parenthetical field lists and the trailing 'Sources carry licence and methodology links' make it a dense block rather than cleanly separated beats, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not explain return shapes, yet it still flags the catalogue's structure (area vs. factor metrics), release scoping, and provenance/licence caveats. An agent has everything needed to call it and use the result to drive get_area_metric and rank_areas_by_metric.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds purpose for the one flag, explaining that compact=true returns 'only id, unit, direction and defaultPeriod' for callers who 'just need valid metric_id/period values'. That is a use-case framing the schema's own one-line description does not fully supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('List every area metric the active release serves'), then enumerates the returned fields (id, unit, direction, periods, legend, provenance, caveats) plus the 'factor' kind. It also names the siblings that consume this data (get_area_metric, rank_areas_by_metric), so an agent can tell the catalog tool apart from the query tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the ordering rule: 'Call first to learn valid metric_id/period values for the other area tools,' which tells the agent both when to use it and which alternatives it feeds. The compact=true variant adds a second decision point (cheap discovery vs. full metadata).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_areasMatch areasARead-onlyIdempotentInspect
Score every area against a household's ordered criteria (preference-profile.v2: budget, ranges on any map layer, places, where zones, own criteria; must = filter). Returns a match-pack.v2 with the best top_n (default 20, max 100) areas as a list with score, rank and percentile per area, its top 2 reasons and 2 weakest criteria, the bottom 10, and per-criterion components (value, fit, in/edge/out) as evidence for the listed areas only. Whole-coverage counts (scored, unscored, excluded, and excludedBy per unmet must) cover every area; mapUrl opens the full map for the search. Set analyticsConsent true only if the user agreed to store an anonymised profile summary; the tool works identically with false.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | How many of the best-scored areas to list (1-100). values is that top-N list, not the whole map; scored, unscored, excluded and excludedBy count every area Close Knit covers. For the whole map use mapUrl. | |
| profile | Yes | preference-profile.v2 (preferred): {schemaVersion: 'preference-profile.v2', market buy|rent, targetBudget, maximumBudget, bedrooms, criteria: [...]} where criteria is ORDERED, most important first, each one of {kind: budget, must} (fit 1 at or under targetBudget, 0 at maximumBudget; must = within maximumBudget) | {kind: range, layer (a map layer id from list_metrics, e.g. crime, noise, air-no2, station-access, price-per-square-metre, or disorder, schools, epc-share, leasehold-share), scale value|percentile (percentile = percentile 0-100 of the value within the area's region, London's areas among London's, lowest first), min, max, softMin, softMax, must} | {kind: place, id, label, target, mode, targetMinutes, softMinutes, must} | {kind: where, zones (1-3: {kind: station, stationId, maxWalkMinutes 5-30} | {kind: borough, id} | {kind: lsoas, ids <= 50} | {kind: polygon, points}), softMetres (default 1000), must} | {kind: custom, criterion, direction, must}. A must criterion is a filter with no weight; the others weigh by their place in the list. preference-profile.v1 (factors with weights 0-5) is still accepted and migrated (weight order, Must kept). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that must criteria act as filters with no weight while others weigh by list position, that coverage counts (scored/unscored/excluded/excludedBy) span every area while value/fit/in-edge-out components are returned for listed areas only, and that mapUrl opens the full map because the list is only top-N. It also surfaces a consent requirement for analyticsConsent and states explicitly that the tool behaves identically with false, which is exactly the kind of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and returns/consent follow in a logical order, with no filler sentences. The second sentence is a long multi-clause run-on that would read better split, which keeps it out of the top band.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with nested criteria and an output schema, the description covers the semantics an agent actually needs (must-as-filter, top-N vs whole-map coverage, consent). Return-value detail is partly redundant given the output schema exists, and the undeclared analyticsConsent parameter is handled in prose rather than the schema, leaving a small structural gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nevertheless adds real meaning by documenting analyticsConsent, a parameter that does not appear in the input schema at all, including its consent semantics and the fact that it does not change results. Its top_n explanation largely restates the schema, so the added value is real but partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and object ('Score every area against a household's ordered criteria') and names the concrete input format (preference-profile.v2) and output artifact (match-pack.v2), so an agent knows exactly what the tool produces. It does not explicitly name a sibling it is not (e.g. rank_areas_by_metric or find_areas), so differentiation is by inference from the criteria-scoring framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrasing – this is the tool for scoring a whole market against a ranked preference profile rather than filtering (find_areas/search_areas) or ranking by a single metric. There is no explicit when-to-use/when-not statement and no named alternative, and the only real guidance given ('Set analyticsConsent true only if the user agreed') is a consent rule for a parameter, not a tool-selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_areas_by_metricRank areas by metricARead-onlyIdempotentInspect
Rank every served area (or one region's, region='North West') by one metric for one month and return the top N with rank, value, unit and quality. Tied values share a rank (competition ranking); each row carries tiedCount, the number of areas sharing its value. Use it to answer 'which areas have the lowest crime / highest GBP/m2' or 'the least deprived' (deprivation is the official IMD decile, 10 = least deprived: order desc), 'the highest household income' (income, GBP a year) or 'the most social renting' (social-renting, % of households; neutral, never call it better or worse). Areas with suppressed values are excluded. Census layers (census-*, student-share) describe residents and are refused: never rank areas by who lives there. The find_areas factors disorder, epc-share, leasehold-share and schools rank too (latest value, period ignored).
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | desc = highest value first. | desc |
| top_n | No | How many areas to return (1-50). | |
| period | Yes | Month, YYYY-MM. | |
| region | No | Only areas of one English region: its code (E12000001-E12000009) or name, e.g. 'North West', 'London'. Omitted: every area Close Knit covers. | |
| metric_id | Yes | Metric id from list_metrics. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, idempotent annotations, it discloses competition ranking for ties, the `tiedCount` field, suppression behavior, and that census layers are refused. It also explains that `find_areas` factor ranking uses latest value and ignores period.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, starting with the core operation and scope before tie behavior, use cases and exclusions. Every sentence carries actionable information for selecting or invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description still usefully names returned fields, scope, exclusions, tie handling and metric-specific caveats. Nothing material is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds useful metric semantics not in the schema: IMD decile meaning and direction, income units, social-renting neutrality, and a region example. This meaningfully improves correct parameter selection beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: rank every served area or one region's areas by a metric for a month, returning top N with rank, value, unit and quality. It also distinguishes this from sibling `find_areas` by noting which factors `find_areas` can rank.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage examples such as 'lowest crime', 'highest GBP/m2', 'least deprived', 'highest household income' and 'most social renting', including the correct `order` for deprivation. It also states exclusions clearly: census layers are refused and suppressed values are excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_areasSearch areasARead-onlyIdempotentInspect
Resolve free text (area name, ONS code, postcode, street) to geography ids (uk:lsoa|msoa|borough:…) and, where recorded sales exist, address ids (uk:addr:…). Use the returned ids with get_area_metric, rank_areas_by_metric, get_address_history.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Free text: area name, ONS code (E01…), postcode, or street. | |
| limit | No | Maximum results (1-25). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-open-world, non-destructive, so the safety profile needs no restating. The description adds one genuine behavioral nuance beyond the schema: address ids only appear 'where recorded sales exist,' meaning results are conditionally partial. It says nothing about result ordering, relevance ranking, or behavior when nothing matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the id format is front-loaded so the agent knows what comes back before reading the follow-up tool list. The compressed id pattern (uk:lsoa|msoa|borough:…) is dense but readable in context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Good coverage for a 2-parameter, read-only lookup: annotations carry safety, an output schema exists so return shape needn't be explained, and params are fully documented in the schema. The one real omission is disambiguation from the other area-search siblings (find_areas, match_areas, search_places).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both q and limit are already documented in the schema. The description restates the same input types (area name, ONS code, postcode, street) without adding format, matching, or precedence rules. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: resolve free text (area name, ONS code, postcode, street) to geography ids and, conditionally, address ids. That is a clear, concrete purpose. It does not distinguish itself from siblings like find_areas, match_areas, or search_places, which appear to do overlapping resolution work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent what to do with results (pass ids to get_area_metric, rank_areas_by_metric, get_address_history), which implies usage but never states when to pick this tool over find_areas or match_areas. There are no exclusions or prerequisites, only downstream routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_placesSearch placesARead-onlyIdempotentInspect
Resolve a place the user mentions (station, borough, neighbourhood, postcode, street) to ids. Station lookup forgives spelling (Kings Cross, St James Park, Elephant and Castle) and knows London codes and nicknames (KX, TCR, LST, E&C, ally pally). Returns stations (osm:…, with TfL modes, lines and zone; twin stations such as Hammersmith are listed apart) for find_areas.near_stations, boroughs (uk:borough:…) for find_areas.boroughs, areas and addresses for get_area_overview and assess_listing.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | A station, borough, neighbourhood, postcode or street. | |
| limit | No | Results per kind. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, and the description adds genuinely new behavioral detail: fuzzy station matching, recognition of London codes and nicknames (KX, TCR, E&C, ally pally), and the fact that twin stations like Hammersmith are returned separately. It stops short of describing ranking or ordering of results, but the matching behavior described goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and input types are front-loaded, followed by the routing information. The parenthetical examples and the list of return types make the two sentences dense, but each clause adds useful information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, full schema coverage, and an output schema, the description supplies everything an agent needs: what inputs are resolvable, how forgiving the matching is, what identifier formats come back (osm:…, uk:borough:…), and which sibling tools consume each result type. No behavioral gap remains for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real parameter-level meaning by showing that 'q' accepts informal inputs such as codes and nicknames, not just formal names, and by giving concrete examples of accepted place types. The 'limit' parameter (results per kind) is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Resolve a place ... to ids') and enumerates the place kinds covered (station, borough, neighbourhood, postcode, street). It is clearly distinguishable from siblings like search_areas and find_areas because it states that the output is identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes results to downstream tools ('for find_areas.near_stations', 'for find_areas.boroughs', 'for get_area_overview and assess_listing'), which tells the agent when this tool is the right precursor. It does not, however, state when to prefer search_areas or match_areas instead, so the alternative comparison is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackSend feedbackAInspect
Send feedback about Close Knit to the team: a bug, missing or wrong data, an idea, or what worked. Call it only after the user agrees: show them the message first. Describe the product and what happened, never the person: no names, contact details, addresses, family, budget or other personal circumstances.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | bug = a tool failed or misbehaved; missing-data / wrong-data = an answer lacked or got a fact wrong; idea = something to add; praise = what worked well. | |
| tools | No | The Close Knit tools it is about, e.g. ['find_areas']. | |
| client | No | The AI client, e.g. 'claude.ai'. | |
| rating | No | How useful Close Knit was, 1-5, if the user said. | |
| message | Yes | What happened or what would help, in a few sentences: the product, never the person. No names, contact details, addresses, family or money circumstances. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-idempotent, non-destructive write, and the description adds the meaningful context those annotations cannot express: user consent is required and the payload is sent to the team with hard privacy constraints. It does not say whether submissions are editable/retractable or whether any follow-up occurs, so it falls just short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, purpose first, then the consent gate, then the content policy. Minor redundancy: the no-personal-details rule is stated in both the description and the message field's schema description, and 'never the person' is restated twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers when to call, what to put in the payload, and the privacy boundary; an output schema exists so return values need no explanation. Only the post-send consequence for the user (confirmation, whether it can be undone) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description still adds value by governing what belongs in 'message' (describe the product, never the person, no names/contact/addresses/family/budget). That privacy rule meaningfully constrains how to fill the largest parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send feedback about Close Knit to the team') and enumerates the accepted kinds of feedback. It is unmistakably distinct from every sibling tool, all of which are read-only search/metric tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition for invocation: 'Call it only after the user agrees: show them the message first.' This is a concrete when-to-use rule with an ordering constraint, not a vague hint.
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.
3 tool updates
- Changed
find_areas3 fields changed- changed
Input schema / $defs / RangeInput / properties / scale / descriptionPrevious value: -"percentile = bounds are London percentiles of the value, 0 = lowest in London, 100 = highest (e.g. max 30 = the lowest 30% for noise); value = the layer's own unit."New value: +"percentile = bounds are percentiles of the value within each area's region (London's areas among London's), 0 = lowest, 100 = highest (e.g. max 30 = the lowest 30% for noise); value = the layer's own unit." - changed
Input schema / properties / custom / descriptionPrevious value: -"The user's own criteria from places on the map ('more cafés than kebab shops', 'near gyms'): a preset_id or a criterion, each scored by its London percentile. Describes places, never who lives there."New value: +"The user's own criteria from places on the map ('more cafés than kebab shops', 'near gyms'): a preset_id or a criterion, each scored by its percentile within the area's region (London for a London area). Describes places, never who lives there." - changed
Input schema / properties / ranges / descriptionPrevious value: -"Any other map layer as a range with soft edges, e.g. gigabit broadband at 90% of homes or more: {layer: 'broadband-gigabit', scale: 'value', min: 90}. Bounds are London percentiles by default (min 90 = London's top 10%); scale 'value' uses the layer's own unit. Only layers list_metrics shows."New value: +"Any other map layer as a range with soft edges, e.g. gigabit broadband at 90% of homes or more: {layer: 'broadband-gigabit', scale: 'value', min: 90}. Bounds are percentiles within each area's region by default (London's areas among London's; min 90 = the region's top 10%); scale 'value' uses the layer's own unit. Only layers list_metrics shows."
- Changed
match_areas2 fields changed- changed
Input schema / properties / profile / descriptionPrevious value: -"preference-profile.v2 (preferred): {schemaVersion: 'preference-profile.v2', market buy|rent, targetBudget, maximumBudget, bedrooms, criteria: [...]} where criteria is ORDERED, most important first, each one of {kind: budget, must} (fit 1 at or under targetBudget, 0 at maximumBudget; must = within maximumBudget) | {kind: range, layer (a map layer id from list_metrics, e.g. crime, noise, air-no2, station-access, price-per-square-metre, or disorder, schools, epc-share, leasehold-share), scale value|percentile (percentile = London percentile 0-100 of the value, lowest first), min, max, softMin, softMax, must} | {kind: place, id, label, target, mode, targetMinutes, softMinutes, must} | {kind: where, zones (1-3: {kind: station, stationId, maxWalkMinutes 5-30} | {kind: borough, id} | {kind: lsoas, ids <= 50} | {kind: polygon, points}), softMetres (default 1000), must} | {kind: custom, criterion, direction, must}. A must criterion is a filter with no weight; the others weigh by their place in the list. preference-profile.v1 (factors with weights 0-5) is still accepted and migrated (weight order, Must kept)."New value: +"preference-profile.v2 (preferred): {schemaVersion: 'preference-profile.v2', market buy|rent, targetBudget, maximumBudget, bedrooms, criteria: [...]} where criteria is ORDERED, most important first, each one of {kind: budget, must} (fit 1 at or under targetBudget, 0 at maximumBudget; must = within maximumBudget) | {kind: range, layer (a map layer id from list_metrics, e.g. crime, noise, air-no2, station-access, price-per-square-metre, or disorder, schools, epc-share, leasehold-share), scale value|percentile (percentile = percentile 0-100 of the value within the area's region, London's areas among London's, lowest first), min, max, softMin, softMax, must} | {kind: place, id, label, target, mode, targetMinutes, softMinutes, must} | {kind: where, zones (1-3: {kind: station, stationId, maxWalkMinutes 5-30} | {kind: borough, id} | {kind: lsoas, ids <= 50} | {kind: polygon, points}), softMetres (default 1000), must} | {kind: custom, criterion, direction, must}. A must criterion is a filter with no weight; the others weigh by their place in the list. preference-profile.v1 (factors with weights 0-5) is still accepted and migrated (weight order, Must kept)." - changed
Input schema / properties / top_n / descriptionPrevious value: -"How many of the best-scored areas to list (1-100). values is that top-N list, not the whole map; scored, unscored, excluded and excludedBy count every area in London. For the whole map use mapUrl."New value: +"How many of the best-scored areas to list (1-100). values is that top-N list, not the whole map; scored, unscored, excluded and excludedBy count every area Close Knit covers. For the whole map use mapUrl."
- Changed
rank_areas_by_metric1 field changed- added
Input schema / properties / regionAdded value: +{ + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only areas of one English region: its code (E12000001-E12000009) or name, e.g. 'North West', 'London'. Omitted: every area Close Knit covers.", + "title": "Region" +}
24 tool updates
- First observed
assess_listing - First observed
build_watch_spec - First observed
evaluate_custom_criterion - First observed
find_areas - First observed
find_similar_areas - First observed
get_address_history - First observed
get_area_evidence_pack - First observed
get_area_metric - First observed
get_area_overview - First observed
get_commute - First observed
get_flood_risk - First observed
get_home_prices - First observed
get_listing_search_links - First observed
get_market_depth - First observed
get_nearby_sales_summary - First observed
get_rent_levels - First observed
list_custom_presets - First observed
list_metrics - First observed
match_areas - First observed
open_shared_search - First observed
rank_areas_by_metric - First observed
search_areas - First observed
search_places - First observed
send_feedback
Related MCP Connectors
London postcodes and districts from official open data: prices, crime, schools, rents, commutes
UK public data by area: house prices, crime, deprivation, schools and more, each figure cited.
- HoodExOAuthapp.hoodex
Neighbourhood intelligence for any address: livability scores, community and street data.
Schools in England: Ofsted, results, real catchment cut-offs and where to live for schools.
Related MCP Servers
- -licenseNot gradedqualityCmaintenanceProvides real-time London area intelligence including postcode data, crime, schools, transport, and investment metrics, enabling AI assistants to answer property-related queries.-
- AlicenseAqualityCmaintenanceUK property area intelligence: validated trajectory scores, gentrification early-warning and area screening for 2,292 England & Wales postcode districts, from 30+ government data sources.7MIT

Yatmo MCP serverofficial
AlicenseAqualityBmaintenanceEnables AI assistants and agents to query real neighbourhood data around a property, including nearest schools, nurseries, supermarkets, public transport, train stations, motorway access, distances with travel times, and quotable summaries across 25 countries.413 npmMIT- AlicenseAqualityBmaintenanceUnified UK property search across major portals with deduplication and open-data enrichment, enabling natural-language queries for listings, sold prices, EPC, crime, schools, and market stats.10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.